c3f3fa4d499564781437cdca84085ed4a75e4680
[platform/upstream/aspell.git] / manual / aspell.info
1 This is aspell.info, produced by makeinfo version 4.8 from aspell.texi.
2
3    This is the user's manual for Aspell
4
5    GNU Aspell is a spell checker designed to eventually replace Ispell.
6 It can either be used as a library or as an independent spell checker.
7
8    Copyright (C) 2000-2011 Kevin Atkinson.
9
10      Permission is granted to copy, distribute and/or modify this
11      document under the terms of the GNU Free Documentation License,
12      Version 1.1 or any later version published by the Free Software
13      Foundation; with no Invariant Sections, no Front-Cover Texts and
14      no Back-Cover Texts.  A copy of the license is included in the
15      section entitled "GNU Free Documentation License".
16
17 INFO-DIR-SECTION GNU Packages
18 START-INFO-DIR-ENTRY
19 * Aspell: (aspell).        GNU Aspell spelling checker
20 END-INFO-DIR-ENTRY
21
22 \1f
23 File: aspell.info,  Node: Top,  Next: Introduction,  Up: (dir)
24
25 GNU Aspell 0.60.6.1
26 *******************
27
28 This is the user's manual for Aspell
29
30    GNU Aspell is a spell checker designed to eventually replace Ispell.
31 It can either be used as a library or as an independent spell checker.
32
33 * Menu:
34
35 * Introduction::
36 * Support::
37 * Basic Usage::
38 * Customizing Aspell::
39 * Working With Dictionaries::
40 * Writing programs to use Aspell::
41 * Adding Support For Other Languages::
42 * Implementation Notes::
43 * Languages Which Aspell can Support::
44 * Language Related Issues::
45 * To Do::
46 * Installing::
47 * ChangeLog::
48 * Authors::
49 * Copying::
50
51  --- The Detailed Node Listing ---
52
53 Basic Usage
54
55 * Spellchecking Individual Files::
56 * Using Aspell as a Replacement for Ispell::
57 * Using Aspell with other Applications::
58
59 Customizing Aspell
60
61 * Specifying Options::
62 * The Options::
63 * Dumping Configuration Values::
64 * Notes on Various Options::
65
66 Notes on Various Options
67
68 * Notes on Various Filters and Filter Modes::
69 * Notes on the Prefix Option::
70 * Notes on Typo-Analysis::
71 * Notes on the Different Suggestion Modes::
72
73 Working With Dictionaries
74
75 * Using aspell-import::
76 * How Aspell Selects an Appropriate Dictionary::
77 * Listing Available Dictionaries::
78 * Dumping the Contents of the Word List::
79 * Creating an Individual Word List::
80 * Working With Affix Info in Word Lists::
81 * Format of the Personal and Replacement Dictionaries::
82 * Using Multi Dictionaries::
83 * Dictionary Naming::
84 * AWLI files::
85
86 Writing programs to use Aspell
87
88 * Through the C API::
89 * Through A Pipe::
90 * Notes on Storing Replacement Pairs::
91
92 Adding Support For Other Languages
93
94 * The Language Data File::
95 * Compiling the Word List::
96 * Phonetic Code::
97 * The Simple Soundslike::
98 * Replacement Tables::
99 * Affix Compression::
100 * Controlling the Behavior of Run-together Words::
101 * Creating A New Character Set::
102 * Creating An Official Dictionary Package::
103
104 Implementation Notes
105
106 * Aspell Suggestion Strategy::
107 * Notes on 8-bit Characters::
108
109 Languages Which Aspell can Support
110
111 * Supported::
112 * Unsupported::
113 * Multiple Scripts::
114 * Planned Dictionaries::
115 * References::
116
117 Language Related Issues
118
119 * Compound Words::
120 * Words With Symbols in Them::
121 * Unicode Normalization::
122 * German Sharp S::
123 * Context Sensitive Spelling::
124
125 To Do
126
127 * Important Items::
128 * Other Items::
129 * Notes on Various Items::
130
131 Notes on Various Items
132
133 * Word skipping by context::
134 * Hidden Markov Model::
135 * Email the Personal Dictionary::
136
137 Installing
138
139 * Generic Install Instructions::
140 * HTML Manuals and "make clean"::
141 * Curses Notes::
142 * Loadable Filter Notes::
143 * Upgrading from Aspell 0.50::
144 * Upgrading from Aspell .33/Pspell .12::
145 * Upgrading from a Pre-0.50 snapshot::
146 * WIN32 Notes::
147
148 Copying
149
150 * GNU Free Documentation License::
151 * GNU Lesser General Public License::
152
153 \1f
154 File: aspell.info,  Node: Introduction,  Next: Support,  Prev: Top,  Up: Top
155
156 1 Introduction
157 **************
158
159 GNU Aspell is a spell checker designed to eventually replace Ispell.  It
160 can either be used as a library or as an independent spell checker.  Its
161 main feature is that it does a much better job of suggesting possible
162 replacements for a misspelled word than just about any other spell
163 checker out there for the English language.  Unlike Ispell, Aspell can
164 also easily check documents in UTF-8 without having to use a special
165 dictionary.  Aspell will also do its best to respect the current locale
166 setting.  Other advantages over Ispell include support for using
167 multiple dictionaries at once and intelligently handling personal
168 dictionaries when more than one Aspell process is open at once.
169
170    The latest version of Aspell can always be found at
171 `http://aspell.net'
172
173 1.1 Comparison to other spell checker engines
174 =============================================
175
176                          Aspell   Ispell   Netscape   Microsoft
177                                            4.0        Word 97
178 Open Source              x        x                   
179 Suggestion               88-98    54       55-70?     71
180 Intelligence                                          
181 Personal part            x        x        x          
182 of Suggestions                                        
183 Alternate Dictionaries   x        x        ?          ?
184 International Support    x        x        ?          ?
185
186    The Suggestion Intelligence is based on a small test kernel of
187 misspelled/correct word pairs.  Go to `http://aspell.net/test' for more
188 info and how you can help contribute to the test kernel.  The current
189 scores for Aspell are 88 in _fast_ mode, 93 in _normal_ mode, and 98 in
190 _bad spellers_ mode: for more information about the various suggestion
191 modes *Note Notes on the Different Suggestion Modes::.
192
193    If you have any other information you would like to add to this chart
194 please contact me at <kevina@gnu.org>.
195
196 1.1.1 Comparison to Ispell
197 --------------------------
198
199 1.1.1.1 Features that only Aspell has
200 .....................................
201
202    * Is an actual library that other programs can link to instead of
203      having to use it through a pipe.
204
205    * Does a much better job of suggesting possible replacements for a
206      misspelled word than Ispell does or for that matter many other
207      spell checkers I have seen.  If you know a spell checker that does
208      a better job please let me know.
209
210    * Can learn from user's misspellings.
211
212    * Can easily check documents in UTF-8 without having to use a special
213      dictionary.
214
215    * Has support for using multiple dictionaries at once.
216
217    * Is multiprocess intelligent.  When a personal dictionary (or
218      replacement list) is saved, it will now first update the list
219      against the dictionary on disk in case another process modified it.
220
221    * Can share the memory used in the main word list between processes.
222
223    * A better, more complete word list for the English language.  Word
224      lists are provided for American, British, and Canadian spelling.
225      Special care has been taken to only include one spelling for each
226      word in any particular word list.  The word list included in
227      Ispell by contrast only included support for American and British
228      and also tends to included multiple spellings for a word which can
229      mask some spelling errors.
230
231 1.1.1.2 Things that, currently, only Ispell has
232 ...............................................
233
234    * Lower memory footprint
235
236    * Ability to deal with arbitrary multi-character letters such as old
237      ASCII encodings of accented letters.
238
239    * Perhaps better support for spell checking (La)TeX files.
240
241
242    For a detailed description of how Aspell differs from Ispell, *Note
243 Differences From Ispell::.
244
245 \1f
246 File: aspell.info,  Node: Support,  Next: Basic Usage,  Prev: Introduction,  Up: Top
247
248 2 Support
249 *********
250
251 Support for Aspell can be found on the Aspell mailing lists.
252 Instructions for joining the various mailing lists (and an archive of
253 them) can be found off the Aspell home page at `http://aspell.net'.
254
255    Bug reports should be submitted via the Sourceforge Tracker at
256 `http://sourceforge.net/tracker/?group_id=245' rather than being posted
257 to the mailing lists.
258
259 \1f
260 File: aspell.info,  Node: Basic Usage,  Next: Customizing Aspell,  Prev: Support,  Up: Top
261
262 3 Basic Usage
263 *************
264
265 For a quick reference on the Aspell utility use the command `aspell
266 --help'.
267
268 * Menu:
269
270 * Spellchecking Individual Files::
271 * Using Aspell as a Replacement for Ispell::
272 * Using Aspell with other Applications::
273
274 \1f
275 File: aspell.info,  Node: Spellchecking Individual Files,  Next: Using Aspell as a Replacement for Ispell,  Up: Basic Usage
276
277 3.1 Spellchecking Individual Files
278 ==================================
279
280 To use Aspell to spellcheck a file use:
281
282      aspell check [OPTIONS] FILENAME
283
284 at the command line where `FILENAME' is the file you want to check and
285 `OPTIONS' is any number of optional options.  Some of the more useful
286 ones include:
287
288 -mode=MODE
289      the mode to use when checking files.  The available modes are
290      `none', `url', `email', `sgml', `tex', `texinfo', `nroff', among
291      others.  For more information on the various modes see *Note Notes
292      on Various Filters and Filter Modes::.
293
294 -dont-backup
295      don't create a backup file.  Normally, if there are any corrections
296      the Aspell utility will append `.bak' to the existing file name
297      and then create a new file with corrections made during spell
298      checking.
299
300 -sug-mode=MODE
301      the suggestion mode to use where mode is one of `ultra', `fast',
302      `normal', or `bad-spellers'.  For more information on these modes
303      see *Note Notes on the Different Suggestion Modes::.
304
305 -lang=NAME/-l NAME
306      the language the document is written in.  The default depends on
307      the current locale.
308
309 -encoding=NAME
310      encoding the document is expected to be in.  The default depends
311      on the current locale.
312
313 -master=NAME/-d NAME
314      the main dictionary to use.
315
316 -keymapping=NAME
317      the keymapping to use.  Either `aspell' for the default mapping or
318      `ispell' to use the same mapping that the Ispell utility uses.
319
320    For more information on the available options, please see *Note
321 Customizing Aspell::.
322
323    For example to check the file `foo.txt':
324
325      aspell check foo.txt
326
327 and to check the file `foo.txt' using the `bad-spellers' suggestion
328 mode and the American English dictionary:
329
330      aspell check --sug-mode=bad-spellers -d en_US foo.txt
331
332    If the `mode' option is not given, then Aspell will use the
333 extension of the file to determine the current mode.  If the extension
334 is `.tex', then `tex' mode will be used, if the extension is `.html',
335 `.htm', `.php', or `.sgml' it will check the file in `sgml' mode,
336 otherwise it will use `url' mode.
337
338    For more information on the various modes that can be used, see
339 *Note Notes on Various Filters and Filter Modes::.
340
341    If Aspell was compiled with curses support and the `TERM'
342 environment variable is set to a capable terminal type then Aspell will
343 use a nice full screen interface, otherwise it will use a simpler
344 "dumb" terminal interface where the misspelled word is surrounded by
345 two '*'.  In either case the interface should be self explanatory.
346
347    If Aspell is compiled with a version of the curses library that
348 support wide characters then Aspell can also check UTF-8 text.
349 Furthermore, the document will be displayed in the encoding defined by
350 the current locale.  This encoding does not necessarily have to be the
351 same encoding that the document is in.  This means that is is possible
352 to check an 8-bit encoding such as ISO-8859-1 on an UTF-8 terminal.  To
353 do so simply set the `encoding' option to `iso-8859-1'.  Furthermore it
354 is also possible to check an UTF-8 document on an 8-bit terminal
355 provided that the document can be successfully converted into that
356 encoding.
357
358 \1f
359 File: aspell.info,  Node: Using Aspell as a Replacement for Ispell,  Next: Using Aspell with other Applications,  Prev: Spellchecking Individual Files,  Up: Basic Usage
360
361 3.2 Using Aspell as a Replacement for Ispell
362 ============================================
363
364 As of GNU Aspell 0.60.1 Aspell should be able to completely replace
365 Ispell for most applications.  The Ispell compatibility script should
366 work for most applications which expect Ispell.  However there are some
367 differences which you should be aware of.
368
369 3.2.1 As a Drop In Replacement
370 ------------------------------
371
372 Aspell can be used as a drop in replacement for Ispell for programs
373 that use Ispell through a pipe such as Emacs and LyX.  It can also be
374 used with programs that simply call the `ispell' command and expect the
375 original file to be overwritten with the corrected version.
376
377    If you do not have Ispell installed on your system and have installed
378 the Ispell compatibility script then you should not need to do anything
379 as most applications that expect Ispell will work as expected with
380 Aspell via the Ispell compatibility script.
381
382    Otherwise, the recommended way to use Aspell as a replacement for
383 Ispell is to change the `ispell' command from within the program being
384 used.  If the program uses `ispell' in pipe mode simply change `ispell'
385 to `aspell'.  If the program calls the `ispell' command to check the
386 file, then change `ispell' with `aspell check'.
387
388    If that is impossible then the `run-with-aspell' script can be used.
389 This script modifies the patch so that programs see the Ispell
390 compatibility script instead of the actual true `ispell' command.  The
391 format of the script is:
392
393      run-with-aspell COMMAND
394
395 where COMMAND is the name of the program with any optional arguments.
396
397    The old method of mapping Ispell to Aspell is discouraged because it
398 can create compatibility problems with programs that actually require
399 Ispell such as Ispell's own scripts.
400
401 3.2.2 Differences From Ispell
402 -----------------------------
403
404 Nevertheless, Aspell is not Ispell, nor is it meant to completely
405 emulate the behavior of Ispell.  The `aspell' command is not identical
406 to the `ispell' command when not used in "pipe" mode.  If an
407 application expects the `ispell' command, then the Ispell compatibility
408 script should be used instead.
409
410 3.2.2.1 Functionality of the Ispell Compatibility Script
411 ........................................................
412
413 The Ispell compatibility script provides the following Ispell
414 functionally.
415
416    * The ability to check a file when called without any mode
417      parameters.
418
419    * The pipe or -a mode.
420
421    * The list or -l mode.
422
423    * The version or -v mode.  A single line is returned which, while not
424      being identical to the line Ispell returns, is sufficient to fool
425      most programs.
426
427    * The munch or -c mode.
428
429    * The expand or -e mode.
430
431    * The ability to dump the affix file when called with '-D'.  However
432      the format of the affix file is different.  Furthermore, not all
433      languages have an affix file.
434
435
436    However the Ispell script is currently unable to emulate the '-A'
437 pipe mode.  This is different from the normal pipe mode in that the
438 special `&Include_File&' command is recognized.
439
440 3.2.2.2 Recognized Options
441 ..........................
442
443 Aspell, and thus the Ispell compatibility script, recognizes most of
444 the options that Ispell uses except for the '-S', '-w' and '-T'
445 options.  The Aspell command will simply ignore these options if it
446 sees them.
447
448 3.2.2.3 Check Mode Compatibility
449 ................................
450
451 The interface used by Aspell when checking individual files is slightly
452 different than Ispell's.  In particular the default keymappings are not
453 the same as the ones Ispell uses.  However Aspell supports using the
454 Ispell keymappings via the `keymapping' option.  To use the Ispell
455 keymappings set the `kepmapping' option to `ispell'.  This can be done
456 on the command line by adding using the command:
457
458        aspell check --keymapping=ispell ...
459 or with the Ispell compatibility script
460        ispell --keymapping=ispell ...
461
462    The Ispell keymapping can always be used when the Ispell compatibly
463 script is called by uncommenting the indicated line in the `ispell'
464 script.
465
466 3.2.2.4 Pipe Mode Compatibility
467 ...............................
468
469 The Aspell pipe mode should be identical to the Ispell pipe mode except
470 if the line starts with a '$$' as that will trigger special Aspell only
471 commands or if the line starts with a '~' which is ignored by Aspell.
472
473 3.2.2.5 Other Differences
474 .........................
475
476 The compiled dictionary format is completely different than Ispell's.
477 Furthermore the format of the language data files' are different than
478 Ispell's affix file.  However, all known Ispell dictionaries were
479 converted to Aspell format, except for Albanian (sq) as I was unable to
480 find the source word list.
481
482    The naming and format of the personal dictionary is also different.
483 However, Ispell personal dictionaries can be imported using the
484 `aspell-import' script.  *Note Using aspell-import::.  The Ispell
485 personal dictionary is simply a list of words while the Aspell one is a
486 list of words with a header line.  Thus it is also fairly easy to
487 convert between the two.  *Note Format of the Personal Dictionary::.
488
489 3.2.2.6 Missing Functionally
490 ............................
491
492 The only major area where Ispell is superior to Aspell is in the
493 handling of multi character letters such as old ASCII encoding of
494 accented characters.
495
496    However, Aspell can handle UTF-8 documents far better than Ispell
497 can.
498
499 \1f
500 File: aspell.info,  Node: Using Aspell with other Applications,  Prev: Using Aspell as a Replacement for Ispell,  Up: Basic Usage
501
502 3.3 Using Aspell with other Applications
503 ========================================
504
505 3.3.1 With Emacs and XEmacs
506 ---------------------------
507
508 The easiest way to use Aspell with Emacs or XEmacs is to add this line:
509
510
511 (setq-default ispell-program-name "aspell")
512
513    to the end of your `.emacs' file.
514
515    For some reason version 3.0 of ispell.el (the lisp program that
516 (x)emacs uses) wants to reverse the suggestion list.  To fix this add
517 this line:
518
519
520 (setq-default ispell-extra-args '("--reverse"))
521
522    after the previous line in your .emacs file and it should solve the
523 problem.
524
525    Ispell.el, version 3.1 (December 1, 1998) and better, has the list
526 reversing problem fixed.  You can find it at
527 `http://www.kdstevens.com/~stevens/ispell-page.html'.
528
529 3.3.2 With LyX
530 --------------
531
532 Version 1.0 of LyX provides support for Aspell's learning from user's
533 mistakes feature.
534
535    To use Aspell with LyX 1.0 either change the `spell_command' option
536 in the `.lyxrc' file or use the `run-with-aspell' utility.
537
538 3.3.3 With VIM
539 --------------
540
541 To use Aspell in VIM you simply need to add the following line to your
542 `.vimrc' file:
543
544
545 map ^T :w!<CR>:!aspell check %<CR>:e! %<CR>
546
547    I use `Ctrl-T' since that's the way you spell check in `pico'.  In
548 order to add a control character to your `.vimrc' you must type
549 `Ctrl-v' first.  In this case `Ctrl-v Ctrl-t'.
550
551    A more useful way to use Aspell, IMHO, is in combination with
552 Newsbody (`http://www.image.dk/~byrial/newsbody/') which is how I use it
553 since VIM is my editor for my mailer and my news reader.
554
555 map ^T\\1\\2<CR>:e! %<CR>
556 map \\1 :w!<CR>
557 map \\2 :!newsbody -qs -n % -p aspell check \\%f<CR>
558
559 3.3.4 With Pine
560 ---------------
561
562 To use Aspell in Pine simply change the option `speller' to
563
564      aspell --mode=email check
565
566    To change the `speller' option go to the main menu.  Type `S' for
567 _setup_, `C' for _config_, then `W' for _where is_.  Type in `speller'
568 as the word to find.  The speller option should be highlighted now.
569 Hit enter, type in the above line, and hit enter again.  Then type `E'
570 for _exit setup_ and `Y' to save the change.
571
572    If you have a strong desire to check other people's comments change
573 `speller' to
574
575      aspell check
576
577 instead which will avoid switching Aspell into email mode.
578
579 \1f
580 File: aspell.info,  Node: Customizing Aspell,  Next: Working With Dictionaries,  Prev: Basic Usage,  Up: Top
581
582 4 Customizing Aspell
583 ********************
584
585 The behavior of Aspell can be changed by any number of options which
586 can be specified at either the command line, the environment variable
587 `ASPELL_CONF', a personal configuration file, or a global configuration
588 file.  Options specified on the command line override options specified
589 by the environment variable.  Options specified by the environment
590 variable override options specified by either of the configuration
591 files.  Finally options specified by the personal configuration file
592 override options specified in the global configuration file.  Options
593 specified in the environment variable `ASPELL_CONF', a personal
594 configuration file, or a global configuration file will take effect no
595 matter how Aspell is used which includes being used by other
596 applications.
597
598    Aspell has three basic types of options: "boolean", "value", and
599 "list".
600
601    "Boolean" options are either enabled or disabled, "value" options
602 take a specific value, and "list" options can either have entries added
603 or removed from the list.
604
605 * Menu:
606
607 * Specifying Options::
608 * The Options::
609 * Dumping Configuration Values::
610 * Notes on Various Options::
611
612 \1f
613 File: aspell.info,  Node: Specifying Options,  Next: The Options,  Up: Customizing Aspell
614
615 4.1 Specifying Options
616 ======================
617
618 4.1.1 At the Command Line
619 -------------------------
620
621 All options specified at the command line have the following basic
622 format:
623
624      --OPTION[=VALUE]
625
626 where the `=' can be replaced by whitespace.
627
628    Some options also have single letter abbreviations of the form:
629
630      LETTER [OPTIONAL_WHITESPACE VALUE]
631
632    Any non-ASCII characters are expected to be in the encoding
633 specified by the current locale.
634
635    To reset an option to the default value, prefix the option with a
636 `reset-' and don't specify a value.
637
638 4.1.1.1 Value options
639 .....................
640
641 To specify a value option simply specify the option with its
642 corresponding value.  For example to set the filter mode to TeX use
643 `--mode=tex'.
644
645    If a value option has a single letter shortcut simply specify the
646 single letter shortcut with its corresponding value.  For example to
647 use a the accented version of the American English dictionary use `-d
648 en_US-w_accents'.
649
650 4.1.1.2 Boolean options
651 .......................
652
653 To enable a boolean option simply specify the option without any
654 corresponding value, or prefix it with an `enable-'.  For example to
655 create a backup file use `--backup'.  To disable a boolean option
656 prefix the option name with a `dont-' or `disable-'.  To avoid creating
657 a backup file use `--dont-backup'.  Boolean options can also be set
658 directly like a value option where the value is either "true" or
659 "false", for example `--backup=true'.
660
661    If a boolean option has a single letter abbreviation simply give the
662 letter corresponding to either enabling or disabling the option without
663 any corresponding value.  For example, to consider run-together words
664 valid use `-C' or to consider them invalid use `-B'
665
666 4.1.1.3 List options
667 ....................
668
669 To add a value to the list, prefix the option name with an `add-' and
670 then specify the value to add.  For example, to add the URL filter use
671 `--add-filter url'.  To remove a value from a list option, prefix the
672 option name with a `rem-' and then specify the value to remove.  For
673 example, to remove the URL filter use `--rem-filter url'.  To remove
674 all items from a list prefix the option name with a `clear-' without
675 specify any value.  For example, to remove all filters use
676 `--clear-filter'.
677
678    A list option can also be set directly, in which case it will be set
679 to a single value.  To directly set a list option to multiple values
680 prefix the option name with a `lset-' and separate each value with a
681 `:'.  For example, to use the URL and TeX filter use `--lset-filter
682 url:tex'.
683
684 4.1.2 Via a Configuration File
685 ------------------------------
686
687 Aspell can also accept options via a personal or global configuration
688 file.  The exact files to used are specified by the options `per-conf'
689 and `conf' respectively but the personal configuration file is normally
690 `.aspell.conf' located in the `HOME' directory and the global one is
691 normally `aspell.conf' which is located in the `etc' directory which is
692 normally `/usr/etc' or `/usr/local/etc'.  To find out the particular
693 values for your particular system use `aspell dump config'.
694
695    Each line of the configuration file has the format:
696
697      OPTION [VALUE]
698
699    There may be any number of spaces between the option and the value
700 however it can only be spaces, i.e. there is no `=' between the option
701 name and the value and there are no preceding `--' as used on the
702 command line.
703
704    Comments may also be included by preceding them with a `#' as
705 anything from a `#' to a newline is ignored.  Blank lines are also
706 allowed.
707
708    To include a literal `#' use `\#'.  To include a literal `\' use
709 `\\'.  Any other non-alpha character can also be protected by a `\' if
710 necessary.
711
712    Any non-ASCII characters are expected to be in UTF-8.
713
714    To reset an option to the default value prefix the option with a
715 `reset-' and don't specify a value.
716
717    Values set in the personal configuration file override those in the
718 global file.  Options specified at either the command line or via an
719 environment variable override those specified by either configuration
720 file.
721
722      Note: Filters and corresponding options also may be assembled
723      inside a special meta filter file named `METAFILTER.flt'.  A
724      filter has to be loaded via adding a `add-filter FILTERNAME' line
725      to the meta filter file before its options may be specified.
726
727 4.1.2.1 Value options
728 .....................
729
730 To specify a value option simply include the option followed by the
731 corresponding value.  For example to set the default language to German
732 use `lang german'.
733
734 4.1.2.2 Boolean options
735 .......................
736
737 To specify a boolean option simply include the option followed by a
738 `true' to enable it or a `false' to disable it.  For example to allow
739 run-together words use `run-together true'.
740
741 4.1.2.3 List options
742 ....................
743
744 To add a value to the list, prefix the option name with an `add-' and
745 then specify the value to add.  For example to add the URL filter use
746 `add-filter url'.  To remove a value from a list option prefix the
747 option name with a `rem-' and then specify the value to remove.  For
748 example, to remove the URL filter use `rem-filter url'.  To remove all
749 items from a list prefix the option name with a `clear-' without
750 specifying any value.  For example, to remove all filters use
751 `clear-filter'.
752
753    A list option can also be set directly, in which case it will be set
754 to a single value.  To directly set a list option to multiple values
755 prefix the option name with a `lset-' and separate each value with a
756 `:'.  For example, to use the URL and TeX filter use `lset-filter
757 url:tex'.  To include a literal `:' use `\:'.
758
759 4.1.3 Setting Options via an Environment Variable
760 -------------------------------------------------
761
762 The environment variable `ASPELL_CONF' may also be used and it
763 overrides any options set in the configuration file.  The format of the
764 string is exactly the same as the configuration file except that
765 semicolons (`;') are used instead of newlines.
766
767 \1f
768 File: aspell.info,  Node: The Options,  Next: Dumping Configuration Values,  Prev: Specifying Options,  Up: Customizing Aspell
769
770 4.2 The Options
771 ===============
772
773 The following is a list of available options broken down by category.
774 Each entry has the following format:
775
776     OPTION[,SINGLE-LETTER-ABBREVIATION]
777           (TYPE) DESCRIPTION
778
779    Where single letter options are specified as they would appear at the
780 command line, ie with the preceding dash.  Boolean single letter
781 options are specified in the following format:
782
783      -<abbreviation to enable>|-<abbreviation to disable>
784
785    OPTION is one of the following: _boolean_, _string_, _file_, _dir_,
786 _integer_, or _list_.
787
788    _String_, _file_, _dir_, and _integer_ types are all value options
789 which can only take a specific type of value.
790
791 4.2.1 Dictionary Options
792 ------------------------
793
794 The following options may be used to control which dictionaries to use
795 and how they behave (for more information see *Note How Aspell Selects
796 an Appropriate Dictionary::):
797
798 master,-d
799      (string) Base name of the dictionary to use.  If this option is
800      specified then Aspell will either use this dictionary or die.
801
802 dict-dir
803      (dir) Location of the main word list.
804
805 lang
806      (string) Language to use.  It follows the same format of the `LANG'
807      environment variable on most systems.  It consists of the two
808      letter ISO 639 language code and an optional two letter ISO 3166
809      country code after a dash or underscore.  The default value is
810      based on the value of the `LC_MESSAGES' locale.
811
812 size
813      (string) The preferred size of the word list.  This consists of a
814      two char digit code describing the size of the list, with typical
815      values of: 10=tiny, 20=really small, 30=small, 40=med-small,
816      50=med, 60=med-large, 70=large, 80=huge, 90=insane.
817
818 variety
819      (list) Any extra information to distinguish two different words
820      lists that have the same lang and size.
821
822 word-list-path
823      (list) Search path for word list information files.
824
825 personal,-p
826      (file) Personal word list file name.
827
828 repl
829      (file) Replacements list file name.
830
831 extra-dicts
832      (list) Extra dictionaries to use.
833
834 dict-alias
835      (list) create dictionary aliases.  Each entry has the form `FROM
836      TO'.  Will override any system dictionaries that are present.
837
838
839 4.2.2 Encoding Options
840 ----------------------
841
842 These options control the encoding the document is expected to be in and
843 how it is displayed.
844
845 encoding
846      (string) The encoding the input text is in.  Valid values include,
847      but not limited to, `iso-8859-*', `utf-8', `ucs-2', `ucs-4'.  When
848      using the Aspell utility the default encoding is based on the
849      current locale.  Thus if your locale currently uses the `utf-8'
850      encoding than everything will be in UTF-8.  The `ucs-2' and
851      `ucs-4' encodings are intended to be used by other programs using
852      the Aspell library and is not supported by the Aspell utility.
853
854 normalize
855      (boolean) Perform Unicode normalization.  Enabled by default.
856
857 norm-strict
858      (boolean) Avoid lossy conversions when normalizing.  Lossy
859      conversions includes compatibility mappings such as splitting the
860      letter `OE' (U+152) into `O' and `E' (when the combined letter is
861      not available), and mappings which will remove accents.  Disabled
862      by default except when creating dictionaries.
863
864 norm-form
865      (string) The normalization form the output should be in.  This
866      option primarily effects the normalization form of the suggestions
867      as when spell checkering as the actual text is unchanged unless
868      there is an error.  Valid values are `none', `nfd' for fully
869      decomposition (Normalization Form D), `nfc' for Normalization Form
870      C, or `comp' for fully composed.  `comp' is like `nfc' except that
871      _full_ composition is used rather than _canonical_ composition.
872      The `normalize' option must be enabled for this option to be used.
873
874 norm-required
875      (boolean) Set to true when the current language requires Unicode
876      normalization.  This is generally the case when private use
877      characters are used internally by Aspell or when Normalization
878      Form C is not the same as full composition.
879
880
881 4.2.3 Checker Options
882 ---------------------
883
884 These options control the behavior of Aspell when checking documents.
885
886 ignore,-W
887      (integer) Ignore words with N characters or less
888
889 ignore-repl
890      (boolean) Ignore commands to store replacement pairs.
891
892 save-repl
893      (boolean) Save the replacement word list on save all.
894
895 keyboard
896      (file) The base name of the keyboard definition file to use (*note
897      Notes on Typo-Analysis::)
898
899 sug-mode
900      (mode) Suggestion mode = `ultra' | `fast' | `normal' | `slow' |
901      `bad-spellers' (*note Notes on the Different Suggestion Modes::)
902
903 ignore-case
904      (boolean) Ignore case when checking words.
905
906 ignore-accents
907      (boolean) Ignore accents when checking words - _currently ignored_.
908
909
910 4.2.4 Filter Options
911 --------------------
912
913 These options modify the behavior of the Aspell filter interface in
914 general (for more information see *note Notes on Various Filters and
915 Filter Modes::).
916
917 filter
918      (list) filters to use
919
920 filter-path
921      (list) Where to look when loading filter and filter modes.
922
923 mode
924      (string) Sets the filter mode.  Possible values include, but not
925      limited to, `none', `url', `email', `sgml', or `tex'.  (The
926      shortcut options `-e' may be used for email, `-H' for HTML, or
927      `-t' for TeX).
928
929
930    These options belong to filters packaged along with Aspell standard
931 distribution.  These options may be prefixed by the keyword `f-' in
932 order to explicitly indicate that they are options recognized by a
933 filter and not by Aspell itself.
934
935 4.2.4.1 email
936 .............
937
938 This filter hides quoting characters and email preamble and other parts
939 of an email which need not to be spell checked.
940
941 email-quote
942      (list) Email quote characters.
943
944 email-margin
945      (integer) The number of characters that can appear before the
946      quote character
947
948 4.2.4.2 html
949 ............
950
951 This filter converts an HTML source file into a format which eases
952 spell checking of HTML texts by Aspell.
953
954 html-check
955      (list) HTML attributes to always check, such as alt= (alternate
956      text).
957
958 html-skip
959      (list) HTML tags to always skip the contents of, such as <script>.
960
961 4.2.4.3 sgml
962 ............
963
964 This filter is identical to the HTML filter except that its options has
965 different default values which are currently the empty list.
966
967 4.2.4.4 tex/latex
968 .................
969
970 This filter hides all LaTeX commands and corresponding parameters not
971 being readable text in LaTeX output from Aspell.
972
973 tex-command
974      (list) TeX commands
975
976 tex-check-comments
977      (boolean) check TeX comments
978
979
980 4.2.4.5 texinfo
981 ...............
982
983 This filter hides all Texinfo commands from Aspell.  It can also hide
984 Texinfo parameters and environments not corresponding to readable text.
985
986 texinfo-ignore
987      (list) Texinfo command to ignore the parameters of.
988
989 texinfo-ignore-env
990      (list) Texinfo environments to ignore.
991
992
993 4.2.4.6 context
994 ...............
995
996 This filter can be used to spell check source codes, HTML sources and
997 other texts which consist of different contexts.  These contexts must
998 be separated by pairs of unique delimiters.  The different contexts may
999 not be dependent upon each other except for initial context which is
1000 assumed if not any other context applies.
1001
1002 context-visible-first
1003      (boolean) Switches the context which should be visible to Aspell.
1004      Per default the initial context is assumed to be invisible as one
1005      would expect when spell checking source files of programs where
1006      relevant parts are contained in string constants and comments but
1007      not in the remaining code.  If set to true the initial context is
1008      visible while the delimited ones are hidden.
1009
1010 add|rem-context-delimiters
1011      (list) Add or remove pairs of delimiters.  This allows you to
1012      specify the character, or sequences of characters, which should be
1013      used to switch contexts and therefore have to be escaped by `\' if
1014      they should appear literally.  The two delimiting chars belonging
1015      to one pair have to be separated by a space character.  If
1016      multiple pairs are specified by one `add|rem-context-delimiters'
1017      call the different pairs have to be separated by a literal comma.
1018      Per default the delimiters are set to C/C++ comment and string
1019      constant delimiters.  If the end of line delimits a context than
1020      this has to be indicated by the literal `\0' string.
1021
1022 4.2.5 Run-together Word Options
1023 -------------------------------
1024
1025 These may be used to control the behavior of run-together words (for
1026 more information *note Controlling the Behavior of Run-together
1027 Words::):
1028 run-together,-C|-B
1029      (boolean) consider run-together words valid
1030
1031 run-together-limit
1032      (integer) maximum number of words that can be strung together
1033
1034 run-together-min
1035      (integer) minimal length of interior words
1036
1037 4.2.6 Miscellaneous Options
1038 ---------------------------
1039
1040 Miscellaneous other options that don't fall under any other category
1041 conf
1042      (file) Main configuration file.  This file overrides Aspell's
1043      global defaults.
1044
1045 conf-dir
1046      (dir) location of main configuration file
1047
1048 data-dir
1049      (dir) location of language data files
1050
1051 local-data-dir
1052      (dir) alternative location of language data files.  This directory
1053      is searched before `data-dir'.  It defaults to the same directory
1054      the actual main word list is in (which is not necessarily
1055      `dict-dir')
1056
1057 home-dir
1058      (dir) location for personal files
1059
1060 per-conf
1061      (file) personal configuration file.  This file overrides options
1062      found in the global `conf' file
1063
1064 keyboard
1065      (file) use this keyboard layout for suggesting possible words.
1066      These spelling errors happen if a user accidently presses a key
1067      next to the intended correct key.  The default is keyboard
1068      standard.  If you are creating documents, you may want to set it
1069      according to your particular type of keyboard.  If spellchecking
1070      documents created elsewhere, you might want to set this to the
1071      keyboard type for that locale.  If you are not sure, just leave
1072      this as standard
1073
1074 prefix
1075      (dir) prefix directory
1076
1077 set-prefix
1078      (boolean) set the prefix based on executable location (only works
1079      on WIN32 and when compiled with `--enable-win32-relocatable')
1080
1081 4.2.7 Aspell Utility Options
1082 ----------------------------
1083
1084 backup,-b|-x
1085      (boolean) Create a backup file by appending `.bak' to the file
1086      name.  This applies when the command is `check' and the backup
1087      file is only created if any spelling modifications take place.
1088
1089 time
1090      (boolean) Time load time and suggest time in `pipe' mode.
1091
1092 byte-offsets
1093      (boolean) Use byte offsets instead of character offsets in `pipe'
1094      mode.
1095
1096 reverse
1097      (boolean) Reverse the order of the suggestions list in `pipe' mode.
1098
1099 keymapping
1100      (string) the keymapping to use.  Either `aspell' for the default
1101      mapping or `ispell' to use the same mapping that the Ispell utility
1102      uses.
1103
1104 guess
1105      (boolean) make possible root/affix combinations not in the
1106      dictionary in `pipe' mode.
1107
1108 suggest
1109      (boolean) Suggest possible replacements in `pipe' mode.  If false
1110      Aspell will simply report the misspelling and make no attempt at
1111      suggestions or possible corrections.
1112
1113 \1f
1114 File: aspell.info,  Node: Dumping Configuration Values,  Next: Notes on Various Options,  Prev: The Options,  Up: Customizing Aspell
1115
1116 4.3 Dumping Configuration Values
1117 ================================
1118
1119 To find out the current value of all the options use the command
1120 `aspell dump config'.  This will dump the current Aspell configuration
1121 to standard output.  The format of the contents dumped is such that it
1122 can be used as either the global or your personal configuration file.
1123
1124    To find out the current value of a particular option use `aspell
1125 config OPTION'.  This will print out the value of OPTION to `stdout'
1126 and nothing else.
1127
1128 \1f
1129 File: aspell.info,  Node: Notes on Various Options,  Prev: Dumping Configuration Values,  Up: Customizing Aspell
1130
1131 4.4 Notes on Various Options
1132 ============================
1133
1134 * Menu:
1135
1136 * Notes on Various Filters and Filter Modes::
1137 * Notes on the Prefix Option::
1138 * Notes on Typo-Analysis::
1139 * Notes on the Different Suggestion Modes::
1140
1141 \1f
1142 File: aspell.info,  Node: Notes on Various Filters and Filter Modes,  Next: Notes on the Prefix Option,  Up: Notes on Various Options
1143
1144 4.4.1 Notes on Various Filters and Filter Modes
1145 -----------------------------------------------
1146
1147 Aspell now has filter support.  You can either select from individual
1148 filters or choose a filter mode.  To select a filter mode use the
1149 `mode' option.  You may choose from `none', `url', `email', `sgml',
1150 `ccpp', `tex' and any other available on your system.  The default mode
1151 is `url'.  Individual filters can be added with the option `add-filter'
1152 and removed with the `rem-filter' option.  The currently available
1153 filters are `url', `email', `sgml' and `tex', `latex' (alias for
1154 `tex'), `nroff', `context', as well as a bunch of filters which
1155 translate the text from one format to another.
1156
1157    To check which filters are available use `aspell dump filters'.  To
1158 check which filter modes are available use `aspell dump modes'.  The
1159 `aspell help' command will also list all available filter and filter
1160 modes.
1161
1162 4.4.1.1 None Filter Mode
1163 ........................
1164
1165 The `none' mode is exactly what it says.  It turns off all filters.
1166
1167 4.4.1.2 URL Filter
1168 ..................
1169
1170 The `url' filter/mode skips over URLs, host names, and email addresses.
1171 Because this filter is almost always useful and rarely does any harm
1172 it is enabled in all modes except `none'.  To turn it off either select
1173 the `none' mode or use `rem-filter' option _after_ the desired mode is
1174 selected.
1175
1176 4.4.1.3 Email Filter
1177 ....................
1178
1179 The `email' filter mode skips over quoted text.  It currently does not
1180 support skipping over headers however a future version should.  In the
1181 meantime I suggest you use Aspell with Newsbody which can be found at
1182 `http://home.worldonline.dk/~byrial/newsbody/'.  The option
1183 `email-skip' controls the number of characters that can appear before
1184 the email quote character, the default is 10.  The option
1185 `add|rem-email-quote' controls the characters that are considered quote
1186 characters, the defaults are `>' and `|'.
1187
1188 4.4.1.4 SGML Filter
1189 ...................
1190
1191 The SGML filter allows you to spell check SGML, HTML, XHTML, and XML
1192 files. In most cases everything within a tag `<tag attrib=value
1193 attrib2="a whole sentence">' will be skipped by the spell checker. The
1194 SGML/HTML/XML that Aspell supports is a slight superset of most DTDs
1195 (Document Type Definitions) and can spell check the often non-conforming
1196 HTML found on the web.
1197
1198    Two configuration options, `sgml-skip' and `sgml-check', allow you
1199 to control what is spell checked. The tag and attribute names specified
1200 are case insensitive.
1201
1202 sgml-skip
1203      This is a list of tags whose contents will also be skipped by the
1204      spell checker.  For example, if you wish to leave a misspelling in
1205      a document and not have them flagged as misspellings, you could
1206      surround them with a <nospellcheck> tag:
1207             <TD><FONT size=2><NOSPELLCHECK>leviosa</NOSPELLCHECK>
1208             is what Mr. Potter said</FONT></TD>
1209      And put that word in the skip config directive:
1210           add-sgml-skip nospellcheck
1211
1212 sgml-check
1213      This is a list of attributes whose values you do want spell
1214      checked. By default, 'alt' (<img> alternate text) is a member of
1215      the check list since it is text that is seen by a web page viewer.
1216      You may also want 'value' to be on the check list since that is
1217      the text put on buttons:
1218           add-sgml-check value
1219      In this case `<input type=button value="Donr">' will be flagged as
1220      a misspelling.
1221
1222    This filter will also translate SGML characters of the form
1223 `&#num;'.  Other SGML characters such as `&amp;' will simply be skipped
1224 over so that the word `amp', for example, will not be spell checked.
1225 Eventually full support for properly translating SGML characters will
1226 be added.
1227
1228 4.4.1.5 HTML Filter
1229 ...................
1230
1231 The `html' filter is like the SGML Filter Mode but specialized for
1232 HTML.  By default, 'script' and 'style' are members of the skip list in
1233 HTML mode.
1234
1235 4.4.1.6 TeX/LaTeX Filter
1236 ........................
1237
1238 The `tex' (all lowercase) filter mode skips over TeX commands and
1239 parameters and/or options to certain commands.  It also skips over TeX
1240 comments by default.  The option `[dont-]tex-check-comments' controls
1241 whether or not Aspell will skip over TeX comments.  The option
1242 `add|rem-tex-command' controls which TeX commands should have certain
1243 parameters and/or options also skipped over.  Commands that are not
1244 specified will have all their parameters and/or options checked.  The
1245 format for each item is
1246
1247      <command> <a list of p,P,o and Os>
1248
1249    The first item is simply the command name.  The second item controls
1250 which parameters to skip over.  A 'p' skips over a parameter while a
1251 'P' doesn't.  Similarly an 'o' will skip over an optional parameter
1252 while an 'O' doesn't.  The first letter on the list will apply to the
1253 first parameter, the second letter will apply to the second parameter
1254 etc.  If there are more parameters than letters Aspell will simply
1255 check them as normal.  For example the option
1256
1257      add-tex-command rule pp
1258
1259 will skip over the first two parameters of the `rule' command while the
1260 option
1261
1262      add-tex-command foo Pop
1263
1264 will _check_ the first parameter of the `foo' command, skip over the
1265 next optional parameter, if it is present, and will skip over the
1266 second parameter -- even if the optional parameter is not present --
1267 and will check any additional parameters.
1268
1269    A `*' at the end of the command is simply ignored.  For example the
1270 option
1271
1272      enlargethispage p
1273
1274 will ignore the first parameter in both `enlargethispage' and
1275 `enlargethispage*'.
1276
1277    To remove a command simply use the `rem-tex-command' option.  For
1278 example
1279
1280      rem-tex-command foo
1281
1282 will remove the command foo, if present, from the list of TeX commands.
1283
1284    The TeX filter mode is also available via `latex' alias name.
1285
1286 4.4.1.7 Texinfo Filter
1287 ......................
1288
1289 The `texinfo' filter allows you to spell check Texinfo files.  It will
1290 skip over any Texinfo commands and their parameters when appropriate.
1291 It will also skip over some Texinfo environments such as `example'.
1292 The list option `texinfo-ignore' controls which commands to ignore the
1293 parameters of and the list option `texinfo-ignore-env' controls which
1294 Texinfo environments to ignore.
1295
1296    The Texinfo filter has special code to deal with the `@table' and
1297 related commands.  It will apply the formatting command to each of the
1298 `@item' or `@itemx' commands just like Texinfo will.  This means that
1299 if the formatting command is `@code' and and the `@code' command is a
1300 member of the `texinfo-ignore' option than the Texinfo filter will
1301 ignore the parameter of the `@item' command as if the parameter was also
1302 the parameter of the `@code' command.
1303
1304    The Texinfo filter will also skip over the `\input texinfo' line.
1305
1306 4.4.1.8 Nroff Filter
1307 ....................
1308
1309 The `nroff' filter mode allows you to check the spelling of Nroff
1310 documents. The mode is enabled by giving `--add-filter=nroff' or `-n'
1311 command line option to `aspell'. It is also automatically enabled if
1312 the first three characters of the file being checked are `.\"' (a
1313 `nroff' comment marker) or the file name ends in a one of the following
1314 suffixes:
1315
1316    * single decimal digit from `0' to `9'
1317
1318    * letter `n'
1319
1320    * `tmac'
1321
1322 This filter mode skips following `nroff' language elements:
1323
1324    * Comments
1325
1326    * Requests
1327
1328    * Names of `nroff' registers (both traditional two-letter names and
1329      GNU nroff long names)
1330
1331    * Arguments to the following requests: `ds', `de', `nr', `do', `so'.
1332
1333    * Arguments to font switch (`\f') and size switch (`\s') escapes
1334
1335    * Arguments to extended charset escape in both traditional (`\(')
1336      and extended (`\[comp1 comp2 ...]') form.
1337
1338 4.4.1.9 Context Filter
1339 ......................
1340
1341 The _context_ filter allows Aspell to distinguish between visible and
1342 invisible contexts.  The visible ones will be spell checked and the
1343 invisible ones will be ignored.  The contexts are distinguished by the
1344 fact that the visible/invisible ones are delimited by specific and
1345 unique delimiter characters or character sequences.  Whether the
1346 delimited contexts should be visible or invisible only stated by the
1347 value of the `[dont-]context-visible-first' option and not by the
1348 delimiters.
1349
1350    The context delimiters are specified as pairs of delimiters via the
1351 `add|rem-context-delimiters' option.  The delimiters enclosing a
1352 specific context are specified as a space separated pair.  If more than
1353 one delimiter pair is specified by one call of
1354 `add|rem-context-delimiters' they have to be combined to a comma
1355 separated list.  To indicate that a context is always closed by end of
1356 line use `\0' sequence as closing delimiter.
1357
1358 4.4.1.10 Ccpp Filter Mode
1359 .........................
1360
1361 The `ccpp' filter mode will limit spell checking to C/C++ comments and
1362 string literals. Any code in between will be left alone.
1363
1364 \1f
1365 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
1366
1367 4.4.2 Notes on the Prefix Option
1368 --------------------------------
1369
1370 The `prefix' option is there to allow Aspell to easily be relocated.
1371 Changing `prefix' will change all directory names relative to the new
1372 prefix that are not explicitly set.  For example if `prefix' was
1373 `/usr/local/aspell' and `dict-dir' has a default value of
1374 `/usr/local/aspell/dict' than changing `prefix' to `/opt/aspell' will
1375 also change the default value of `dict-dir' to `/opt/aspell/dict'.
1376 Note that modifying `prefix' will only affect the default compiled in
1377 values of directories.  If a directory option is explicitly given a
1378 value then changing the value of `prefix' has no effect on that
1379 directory option.
1380
1381 \1f
1382 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
1383
1384 4.4.3 Notes on Typo-Analysis and the Keyboard Definition File
1385 -------------------------------------------------------------
1386
1387 Aspell .33 and better will, in general, give a higher priority to
1388 certain misspellings which are likely to be due to typos such as `teh'
1389 instead of `the' or `hapoy' instead of `happy'.  However in order to do
1390 this well Aspell needs to know the layout of the keyboard via the
1391 keyboard definition file.  The keyboard definition file simply
1392 identifies the keys on the keyboard and which of them are right next to
1393 each other.  It has an extension of `.kbd' and all non-ASCII characters
1394 are expected to be in UTF-8.
1395
1396    To identify a key use:
1397
1398      key BASE OTHER ...
1399    where BASE is the base character that the key types, and OTHER are
1400 other keys that the key can produce.  For example
1401
1402      key a A á Á
1403
1404    It generally is only necessary to list keys which type more than one
1405 distinct letter as Aspell can derive the rest from the language data
1406 file.  For example, it is not necessary to include the previously
1407 mentioned key.
1408
1409    To identify two keys as being right next to each other simply list
1410 the type keys right after each other.  For example the line:
1411
1412      as
1413
1414 will indicate that `a' and `s' are right next to each other.  If `as'
1415 is listed as an entry it is not necessary to list `sa' as an entry as
1416 that will be done automatically.  Also by "right next to each other" I
1417 mean two keys that are close enough together that it is easy to type
1418 one instead of the other.  On most keyboards this means keys that are
1419 to the left or to the right of each other and _not_ keys that are below
1420 or above it.
1421
1422    The default for this option is normally `standard'.  However the
1423 default can be changed via the language data file.  The normal default,
1424 `standard', should work well for most QWERTY like keyboard layouts.  It
1425 may need minor adjusting for foreign keyboards.  The `dvorak' option
1426 can be used for a Dvorak layout.
1427
1428 \1f
1429 File: aspell.info,  Node: Notes on the Different Suggestion Modes,  Prev: Notes on Typo-Analysis,  Up: Notes on Various Options
1430
1431 4.4.4 Notes on the Different Suggestion Modes
1432 ---------------------------------------------
1433
1434 In order to understand what these suggestion modes do, a basic
1435 understanding of how Aspell works is required.  For that, see *Note
1436 Aspell Suggestion Strategy::.
1437
1438    The suggestion modes are as follows.
1439
1440 ultra
1441      This method will use the fastest method available to come up with
1442      decent suggestions.  This currently means that it will look for
1443      soundslikes within one edit distance.  This method will also use
1444      the replacement table if one is available.  In this mode Aspell
1445      gets about 87% of the words from my small test kernel of
1446      misspelled words.  (Go to `http://aspell.net/test' for more info
1447      on the test kernel as well as comparisons of this version of
1448      Aspell with previous versions and other spell checkers.)
1449
1450 fast
1451      This method is currently identical to `ultra'.
1452
1453 normal
1454      This mode will use what ever method is necessary to return good
1455      suggestions in most cases in a reasonable amount of time.  This
1456      currently means it will looks for soundslikes within two edit
1457      distance apart.  This mode gets 93% of the words.
1458
1459 slow
1460      Like `normal' except that "reasonable amount of time" is not a
1461      consideration.  In most cases it will return the same results as
1462      `normal'.  The biggest difference is that it will try an ngram
1463      scan if the normal methods of finding a suggestion fail.
1464
1465 bad-spellers
1466      This method is like `slow' but is tailored more for the bad
1467      speller, where as the other modes are tailored more to strike a
1468      good balance between typos and true misspellings.  This mode never
1469      performs typo-analysis and returns a _huge_ number of words for
1470      the really bad spellers who can't seem to get the spelling
1471      anything close to what it should be.  If the misspelled word looks
1472      anything like the correct spelling it is bound to be found
1473      _somewhere_ on the list of 100 or more suggestions.  This mode
1474      gets 98% of the words.
1475
1476    If jump tables were not used then the `normal' option is identical
1477 to `fast' and the `slow' option is identical to the `normal' if jump
1478 tables were used.
1479
1480 \1f
1481 File: aspell.info,  Node: Working With Dictionaries,  Next: Writing programs to use Aspell,  Prev: Customizing Aspell,  Up: Top
1482
1483 5 Working With Dictionaries
1484 ***************************
1485
1486 * Menu:
1487
1488 * Using aspell-import::
1489 * How Aspell Selects an Appropriate Dictionary::
1490 * Listing Available Dictionaries::
1491 * Dumping the Contents of the Word List::
1492 * Creating an Individual Word List::
1493 * Working With Affix Info in Word Lists::
1494 * Format of the Personal and Replacement Dictionaries::
1495 * Using Multi Dictionaries::
1496 * Dictionary Naming::
1497 * AWLI files::
1498
1499 \1f
1500 File: aspell.info,  Node: Using aspell-import,  Next: How Aspell Selects an Appropriate Dictionary,  Up: Working With Dictionaries
1501
1502 5.1 Using `aspell-import'
1503 =========================
1504
1505 The `aspell-import' Perl script will look for old personal dictionaries
1506 and will import them into GNU Aspell.  It will look for both Ispell and
1507 Aspell ones.  To use it, just run it from the command prompt.  If you
1508 get an error about `/usr/bin/perl' not being found, then instead try
1509 `perl BINDIR/aspell-import'.  When running the script if you get a
1510 message like:
1511
1512
1513 Error: No word lists can be found for the language "de".
1514
1515    This means that you have not installed support for the given
1516 language, in this case `de' for German.  To rectify the situation
1517 download and install a dictionary designed to work with GNU Aspell 0.50
1518 or better.
1519
1520 \1f
1521 File: aspell.info,  Node: How Aspell Selects an Appropriate Dictionary,  Next: Listing Available Dictionaries,  Prev: Using aspell-import,  Up: Working With Dictionaries
1522
1523 5.2 How Aspell Selects an Appropriate Dictionary
1524 ================================================
1525
1526 If the `master' option is set in any fashion (via the command line, the
1527 `ASPELL_CONF' environment variable, or a configuration file) Aspell
1528 will look for a dictionary of that name.  If one could not be found, it
1529 will complain.
1530
1531    Otherwise it will use the value of the `lang' option to search for
1532 an appropriate dictionary.  If more than one dictionary is found for
1533 the given language string then it will look for a dictionary with a
1534 matching variety if the `variety' option is set.  If it is not set it
1535 will look for a dictionary without a variety.  If after matching the
1536 `lang' and `variety' there is still more than one dictionary available
1537 it will find one with the size closest to the value of the `size'
1538 option.  The default size is 60.  If Aspell cannot find a dictionary
1539 based on the `lang' option then it will give up and complain.
1540
1541    If the `lang' option is not explicitly set its value will be based
1542 on the `LC_MESSAGES' locale.  This locale is generally taken from the
1543 `LC_MESSAGES' environment variable or the `LANG' environment variable
1544 if `LC_MESSAGES' is not set.  However, if Aspell is being used as a
1545 library from within another program which already explicitly set the
1546 locale then it will use the locale of the library rather than the
1547 environment variables.  If Aspell cannot determine the language from
1548 the `LC_MESSAGES' locale than it will default to `en_US'.
1549
1550    The list option `dict-alias' can be used to influence which
1551 dictionary is selected by creating an alias from one dictionary name to
1552 another.  This option is most useful when there is more than one
1553 dictionary for a given language.  For example `add-dict-alias en_US
1554 en_US-w_accents' will cause Aspell to choose the accented version of
1555 the American English dictionary instead of the non-accented version.
1556 To add an alias use:
1557
1558      add-dict-alias NAME VAL
1559
1560 \1f
1561 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
1562
1563 5.3 Listing Available Dictionaries
1564 ==================================
1565
1566 For a list of available dictionaries use the command `aspell dump
1567 dicts'.  This will form a list of dictionaries that Aspell will search
1568 when a dictionary is not specifically given.
1569
1570 \1f
1571 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
1572
1573 5.4 Dumping the Contents of the Word List
1574 =========================================
1575
1576 The dump command in `aspell' will simply dump the contents of a word
1577 list to `stdout' in a format that can be read back in with `aspell
1578 create'.
1579
1580    If no word list is specified the command will act on the default one.
1581 For example the command
1582
1583      aspell dump personal
1584
1585 will simply dump the contents of the current personal word list to
1586 `stdout'.
1587
1588 \1f
1589 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
1590
1591 5.5 Creating an Individual Word List
1592 ====================================
1593
1594 To create an individual main word list from a list of words use the
1595 command
1596
1597      aspell --lang=LANG create master ./BASE < WORDLIST
1598
1599 where BASE is the name of the word list and WORDLIST is the list of
1600 words separated by white space.  The name of the word list will
1601 automatically be converted to all lowercase.  The `./' is important
1602 because without it Aspell will create the word list in the normal word
1603 list directory.  If you are trying to create a word list in a language
1604 other than English check the Aspell `data-dir' (usually
1605 `/usr/share/aspell', use `aspell dump config' to find out what it is on
1606 your system) to see if a language data file exists for your language.
1607 If not you will need to create one.  For more information on using
1608 Aspell with other languages *Note Adding Support For Other Languages::.
1609
1610    This will create the file `BASE' in the current directory.  To use
1611 the new word list copy the file to the normal word list directory (use
1612 `aspell config' to find out what it is) and use the option
1613 `--master=BASE'.
1614
1615    During the creating of the dictionary you may get a number of
1616 warnings or errors about invalid words or affixes.  By default Aspell
1617 will skip any invalid words and remove invalid affixes.  If you rather
1618 that Aspell simply accepts all words given then the option
1619 `--dont-validate-words' can be specified.  To avoid checking if affixes
1620 are valid use the option `--dont-validate-affixes'.  However, rather
1621 than disable checking, it is preferable to clean the input word list.
1622 This can be done by using the command
1623
1624      aspell --local-data-dir=./ --lang=LANG clean < WORDLIST > RESULT
1625
1626 which will clean the word list and output the results to RESULT.  By
1627 default it will remove invalid characters from the beginning and end of
1628 a word before resorting to skipping the word.  If you rather it just
1629 skip the words than add the keyword strict:
1630
1631      aspell --local-data-dir=./ --lang=LANG clean strict < WORDLIST > RESULT
1632
1633    The option `--clean-words' can be be added when creating a
1634 dictionary if you want Aspell to remove invalid characters from the
1635 beginning and end of a word like the "clean" command does. In addition
1636 the options `--dont-skip-invalid-words' and `--dont-clean-affixes' can
1637 be specified to turn the warnings into errors.
1638
1639    The compiled dictionary file are endian order dependent.  When a
1640 dictionary is loaded the endian order is checked.  Please do not
1641 distribute the compiled dictionaries unless you are only distributing
1642 them for a particular platform such as you would a binary.
1643
1644    Aspell is now also able to use special `multi' dictionaries.  for
1645 more information *Note How Aspell Selects an Appropriate Dictionary::.
1646
1647    A personal and replacement word list can be created in a similar
1648 fashion.
1649
1650 5.5.1 Format of the Replacement Word List
1651 -----------------------------------------
1652
1653 The replacement word list has each replacement pair on its own line in
1654 the following format
1655
1656      misspelled_word correction
1657
1658 \1f
1659 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
1660
1661 5.6 Working With Affix Info in Word Lists
1662 =========================================
1663
1664 5.6.1 The Munch Command
1665 -----------------------
1666
1667 The `munch' command takes a list of words from standard input and
1668 outputs a list of possible root words and affixes.  The root may,
1669 however, be invalid as it does not check them against the existing
1670 dictionary.  For example the command:
1671      echo brother | aspell -l en munch
1672 produces
1673      brother broth/R brothe/R
1674
1675 5.6.2 The Expand Command
1676 ------------------------
1677
1678 The `expand' command is the reverse of `munch', it expands affix flags
1679 to produce a list of words.  For example:
1680      echo both/R | aspell -l en expand
1681 produces
1682      both bother
1683
1684    The formal usage is:
1685      aspell expand [LEVEL] [LIMIT]
1686    Where LEVEL is the expansion level.  Valid values are between 1 and
1687 3.  Level 1 is the default if not otherwise specified.  Level 2 causes
1688 the original root/affix to be included, for example:
1689      both/R both bother
1690    Level 3 causes multiple lines to be printed, one for each generated
1691 word, with the original root/affix combination followed by the word it
1692 creates:
1693      both/R both
1694      both/R bother
1695    Levels larger than 3 may also be supported, but should not be used as
1696 they may eventually be removed.
1697
1698    If a LIMIT parameter is given then only expansions which affect the
1699 first LIMIT letters will be expanded.  If a base word is not completely
1700 expanded for a given affix flag that flag will be left on the word.
1701 Note that prefixes are always expanded.
1702
1703 5.6.3 The Munch-list Command
1704 ----------------------------
1705
1706 The `munch-list' command will reduce the size of word list via affix
1707 compression.  It will reduce a list of words to a minimal (or close to
1708 it) set of roots and affixes that will match the same list of words.
1709 The list of words is read from standard input and the result, the
1710 "munched" list, is written to standard out.  It's usage is:
1711
1712      aspell munch-list [keep] [single|multi] [simple] < INFILE > OUTFILE
1713
1714 where `simple', `single', `multi', and `keep' are literal values.
1715
1716    The default algorithm used should give near optimum results.  In some
1717 cases the set of words returned is, provably, the minimum number
1718 possible.  In the typical case the number of words returned is within
1719 1% of the optimum number.
1720
1721    By default Aspell will remove redundant affix flags.  The `keep'
1722 flag will avoid removing them, which can be useful if you want to
1723 include all possible expansions for each base word.
1724
1725    When cross products are involved it may be beneficial to list a base
1726 word more than once.  Unfortunately, the current version of Aspell can
1727 not correctly handle multiple base words in a dictionary.  Therefore,
1728 the current default behavior is to only include the one with the most
1729 expansions.  All of them can be included via the `multi' flag.  Once
1730 Aspell is able to handle multiple base words the default will be to
1731 include them all.  The `single' flag can be used to only include one of
1732 them.
1733
1734    The `simple' flag will select an alternate faster algorithm.  This
1735 algorithm is very similar to the `munch' command distributed with
1736 MySpell (the Open Office spell checker), however, it doesn't give
1737 nearly as good results.  It does okay for the English word list but not
1738 for some other languages such as German; the normal algorithm reduced a
1739 list of 312,002 German words to 79,420 base words while the simple
1740 algorithm only reduced it to 115,927 words.  This algorithm may
1741 disappear in a future version of Aspell.
1742
1743 \1f
1744 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
1745
1746 5.7 Format of the Personal and Replacement Dictionaries
1747 =======================================================
1748
1749 5.7.1 Format of the Personal Dictionary
1750 ---------------------------------------
1751
1752 The personal dictionary generally has a filename of the form:
1753
1754      .aspell.LANG.pws
1755
1756 And the file itself contains two parts.  The first part is a header
1757 line of the form:
1758
1759      personal_ws-1.1 LANG NUM [ENCODING]
1760
1761 where NUM is the number of words in the list.  This number is only used
1762 as a hint, and thus does not have to be accurate.  When creating a new
1763 dictionary it is perfectly acceptable for NUM to be 0.  The ENCODING is
1764 optional and specifies the encoding of the word list.  If it is left
1765 out the encoding is expected to be in the default encoding for the
1766 language as specified by the `data-encoding' option.  *Note
1767 data-encoding::.
1768
1769    The second part of simply a word list with one word per line.
1770
1771 5.7.2 Format of the Personal Replacement Dictionary
1772 ---------------------------------------------------
1773
1774 The personal replacement dictionary generally has a filename of the
1775 form:
1776
1777      .aspell.LANG.prepl
1778
1779 And the file itself contains two parts.  The first part is a header
1780 line of the form:
1781
1782      personal_repl-1.1 LANG NUM [ENCODING]
1783
1784 where NUM is currently unused and thus always 0.  As with the personal
1785 dictionary the ENCODING is optional.
1786
1787    The second part simply a list of replacements with one replacement
1788 per line with each replacement pair has the following format:
1789
1790      MISSPELLED_WORD CORRECTION
1791
1792 \1f
1793 File: aspell.info,  Node: Using Multi Dictionaries,  Next: Dictionary Naming,  Prev: Format of the Personal and Replacement Dictionaries,  Up: Working With Dictionaries
1794
1795 5.8 Using Multi Dictionaries
1796 ============================
1797
1798 As with previous versions of Aspell you can specify the main dictionary
1799 to use via the `-d' or `--master' option.  However as of Aspell .32 you
1800 can now also:
1801
1802   1. Specify more than word list to use with the `extra-dicts' option.
1803
1804   2. Specify special _multi_ dictionaries.
1805
1806    The `extra-dicts' is a list option.  To add a dictionary use
1807 `add-extra-dicts' or to remove a dictionary from the list use
1808 `rem-extra-dicts'.
1809
1810    A _multi_ dictionary is a special file which is basically a list of
1811 dictionary files to use.  A _multi_ dictionary must end in `.multi' and
1812 has roughly the same format as a configuration file with the only
1813 accepted key being `add'.
1814
1815 \1f
1816 File: aspell.info,  Node: Dictionary Naming,  Next: AWLI files,  Prev: Using Multi Dictionaries,  Up: Working With Dictionaries
1817
1818 5.9 Dictionary Naming
1819 =====================
1820
1821 In order for Aspell to be able to correctly recognize a dictionary
1822 based on the setting of the `LANG' environment variable the
1823 dictionaries need to be located somewhere Aspell can find them and they
1824 need to be _multi_ dictionaries.  Where Aspell looks for dictionaries
1825 depends on the value of the `dict-dir' and `word-list-path' option.
1826
1827    `dict-dir' is generally `PREFIX/lib/aspell', and `word-list-path' is
1828 generally empty.
1829
1830    Each dictionary that you expect Aspell to be able to find needs to
1831 have a name in the following format:
1832
1833      LANGUAGE[_REGION][-VARIETY][-SIZE].multi
1834
1835 where LANGUAGE is the two letter language code, REGION is the two
1836 letter region code, VARIETY is any extra information to distinguish the
1837 word list from other ones with the same language and spelling.
1838 Multiple varieties can be used by separating them with a '-'.  Finally,
1839 SIZE is the size of the dictionary.  If no size is specified then the
1840 default size of 60 will be assumed.
1841
1842    For example:
1843
1844      en.multi
1845      en_US.multi
1846      en-medical.multi
1847      en-medical-85.multi
1848      en-85.multi
1849      de.multi
1850
1851 \1f
1852 File: aspell.info,  Node: AWLI files,  Prev: Dictionary Naming,  Up: Working With Dictionaries
1853
1854 5.10 AWLI files
1855 ===============
1856
1857 In order for Aspell to find dictionaries that are located in odd places
1858 or not named according to *Note Dictionary Naming::, an AWLI file needs
1859 to be created for the dictionary and located in some place where Aspell
1860 can find it.
1861
1862    Each AWLI file has a name in the following format:
1863
1864      LANGUAGE[REGION][-VARIETY][-SIZE]-MODULE.awli
1865
1866 where the names have the same meaning as in *Note Dictionary Naming::,
1867 and MODULE is the speller module to use, which should be set to DEFAULT
1868 for now since there is only one speller module.
1869
1870    Each `awli' file for an Aspell word list should then contain exactly
1871 one line which contains the full path of the main word list.
1872
1873 \1f
1874 File: aspell.info,  Node: Writing programs to use Aspell,  Next: Adding Support For Other Languages,  Prev: Working With Dictionaries,  Up: Top
1875
1876 6 Writing programs to use Aspell
1877 ********************************
1878
1879 There are two main ways to use Aspell from within your application.
1880 Through the external C API or through a pipe.  The internal Aspell API
1881 can be used directly but that is not recommended as the actual Aspell
1882 API is constantly changing.
1883
1884 * Menu:
1885
1886 * Through the C API::
1887 * Through A Pipe::
1888 * Notes on Storing Replacement Pairs::
1889
1890 \1f
1891 File: aspell.info,  Node: Through the C API,  Next: Through A Pipe,  Up: Writing programs to use Aspell
1892
1893 6.1 Through the C API
1894 =====================
1895
1896 The Aspell library contains two main classes and several helper
1897 classes.  The two main classes are `AspellConfig' and `AspellSpeller'.
1898 The `AspellConfig' class is used to set initial defaults and to change
1899 spell checker specific options.  The `AspellSpeller' class does most of
1900 the real work.  The `C API' is responsible for managing the
1901 dictionaries, checking if a word is in the dictionary, and coming up
1902 with suggestions among other things. There are many helper classes the
1903 important ones are `AspellWordList', `AspellMutableWordList',
1904 `Aspell*Enumeration'.  The `AspellWordList' classes is used for
1905 accessing the suggestion list, as well as the personal and suggestion
1906 word list currently in use.  The `AspellMutableWordList' is used to
1907 manage the personal, and perhaps other, word lists.  The
1908 `Aspell*Enumeration' classes are used for iterating through a list.
1909
1910 6.1.1 Usage
1911 -----------
1912
1913 To use Aspell your application should include `aspell.h'.  In order to
1914 ensure that all the necessary libraries are linked in libtool should be
1915 used to perform the linking.  When using libtool simply linking with
1916 `-laspell' should be all that is necessary.  When using shared
1917 libraries you might be able to simply link `-laspell', but this is not
1918 recommended.  This version of Aspell uses the CVS version of libtool
1919 however released versions of libtool should also work.
1920
1921    When your application first starts you should get a new configuration
1922 class with the command:
1923
1924      AspellConfig * spell_config = new_aspell_config();
1925
1926 which will create a new `AspellConfig' class.  It is allocated with
1927 `new' and it is your responsibility to delete it with
1928 `delete_aspell_config'.  Once you have the config class you should set
1929 some variables.  The most important one is the language variable.  To
1930 do so use the command:
1931
1932      aspell_config_replace(spell_config, "lang", "en_US");
1933
1934 which will set the default language to use to American English.  The
1935 language is expected to be the standard two letter ISO 639 language
1936 code, with an optional two letter ISO 3166 country code after an
1937 underscore.  You can set the preferred size via the `size' option, any
1938 extra info via the `variety' option, and the encoding via the
1939 `encoding' option.  Other things you might want to set is the preferred
1940 spell checker to use, the search path for dictionaries, and the like --
1941 see *Note The Options::, for a list of all available options.
1942
1943    Whenever a new document is created a new `AspellSpeller' class
1944 should also be created.  There should be one speller class per
1945 document.  To create a new speller class use the `new_aspell_speller'
1946 and then cast it up using `to_aspell_speller' like so:
1947
1948      AspellCanHaveError * possible_err = new_aspell_speller(spell_config);
1949      AspellSpeller * spell_checker = 0;
1950      if (aspell_error_number(possible_err) != 0)
1951        puts(aspell_error_message(possible_err));
1952      else
1953        spell_checker = to_aspell_speller(possible_err);
1954
1955 which will create a new `AspellSpeller' class using the defaults found
1956 in `spell_config'.  To find out which dictionary is selected the
1957 `lang', `size', and `variety' options may be examined.  To find out the
1958 exact name of the dictionary the `master' option may be examined as
1959 well as the `master-flags' options to see if there were any special
1960 flags that were passed on to the module.  The `module' option way also
1961 be examined to figure out which speller module was selected, but since
1962 there is only one this option will always be the same.
1963
1964    If for some reason you want to use different defaults simply clone
1965 `spell_config' and change the setting like so:
1966
1967      AspellConfig * spell_config2 = aspell_config_clone(spell_config);
1968      aspell_config_replace(spell_config2, "lang","nl");
1969      possible_err = new_aspell_speller(spell_config2);
1970      delete_aspell_config(spell_config2);
1971
1972    Once the speller class is created you can use the `check' method to
1973 see if a word in the document is correct like so:
1974
1975      int correct = aspell_speller_check(spell_checker, WORD, SIZE);
1976
1977 WORD is expected to be a `const char *' character string.  If the
1978 encoding is set to be `ucs-2' or `ucs-4' WORD is expected to be a cast
1979 from either `const u16int *' or `const u32int *' respectively.
1980 `u16int' and `u32int' are generally `unsigned short' and `unsigned int'
1981 respectively.  SIZE is the length of the string or `-1' if the string
1982 is null terminated.  If the string is a cast from `const u16int *' or
1983 `const u32int *' then `size' is the amount of space in bytes the string
1984 takes up after being cast to `const char *' and not the true size of
1985 the string.  `sspell_speller_check' will return `0' if it is not found
1986 and non-zero otherwise.
1987
1988    If the word is not correct, then the `suggest' method can be used to
1989 come up with likely replacements.
1990
1991      AspellWordList * suggestions = aspell_speller_suggest(spell_checker,
1992                                                            WORD, SIZE);
1993      AspellStringEnumeration * elements = aspell_word_list_elements(suggestions);
1994      const char * word;
1995      while ( (word = aspell_string_enumeration_next(aspell_elements)) != NULL )
1996      {
1997        // add to suggestion list
1998      }
1999      delete_aspell_string_enumeration(elements);
2000
2001    Notice how `elements' is deleted but `suggestions' is not.  The
2002 value returned by `suggestions' is only valid to the next call to
2003 `suggest'.  Once a replacement is made the `store_repl' method should
2004 be used to communicate the replacement pair back to the spell checker
2005 (for the reason, *note Notes on Storing Replacement Pairs::).  Its
2006 usage is as follows:
2007
2008      aspell_speller_store_repl(spell_checker, MISSPELLED_WORD, SIZE,
2009                                CORRECTLY_SPELLED_WORD, SIZE);
2010
2011    If the user decided to add the word to the session or personal
2012 dictionary the the word can be be added using the `add_to_session' or
2013 `add_to_personal' methods respectively like so:
2014
2015      aspell_speller_add_to_session|personal(spell_checker, word, size);
2016
2017    It is better to let the spell checker manage these words rather than
2018 doing it yourself so that the words have a chance of appearing in the
2019 suggestion list.
2020
2021    Finally, when the document is closed the `AspellSpeller' class
2022 should be deleted like so:
2023
2024      delete_aspell_speller(spell_checker);
2025
2026 6.1.2 API Reference
2027 -------------------
2028
2029 Methods that return a boolean result generally return `false' on error
2030 and `true' otherwise.  To find out what went wrong use the
2031 `error_number' and `error_message' methods.  Unless otherwise stated
2032 methods that return a `const char *' will return `NULL' on error.  In
2033 general, the character string returned is only valid until the next
2034 method which returns a `const char *' is called.
2035
2036    For the details of the various classes please see the header files.
2037 In the future I will generate class references using some automated
2038 tool.
2039
2040 6.1.3 Examples
2041 --------------
2042
2043 Two simple examples are included in the examples directory.  The
2044 `example-c' program demonstrates most of the Aspell library
2045 functionality and the `list-dicts' lists the available dictionaries.
2046
2047 6.1.4 Notes About Thread Safety
2048 -------------------------------
2049
2050 Aspell should be thread safe, when used properly, as long as the
2051 underlying compiler, C and C++ library is thread safe.  Aspell objects,
2052 including the AspellSpeller class, should not be used by multiple
2053 threads unless they are protected by locks or it is only accessed by
2054 read-only methods.  A method is read-only only if a `const' object is
2055 passed in.  Many methods that seam to be read-only are not because they
2056 may store state information in the object.
2057
2058 \1f
2059 File: aspell.info,  Node: Through A Pipe,  Next: Notes on Storing Replacement Pairs,  Prev: Through the C API,  Up: Writing programs to use Aspell
2060
2061 6.2 Through A Pipe
2062 ==================
2063
2064 When given the `pipe' or `-a' command, Aspell goes into a pipe mode
2065 that is compatible with `ispell -a'.  Aspell also defines its own set
2066 of extensions to Ispell pipe mode.
2067
2068 6.2.1 Format of the Data Stream
2069 -------------------------------
2070
2071 In this mode, Aspell prints a one-line version identification message,
2072 and then begins reading lines of input.  For each input line, a single
2073 line is written to the standard output for each word checked for
2074 spelling on the line.  If the word was found in the main dictionary, or
2075 your personal dictionary, then the line contains only a `*'.
2076
2077    If the word is not in the dictionary, but there are suggestions, then
2078 the line contains an `&', a space, the misspelled word, a space, the
2079 number of near misses, the number of characters between the beginning
2080 of the line and the beginning of the misspelled word, a colon, another
2081 space, and a list of the suggestions separated by commas and spaces.
2082
2083    If you set the option `run-together' and Aspell thinks this word is
2084 a combination of two words in the dictionary, then it prints a single
2085 `-' in one line.
2086
2087    Finally, if the word does not appear in the dictionary, and there are
2088 no suggestions, then the line contains a `#', a space, the misspelled
2089 word, a space, and the character offset from the beginning of the line.
2090 Each sentence of text input is terminated with an additional blank
2091 line, indicating that Aspell has completed processing the input line.
2092
2093    These output lines can be summarized as follows:
2094
2095      *OK*: *
2096      *Suggestions*: & original count offset: miss, miss, ...
2097      *None*: # original offset
2098
2099    When in the `-a' mode, Aspell will also accept lines of single words
2100 prefixed with any of `*', `&', `@', `+', `-', `~', `#', `!', `%', or
2101 `^'.  A line starting with `*' tells Aspell to insert the word into the
2102 user's dictionary.  A line starting with `&' tells Aspell to insert an
2103 all-lowercase version of the word into the user's dictionary.  A line
2104 starting with `@' causes Aspell to accept this word in the future.  A
2105 line starting with `+', followed immediately by a valid mode will cause
2106 Aspell to parse future input according the syntax of that formatter.  A
2107 line consisting solely of a `+' will place Aspell in TeX/LaTeX mode
2108 (similar to the `-t' option) and `-' returns Aspell to its default mode
2109 (which is Nroff unless otherwise specified).  (but these commands are
2110 obsolete).  A line `~', is ignored for Ispell compatibility.  A line
2111 prefixed with `#' will cause the personal dictionaries to be saved.  A
2112 line prefixed with `!' will turn on terse mode (see below), and a line
2113 prefixed with `%' will return Aspell to normal (non-terse) mode.  Any
2114 input following the prefix characters `+', `-', `#', `!', `~', or `%'
2115 is ignored, as is any input following.  To allow spell-checking of
2116 lines beginning with these characters, a line starting with `^' has
2117 that character removed before it is passed to the spell-checking code.
2118 It is recommended that programmatic interfaces prefix every data line
2119 with an uparrow to protect themselves against future changes in Aspell.
2120
2121    To summarize these:
2122
2123 `*WORD' Add a word to the personal dictionary
2124 `&WORD' Insert the all-lowercase version of the word in the personal
2125         dictionary
2126 `@WORD' Accept the word, but leave it out of the dictionary
2127 `#'     Save the current personal dictionary
2128 `~'     Ignored for Ispell compatibility.
2129 `+'     Enter TeX mode.
2130 `+MODE' Enter the mode specified by MODE.
2131 `-'     Enter the default mode.
2132 `!'     Enter terse mode
2133 `%'     Exit terse mode
2134 `^'     Spell-check the rest of the line
2135
2136    In terse mode, Aspell will not print lines beginning with `*', which
2137 indicate correct words.  This significantly improves running speed when
2138 the driving program is going to ignore correct words anyway.
2139
2140    In addition to the above commands which are designed for Ispell
2141 compatibility Aspell also supports its own extensions.  All Aspell
2142 extensions follow the following format.
2143
2144      $$COMMAND [DATA]
2145
2146    Where DATA may or may not be required depending on the particular
2147 command.  Aspell currently supports the following commands:
2148
2149 `cs OPTION,VALUE'        Change a configuration option.
2150 `cr OPTION'              Prints the value of a configuration option.
2151 `pp'                     Returns a list of all words in the current
2152                          personal wordlist.
2153 `ps'                     Returns a list of all words in the current
2154                          session dictionary.
2155 `l'                      Returns the current language name.
2156 `ra MIS,COR'             Add the word pair to the  replacement
2157                          dictionary for later use. Returns nothing.
2158
2159    Anything returned is returned on its own line.  All lists returned
2160 have the following format
2161
2162      num of items: item1, item2, etc
2163
2164    _(Part of the preceding section was directly copied out of the
2165 Ispell manual)_
2166
2167 \1f
2168 File: aspell.info,  Node: Notes on Storing Replacement Pairs,  Prev: Through A Pipe,  Up: Writing programs to use Aspell
2169
2170 6.3 Notes on Storing Replacement Pairs
2171 ======================================
2172
2173 The `store_repl' method and the `$$ra' should be used because Aspell is
2174 able to learn from users misspellings.  For example on the first pass a
2175 user misspells _beginning_ as _beging_ so Aspell suggests:
2176
2177      begging, begin, being, Beijing, bagging, ....
2178
2179 However the user then tries _begning_ and Aspell suggests
2180
2181      beginning, beaning, begging, ...
2182
2183 so the user selects _beginning_.  However, later on in the document the
2184 user misspells it as _begng_ (*not* _beging_).  Normally Aspell will
2185 suggest.
2186
2187      began, begging, begin, begun, ...
2188
2189 However because it knows the user misspelled _beginning_ as _beging_ it
2190 will instead suggest:
2191
2192      beginning, began, begging, begin, begun ...
2193
2194    I myself often misspelled beginning (and still do) as something close
2195 to begging and too many times wind up writing sentences such as
2196 "begging with ...".
2197
2198    Please also note that replacements commands have a memory.  Which
2199 means if you first store the replacement pair:
2200
2201      sicolagest -> psycolagest
2202
2203 then store the replacement pair
2204
2205      psycolagest -> psychologist
2206
2207 The replacement pair
2208
2209      sicolagest -> psychologist
2210
2211 will also get stored so that you don't have to worry about it.
2212
2213 \1f
2214 File: aspell.info,  Node: Adding Support For Other Languages,  Next: Implementation Notes,  Prev: Writing programs to use Aspell,  Up: Top
2215
2216 7 Adding Support For Other Languages
2217 ************************************
2218
2219 Before you consider adding support for Aspell, first make sure that
2220 someone else has not already done it.  A good number of dictionaries
2221 off the Aspell home page at `http://aspell.net'.  If your language is
2222 not listed above feel free to send mail to aspell-dict at gnu org for
2223 help in getting started.
2224
2225    Adding a language to Aspell is fairly straightforward.  You basically
2226 need to create the language data file, and compile a new word list.
2227
2228 * Menu:
2229
2230 * The Language Data File::
2231 * Compiling the Word List::
2232 * Phonetic Code::
2233 * The Simple Soundslike::
2234 * Replacement Tables::
2235 * Affix Compression::
2236 * Controlling the Behavior of Run-together Words::
2237 * Creating A New Character Set::
2238 * Creating An Official Dictionary Package::
2239
2240 \1f
2241 File: aspell.info,  Node: The Language Data File,  Next: Compiling the Word List,  Up: Adding Support For Other Languages
2242
2243 7.1 The Language Data File
2244 ==========================
2245
2246 The basic format of the language data file is the same as it is for the
2247 Aspell configuration file.  It is named `LANG.dat' and is located in
2248 the architecture independent data dir for Aspell (option `data-dir')
2249 which is usually `PREFIX/share/aspell'.  Use `aspell config' to find
2250 out where it is in your installation.  By convention the language name
2251 should be the two letter ISO 639 language code if it exists, if not use
2252 the three letter code.
2253
2254    The language data file has several mandatory fields, and several
2255 optional ones.  All fields are case sensitive and should be in all
2256 lower case.
2257
2258    The two mandatory fields are `name' and `charset'.
2259
2260    `name' is the name of the language and should be the same as the
2261 file name (without the `.dat').
2262
2263    `charset' is the 8-bit character set Aspell will expect the word
2264 lists to be formatted in.  If possible choose from one of the standard
2265 ones provided with Aspell.  These are `iso-8859-*', `koi8-*', or
2266 `viscii'.  If your language does not require any non-ascii characters
2267 choose `iso-8859-1'.  If one of these standard character sets is not
2268 suitable for your language then you can create a new one.  *Note
2269 Creating A New Character Set::.
2270
2271    The optional fields are as follows:
2272
2273 `data-encoding'
2274      The encoding the language data files are expected to be in as well
2275      as the default encoding to use when saving the personal
2276      dictionaries.  It can be either `utf-8' or any of the 8-bit
2277      encoding that Aspell supports.  If not set, then it defaults to
2278      `charset'.
2279
2280 `special'
2281      Non-letter characters that can appear in your language such as the
2282      `'' and `-'. The format for the value is a list separated by
2283      spaces.  Each item of the list has the following format.
2284
2285           <char> <begin><middle><end>
2286
2287      CHAR is the non-letter character in question.  BEGIN, MIDDLE, END
2288      are either a `-' or a `*'.  A star for BEGIN means that the
2289      character can begin a word, a `-' means it can't.  The same is
2290      true for MIDDLE and END. For example, the entry for the `'' in
2291      English is:
2292
2293           ' -*-
2294
2295      To include more than one middle character just list them one after
2296      another on the same line.  For example, to make both the `'' and
2297      the `-' a middle character, use the following line in the language
2298      data file:
2299
2300           special ' -*- - -*-
2301
2302      However, please be aware that adding special characters can have
2303      unintended consequences due to limitations of Aspell.  For example
2304      if the `-' was accepted as a middle character, then _every_ word
2305      with a `-' in it would be flagged as a spelling error unless that
2306      exact word is in the dictionary, even if both parts are in the
2307      dictionary.  Also, having a `.' as an end character will cause the
2308      `.' to be part of any misspelled words.  Which can get very
2309      annoying if you misspell a word at the end of a sentence.
2310
2311 `soundslike'
2312      The name of the soundslike data for the language.  The data is
2313      expected to be in the file `NAME_phonet.dat'.
2314
2315      If NAME is `simpile' then a very simple soundslike is used.  This
2316      is not as powerful as full phonetic soundslike but it can be
2317      computed a lot faster.  (*note The Simple Soundslike::)
2318
2319      If the soundslike name is `none', or this option is not specified,
2320      then no soundslike will be used.  The effective soundslike is the
2321      word converted to all lowercase and possibly with accents stripped
2322      depending on the `store-as' option.  For languages with phonetic
2323      spelling the difference will not be very noticeable.  However, for
2324      languages with non-phonetic spelling there will be a noticeable
2325      difference.  The difference you notice will depend on the quality
2326      of the soundslike data file.  If you do not notice much of a
2327      difference for a language with non-phonetic spelling that is a good
2328      indication that the soundslike data is not rough enough--or the
2329      words you are trying are not that badly misspelled.
2330
2331 `invisible-soundslike'
2332      Avoid storing the soundslike information with the word.  Instead
2333      it is computed as needed.  This option defaults to true if the
2334      soundslike is `none' or `simpile', and false when a phonetic
2335      soundslike is used.
2336
2337 `repl-table'
2338      *Note Replacement Tables::.
2339
2340 `keyboard'
2341      The base name of the keyboard definition file to use.  For more
2342      information see *Note Notes on Typo-Analysis::.
2343
2344 `sug-split-char'
2345      A list of characters which specifies which characters to insert
2346      between two words when a word is split.  This is a list option.
2347
2348 `affix'
2349 `affix-compress'
2350 `partially-expand'
2351      *Note Affix Compression::.
2352
2353 `store-as'
2354      How the words are indexed in the dictionary.  If "stripped" then
2355      the word is indexed in a lower case and de-accented form.  If
2356      "lower", then the word is indexed in a lower case form but with
2357      accent info still intact.  This just controls how the word is
2358      indexed, not how it is stored.  The default is "stripped" unless
2359      affix compression is used.
2360
2361 `norm-required'
2362      Should be set to true if your language makes use of private use
2363      characters or when Normalization Form C is not the same as full
2364      composition.
2365
2366 `normalize'
2367
2368 `norm-form'
2369
2370    Additional options includes options to control how run-together words
2371 are handled the same way as they are in the normal configuration files.
2372 for more information, please *Note Controlling the Behavior of
2373 Run-together Words::.
2374
2375 \1f
2376 File: aspell.info,  Node: Compiling the Word List,  Next: Phonetic Code,  Prev: The Language Data File,  Up: Adding Support For Other Languages
2377
2378 7.2 Compiling the Word List
2379 ===========================
2380
2381 Once you have a working language data file installed in the right place
2382 you are ready to compile the main word list.  To find out what to do,
2383 see *Note Working With Dictionaries::.  This section also includes
2384 instructions for creating the AWLI file.
2385
2386 \1f
2387 File: aspell.info,  Node: Phonetic Code,  Next: The Simple Soundslike,  Prev: Compiling the Word List,  Up: Adding Support For Other Languages
2388
2389 7.3 Phonetic Code
2390 =================
2391
2392 Aspell is in fact the spell checker that comes up with the best
2393 suggestions if it finds an unknown word.  One reason is that it does
2394 not just compare the word with other words in the dictionary (like
2395 Ispell does) but also uses phonetic comparisons with other words.
2396
2397    The new table driven phonetic code is very flexible and setting up
2398 phonetic transformation rules for other languages is not difficult but
2399 there can be a number of stumbling blocks -- that's why I wrote this
2400 section.
2401
2402    The main phonetic code is free of any language specific code and
2403 should be powerful enough to allow setting up rules for any language.
2404 Anything which is language specific is kept in a plain text file and
2405 can easily be edited.  So it's even possible to write phonetic
2406 transformation rules if you don't have any programming skills.  All you
2407 need to know is how words of the language are written and how they are
2408 pronounced.
2409
2410 7.3.1 Syntax of the transformation array
2411 ----------------------------------------
2412
2413 In the translation array there are two strings on each line; the first
2414 one is the search string (or switch name) and the second one is the
2415 replacement string (or switch parameter).  The line
2416
2417      version   VERSION
2418
2419 is also required to appear somewhere in the translation array.  The
2420 version string can be anything but it should be changed whenever a new
2421 version of the translation array is released.  This is important
2422 because it will keep Aspell from using a compiled dictionary with the
2423 wrong set of rules.  For example, if when coming up with suggestion for
2424 `hallo', Aspell will use the new rules to come up with the soundslike
2425 say `H*L*', but if `hello' is stored in the dictionary using the old
2426 rules as `HL' instead of `H*L*' Aspell will never be able to come up
2427 with `hello'.  So to solve this problem Aspell checks if the version
2428 strings match and aborts with an error if they don't.  Thus it is
2429 important to update it whenever a new version of the translation array
2430 is released.  This is only a problem with the main word list as the
2431 personal word lists are now stored as simple word lists with a single
2432 header line (i.e. no soundslike data).
2433
2434    Each non switch line represents one replacement (transformation)
2435 rule.  Words beginning with the same letter must be grouped together;
2436 the order inside this group does not depend on alphabetical issues but
2437 it gives priorities; the higher the rule the higher the priority.
2438 That's why the first rule that matches is applied.  In the following
2439 example:
2440
2441      GH   _
2442      G    K
2443
2444 `GH -> _' has higher priority than `G -> K'
2445
2446    `_' represents the empty string "".  If `GH -> _' came after `G ->
2447 K', the second rule would never match because the algorithm would stop
2448 searching for more rules after the first match.  The above rules
2449 transform any `GH' to an empty string (delete them) and transforms any
2450 other `G' to `K'.
2451
2452    At the end of the first string of a line (the search string) there
2453 may optionally stand a number of characters in brackets.  One (only
2454 one!)  of these characters must fit.  It's comparable with the `[ ]'
2455 brackets in regular expressions.  The rule `DG(EIY) -> J' for example
2456 would match any `DGE', `DGI' and `DGY' and replace them with `J'.  This
2457 way you can reduce several rules to one.
2458
2459    Before the search string, one or more dashes `-' may be placed.
2460 Those search strings will be matched totally but only the beginning of
2461 the string will be replaced.  Furthermore, for these rules no follow-up
2462 rule will be searched (what this is will be explained later).  The rule
2463 `TCH-- '-> _ will match any word containing `TCH' (like `match') but
2464 will only replace the first character `T' with an empty string.  The
2465 number of dashes determines how many characters from the end will not
2466 be replaced.  After the replacement, the search for transformation
2467 rules continues with the not replaced `CH'!
2468
2469    If a `<' is appended to the search string, the search for
2470 replacement rules will continue with the replacement string and not with
2471 the next character of the word.  The rule `PH< -> F' for example would
2472 replace `PH' with `F' and then again start to search for a replacement
2473 rule for `F...'.  If there would also be rules like `FO '-> `O' and `F
2474 -> _' then words like `PHOXYZ' would be transformed to `OXYZ' and any
2475 occurrences of `PH' that are not followed by an `O' will be deleted like
2476 `PHIXYZ -> IXYZ'.  The second replacement however is not applied if the
2477 priority of this rule is lower than the priority of the first rule.
2478
2479    Priorities are added to a rule by putting a number between 0 and 9 at
2480 the end of the search string, for example `ING6 -> N'.  The higher the
2481 number the higher is the priority.
2482
2483    Priorities are especially important for the previously mentioned
2484 follow-up rules.  Follow-up rules are searched beginning from the last
2485 string of the first search string.  This is a bit complicated but I
2486 hope this example will make it clearer:
2487
2488      CHS      X
2489      CH       G
2490
2491      HAU--1   H
2492
2493      SCH      SH
2494
2495    In this example `CHS' in the word `FUCHS' would be transformed to
2496 `X'.  If we take the word `DURCHSCHNITT' then things look a bit
2497 different.  Here `CH' belongs together and `SCH' belongs together and
2498 both are spoken separately.  The algorithm however first finds the
2499 string `CHS' which may not be transformed like in the previous word
2500 `FUCHS'.  At this point the algorithm can find a follow-up rule.  It
2501 takes the last character of the first matching rule (`CHS') which is
2502 `S' and looks for the next match, beginning from this character.  What
2503 it finds is clear: It finds `SCH -> SH', which has the same priority
2504 (no priority means standard priority, which is 5).  If the priority is
2505 the same or higher the follow-up rule will be applied.  Let's take a
2506 look at the word `SCHAUKEL'.  In this word `SCH' belongs together and
2507 may not be taken apart.  After the algorithm has found `SCH '-> `SH' it
2508 searches for a follow-up rule for `H+'`AUKEL'.  It finds `HAU--1 -> H',
2509 but does not apply it because its priority is lower than the one of the
2510 first rule.  You see that this is a very powerful feature but it also
2511 can easily lead to mistakes.  If you really don't need this feature you
2512 can turn it off by putting the line:
2513
2514      followup      0
2515
2516 at the beginning of the phonetic table file.  As mentioned, for rules
2517 containing a `-' no follow-up rules are searched but giving such rules
2518 a priority is not totally senseless because they can be follow-up rules
2519 and in that case the priority makes sense again.  Follow-up rules of
2520 follow-up rules are not searched because this is in fact not needed
2521 very often.
2522
2523    The control character `^' says that the search string only matches
2524 at the beginning of words so that the rule `RH -> R' will only apply to
2525 words like `RHESUS' but not `PERHAPS'.  You can append another `^' to
2526 the search string.  In that case the algorithm treats the rest of the
2527 word totally separately from the first matched string at the beginning.
2528 This is useful for prefixes whose pronunciation does not depend on the
2529 rest of the word and vice versa like `OVER^^' in English for example.
2530
2531    The same way as `^' works does `$' only apply to words that end with
2532 the search string.  `GN$ -> N' only matches on words like `SIGN' but
2533 not `SIGNUM'.  If you use `^' and `$' together, both of them must fit
2534 `ENOUGH^$ -> NF' will only match the word `ENOUGH' and nothing else.
2535
2536    Of course you can combine all of the mentioned control characters but
2537 they must occur in this order: `< - priority ^ $'.  All characters must
2538 be written in CAPITAL letters.
2539
2540    If absolutely no rule can be found -- might happen if you use strange
2541 characters for which you don't have any replacement rule -- the next
2542 character will simply be skipped and the search for replacement rules
2543 will continue with the rest of the word.
2544
2545    If you want double letters to be reduced to one you must set up a
2546 rule like `LL- -> L'.  If double letters in the resulting phonetic word
2547 should be allowed, you must place the line:
2548
2549      collapse_result     0
2550
2551 at the beginning of your transformation table file; otherwise set the
2552 value to `1'.  The English rules for example strip all vowels from
2553 words and so the word "GOGO" would be transformed to "K" and not to
2554 "KK" (as desired) if `collapse_result' is set to 1.  That's why the
2555 English rules have `collapse_result' set to `0'.
2556
2557    By default, all accents are removed from a word before it is matched
2558 to the soundslike rules.  If you do not want this then add the line
2559
2560      remove_accents      0
2561
2562    at the beginning of your file.  The exact definition of an accent is
2563 language dependent and is controlled via the character set file.  If you
2564 set remove_accents to '0' then you should also set "store-as" to "lower"
2565 in the language data file (not the phonetic transformation file)
2566 otherwise Aspell will have problems when both the accented and the
2567 de-accented version of a word appearing in the dictionary; it will
2568 consider one of them as incorrectly spelled.
2569
2570 7.3.2 How do I start finally?
2571 -----------------------------
2572
2573 Before you start to write an array of transformation rules, you should
2574 be aware that you have to do some work to make sure that things you do
2575 will result in correct transformation rules.
2576
2577 7.3.2.1 Things that come in handy
2578 .................................
2579
2580 First of all, you need to have a large word list of the language you
2581 want to make phonetics for.  It should contain about as many words as
2582 the dictionary of the spell checker.  If you don't have such a list,
2583 you will probably find an Ispell dictionary at
2584 `http://fmg-www.cs.ucla.edu/geoff/ispell-dictionaries.html' which will
2585 help you.  You can then make affix expansion via `ispell -e' and then
2586 pipe it through `tr " " "\n"' to put one word on each line.  After that
2587 you eventually have to convert special characters like `é' from
2588 Ispell's internal representation to latin1 encoding.  `sed s/e'/é/g'
2589 for example would replace all `e'' with `é'.
2590
2591    The second is that you know how to use regular expressions and know
2592 how to use `grep'.  You should for example know that:
2593
2594      grep ^[^aeiou]qu[io] wordlist | less
2595
2596 will show you all words that begin with any character but `a', `e',
2597 `i', `o' or `u' and then continue with `qui' or `quo'.  This stuff is
2598 important for example to find out if a phonetic replacement rule you
2599 want to set up is valid for all words which match the expression you
2600 want to replace.  Taking a look at the regex(7) man page is a good idea.
2601
2602 7.3.2.2 What the phonetic code should do
2603 ........................................
2604
2605 Normal text comparison works well as long as the typer misspells a word
2606 because he pressed one key he didn't really want to press.  In these
2607 cases, mostly one character differs from the original word.
2608
2609    In cases where the writer didn't know about the correct spelling of
2610 the word, the word may have several characters that differ from the
2611 original word but usually the word would still sound like the original.
2612 Someone might think that `tough' is spelled `taff'.  No spell checker
2613 without phonetic code will come to the idea that this might be `tough',
2614 but a spell checker who knows that `taff' would be pronounced like
2615 `tough' will make good suggestions to the user.  Another example could
2616 be `funetik' and `phonetic'.
2617
2618    From these examples you can see that the phonetic transformation
2619 should not be too fussy and too precise.  If you implement a whole
2620 phonetic dictionary as you can find it in books this will not be very
2621 useful because then there could still be many characters differing from
2622 the misspelled and the desired word.  What you should do if you
2623 implement the phonetic transformation table is to reduce the number of
2624 used letters to the only really necessary ones.
2625
2626    Characters that sound similar should be reduced to one.  In the
2627 English language for example `Z' sounds like `S' and that's why the
2628 transformation rule `Z -> S' is present in the replacement table.  "PH
2629 is spoken like "F and so we have a `PH -> F' rule.
2630
2631    If you take a closer look you will even see that vowels sound very
2632 similar in the English language: `contradiction', `cuntradiction',
2633 `cantradiction' or `centradiction' in fact sound nearly the same, don't
2634 they? Therefore the English phonetic replacement rules not only reduce
2635 all vowels to one but even remove them all (removing is done by just
2636 setting up no rule for those letters).  The phonetic code of
2637 "contradiction" is "KNTRTKXN" and if you try to read this
2638 letter-monster loud you will hear that it still sound a bit like
2639 `contradiction'.  You also see that "D" is transformed to "T" because
2640 they nearly sound the same.
2641
2642    If you think you have found a regularity you should _always_ take
2643 your word list and `grep' for the corresponding regular expression you
2644 want to make a transformation rule for.  An example: If you come to the
2645 idea that all English words ending on `ough' sound like `AF' at the end
2646 because you think of `enough' and `tough'.  If you then `grep' for the
2647 corresponding regular expression by `grep -i ough$ wordlist' you will
2648 see that the rule you wanted to set up is not correct because the rule
2649 doesn't fit to words like `although' or `bough'.  So you have to define
2650 your rule more precisely or you have to set up exceptions if the number
2651 of words that differ from the desired rule is not too big.
2652
2653    Don't forget about follow-up rules which can help in many cases but
2654 which also can lead to confusion and unwanted side effects.  It's also
2655 important to write exceptions in front of the more general rules (`GH'
2656 before `G' etc.).
2657
2658    If you think you have set up a number of rules that may produce some
2659 good results try them out! If you run Aspell as `aspell
2660 --lang=YOUR_LANGUAGE pipe' you get a prompt at which you can type in
2661 words.  If you just type words Aspell checks them and eventually makes
2662 suggestions if they are misspelled.  If you type in `$$Sw WORD' you
2663 will see the phonetic transformation and you can test out if your work
2664 does what you want.
2665
2666    Another good way to check that changes you make to your rules don't
2667 have any bad side effects is to create another list from your word list
2668 which contains not only the word of the word list but also the
2669 corresponding phonetic version of this word on the same line.  If you
2670 do this once before the change and once after the change you can make a
2671 diff (see `man diff') to see what _really_ changed.  To do this use the
2672 command `aspell --lang=YOUR_LANGUAGE soundslike'.  In this mode Aspell
2673 will output the the original word and then its soundslike separated by
2674 a tab character for each word you give it.  If you are interested in
2675 seeing how the algorithm works you can download a set of useful
2676 programs from
2677 `http://members.xoom.com/maccy/spell/phonet-utils.tar.gz'.  This
2678 includes a program that produces a list as mentioned above and another
2679 program which illustrates how the algorithm works.  It uses the same
2680 transformation table as Aspell and so it helps a lot during the process
2681 of creating a phonetic transformation table for Aspell.
2682
2683    During your work you should write down your basic ideas so that other
2684 people are able to understand what you did (and you still know about it
2685 after a few weeks).  The English table has a huge documentation
2686 appended as an example.
2687
2688    Now you can start experimenting with all the things you just read and
2689 perhaps set up a nice phonetic transformation table for your language
2690 to help Aspell to come up with the best correction suggestions ever
2691 seen also for your language.  Take a look at the Aspell homepage to see
2692 if there is already a transformation table for your language.  If there
2693 is one you might also take a look at it to see if it could be improved.
2694
2695    If you think that this section helped you or if you think that this
2696 is just a waste of time you can send any feedback to
2697 <bjoern.jacke@gmx.de>.
2698
2699 \1f
2700 File: aspell.info,  Node: The Simple Soundslike,  Next: Replacement Tables,  Prev: Phonetic Code,  Up: Adding Support For Other Languages
2701
2702 7.4 The Simple Soundslike
2703 =========================
2704
2705 The simple soundslike goes something like this:
2706
2707      sl0[0] = lookup0(word[0])
2708      for (i = 1; i < size; i++)
2709        sl0[i] = lookup(word[i]);
2710      s = 0;
2711      for (i = 0; i < size; i++)
2712        sl.append(al0[i]) unless sl0[i] == 0 || sl0[i] == sl0[i-1];
2713
2714    Basically each character can be converted to another character or
2715 deleted.  A separate lookup table is used for the first character.  If
2716 the same soundslike letter is repeated, the duplicate is removed.
2717
2718    By default all accents are removed, and all vowels are deleted unless
2719 they appear at the start of the word in which case they are converted
2720 to a `*'.  The exact behavior can be customized via the character data
2721 file.
2722
2723    The simplified soundslike has the advantage that it is very fast to
2724 compute and thus does not need to be stored with a word.  Also, when
2725 affix compression is used and the `partially-expand' is given the
2726 results will be identical to the results when affix compression is not
2727 used.
2728
2729    Of course it is not nearly as powerful as the phonetic soundslike.
2730
2731 \1f
2732 File: aspell.info,  Node: Replacement Tables,  Next: Affix Compression,  Prev: The Simple Soundslike,  Up: Adding Support For Other Languages
2733
2734 7.5 Replacement Tables
2735 ======================
2736
2737 When phonetic code is not used a replacement table can be used instead.
2738 To enable the use of a replacement table add the line `repl-table
2739 LANG', in which case the replacement table is excepted to be in the
2740 file `LANG_repl.dat'.  A complete file name can also be specified in
2741 place of LANG.  For compatibility with MySpell the replacement table
2742 can also be part of the affix file, in which case `repl-table' will be
2743 `LANG_affix.dat"'.
2744
2745    Replacement table syntax:
2746
2747      REP [number_of_replacement_definitions]
2748      REP [what] [replacement]
2749      REP [what] [replacement]
2750
2751    For example a possible English replacement table definition to
2752 handle misspelled consonants:
2753
2754      REP 8
2755      REP f ph
2756      REP ph f
2757      REP f gh
2758      REP gh f
2759      REP j dg
2760      REP dg j
2761      REP k ch
2762      REP ch k
2763
2764 \1f
2765 File: aspell.info,  Node: Affix Compression,  Next: Controlling the Behavior of Run-together Words,  Prev: Replacement Tables,  Up: Adding Support For Other Languages
2766
2767 7.6 Affix Compression
2768 =====================
2769
2770 Aspell, as of version 0.60, now has support for affix compression.  The
2771 codebase comes from MySpell found in OpenOffice.
2772
2773    To add support for affix compression add the following lines to the
2774 language data file.
2775
2776      affix          LANG
2777      affix-compress true
2778
2779    The line `affix LANG' adds support for recognizing affix
2780 information, and the line `affix-compress true' enables affix
2781 compression.
2782
2783    The affix file is expected to be named `LANG_affix.dat'.  It is the
2784 exact same format as those used by MySpell.  More information can be
2785 found in the myspell/ directory of the distribution or at
2786 `http://lingucomponent.openoffice.org/dictionary.html'.
2787
2788    Affix compression can also be used with soundslike lookup.  Aspell
2789 does this by only storing the soundslike for the root word.  When a
2790 word is misspelled it will search for a soundslike close to all
2791 possible roots of the misspelled word.
2792
2793    When no soundslike information, or the simple soundslike, is used it
2794 may be beneficial to specify the option `partially-expand' which will
2795 partially expand a word with affix information so that the affix flags
2796 do not affect the first 3 letters of the word.  This will allow Aspell
2797 to get more accurate results when scanning the list for near misses
2798 since the full word can be used and not just the root.  Specifying this
2799 option, however, will also effectively expand any prefixes.  Thus this
2800 option should not be used for prefix heavy languages such as Hebrew.
2801
2802    An existing word list, without affix info, can be affix compressed
2803 using using `aspell munch-list'.
2804
2805 7.6.1 Format of the Affix File
2806 ------------------------------
2807
2808 An affix is either a  prefix or a suffix attached to root words to make
2809 other words.  For example supply -> supplied by dropping the "y" and
2810 adding an "ied" (the suffix).
2811
2812    Here is an example of how to define one specific suffix borrowed
2813 from the English affix file.
2814
2815      SFX D Y 4
2816      SFX D   0     d          e
2817      SFX D   y     ied        [^aeiou]y
2818      SFX D   0     ed         [^ey]
2819      SFX D   0     ed         [aeiou]y
2820
2821    This file is space delimited and case sensitive.  So this information
2822 can be interpreted as follows:
2823
2824    The first line has 4 fields:
2825
2826 1    SFX         indicates this is a suffix
2827 2    D           is the name of the character which represents this suffix
2828 3    Y           indicates it can be combined with prefixes (cross product)
2829 4    4           indicates that sequence of 4 affix entries are needed to
2830                  properly store the affix information
2831
2832    The remaining lines describe the unique information for the 4 affix
2833 entries that make up this affix.  Each line can be interpreted as
2834 follows: (note fields 1 and 2 are used as a check against line 1 info)
2835
2836 1    SFX         indicates this is a suffix
2837 2    D           is the name of the character which represents this affix
2838 3    y           the string of chars to strip off before adding affix (a 0
2839                  here indicates the NULL string)
2840 4    ied         the string of affix characters to add (a 0 here indicates
2841                  the NULL string)
2842 5    [^aeiou]y   the conditions which must be met before the affix can be
2843                  applied
2844
2845    Field 5 is interesting.  Since this is a suffix, field 5 tells us
2846 that there are 2 conditions that must be met.  The first condition is
2847 that the next to the last character in the word must _not_ be any of the
2848 following "a", "e", "i", "o" or "u".  The second condition is that the
2849 last character of the word must end in "y".
2850
2851 7.6.2 When Compared With Ispell
2852 -------------------------------
2853
2854 Now for comparison purposes, here is the same information from the
2855 Ispell `english.aff' compression file which was used as the basis for
2856 the OOo one.
2857
2858      flag *D:
2859          E           >       D               # As in create > created
2860          [^AEIOU]Y   >       -Y,IED          # As in imply > implied
2861          [^EY]       >       ED              # As in cross > crossed
2862          [AEIOU]Y    >       ED              # As in convey > conveyed
2863
2864    The Ispell information has exactly the same information but in a
2865 slightly different (case-insensitive) format:
2866
2867    Here are the ways to see the mapping from Ispell .aff format to our
2868 OOo format.
2869
2870   1. The Ispell english.aff has flag D under the "suffix" section so
2871      you know it is a suffix.
2872
2873   2. The D is the character assigned to this suffix
2874
2875   3. `*' indicates that it can be combined with prefixes
2876
2877   4. Each line following the : describes the affix entries needed to
2878      define this suffix
2879
2880         * The first field is the conditions that must be met.
2881
2882         * The second field is after the > if a "-" occurs is the string
2883           to strip off (can be blank).
2884
2885         * The third field is the string to add (the affix)
2886
2887    In addition all chars in Ispell aff files are in uppercase.
2888
2889 7.6.3 Specifying Affix Flags
2890 ----------------------------
2891
2892 Affix flags are specified in the word list by specifying them after the
2893 `/' character:
2894
2895      WORD/FLAGS
2896
2897    For example:
2898
2899      create/DG
2900
2901 will associate the `D' and `G' flag with the word create.
2902
2903 \1f
2904 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
2905
2906 7.7 Controlling the Behavior of Run-together Words
2907 ==================================================
2908
2909 Aspell currently has support for unconditionally accepting run-together
2910 words.
2911
2912    Support for unconditionally accepting run-together words can either
2913 be turned on in the language data file or as a normal option via the
2914 `run-together' option.  The `run-together-limit' options controls the
2915 maximum number of words that can be strung together, the default is
2916 normally 2.  The `run-together-min' options controls the minimum length
2917 of the individual components of the run together word, the default is
2918 normally 3.  Both the `run-together-limit' and `run-together-min'
2919 option may be specified in both the language data file or as a normal
2920 option.
2921
2922 \1f
2923 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
2924
2925 7.8 Creating A New Character Set
2926 ================================
2927
2928 If there is not a standard character set for your language then you can
2929 invent one.  The new charset will only be used by Aspell internally.
2930 If the option `data-encoding' is set to `utf-8', and your current
2931 locale character type is always set to `utf-8', then you can use UTF-8
2932 for everything and not worry yourself that an 8-bit character set is
2933 being used internally.  If your language has no more than 210 distinct
2934 symbols, including different capitalizations and accents, then Aspell
2935 can support it.
2936
2937    The first thing to do is to download the Aspell lang package (*note
2938 Creating An Official Dictionary Package::) and check if one of the
2939 provided charsets in this package will suite your needs.  Non-standard
2940 character sets are provided for many scripts and languages.  If not,
2941 then see the included `README' file for instructions on creating a new
2942 one.  Version 0.1, and 0.2 of mkchardata _will not_ work as the format
2943 of the character data file has changed.
2944
2945 \1f
2946 File: aspell.info,  Node: Creating An Official Dictionary Package,  Prev: Creating A New Character Set,  Up: Adding Support For Other Languages
2947
2948 7.9 Creating An Official Dictionary Package
2949 ===========================================
2950
2951 Once you have a basic dictionary working, you should consider creating
2952 an official package so that it can be distributed with Aspell. To do so
2953 download the aspell-lang package available at
2954 `ftp://ftp.gnu.org/gnu/aspell/aspell-lang-VERSION.tar.bz2' or in the
2955 "aspell-lang" module in the Aspell CVS repository available at
2956 `https://savannah.gnu.org/cvs/?group=aspell'.  See the included
2957 `README' file for what to do.  Or, send mail to aspell-dict at gnu org
2958 asking for help on how to get started.
2959
2960 \1f
2961 File: aspell.info,  Node: Implementation Notes,  Next: Languages Which Aspell can Support,  Prev: Adding Support For Other Languages,  Up: Top
2962
2963 Appendix A Implementation Notes
2964 *******************************
2965
2966 * Menu:
2967
2968 * Aspell Suggestion Strategy::
2969 * Notes on 8-bit Characters::
2970
2971 \1f
2972 File: aspell.info,  Node: Aspell Suggestion Strategy,  Next: Notes on 8-bit Characters,  Up: Implementation Notes
2973
2974 A.1 Aspell Suggestion Strategy
2975 ==============================
2976
2977 The magic behind my spell checker comes from merging Lawrence Philips
2978 excellent metaphone algorithm and Ispell's near miss strategy which is
2979 inserting a space or hyphen, interchanging two adjacent letters,
2980 changing one letter, deleting a letter, or adding a letter.
2981
2982    The process goes something like this.
2983
2984   1. Convert the misspelled word to its soundslike equivalent (its
2985      metaphone for English words).
2986
2987   2. Find all words that have a soundslike within one or two edit
2988      distances from the original word's soundslike.  The edit distance
2989      is the total number of deletions, insertions, exchanges, or
2990      adjacent swaps needed to make one string equivalent to the other.
2991      When set to only look for soundslikes within one edit distance it
2992      tries all possible soundslike combinations and checks if each one
2993      is in the dictionary.  When set to find all soundslike within two
2994      edit distances it scans through the entire dictionary and quickly
2995      scores each soundslike.  The scoring is quick because it will give
2996      up if the two soundslikes are more than two edit distances apart.
2997
2998   3. Find misspelled words that have a correctly spelled replacement by
2999      the same criteria of step number 2 and 3.  That is the misspelled
3000      word in the word pair (such as "teh -> the") would appear in the
3001      suggestions list as if it was a correct spelling.
3002
3003   4. Score the result list and return the words with the lowest score.
3004      The score is roughly the weighed average of the weighed edit
3005      distance of the word to the misspelled word and the soundslike
3006      equivalent of the two words.  The weighted edit distance is like
3007      the edit distance except that the various edits have weights
3008      attached to them.
3009
3010   5. Replace the misspelled words that have correctly spelled
3011      replacements with their replacements and remove any duplicates
3012      that might arise because of this.
3013
3014    Please note that the soundslike equivalent is a rough approximation
3015 of how the words sounds.  It is not the phoneme of the word by any
3016 means.  For more details about exactly how each step is performed
3017 please see the file `suggest.cc'.  For more information on the metaphone
3018 algorithm please see the data file `english_phonet.dat'.
3019
3020 \1f
3021 File: aspell.info,  Node: Notes on 8-bit Characters,  Prev: Aspell Suggestion Strategy,  Up: Implementation Notes
3022
3023 A.2 Notes on 8-bit Characters
3024 =============================
3025
3026 There is a very good reason I use 8-bit characters in Aspell. Speed and
3027 simplicity. While many parts of my code can fairly easily be converted
3028 to some sort of wide character as my code is clean. Other parts cannot
3029 be.
3030
3031    One of the reasons why is because in many, many places I use a direct
3032 lookup to find out various information about characters. With 8-bit
3033 characters this is very feasible because there is only 256 of them.
3034 With 16-bit wide characters this will waste a LOT of space. With 32-bit
3035 characters this is just plain impossible. Converting the lookup tables
3036 to another form is certainly possible but degrades performance
3037 significantly.
3038
3039    Furthermore, some of my algorithms rely on words consisting only on a
3040 small number of distinct characters (often around 30 when case and
3041 accents are not considered). When the possible character can consist of
3042 any Unicode character this number becomes several thousand, if that. In
3043 order for these algorithms to still be used, some sort of limit will
3044 need to be placed on the possible characters the word can contain. If I
3045 impose that limit, I might as well use some sort of 8-bit characters
3046 set which will automatically place the limit on what the characters can
3047 be.
3048
3049    There is also the issue of how I should store the word lists in
3050 memory? As a string of 32 bit wide characters. Now that is using up 4
3051 times more memory than characters would and for languages that can fit
3052 within an 8-bit character that is, in my view, a gross waste of memory.
3053 So maybe I should store them is some variable width format such as
3054 UTF-8. Unfortunately, way, way too many of the algorithms will simply
3055 not work with variable width characters without significant
3056 modification which will very likely degrade performance. So the
3057 solution is to work with the characters as 32-bit wide characters and
3058 then convert it to a shorter representation when storing them in the
3059 lookup tables. Now that can lead to an inefficiency. I could also use
3060 16 bit wide characters, however that may not be good enough to hold all
3061 future versions of Unicode and therefore has the same problems.
3062
3063    As a response to the space waste used by storing word lists in some
3064 sort of wide format some one asked:
3065
3066      Since hard drives are cheaper and cheaper, you could store a
3067      dictionary in a usable (uncompressed) form and use it directly
3068      with memory mapping. Then the efficiency would directly depend on
3069      the disk caching method, and only the used part of the
3070      dictionaries would really be loaded into memory. You would no more
3071      have to load plain dictionaries into main memory, you'll just want
3072      to compute some indexes (or something like that) after mapping.
3073
3074    However, the fact of the matter is that most of the dictionary will
3075 be read into memory anyway if it is available. If it is not available
3076 then there would be a good deal of disk swaps. Making characters 32-bit
3077 wide will increase the chance that there are more disk swaps.  So the
3078 bottom line is that it is more efficient to convert characters from
3079 something like UTF-8 into some sort of 8-bit character. I could also
3080 use some sort of disk space lookup table such as the Berkeley Database.
3081 However this will *definitely* degrade performance.
3082
3083    The bottom line is that keeping Aspell 8-bit internally is a very
3084 well though out decision that is not likely to change any time soon.
3085 Feel free to challenge me on it, but, don't expect me to change my mind
3086 unless you can bring up some point that I have not thought of before
3087 and quite possibly a patch to solve cleanly convert Aspell to Unicode
3088 internally without a serious performance lost OR serious memory usage
3089 increase.
3090
3091 \1f
3092 File: aspell.info,  Node: Languages Which Aspell can Support,  Next: Language Related Issues,  Prev: Implementation Notes,  Up: Top
3093
3094 Appendix B Languages Which Aspell can Support
3095 *********************************************
3096
3097 Even though Aspell will remain 8-bit internally it should still be able
3098 to support any written languages not based on a logographic script.
3099 The only logographic writing system in current use are those based on
3100 hànzi which includes Chinese, Japanese, and sometimes Korean.
3101
3102 * Menu:
3103
3104 * Supported::
3105 * Unsupported::
3106 * Multiple Scripts::
3107 * Planned Dictionaries::
3108 * References::
3109
3110 \1f
3111 File: aspell.info,  Node: Supported,  Next: Unsupported,  Up: Languages Which Aspell can Support
3112
3113 B.1 Supported
3114 =============
3115
3116 Aspell 0.60 should be able to support the following languages:
3117
3118 Code Language Name          Script                Dictionary     Gettext
3119                                                   Available      Translation
3120
3121 aa   Afar                   Latin                 -              -
3122 af   Afrikaans              Latin                 0.50           -
3123 ak   Akan                   Latin                 Maybe          -
3124 am   Amharic                Ethiopic              0.60           -
3125 ar   Arabic                 Arabic                0.60           -
3126 as   Assamese               Bengali               -              -
3127 av   Avar                   Cyrillic              -              -
3128 ay   Aymara                 Latin                 -              -
3129 az   Azerbaijani            Cyrillic, Latin       0.60           -
3130
3131 ba   Bashkir                Cyrillic              -              -
3132 be   Belarusian             Cyrillic              0.50           Incomplete
3133 bg   Bulgarian              Cyrillic              0.50           -
3134 bh   Bihari                 Devanagari            -              -
3135 bm   Bambara                Latin                 -              -
3136 bn   Bengali                Bengali               0.60           -
3137 bo   Tibetan                Tibetan               -              -
3138 br   Breton                 Latin                 0.50           -
3139 bs   Bosnian                Latin                 Maybe          -
3140
3141 ca   Catalan / Valencian    Latin                 0.50           Yes
3142 ce   Chechen                Cyrillic              -              -
3143 co   Corsican               Latin                 Maybe          -
3144 cop  Coptic                 Greek                 Maybe          -
3145 cs   Czech                  Latin                 0.50           Yes
3146 csb  Kashubian              Latin                 0.60           -
3147 cv   Chuvash                Cyrillic              -              -
3148 cy   Welsh                  Latin                 0.50           -
3149
3150 da   Danish                 Latin                 0.50           Incomplete
3151 de   German                 Latin                 0.50           Yes
3152 dyu  Dyula                  -                     Maybe          -
3153
3154 ee   Ewe                    Latin                 -              -
3155 el   Greek                  Greek                 0.50           -
3156 en   English                Latin                 0.50           Yes
3157 eo   Esperanto              Latin                 0.50           -
3158 es   Spanish                Latin                 0.50           Incomplete
3159 et   Estonian               Latin                 0.60           -
3160 eu   Basque                 Latin                 Maybe          -
3161
3162 fa   Persian                Arabic                0.60           -
3163 ff   Fulah                  Latin                 Maybe          -
3164 fi   Finnish                Latin                 0.60           -
3165 fj   Fijian                 Latin                 Maybe          -
3166 fo   Faroese                Latin                 0.50           -
3167 fr   French                 Latin                 0.50           Yes
3168 fur  Friulian               Latin                 Maybe          -
3169 fy   Frisian                Latin                 0.60           -
3170
3171 ga   Irish                  Latin                 0.50           Yes
3172 gd   Scottish Gaelic        Latin                 0.50           -
3173 gl   Gallegan               Latin                 0.50           -
3174 gn   Guarani                Latin                 Maybe          -
3175 gu   Gujarati               Gujarati              0.60           -
3176 gv   Manx Gaelic            Latin                 0.50           -
3177
3178 ha   Hausa                  Latin                 Maybe          -
3179 he   Hebrew                 Hebrew                0.60           -
3180 hi   Hindi                  Devanagari            0.60           -
3181 hil  Hiligaynon             Latin                 0.50           -
3182 ho   Hiri Motu              Latin                 -              -
3183 hr   Croatian               Latin                 0.50           -
3184 hsb  Upper Sorbian          Latin                 0.60           -
3185 ht   Haitian Creole         Latin                 Maybe          -
3186 hu   Hungarian              Latin                 0.60           -
3187 hy   Armenian               Armenian              0.60           -
3188 hz   Herero                 Latin                 -              -
3189
3190 ia   Interlingua (IALA)     Latin                 0.50           -
3191 id   Indonesian             Arabic, Latin         0.50           -
3192 ig   Igbo                   Latin                 Maybe          -
3193 ii   Sichuan Yi             Yi                    -              -
3194 io   Ido                    Latin                 -              -
3195 is   Icelandic              Latin                 0.50           -
3196 it   Italian                Latin                 0.50           Yes
3197
3198 jv   Javanese               Javanese, Latin       Maybe          -
3199
3200 ka   Georgian               Georgian              -              -
3201 kg   Kongo                  Latin                 Maybe          -
3202 ki   Kikuyu / Gikuyu        Latin                 -              -
3203 kj   Kwanyama               Latin                 -              -
3204 kk   Kazakh                 Cyrillic              -              -
3205 km   Khmer                  Khmer                 Maybe          -
3206 kn   Kannada                Kannada               Planned        -
3207 kr   Kanuri                 Latin                 -              -
3208 ks   Kashmiri               Arabic, Devanagari    -              -
3209 ku   Kurdish                Arabic, Cyrillic,     0.50           -
3210                             Latin                                
3211 kv   Komi                   Cyrillic              -              -
3212 ky   Kirghiz                Arabic, Cyrillic,     Maybe          -
3213                             Latin                                
3214
3215 la   Latin                  Latin                 0.60           -
3216 lb   Luxembourgish          Latin                 Maybe          -
3217 lg   Ganda                  Latin                 Maybe          -
3218 li   Limburgian             Latin                 Maybe          -
3219 ln   Lingala                Latin                 Maybe          -
3220 lt   Lithuanian             Latin                 0.60           -
3221 lu   Luba-Katanga           Latin                 -              -
3222 lv   Latvian                Latin                 0.60           -
3223
3224 mg   Malagasy               Latin                 0.50           -
3225 mi   Maori                  Latin                 0.50           -
3226 mk   Macedonian             Cyrillic              0.50           -
3227 ml   Malayalam              Latin, Malayalam      0.60           -
3228 mn   Mongolian              Cyrillic, Mongolian   0.60           Incomplete
3229 mo   Moldavian              Cyrillic              -              -
3230 mos  Mossi                  -                     Maybe          -
3231 mr   Marathi                Devanagari            0.60           -
3232 ms   Malay                  Arabic, Latin         0.50           -
3233 mt   Maltese                Latin                 0.50           -
3234 my   Burmese                Myanmar               -              -
3235
3236 nb   Norwegian Bokmal       Latin                 0.50           -
3237 nd   North Ndebele          Latin                 Maybe          -
3238 nds  Low Saxon              Latin                 0.60           -
3239 ne   Nepali                 Devanagari            Maybe          -
3240 ng   Ndonga                 Latin                 Maybe          -
3241 nl   Dutch                  Latin                 0.50           Yes
3242 nn   Norwegian Nynorsk      Latin                 0.50           -
3243 nr   South Ndebele          Latin                 Maybe          -
3244 nso  Northern Sotho         Latin                 Maybe          -
3245 nv   Navajo                 Latin                 Maybe          -
3246 ny   Nyanja                 Latin                 0.50           -
3247
3248 oc   Occitan / Provencal    Latin                 Maybe          -
3249 om   Oromo                  Ethiopic, Latin       -              -
3250 or   Oriya                  Oriya                 0.60           -
3251 os   Ossetic                Cyrillic              -              -
3252
3253 pa   Punjabi                Gurmukhi              0.60           -
3254 pl   Polish                 Latin                 0.50           -
3255 ps   Pushto                 Arabic                -              -
3256 pt   Portuguese             Latin                 0.50           Incomplete
3257
3258 qu   Quechua                Latin                 0.60           -
3259
3260 rn   Rundi                  Latin                 Maybe          -
3261 ro   Romanian               Latin                 0.50           Incomplete
3262 ru   Russian                Cyrillic              0.50           Yes
3263 rw   Kinyarwanda            Latin                 0.50           -
3264
3265 sc   Sardinian              Latin                 0.50           -
3266 sd   Sindhi                 Arabic                -              -
3267 sg   Sango                  Latin                 Maybe          -
3268 si   Sinhalese              Sinhala               -              -
3269 sk   Slovak                 Latin                 0.50           Yes
3270 sl   Slovenian              Latin                 0.50           Yes
3271 sm   Samoan                 Latin                 Maybe          -
3272 sn   Shona                  Latin                 Maybe          -
3273 so   Somali                 Latin                 Maybe          -
3274 sq   Albanian               Latin                 Maybe          -
3275 sr   Serbian                Cyrillic, Latin       0.60           Incomplete
3276 ss   Swati                  Latin                 Maybe          -
3277 st   Southern Sotho         Latin                 Maybe          -
3278 su   Sundanese              Latin                 Maybe          -
3279 sv   Swedish                Latin                 0.50           Incomplete
3280 sw   Swahili                Latin                 0.50           -
3281
3282 ta   Tamil                  Tamil                 0.60           -
3283 te   Telugu                 Telugu                0.60           -
3284 tet  Tetum                  Latin                 0.50           -
3285 tg   Tajik                  Arabic, Cyrillic,     Maybe          Incomplete
3286                             Latin                                
3287 ti   Tigrinya               Ethiopic              Maybe          -
3288 tk   Turkmen                Arabic, Cyrillic,     0.50           -
3289                             Latin                                
3290 tl   Tagalog                Latin, Tagalog        0.50           -
3291 tn   Tswana                 Latin                 0.50           -
3292 to   Tonga                  Latin                 Maybe          -
3293 tr   Turkish                Arabic, Latin         0.50           -
3294 ts   Tsonga                 Latin                 Maybe          -
3295 tt   Tatar                  Cyrillic              -              -
3296 tw   Twi                    Latin                 -              -
3297 ty   Tahitian               Latin                 Maybe          -
3298
3299 ug   Uighur                 Arabic, Cyrillic,     -              -
3300                             Latin                                
3301 uk   Ukrainian              Cyrillic              0.50           Yes
3302 ur   Urdu                   Arabic                Maybe          -
3303 uz   Uzbek                  Cyrillic, Latin       0.60           -
3304
3305 ve   Venda                  Latin                 Maybe          -
3306 vi   Vietnamese             Latin                 0.60           Yes
3307
3308 wa   Walloon                Latin                 0.50           Incomplete
3309 wo   Wolof                  Latin                 Maybe          -
3310
3311 xh   Xhosa                  Latin                 Maybe          -
3312
3313 yi   Yiddish                Hebrew                0.60           -
3314 yo   Yoruba                 Latin                 Maybe          -
3315
3316 za   Zhuang                 Latin                 -              -
3317 zu   Zulu                   Latin                 0.50           -
3318
3319    Dictionaries marked as "0.50" are available for Aspell 0.50.  Ones
3320 marked as "0.60" are available for Aspell 0.60 only.  Ones marked as
3321 "Planned" should eventually be available.  Ones marked as "Maybe" might
3322 be available in the future.  *Note Planned Dictionaries::, for more
3323 info.
3324
3325 B.1.1 Notes on Latin Languages
3326 ------------------------------
3327
3328 Any word that can be written using one of the Latin ISO-8859 character
3329 sets (ISO-8859-1,2,3,4,9,10,13,14,15,16) can be written, in decomposed
3330 form, using the ASCII characters, the 23 additional letters:
3331
3332      U+00C6 LATIN CAPITAL LETTER AE
3333      U+00D0 LATIN CAPITAL LETTER ETH
3334      U+00D8 LATIN CAPITAL LETTER O WITH STROKE
3335      U+00DE LATIN CAPITAL LETTER THORN
3336      U+00DE LATIN SMALL LETTER THORN
3337      U+00DF LATIN SMALL LETTER SHARP S
3338      U+00E6 LATIN SMALL LETTER AE
3339      U+00F0 LATIN SMALL LETTER ETH
3340      U+00F8 LATIN SMALL LETTER O WITH STROKE
3341      U+0110 LATIN CAPITAL LETTER D WITH STROKE
3342      U+0111 LATIN SMALL LETTER D WITH STROKE
3343      U+0126 LATIN CAPITAL LETTER H WITH STROKE
3344      U+0127 LATIN SMALL LETTER H WITH STROKE
3345      U+0131 LATIN SMALL LETTER DOTLESS I
3346      U+0138 LATIN SMALL LETTER KRA
3347      U+0141 LATIN CAPITAL LETTER L WITH STROKE
3348      U+0142 LATIN SMALL LETTER L WITH STROKE
3349      U+014A LATIN CAPITAL LETTER ENG
3350      U+014B LATIN SMALL LETTER ENG
3351      U+0152 LATIN CAPITAL LIGATURE OE
3352      U+0153 LATIN SMALL LIGATURE OE
3353      U+0166 LATIN CAPITAL LETTER T WITH STROKE
3354      U+0167 LATIN SMALL LETTER T WITH STROKE
3355
3356    and the 14 modifiers:
3357
3358      U+0300 COMBINING GRAVE ACCENT
3359      U+0301 COMBINING ACUTE ACCENT
3360      U+0302 COMBINING CIRCUMFLEX ACCENT
3361      U+0303 COMBINING TILDE
3362      U+0304 COMBINING MACRON
3363      U+0306 COMBINING BREVE
3364      U+0307 COMBINING DOT ABOVE
3365      U+0308 COMBINING DIAERESIS
3366      U+030A COMBINING RING ABOVE
3367      U+030B COMBINING DOUBLE ACUTE ACCENT
3368      U+030C COMBINING CARON
3369      U+0326 COMBINING COMMA BELOW
3370      U+0327 COMBINING CEDILLA
3371      U+0328 COMBINING OGONEK
3372
3373    Which is a total of 37 additional Unicode code points.
3374
3375    All ISO-8859 character leaves the characters 0x00 - 0x1F, and 0x80 -
3376 0x9F unmapped as they are generally used as control characters.  Of
3377 those, 0x01 - 0x0F, 0x11 - 0x1F and 0x80 - 0x9F may be mapped to
3378 anything in Aspell.  This is a total of 62 characters which can be
3379 remapped in any ISO-8859 character set.  Thus, by remapping 37 of the 62
3380 characters to the previously specified Unicode code-points, any modified
3381 ISO-8859 character set can be used for any Latin languages covered by
3382 ISO-8859.  Of course decomposing every single accented character wastes
3383 a lot of space, so only characters that cannot be represented in the
3384 precomposed form should be broken up.  By using this trick it is
3385 possible to store foreign words in the correctly accented form in the
3386 dictionary even if the precomposed character is not in the current
3387 character set.
3388
3389    Any letter in the Unicode range U+0000 - U+0249, U+1E00 - U+1EFF
3390 (Basic Latin, Latin-1 Supplement, Latin Extended-A, Latin Extended-B,
3391 and Latin Extended Additional) can be represented using around 175
3392 basic letters, and 25 modifiers which is less than 210 and can thus fit
3393 in an Aspell 8-bit character set.  Since this Unicode range covers any
3394 possible Latin language this special character set can be used to
3395 represent any word written using the Latin script if so desired.
3396
3397 B.1.2 Syllabic
3398 --------------
3399
3400 Syllabic languages use a separate symbol for each syllable of the
3401 language.  Even thought most of them have more than 210 distinct
3402 symbols Aspell can still support them by breaking them up.
3403
3404 B.1.2.1 The Ethiopic Syllabary
3405 ..............................
3406
3407 Even though the Ethiopic script has more than 210 distinct characters
3408 Aspell can still handle it.  The idea is to split each character into
3409 two parts based on the Consonant and Vowel parts.  This encoding of the
3410 syllabary is far more useful to Aspell than if they were stored in UTF-8
3411 or UTF-16.  In fact, the exiting suggestion strategy of Aspell will work
3412 well with this encoding without any additional modifications.  However,
3413 additional improvements may be possible by taking advantage of the
3414 consonant-vowel structure of this encoding.
3415
3416    In fact, the split consonant-vowel representation may prove to be so
3417 useful that it may be beneficial to encode other syllabary in this
3418 fashion, even if they are less than 210 of them.
3419
3420    The code to break up a syllabary into the consonant-vowel part is
3421 part of the Unicode normalization process.
3422
3423 B.1.2.2 The Yi Syllabary
3424 ........................
3425
3426 A very large syllabary with 819 distinct symbols.  However, like
3427 Ethiopic, it should be possible to support this script by breaking it
3428 up.
3429
3430 B.1.2.3 The Ojibwe Syllabary
3431 ............................
3432
3433 With only 120 distinct symbols, Aspell can actually support this one as
3434 is.  However, as previously mentioned, it may be beneficial to break it
3435 up into the consonant-vowel representation anyway.
3436
3437 \1f
3438 File: aspell.info,  Node: Unsupported,  Next: Multiple Scripts,  Prev: Supported,  Up: Languages Which Aspell can Support
3439
3440 B.2 Unsupported
3441 ===============
3442
3443 These languages, when written in the given script, are currently
3444 unsupported by Aspell for one reason or another.
3445
3446 Code   Language Name   Script
3447 ja     Japanese        Japanese
3448 km     Khmer           Khmer
3449 ko     Korean          Han, Hangul
3450 lo     Lao             Lao
3451 th     Thai            Thai
3452 zh     Chinese         Han
3453
3454 B.2.1 The Thai, Khmer, and Lao Scripts
3455 --------------------------------------
3456
3457 The Thai, Khmer, and Lao scripts presents a different problem for
3458 Aspell.  The problem is not that there are more than 210 unique symbols,
3459 but that there are no spaces between words.  This means that there is no
3460 easy way to split a sentence into individual words.  However, it is
3461 still possible to spell check these scripts, it is just a lot more
3462 difficult.  I will be happy to work with someone who is interested in
3463 adding Thai, Khmer, or Lao support to Aspell, but it is not likely
3464 something I will do on my own in the foreseeable future.
3465
3466 B.2.2 Languages which use Hànzi Characters
3467 ------------------------------------------
3468
3469 Hànzi Characters are used to write Chinese, Japanese, Korean, and were
3470 once used to write Vietnamese.  Each hànzi character represents a
3471 syllable of a spoken word and also has a meaning.  Since there are
3472 around 3,000 of them in common usage it is unlikely that Aspell will
3473 ever be able to support spell checking languages written using hànzi
3474 until full Unicode support is implemented.  However, I am not even sure
3475 if these languages need spell checking since hànzi characters are
3476 generally not entered in directly.  Furthermore even if Aspell could
3477 spell check hànzi the existing suggestion strategy will not work well
3478 at all, and thus a completely new strategy will need to be developed.
3479 However, if it is the case that hànzi needs to be spell checked and you
3480 know something about the issues involved please fell free to contact me.
3481
3482 B.2.3 Japanese
3483 --------------
3484
3485 Modern Japanese is written in a mixture of "hiragana", "katakana",
3486 "kanji", and sometimes "romaji".  "Hiragana" and "katakana" are both
3487 syllabaries unique to Japan, "kanji" is a modified form of hànzi, and
3488 "romaji" uses the Latin alphabet.  With some work, Aspell should be
3489 able to check the non-kanji part of Japanese text.  However, based on
3490 my limited understanding of Japanese hiragana is often used at the end
3491 of kanji.  Thus if Aspell was to simply separate out the hiragana from
3492 kanji it would end up with a lot of word endings which are not proper
3493 words and will thus be flagged as misspellings.  However, this can be
3494 fairly easily rectified as text is tokenized into words before it is
3495 converted into Aspell's internal encoding.  In fact, some Japanese text
3496 is written in entirely in one script.  For example books for children
3497 and foreigners are sometimes written entirely in hiragana.  Thus,
3498 Aspell, in its current state, could prove at least somewhat useful for
3499 spell checking Japanese.
3500
3501 B.2.4 Hangul
3502 ------------
3503
3504 Korean is generally written in hangul or a mixture of han and hangul.
3505 In Hangul letters individual letters, known as jamo, are grouped
3506 together in syllable blocks.  Unicode allows Hangul to be stored in one
3507 of three ways, (A) Individual jamo letters (Hangul Compatibility Jamo,
3508 U+3130 - U+318F), (D) decomposed jamo (Hangul Jamo, U+1100 - U+11FF),
3509 and (C) precoposed sylable blocks (Hangul Syllables, U+AC00 - U+D7AF).
3510 In order for Aspell to work with Hangul it needs to be form A.
3511 Unfortunately the existing Normalization code in Aspell will not be
3512 able to adequately deal with converting Hangul from form D and C to
3513 form A and back again.  However, once this code is written, Aspell
3514 should be able to spell check Hangul without any problem.
3515
3516 \1f
3517 File: aspell.info,  Node: Multiple Scripts,  Next: Planned Dictionaries,  Prev: Unsupported,  Up: Languages Which Aspell can Support
3518
3519 B.3 Languages Written in Multiple Scripts
3520 =========================================
3521
3522 Aspell should be able to check text written in the same language but in
3523 multiple scripts with some work.  If the number of unique symbols in
3524 both scripts is less than 210, then a special character set can be used
3525 to allow both scripts to be encoded in the same dictionary.  However
3526 this may not be the most efficient solution.  An alternate solution is
3527 to store each script in its own dictionary and allow Aspell to choose
3528 the correct dictionary based on which script the given word is written
3529 in.  Aspell currently does not support this mode of spell checking but
3530 it is something that I hope to eventually support.
3531
3532 \1f
3533 File: aspell.info,  Node: Planned Dictionaries,  Next: References,  Prev: Multiple Scripts,  Up: Languages Which Aspell can Support
3534
3535 B.4 Notes on Planned Dictionaries
3536 =================================
3537
3538 According to `http://wiki.services.openoffice.org/wiki/Dictionaries',
3539 Open Office dictionaries are available for the following languages, but
3540 no corresponding Aspell dictionary exists:
3541
3542    * Coptic (cop)
3543
3544    * Dyula (dyu)
3545
3546    * Fulah (ff)
3547
3548    * Fijian (fj)
3549
3550    * Friulian (fur)
3551
3552    * Khmer (km)
3553
3554    * Luxembourgish (lb)
3555
3556    * Mossi (mos)
3557
3558    * Nepali (ne)
3559
3560    * South Ndebele (nr)
3561
3562    * Northern Sotho (nso)
3563
3564    * Swati (ss)
3565
3566    * Southern Sotho (st)
3567
3568    * Tsonga (ts)
3569
3570    * Venda (ve)
3571
3572    * Xhosa (xh)
3573
3574 If you are interested in converting any of them please coordinate your
3575 efforts with the dictionary author and submit it to aspell-dict at gnu
3576 org when you have something ready.
3577
3578    An unofficial dictionary for Albanian (sq) is available at
3579 `http://psychology.rutgers.edu/~zaimi/software.html'.  However, I can
3580 not find any contact information for the author, thus I have been
3581 unable to contact him.  In addition an Albanian (sq) dictionary is
3582 available for Ispell at
3583 `http://www.7kosova.com/kde-shqip/ispell/ispell.html'.  However, the
3584 raw word list is not provided and the author has not been responding to
3585 emails, possibly because he doesn't speak English.  If you have any
3586 additional information on either of these dictionaries, or can speak
3587 Albanian and can translate for me please let me know at <kevina@gnu.org>
3588
3589    An unofficial dictionary for Malayalam (ml) is available at
3590 `http://in.geocities.com/paivakil/downloads/aspell/'.  I am working
3591 with the author to create an official one.
3592
3593    Kevin Patrick Scannell has word lists available for the following
3594 languages based on his web crawling software
3595 (`http://borel.slu.edu/crubadan/') but needs someone to proofread them:
3596
3597    * Afrikaans (af)
3598
3599    * Asturian / Bable (ast)
3600
3601    * Azerbaijani (az)
3602
3603    * Balinese (ban)
3604
3605    * Bemba (bem)
3606
3607    * Bislama (bi)
3608
3609    * Breton (br)
3610
3611    * Catalan / Valencian (ca)
3612
3613    * Cebuano (ceb)
3614
3615    * Chamorro (ch)
3616
3617    * Chuukese (chk)
3618
3619    * Corsican (co)
3620
3621    * Kashubian (csb)
3622
3623    * Welsh (cy)
3624
3625    * Basque (eu)
3626
3627    * Fijian (fj)
3628
3629    * Faroese (fo)
3630
3631    * Friulian (fur)
3632
3633    * Frisian (fy)
3634
3635    * Irish (ga)
3636
3637    * Scottish Gaelic (gd)
3638
3639    * Gallegan (gl)
3640
3641    * Guarani (gn)
3642
3643    * Manx Gaelic (gv)
3644
3645    * Hausa (ha)
3646
3647    * Hawaiian (haw)
3648
3649    * Hiligaynon (hil)
3650
3651    * Haitian Creole (ht)
3652
3653    * Iban (iba)
3654
3655    * Igbo (ig)
3656
3657    * Iloko (ilo)
3658
3659    * Javanese (jv)
3660
3661    * Kachin (kac)
3662
3663    * Khasi (kha)
3664
3665    * Kalaallisut / Greenlandic (kl)
3666
3667    * Konkani (kok)
3668
3669    * Kurdish (ku)
3670
3671    * Cornish (kw)
3672
3673    * Luxembourgish (lb)
3674
3675    * Ganda (lg)
3676
3677    * Limburgian (li)
3678
3679    * Lingala (ln)
3680
3681    * Lozi (loz)
3682
3683    * Luo (Kenya and Tanzania) (luo)
3684
3685    * Malagasy (mg)
3686
3687    * Marshallese (mh)
3688
3689    * Maori (mi)
3690
3691    * Minangkabau (min)
3692
3693    * Mongolian (mn)
3694
3695    * Maltese (mt)
3696
3697    * North Ndebele (nd)
3698
3699    * Low Saxon (nds)
3700
3701    * Ndonga (ng)
3702
3703    * Niuean (niu)
3704
3705    * Norwegian Nynorsk (nn)
3706
3707    * Northern Sotho (nso)
3708
3709    * Navajo (nv)
3710
3711    * Nyanja (ny)
3712
3713    * Occitan / Provencal (oc)
3714
3715    * Pampanga (pam)
3716
3717    * Papiamento (pap)
3718
3719    * Quechua (qu)
3720
3721    * Rarotongan (rar)
3722
3723    * Rundi (rn)
3724
3725    * Kinyarwanda (rw)
3726
3727    * Sardinian (sc)
3728
3729    * Northern Sami (se)
3730
3731    * Sango (sg)
3732
3733    * Samoan (sm)
3734
3735    * Shona (sn)
3736
3737    * Somali (so)
3738
3739    * Swati (ss)
3740
3741    * Southern Sotho (st)
3742
3743    * Sundanese (su)
3744
3745    * Swahili (sw)
3746
3747    * Tetum (tet)
3748
3749    * Tajik (tg)
3750
3751    * Turkmen (tk)
3752
3753    * Tokelau (tkl)
3754
3755    * Tagalog (tl)
3756
3757    * Tswana (tn)
3758
3759    * Tonga (to)
3760
3761    * Tok Pisin (tpi)
3762
3763    * Tsonga (ts)
3764
3765    * Tahitian (ty)
3766
3767    * Venda (ve)
3768
3769    * Walloon (wa)
3770
3771    * Wolof (wo)
3772
3773    * Xhosa (xh)
3774
3775    * Yoruba (yo)
3776
3777    * Zulu (zu)
3778
3779 If you are interested, please contact him at scannell at slu edu.
3780
3781    A dictionary marked as "Planned" or "Maybe" but not listed in the
3782 section means that someone has expressed an interest in creating one.
3783 If you are interested in helping please contact me at <kevina@gnu.org>
3784 so that I can put you in touch with them.
3785
3786 \1f
3787 File: aspell.info,  Node: References,  Prev: Planned Dictionaries,  Up: Languages Which Aspell can Support
3788
3789 B.5 References
3790 ==============
3791
3792 The information in this chapter was gathered from numerous sources,
3793 including:
3794
3795    * ISO 639-2 Registration Authority,
3796      `http://www.loc.gov/standards/iso639-2/'
3797
3798    * Languages and Scripts (Official Unicode Site),
3799      `http://www.unicode.org/onlinedat/languages-scripts.html'
3800
3801    * Omniglot - a guide to written language, `http://www.omniglot.com/'
3802
3803    * Wikipedia - The Free Encyclopedia, `http://wikipedia.org/'
3804
3805    * Ethnologue - Languages of the World, `http://www.ethnologue.com/'
3806
3807    * World Languages - The Ultimate Language Store,
3808      `http://www.worldlanguage.com/'
3809
3810    * South African Languages Web, `http://www.languages.web.za/'
3811
3812    * The Languages and Writing Systems of Africa (Global Advisor
3813      Newsletter), `http://www.intersolinc.com/newsletters/africa.htm'
3814
3815
3816    Special thanks goes to Era Eriksson for helping me with the
3817 information in this chapter.
3818
3819 \1f
3820 File: aspell.info,  Node: Language Related Issues,  Next: To Do,  Prev: Languages Which Aspell can Support,  Up: Top
3821
3822 Appendix C Language Related Issues
3823 **********************************
3824
3825 Here are some language related issues that a good spell checker needs to
3826 handle.  If you have any more information about any of these issues, or
3827 of a new issue not discussed here, please email me at <kevina@gnu.org>.
3828
3829 * Menu:
3830
3831 * Compound Words::
3832 * Words With Symbols in Them::
3833 * Unicode Normalization::
3834 * German Sharp S::
3835 * Context Sensitive Spelling::
3836
3837 \1f
3838 File: aspell.info,  Node: Compound Words,  Next: Words With Symbols in Them,  Up: Language Related Issues
3839
3840 C.1 Compound Words
3841 ==================
3842
3843 In some languages, such as German, it is acceptable to string two words
3844 together, thus forming a compound word.  However, there are rules to
3845 when this can be done.  Furthermore, it is not always sufficient to
3846 simply concatenate the two words.  For example, sometimes a letter is
3847 inserted between the two words.  Aspell currently has support for
3848 unconditionally stringing words together.  I tried implementing more
3849 sophisticated support for compound words in Aspell but it was too
3850 limiting and no one used it.
3851
3852    After receiving feedback from several people it seems that acceptable
3853 support for compound words involved two basically independent parts.
3854 If this is not sufficient for your language please let me know.
3855
3856 Part One
3857 ========
3858
3859 Describes how the word needs to be changed when forming a compound
3860
3861      CMP <flag> <strip> <add> <cond> <cond2>
3862
3863      <flag>  is the compound flag
3864      <strip> is the string to strip or 0 for the null string
3865      <add>   is the string to add or 0 for the null string
3866      <cond>  is the condition to match at the end of the current word
3867      <cond2> is the condition to match at the beginning of the next word
3868
3869 All but the last field are the same as a suffix entry in the existing
3870 affix code.
3871
3872    <cond> is a simplified regular expression.  Some examples:
3873      . (for anything)
3874      e
3875      [^aeiou]y
3876      [^ey]
3877      [aeiou]y
3878
3879    It does not seem necessary to change the beginning of a word when
3880 forming compounds
3881
3882 Part Two
3883 ========
3884
3885 Describes the position a word can appear in (beginning, middle, or end)
3886 and with which words.
3887
3888    To do this each word can be assigned a category.  Then each category
3889 can be given a set of rules to describe how it can be used in a
3890 compound word for example
3891
3892      A + B: indicates that category A may appear at the beginning of a
3893        word when followed by a category B word.  When combined it is then
3894        considered a category B word.
3895      A + C + B: here a C word may only appear between an A or B word
3896      A + A + B
3897      A + A
3898      A + A + A
3899      etc..
3900
3901    I have not decided if a word should be allowed to belong to more than
3902 one category as a new category can be created in necessary to mean
3903 words in both category A and B for example.
3904
3905 C.1.1 To Implement
3906 ------------------
3907
3908 To implement support for compound words based on the above description
3909 the following will need to be done:
3910
3911   1. expand the affix code to support special compound flags as
3912      described in part one
3913
3914   2. write code to store the conditions as described in part two
3915
3916   3. expand the compound checking code to check against the conditions
3917
3918   4. expand the dictionary format to store the necessary compound info
3919      with the word
3920
3921
3922    I don't know when I will be able to actually implement this.  If you
3923 would like to try please let me know.
3924
3925 \1f
3926 File: aspell.info,  Node: Words With Symbols in Them,  Next: Unicode Normalization,  Prev: Compound Words,  Up: Language Related Issues
3927
3928 C.2 Words With Spaces or Other Symbols in Them
3929 ==============================================
3930
3931 Many languages, including English, have words with non-letter symbols in
3932 them.  For example the apostrophe.  These symbols generally appear in
3933 the middle of a word, but they can also appear at the end, such as in an
3934 abbreviation.  If a symbol can _only_ appear as part of a word then
3935 Aspell can treat it as if it were a letter.
3936
3937    However, the problem is most of these symbols have other uses.  For
3938 example, the apostrophe is often used as a single quote and the
3939 abbreviations marker is also used as a period.  Thus, Aspell cannot
3940 blindly treat them as if they were letters.
3941
3942    Aspell currently handles the case where the symbol can only appear in
3943 the middle of the word fairly well.  It simply assumes that if there is
3944 a letter both before and after the symbol than it is part of the word.
3945 This works most of the time but it is not fool proof.  For example,
3946 suppose the user forgot to leave a space after the period:
3947
3948        ... and the dog went up the tree.Then the cat ...
3949
3950 Aspell would think "tree.Then" is one word.  A better solution might be
3951 to then try to check "tree" and "Then" separately.  But what if one of
3952 them is not in the dictionary?  Should Aspell assume "tree.Then" is one
3953 word?
3954
3955    The case where the symbol can appear at the beginning or end of the
3956 word is more difficult to deal with.  The symbol may or may not
3957 actually be part of the word.  Aspell currently handles this case by
3958 first trying to spell check the word with the symbol and if that fails,
3959 try it without.  The problem is, if the word is misspelled, should
3960 Aspell assume the symbol belongs with the word or not?  Currently
3961 Aspell assumes it does, which is not always the correct thing to do.
3962
3963    Numbers in words present a different challenge to Aspell.  If Aspell
3964 treats numbers as letters then every possible number a user might write
3965 in a document must be specified in the dictionary.  This could easily
3966 be solved by having special code to assume all numbers are correctly
3967 spelled.  Yet, what about something like "4th".  Since the "th" suffix
3968 can appear after any number we are left with the same problem.  The
3969 solution would be to have a special symbol for "any number".
3970
3971    Words with spaces in them, such as foreign phrases, are even more
3972 trouble to deal with.  The basic problem is that when tokenizing a
3973 string there is no good way to keep phrases together. One solution is to
3974 use trial and error.  If a word is not in the dictionary try grouping it
3975 with the previous or next word and see if the combined word is in the
3976 dictionary.  But what if the combined word is not, should the misspelled
3977 word be grouped when looking for suggestions?  One solution is to also
3978 store each part of the phrase in the dictionary, but tag it as part of a
3979 phrase and not an independent word.
3980
3981    To further complicate things, most applications that use spell
3982 checkers are accustom to parsing the document themselves and sending it
3983 to the spell checker a word at a time.  In order to support words with
3984 spaces in them a more complicated interface will be required.
3985
3986 \1f
3987 File: aspell.info,  Node: Unicode Normalization,  Next: German Sharp S,  Prev: Words With Symbols in Them,  Up: Language Related Issues
3988
3989 C.3 Unicode Normalization
3990 =========================
3991
3992 Because Unicode contains a large number of precomposed characters there
3993 are multiple ways a character can be represented.  For example letter ö
3994 can either be represented as
3995
3996      U+00F6 LATIN SMALL LETTER O WITH DIAERESIS
3997 or
3998      U+0061 LATIN SMALL LETTER O + U+0308 COMBINING DIAERESIS
3999
4000    By performing normalization first, Aspell will only see one of these
4001 representations.  The exact form of normalization depends on the
4002 language.  Give the choice of:
4003
4004   1. Precomposed character
4005
4006   2. Base letter + combining character(s)
4007
4008   3. Base letter only
4009
4010 if the precomposed character is in the target character set, then (1),
4011 if both base and combining character is present, then (2), otherwise
4012 (3).
4013
4014    Unicode Normalization is now implemented in Aspell 0.60.
4015
4016 \1f
4017 File: aspell.info,  Node: German Sharp S,  Next: Context Sensitive Spelling,  Prev: Unicode Normalization,  Up: Language Related Issues
4018
4019 C.4 German Sharp S
4020 ==================
4021
4022 The German Sharp S or Eszett does not have an uppercase equivalent.
4023 Instead when `ß' is converted to `SS'.  The conversion of `ß' to `SS'
4024 requires a special rule, and increases the length of a word, thus
4025 disallowing inplace case conversion.  Furthermore, my general rule of
4026 converting all words to lowercase before looking them up in the
4027 dictionary won't work because the conversion of `SS' to lowercase is
4028 ambiguous; it can be `ss' or `ß'.  I do plan on dealing with this
4029 eventually.
4030
4031 \1f
4032 File: aspell.info,  Node: Context Sensitive Spelling,  Prev: German Sharp S,  Up: Language Related Issues
4033
4034 C.5 Context Sensitive Spelling
4035 ==============================
4036
4037 In some language, such as Luxembourgish, the spelling of a word depends
4038 on which words surround it.  For example the the letter `n' at the end
4039 of a word will disappear if it is followed by another word starting
4040 with a certain letter such as an `s'.  However, it can probably get
4041 more complicated than that.  I would like to know how complicated before
4042 I attempt to implement support for context sensitive spelling.
4043
4044 \1f
4045 File: aspell.info,  Node: To Do,  Next: Installing,  Prev: Language Related Issues,  Up: Top
4046
4047 Appendix D To Do
4048 ****************
4049
4050 * Menu:
4051
4052 * Important Items::
4053 * Other Items::
4054 * Notes on Various Items::
4055
4056 \1f
4057 File: aspell.info,  Node: Important Items,  Next: Other Items,  Up: To Do
4058
4059 D.1 Important Items
4060 ===================
4061
4062 Words in bold indicate how you should refer to the item when discussing
4063 it with me or others.
4064
4065 D.1.1 Things that need to be done
4066 ---------------------------------
4067
4068 These items need to be done before I consider Aspell finished. If you
4069 are interested in helping me with one of these tasks please email me.
4070 Good C++ skills are needed for most of these tasks involving coding.
4071
4072    * Create a generic filter to handle multi-character letters such as
4073      `"a' or `\"a' for ä.  This filter should make use of the already
4074      exiting normalization code if possible.
4075
4076    * Make Aspell *Thread safe*. Even though Aspell itself is not
4077      multi-threaded I would like it to be thread safe so that it can be
4078      used by multi-threaded programs. There are several areas of Aspell
4079      that are potentially thread unsafe (such as accessing a global
4080      pool) and several classes which have the potential of being used
4081      by more than one thread (such as the personal dictionary). _[In
4082      Progress]_.
4083
4084    * Enhance *ispell.el* so that it will work better with GNU Aspell.
4085      _[In Progress]_.
4086
4087    * Clean up copyright notices and bring the Aspell package up to *GNU
4088      Standards*. _[In Progress]_.
4089
4090 D.1.2 Things I would like to get done
4091 -------------------------------------
4092
4093 I would like to get these done. However, I may still consider Aspell
4094 finished without. They will probably eventually get implemented.
4095 However, I could still use help with them.
4096
4097    * Better support for *compound words*. The support for _conditional_
4098      compound words found in Aspell versions 0.50 and earlier is no
4099      longer available since no one seems to be using it. Support for
4100      _unconditional_ compound words is still available. *Note Compound
4101      Words::.
4102
4103    * Be able to accept *words with spaces in them* as many languages
4104      have words, such as a word in a foreign phrase, which only makes
4105      sense when followed by other words. *Note Words With Symbols in
4106      Them::.
4107
4108    * Reorganize manual to make it easier to understand and to make it
4109      possible to break out useful man pages.
4110
4111    * Support *soundslike lookup with affix compression*.  I think it is
4112      possible, although I don't know how effective it will be.  The
4113      basic idea is to affix compress the soundslike codes and then
4114      match the codes up with affix compressed words.  If you are
4115      interested, email <aspell-devel@gnu.org>, and I will explain it in
4116      more detail.
4117
4118    * Use Lawrence Philips' new *Double Metaphone algorithm*. See
4119      `http://aspell.net/metaphone/'. The main task involved here is
4120      converting the algorithm into table form. This will take some time
4121      but there is no real programming experience required. If you want
4122      to help with Aspell but don't have any real programming experience,
4123      this would be a great place to start.
4124
4125    * Rank suggestions based on *frequency information*.  Both global
4126      frequency and document specific frequency can be used.  The latter
4127      will require that the whole document be made available to the
4128      spell checker.  Also use frequency information to flag words which
4129      are found in the dictionary but not in common usage, and thus
4130      might not be what was intended.
4131
4132    * Support a *"dual-script" mode* where Aspell can use a separate
4133      dictionary depending on which script it detects the current word
4134      in, the two dictionaries can have nothing in common, ie an English
4135      one and a Russian one for example.  This will _not_ support two
4136      languages that use the same script as that is a lot more
4137      complicated.  For example if the word is misspelled which
4138      dictionary should it use for the suggestions?
4139
4140    * Write a *GUI* for the Aspell utility. Ideally it should be able to
4141      do everything the Aspell utility can do and not just be able spell
4142      check a document.
4143
4144    * Develop a *more powerful C API* for Aspell.  Ideally this API
4145      should allow one to perform all the tasks the Aspell utility can
4146      do.  This included the ability to check whole documents, and create
4147      dictionaries, among other things.
4148
4149    * Create a *C++ interface* for Aspell, possibly on top of the C one.
4150
4151
4152 \1f
4153 File: aspell.info,  Node: Other Items,  Next: Notes on Various Items,  Prev: Important Items,  Up: To Do
4154
4155 D.2 Other Items
4156 ===============
4157
4158 These items all sound like good ideas however I am not sure when I will
4159 get to implementing them if ever.  Words in bold indicate how you
4160 should refer to the item when discussing it with me or others.
4161
4162    * Come up with a plug-in for `gEdit' the gnome text editor.
4163
4164    * Change languages (and thus dictionaries) based on the information
4165      in the actual document.
4166
4167    * Come up with a mode that will skip words based on the symbols that
4168      (almost) always surround the word.  *Note Word skipping by
4169      context::.
4170
4171    * Create two *server modes* for Aspell.  One that uses the DICT
4172      protocol and one that uses `ispell -a' method of communication via
4173      some arbitrary port.
4174
4175    * Come up with *thread safe personal dictionaries*.
4176
4177    * Use the *Hidden Markov Model* to base the suggestions on not only
4178      the word itself but on the context around the word. *Note Hidden
4179      Markov Model::.
4180
4181    * Having a way to *email the personal dictionary* and/or replacement
4182      list to a particular address either periodically or when it grows
4183      to a certain size. *Note Email the Personal Dictionary::.
4184
4185    The following good ideas were found in the Ispell `WISHES' file so I
4186 thought I would pass them on.
4187
4188    * Ispell should be smart enough to ignore hyphenation signs, such as
4189      the TeX `\-' hyphenation indicator.
4190
4191    * (Jeff Edmonds) The personal dictionary should be able to remove
4192      certain words from the master dictionary, so that obscure words
4193      like "wether" wouldn't mask favorite typos.
4194
4195    * (Jeff Edmonds) It would be wonderful if Ispell could correct
4196      inserted spaces such as "th e" for "the" or even "can not" for
4197      "cannot".
4198
4199    * Since Ispell has dictionaries available to it, it is conceivable
4200      that it could automatically determine the language of a particular
4201      file by choosing the dictionary that produced the fewest spelling
4202      errors on the first few lines.
4203
4204 \1f
4205 File: aspell.info,  Node: Notes on Various Items,  Prev: Other Items,  Up: To Do
4206
4207 D.3 Notes on Various Items
4208 ==========================
4209
4210 * Menu:
4211
4212 * Word skipping by context::
4213 * Hidden Markov Model::
4214 * Email the Personal Dictionary::
4215
4216 \1f
4217 File: aspell.info,  Node: Word skipping by context,  Next: Hidden Markov Model,  Up: Notes on Various Items
4218
4219 D.3.1 Word skipping by context
4220 ------------------------------
4221
4222 This was posted on the Aspell mailing list on January 1, 1999:
4223
4224    I had an idea on a great general way to determine if a word should be
4225 skipped.  Determine the words to skip based on the symbols that
4226 (almost) always surround the word.
4227
4228    For example when asked to check the following C++ code:
4229      cout << "My age is: " << num << endl;
4230      cout << "Next year I will be " << num + 1 << endl;
4231
4232    `cout', `num', and `endl' will all be skipped.  `cout' will be
4233 skipped because it is always preceded by a `<<'.  `num' will be skipped
4234 because it is always preceded by a `<<'.  And `endl' will be skipped
4235 because it is always between a `<<' and a `;'.
4236
4237    Given the following HTML code.
4238      <table width=50% cellspacing=0 cellpadding=1>
4239      <tr><td>One<td>Two<td>Three
4240      <tr><td>1<td>2<td>3
4241      </table>
4242
4243      <table cellspacing=0 cellpadding=1>
4244      </table>
4245
4246    `table', `width' `cellspacing', `cellpadding', `tr', `td' will all
4247 be skipped because they are always enclosed in `<>'.  Now of course
4248 `table' and `width' would be marked as correct anyway however there is
4249 no harm in skipping them.
4250
4251    So I was wondering if anyone on this list has any experience in
4252 writing this sort of context recognition code or could give me some
4253 pointers in the right direction.
4254
4255    This sort of word skipping will be very powerful if done right.  I
4256 imagine that it could replace specific spell checker modes for TeX,
4257 Nroff, SGML etc because it will automatically be able to figure out
4258 where it should skip words.  It could also probably do a very good job
4259 on programming languages code.
4260
4261    If you are interested in helping me out with this or just have
4262 general comments about the idea please let me know.
4263
4264 \1f
4265 File: aspell.info,  Node: Hidden Markov Model,  Next: Email the Personal Dictionary,  Prev: Word skipping by context,  Up: Notes on Various Items
4266
4267 D.3.2 Hidden Markov Model
4268 -------------------------
4269
4270 Knud Haugaard Sørensen suggested this one.  From his email on the
4271 Aspell mailing list:
4272
4273    consider these examples:
4274
4275      a fone number.
4276       -> a phone number.
4277
4278      a fone dress.
4279       -> a fine dress.
4280
4281    the example illustrates that the right correction might depend on the
4282 context of the word.
4283
4284    So I suggested that you take a look on HMM to solve this problem.
4285
4286    This might also provide a good base to include grammar correction in
4287 Aspell.
4288
4289    see this link `http://www.cse.ogi.edu/CSLU/HLTsurvey/ch1node7.html'.
4290
4291    I think it is a great idea.   However unfortunately it will probably
4292 be very complicated to implement.   Perhaps in the far future.
4293
4294 \1f
4295 File: aspell.info,  Node: Email the Personal Dictionary,  Prev: Hidden Markov Model,  Up: Notes on Various Items
4296
4297 D.3.3 Email the Personal Dictionary
4298 -----------------------------------
4299
4300 Someone suggested in a personal email:
4301
4302      Have you thought of adding a function to Aspell, that - when the
4303      personal dictionary has grown significantly - sends the user's
4304      personal dictionary to the maintainer of the corresponding Aspell
4305      dictionary? (if the user allows it)
4306
4307      It would be a very useful service to the dictionary maintainers,
4308      and I think most users can see their benefit in it too.
4309
4310    And I replied:
4311
4312      Yes I have considered something like that but not for the personal
4313      dictionaries but rather the replacement word list in order to get
4314      better test data for `http://aspell.sourceforge.net/test/'.
4315
4316    The problem is I don't know of a good way to do this since Aspell can
4317 also be used as a library.  It also is not a real high priority,
4318 especially since I would first need to learn how to send email within a
4319 C++ program.
4320
4321 \1f
4322 File: aspell.info,  Node: Installing,  Next: ChangeLog,  Prev: To Do,  Up: Top
4323
4324 Appendix E Installing
4325 *********************
4326
4327 Aspell requires gcc 2.95 (or better) as the C++ compiler.  Other C++
4328 compilers should work with some effort.  Other C++ compilers for mostly
4329 POSIX compliant (Unix, Linux, BeOS, Cygwin) systems should work without
4330 any major problems provided that the compile can handle all of the
4331 advanced C++ features Aspell uses.  C++ compilers for non-Unix systems
4332 might work but it will take some work.  Aspell at very least requires a
4333 Unix-like environment (`sh', `grep', `sed', `tr', ...), and Perl in
4334 order to build.  Aspell also uses a few POSIX functions when necessary.
4335
4336    The latest version can always be found at GNU Aspell's home page at
4337 `http://aspell.net'.
4338
4339 * Menu:
4340
4341 * Generic Install Instructions::
4342 * HTML Manuals and "make clean"::
4343 * Curses Notes::
4344 * Loadable Filter Notes::
4345 * Upgrading from Aspell 0.50::
4346 * Upgrading from Aspell .33/Pspell .12::
4347 * Upgrading from a Pre-0.50 snapshot::
4348 * WIN32 Notes::
4349
4350 \1f
4351 File: aspell.info,  Node: Generic Install Instructions,  Next: HTML Manuals and "make clean",  Up: Installing
4352
4353 E.1 Generic Install Instructions
4354 ================================
4355
4356      ./configure && make
4357
4358    For additional `configure' options type `./configure --help'.  You
4359 can control what C++ compiler is used by setting the environment
4360 variable `CXX' before running configure and you can control what flags
4361 are passed to the C++ compile via the environment variable `CXXFLAGS'.
4362 Static libraries are disabled by default since static libraries will
4363 not work right due to the mixing of C and C++.  When a C program links
4364 with the static libraries in Aspell it is likely to crash because
4365 Aspell's C++ objects are not getting initialized correctly.  However,
4366 if for some reason you want them, you can enable them via
4367 `--enable-static'.
4368
4369    Aspell should then compile without any additional user intervention.
4370 If you run into problems please first check the sections below as that
4371 might solve your problem.
4372
4373    To install the program simply type
4374
4375      make install
4376
4377    After Aspell is installed at least one dictionary needs to be
4378 installed.  You can find them at `http://aspell.net/'.  The `aspell'
4379 program must be in your path in order for the dictionaries to install
4380 correctly.
4381
4382    If you do not have Ispell or the traditional Unix `spell' utility
4383 installed on your system then you should also copy the compatibility
4384 scripts `ispell' and `spell' located in the `scripts/' directory into
4385 your binary directory which is usually `/usr/local/bin' so that
4386 programs that expect the `ispell' or `spell' command will work
4387 correctly.
4388
4389 \1f
4390 File: aspell.info,  Node: HTML Manuals and "make clean",  Next: Curses Notes,  Prev: Generic Install Instructions,  Up: Installing
4391
4392 E.2 HTML Manuals and `make clean'
4393 =================================
4394
4395 The Aspell distribution includes HTML versions of the User and
4396 Developer's manual.  Unfortunately, doing a `make clean' will erase
4397 them.  This is due to a limitation of automake which is not easily
4398 fixed.  If makeinfo is installed they can easily be rebuild with `make
4399 aspell.html aspell-dev.html', or you can unpack them from the tarbar.
4400
4401 \1f
4402 File: aspell.info,  Node: Curses Notes,  Next: Loadable Filter Notes,  Prev: HTML Manuals and "make clean",  Up: Installing
4403
4404 E.3 Curses Notes
4405 ================
4406
4407 If you are having problems compiling `check_funs.cpp' then the most
4408 likely reason is due to incompatibilities with the curses
4409 implementation on your system.  You should first try disabling the
4410 "wide" curses library by with the `--disable-wide-curses' configure
4411 option..  By doing so you will lose support for properly displaying
4412 UTF-8 characters but you may still be able to get the full screen
4413 interface.  If this fails than you can disable curses support
4414 altogether with the `--disable-curses' configure option.  By doing this
4415 you will lose the nice full screen interface but hopefully you will be
4416 able to at least get Aspell to compile correctly.
4417
4418    If the curses library is installed in a non-standard location than
4419 you can specify the library and include directory with
4420 `--enable-curses=LIB' and `--enable-curses-include=DIR'.
4421
4422    `LIB' can either be the complete path of the library--for example
4423      /usr/local/curses/libcurses.a
4424    or the name of the library (for example `ncurses') or a combined
4425 location and library in the form `-LLIBDIR -lLIB' (for example
4426 `-L/usr/local/ncurses/lib -lncurses').
4427
4428    DIR is the location of the curses header files (for example
4429 `/usr/local/ncurses/include').
4430
4431 E.3.1 Unicode Support
4432 ---------------------
4433
4434 In order for Aspell to correctly spell check UTF-8 documents in full
4435 screen mode the "wide" version of the curses library must be installed.
4436 This is different from the normal version of curses library, and is
4437 normally named `libcursesw' (with a `w' at the end) or `libncursesw'.
4438 UTF-8 documents will not display correctly without the right curses
4439 version installed.
4440
4441    In addition your system must also support the `mblen' function.
4442 Although this function was defined in the ISO C89 standard (ANSI
4443 X3.159-1989), not all systems have it.
4444
4445 \1f
4446 File: aspell.info,  Node: Loadable Filter Notes,  Next: Upgrading from Aspell 0.50,  Prev: Curses Notes,  Up: Installing
4447
4448 E.4 Loadable Filter Notes
4449 =========================
4450
4451 Support for being able to load additional filter modules at run-time
4452 has only been verified to work on Linux platforms.  If you get linker
4453 errors when trying to use a filter, then it is likely that loadable
4454 filter support is not working yet on your platform.  Thus, in order to
4455 get Aspell to work correctly you will need to avoid compiling the
4456 filters as individual modules by using the
4457 `--enable-compile-in-filters' when configuring Aspell with
4458 `./configure'.
4459
4460 \1f
4461 File: aspell.info,  Node: Upgrading from Aspell 0.50,  Next: Upgrading from Aspell .33/Pspell .12,  Prev: Loadable Filter Notes,  Up: Installing
4462
4463 E.5 Upgrading from Aspell 0.50
4464 ==============================
4465
4466 The dictionary format has changed so dictionaries will need to be
4467 recompiled.
4468
4469    All data, by default, is now included in `LIBDIR/aspell-0.60' so
4470 that multiple versions of Aspell can more peacefully coexist.  This
4471 included both the dictionaries and the language data files which were
4472 stored in `SHAREDIR/aspell' before Aspell 0.60.
4473
4474    The format of the character data files has changed.  The new
4475 character data files are installed with Aspell so you should not have
4476 to worry about it unless you made a custom one.
4477
4478    The dictionary option `strip-accents' has been removed.  For this
4479 reason the old English dictionary (up to 0.51) will no longer work.  A
4480 new English dictionary is now available which avoids using this option.
4481 In addition the `ignore-accents' option is currently unimplemented.
4482
4483    The flag `-l' is now a shortcut for `--lang', instead of `--list' as
4484 it was with Aspell 0.50.
4485
4486 E.5.1 Binary Compatibility
4487 --------------------------
4488
4489 The Aspell 0.60 library is binary compatible with the Aspell 0.50
4490 library.  For this reason I chose _not_ to increment the major version
4491 number (so-name) of the shared library by default which means programs
4492 that were compiled for Aspell 0.50 will also work for Aspell 0.60.
4493 However, this means that having both Aspell 0.50 and Aspell 0.60
4494 installed at the same time can be pragmatic.  If you wish to allow both
4495 Aspell 0.50 and 0.60 to be installed at the same time then you can use
4496 the configure option `--incremented-soname' which will increment
4497 so-name.  You should only use this option if you know what you are
4498 doing.  It is up to you to somehow ensure that both the Aspell 0.50 and
4499 0.60 executables can coexist.
4500
4501    If after incrementing the so-name you wish to allow programs compiled
4502 for Aspell 0.50 to use Aspell 0.60 instead (thus implying that Aspell
4503 0.50 is not installed) then you can use a special compatibility library
4504 which can be found in the `lib5' directory.  This directory will not be
4505 entered when building or installing Aspell so you must manually build
4506 and install this library.  You should build it after the rest of Aspell
4507 is built.  The order in which this library is installed, with relation
4508 to the rest of Aspell, is also important.  If it is installed _after_
4509 the rest of Aspell then new programs will link to the old library
4510 (which will work for Aspell 0.50 or 0.60) when built, if installed
4511 _before_, new programs will link with the new library (Aspell 0.60
4512 only).
4513
4514 \1f
4515 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
4516
4517 E.6 Upgrading from Aspell .33/Pspell .12
4518 ========================================
4519
4520 Aspell has undergone an extremely large number of changes since the
4521 previous Aspell/Pspell release.  For one thing Pspell has been merged
4522 with Aspell so there in no longer two separate libraries you have to
4523 worry about.
4524
4525    Because of the massive changes between Aspell/Pspell and Aspell 0.50
4526 you may want to clean out the old files before installing the the new
4527 Aspell.  To do so do a `make uninstall' in the original Aspell and
4528 Pspell source directories.
4529
4530    The way dictionaries are handled has also changed.  This includes a
4531 change in the naming conventions of both language names and
4532 dictionaries.  Due to the language name change, your old personal
4533 dictionaries will not be recognized.  However, you can import the old
4534 dictionaries by running the `aspell-import' script.  This also means
4535 that dictionaries designed to work with older versions of Aspell are
4536 not likely to function correctly.  Fortunately new dictionary packages
4537 are available for most languages.  You can find them off of the Aspell
4538 home page at `http://aspell.net'.
4539
4540    The Pspell ABI is now part of Aspell except that the name of
4541 everything has changed due to the renaming of Pspell to Aspell.  In
4542 particular please note the following name changes:
4543
4544      pspell -> aspell
4545      manager -> speller
4546      emulation -> enumeration
4547      master_word_list -> main_word_list
4548
4549    Please also note that the name of the `language-tag' option has
4550 changed to `lang'.  However, for backward compatibility the
4551 `language-tag' option will still work.
4552
4553    However, you should also be able to build applications that require
4554 Pspell with the new Aspell as a backward compatibility header file is
4555 provided.
4556
4557    Due to a change in the way dictionaries are handled, scanning for
4558 `.pwli' files in order to find out which dictionaries are available
4559 will no longer work.  This means that programs that relied on this
4560 technique may have problems finding dictionaries.  Fortunately, GNU
4561 Aspell now provided a uniform way to list all installed dictionaries
4562 via the c API.  See the file `list-dicts.c' in the `examples/'
4563 directory for an example of how to do this.  Unfortunately there isn't
4564 any simple way to find out which dictionaries are installed which will
4565 work with both the old Aspell/Pspell and the new GNU Aspell.
4566
4567 \1f
4568 File: aspell.info,  Node: Upgrading from a Pre-0.50 snapshot,  Next: WIN32 Notes,  Prev: Upgrading from Aspell .33/Pspell .12,  Up: Installing
4569
4570 E.7 Upgrading from a Pre-0.50 snapshot
4571 ======================================
4572
4573 At the last minute I decided to merge the `speller-util' program into
4574 the main `aspell' program.  You may wish to remove that `speller-util'
4575 program to avoid confusion.  This also means that dictionaries designed
4576 to work with the snapshot will no longer work with the official release.
4577
4578 \1f
4579 File: aspell.info,  Node: WIN32 Notes,  Prev: Upgrading from a Pre-0.50 snapshot,  Up: Installing
4580
4581 E.8 WIN32 Notes
4582 ===============
4583
4584 E.8.1 Getting the WIN32 version
4585 -------------------------------
4586
4587 The latest version of the native Aspell/WIN32 port, including binaries,
4588 can be found at `http://aspell.net/win32'.  This page has,
4589 unfortunately, not been updated for Aspell 0.60.  If you are interested
4590 in updated the native port please let me know.
4591
4592 E.8.2 Building the WIN32 version
4593 --------------------------------
4594
4595 There are two basically different ways of building Aspell using GCC for
4596 WIN32: You can either use the Cygwin compiler, which will produce
4597 binaries that depend on the POSIX layer in `cygwin1.dll'.  The other
4598 way is using MinGW GCC, those binaries use the native C runtime from
4599 Microsoft (MSVCRT.DLL).
4600
4601 E.8.2.1 Building Aspell using Cygwin
4602 ....................................
4603
4604 This works exactly like on other POSIX compatible systems using the
4605 `./configure && make && make install' cycle.  Some versions of Cygwin
4606 GCC will fail to link, this is caused by an incorrect `libstdc++.la' in
4607 the `/lib' directory.  After removing or renaming this file, the build
4608 progress should work (GCC-2.95 and GCC-3.x should work).
4609
4610 E.8.2.2 Building Aspell using MinGW
4611 ...................................
4612
4613 There are several different ways to build Aspell using MinGW.  The
4614 easiest way is to use a Cygwin compiler but instruct it to build a
4615 native binary rather than a Cygwin one.  To do this configure with:
4616
4617      ./configure CFLAGS='-O2 -mno-cygwin' CXXFLAGS='-O2 -mno-cygwin'
4618
4619    You may also want to add the option `--enable-win32-relocatable' to
4620 use more windows friendly directories.  *Note Win32-Directories::.  In
4621 this case configure with:
4622
4623      ./configure CFLAGS='-O2 -mno-cygwin' CXXFLAGS='-O2 -mno-cygwin' --enable-win32-relocatable
4624
4625    It should also be possible to build Aspell using the MSYS
4626 environment.  But this has not been very well tested.  If building with
4627 MSYS _do not_ add `CFLAGS ...' to configure.
4628
4629 E.8.2.3 Building Aspell without using Cygwin or MSYS
4630 ....................................................
4631
4632 It is also possible to build Aspell without Cygwin of MinGW by using
4633 the files in the `win32/' subdirectory.  However, these files have not
4634 been updated to work with Aspell 0.60.  Thus the following instructions
4635 will not work without some effort.  If you do get Aspell to compile
4636 this way please send me the updated files so that I can include them
4637 with the next release.
4638
4639    To compile Aspell with the MinGW compiler, you will need at least
4640 GCC-3.2 (as shipped with MinGW-2.0.3) and some GNU tools like `rm' and
4641 `cp'.  The origin of those tools doesn't matter, it has shown to work
4642 with any tools from MinGW/MSys, Cygwin or Linux.  To build Aspell, move
4643 into the `win32' subdirectory and type `make'.  You can enable some
4644 additional build options by either commenting out the definitions at
4645 the head of the Makefile or passing those values as environment
4646 variables or at the `make' command line.  Following options are
4647 supported:
4648
4649 `DEBUGVERSION'
4650      If set to "1", the binaries will include debugging information
4651      (resulting in a much bigger size).
4652
4653 `CURSESDIR'
4654      Enter the path to the pdcurses library here, in order to get a
4655      nicer console interface (see below).
4656
4657 `MSVCLIB'
4658      Enter the filename of MS `lib.exe' here, if you want to build
4659      libraries that can be imported from MS Visual C++.
4660
4661 `WIN32_RELOCATABLE'
4662      If set to "1", Aspell will detect the prefix from the path where
4663      the DLL resides (see below for further details).
4664
4665 `TARGET'
4666      Sets a prefix to be used for cross compilation (e.g.
4667      `/usr/local/bin/i586-mingw32msvc-' to cross compile from Linux).
4668
4669    There are also a MinGW compilers available for Cygwin and Linux, both
4670 versions are able to compile Aspell using the prebuilt `Makefile'.
4671 While the Cygwin port automatically detects the correct compiler, the
4672 Linux version depends on setting the `TARGET' variable in the
4673 `Makefile' (or environment) to the correct compiler prefix.
4674
4675    Other compilers may work.  There is a patch for MS Visual C++ 6.0
4676 available at `ftp://ftp.gnu.org/gnu/aspell', but it needs a lot of
4677 changes to the Aspell sources.  It has also been reported that the
4678 Intel C++ compiler can be used for compilation.
4679
4680 E.8.3 (PD)Curses
4681 ----------------
4682
4683 In order to get the nice full screen interface when spell checking
4684 files, a curses implementation that does not require Cygwin is
4685 required.  The PDCurses (`http://pdcurses.sourceforge.net')
4686 implementation is known to work, other implementations may work however
4687 they have not been tested.  See the previous section for information on
4688 specifying the location of the curses library and include file.
4689
4690    Curses notes:
4691
4692    * PDcurses built with MinGW needs to be compiled with
4693      `-DPDC_STATIC_BUILD' to avoid duplicate declaration of `DllMain'
4694      when compiling `aspell.exe'.
4695
4696    * The curses enabled version can cause trouble in some shells (MSys
4697      `rxvt', `emacs') and will produce errors like `initscr() LINES=1
4698      COLS=1: too small'.  Use a non-curses version for those purposes.
4699
4700 E.8.4 Directories
4701 -----------------
4702
4703 If Aspell is configured with `--enable-win32-relocatable' or compiled
4704 with `WIN32_RELOCATABLE=1' when using a Makefile, it can be run from
4705 any directory: it will set `PREFIX' according to its install location
4706 (assuming it resides in `PREFIX\\bin').  Your personal wordlists will
4707 be saved in the `PREFIX' directory with their names changed from
4708 `.aspell.LANG.*' to `LANG.*' (you can override the path by setting the
4709 `HOME' environment variable).
4710
4711 E.8.5 Installer
4712 ---------------
4713
4714 The installer registers the DLLs as shared libraries, you should
4715 increase the reference counter to avoid the libraries being uninstalled
4716 if your application still depends on them (and decrease it again when
4717 uninstalling your program).  The reference counters are located under:
4718      HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs
4719
4720    The install location and version numbers are stored under
4721
4722      HKLM\SOFTWARE\Aspell
4723
4724 E.8.6 WIN32 consoles
4725 --------------------
4726
4727 The console uses a different encoding than GUI applications, changing
4728 this to to a Windows encoding (e.g.  1252) is not supported on
4729 Win9x/Me.  On WinNT (and later) those codepages can be set by first
4730 changing the console font to `lucida console', then changing the
4731 codepage using `chcp 1252'.
4732
4733    Some alternative shells (e.g. MSys' `rxvt' or Cygwin's `bash') do a
4734 codepage conversion (if correctly set up), so running Aspell inside
4735 those shells might be a workaround for Win9x.
4736
4737 \1f
4738 File: aspell.info,  Node: ChangeLog,  Next: Authors,  Prev: Installing,  Up: Top
4739
4740 Appendix F ChangeLog
4741 ********************
4742
4743 Changes from 0.60.6 to 0.60.6.1 (July 4, 2011)
4744 ==============================================
4745
4746    * Update to Automake 1.10.3.
4747
4748    * Fix a bug which caused a race condition (leading to a likely crash)
4749      when two threads try to update the dictionary cache at the same
4750      time.
4751
4752    * Make it very clear that compiling Aspell with NDEBUG is a bad idea
4753      (see `http://aspell.net/ndebug.html') by outputting a warning when
4754      building with NDEBUG defined.
4755
4756    * Numerous other minor updates and bug fixes.
4757
4758 Changes from 0.60.5 to 0.60.6 (April 16, 2007)
4759 ==============================================
4760
4761    * Compile fixes for Gcc 4.3.
4762
4763    * Updated to Libtool 2.2.2 and Automake 1.10.1
4764
4765    * Minor tweak to suggestion code which improved suggestion results in
4766      certain cases.
4767
4768    * Always line buffer stdout and stderr in the Aspell utility when
4769      there is the potential for it to be used interactively through a
4770      pipe.
4771
4772    * Removed debug output in `aspell munch-list'.
4773
4774    * Other minor updates and bug fixes.
4775
4776 Changes from 0.60.4 to 0.60.5 (December 18, 2006)
4777 =================================================
4778
4779    * Compile fix for Gcc 4.1
4780
4781    * Updated to Gettext 0.16.1, Libtool 1.5.22, Automake 1.10, Autoconf
4782      2.61
4783
4784    * Documentation improvements, including an updated `man' page.
4785
4786    * Complain if more than one file is specified when checking files
4787      using the `aspell check' command, rather than ignoring the other
4788      files.
4789
4790    * Large number of bug fixes.
4791
4792 Changes from 0.60.3 to 0.60.4 (October 19, 2005)
4793 ================================================
4794
4795    * Fixed a bug that caused Aspell to crash when checking certain
4796      Russian words, this bug likely affected other languages as well.
4797
4798    * Updated to Gettext 0.14.5 which is required for AMD64, also
4799      updated to to Libtool 1.5.20.
4800
4801    * Fixed an alignment bug which caused mmap to always fail when
4802      reading in dictionaries.
4803
4804    * Added note about how `make clean' will remove the HTML manuals.
4805
4806    * Added manual page for prezip-bin and enhanced word-list-compress
4807      manual page thanks to the work of Jose Da Silva.
4808
4809    * Other minor updates and bug fixes.
4810
4811 Changes from 0.60.2 to 0.60.3 (June 28, 2005)
4812 =============================================
4813
4814    * Fixed bugs involving several of the C API functions.
4815
4816    * Fixed bug where `ultra' or `fast' mode would not return any
4817      suggestions when soundslike lookup was not used.
4818
4819    * Made a minor, yet significant, optimization to the suggestion code.
4820      This sped things up by an order of magnitude in some cases.
4821
4822    * Avoid using the slow ngram scan except when the `sug-mode' is
4823      `slow' or `bad-speller'.
4824
4825    * Fixed a bug in curses mode which caused word-wrap to not work
4826      correctly in some cases.
4827
4828    * Fixed a bug in pipe mode with a missing newline.
4829
4830    * Fixed the `spell' compatibility script.
4831
4832    * Several other minor bugs fixed.
4833
4834    * Made note about the change in behavior of the `-l' command line
4835      switch.
4836
4837    * Other manual update/fixes.
4838
4839    * Updated to Libtool 1.5.18, Automake 1.9.6, and Makeinfo 4.8.
4840
4841 Changes from 0.60.1 to 0.60.2 (December 18, 2004)
4842 =================================================
4843
4844    * Added the `munch-list' command to the Aspell utility.  The `munch'
4845      program in the `myspell/' directory will disappear in Aspell 0.61.
4846      The `munchlist' script will also likely disappear or be replaced
4847      when Aspell 0.61 is released since it doesn't work correctly
4848      anyway.
4849
4850    * Several important bug fixes some of which rendered some non-English
4851      languages unusable.
4852
4853    * Other minor changes.
4854
4855 Changes from 0.60.1 to 0.60.1.1 (November 20, 2004)
4856 ===================================================
4857
4858    * Fix bug involving checking of capitalized word when affix
4859      compression is used.
4860
4861    * Compile fixes.
4862
4863    * Added an option to disable using the "wide" curses version in case
4864      it causes compile problems.
4865
4866    * Minor manual updates
4867
4868    * Avoided including some unnecessary files in the distribution.
4869
4870 Changes from 0.60 to 0.60.1 (November 7, 2004)
4871 ==============================================
4872
4873    * Lots of compile fixes for various platforms.
4874
4875    * Miscellaneous bug fixes.
4876
4877    * Added Nroff filter thanks to Sergey Poznyakoff.
4878
4879    * The default filter mode when in pipe mode is now nroff for
4880      compatibility with Ispell.
4881
4882    * Added Texinfo filter.
4883
4884    * Added a section detailing the differences between Ispell and
4885      Aspell.
4886
4887    * Updated the section on thread safety.
4888
4889    * Other miscellaneous manual changes such as updating the To Do and
4890      Authors section.
4891
4892 Changes from 0.50.5 to 0.60 (August 27, 2004)
4893 =============================================
4894
4895    * Added support for Affix Compression.  Affix compression stores the
4896      root word and then a list of prefixes and suffixes that the word
4897      can take, and thus saves a lot of space.  The codebase comes from
4898      MySpell found in OpenOffice.  It uses the same affix file that
4899      OpenOffice (and Mozilla) use.  Affix compression will even work
4900      with soundslike lookup to a limited extent.
4901
4902    * Added support for accepting all input and printing all output in
4903      UTF-8 or some other encoding different from the one Aspell uses.
4904      This includes support for Unicode normalization.  Aspell can now
4905      support any language with no more than 210 distinct characters,
4906      including different capitalizations and accents, _even if_ there
4907      is not an existing 8-bit encoding that supports the language.
4908
4909    * Added support for loadable filters and customizable filter modes
4910      thanks to Christoph Hintermüller.
4911
4912    * Enhanced SGML filter to also support skipping sgml tags such as
4913      "script" blocks thanks to Tom Snyder.
4914
4915    * Added gettext support thanks to Sergey Poznyakoff
4916
4917    * Reworked the compiled dictionary format.  Compiled dictionaries
4918      now take up less space (less than 80% for the English language) and
4919      creating them is significantly faster (over 4 times for the
4920      English language).
4921
4922    * Reworked suggestion code.  It is significantly faster when dealing
4923      with short words (up to 10 times).  Also added support for MySpell
4924      Replacement Tables and n-gram lookup.  In addition, added basic
4925      support for compound words.
4926
4927    * Manual has has been converted to texinfo format thanks to the work
4928      of Chris Martin.
4929
4930    * Reworked the build system so that a single Makefile is used for
4931      most of the code.
4932
4933    * All data, by default, is now included in `LIBDIR/aspell-0.60'.
4934      Also added a built time option to increment the major version
4935      number of the shared library.  This should allow both Aspell
4936      version 0.50 and 0.60 to coexist.  The major version number is
4937      _not_ incremented by default as Aspell 0.60 is binary compatible
4938      with Aspell 0.50.  *Note Binary Compatibility::.
4939
4940    * The code to handle dictionaries has been rewritten.  Because of
4941      this support for the dictionary option `strip-accents' has been
4942      removed.  In addition the `ignore-accents' option is currently
4943      unimplemented.
4944
4945    * Lots of other minor changes due to massive overhaul of the source
4946      code.
4947
4948
4949 Changes from 0.50.4.1 to 0.50.5 (Feb 10, 2004)
4950 ==============================================
4951
4952    * Reworked url filter which fixed several bugs and now accepts
4953      "bla.bla/kdkdl" as a url.
4954
4955    * Fixed bug in which the url filter was coming before all other
4956      filters when it was supposed to come after. This solved a number
4957      of problems where the url filter was interfering with other
4958      filters.
4959
4960    * Small bug fix in SGML filter.
4961
4962    * Added code page charsets, ie cp125?.dat.
4963
4964    * Added natural (split) keyboard data file as "split.kbd"
4965
4966    * Compile fixes for the upcoming Gcc 3.4
4967
4968    * Removed Solaris link hack as it was causing more problems than it
4969      fixes.
4970
4971    * Compile fixes for Sun WorkShop 6 compiler, but there may still be
4972      some problems, especially with linking.
4973
4974    * Included patch to help compile with Microsoft Visual C++ 6.
4975
4976    * Minor manual fixes.
4977
4978    * Updated the TODO section to reflect the current progress with the
4979      next major version of Aspell (0.51).
4980
4981    * Updated to Autoconf 2.59, Automake 1.82, and Libtool 1.5.2.
4982
4983 Changes from 0.50.4 to 0.50.4.1 (Oct 11, 2003)
4984 ==============================================
4985
4986    * Fixed major bug in pipe mode which caused the last character to be
4987      chopped off words before they were stored.
4988
4989    * Minor formating fixes in the manual.
4990
4991 Changes from 0.50.3 to 0.50.4 (Sep 26, 2003)
4992 ============================================
4993
4994    * Minor changes in URL filter to avoid treating the double quote
4995      character as part of the URL, and to avoid treating words ending in
4996      more than one period as a URL.
4997
4998    * Document fixes in Aspell API
4999
5000    * Small compile fixes, including one for GCC 3.3
5001
5002    * Updated Win32 section since a port now exists thanks to Thorsten
5003      Maerz.
5004
5005    * Complain instead of doing nothing or aborting for unimplemented
5006      functions in Aspell utility.
5007
5008    * Portability bug fixes.
5009
5010    * Upgraded to Autoconf 2.57, Automake 1.7.7, Libtool 1.5 (no longer
5011      use CVS version  of libtool).
5012
5013 Changes from 0.50.2 to 0.50.3 (Nov 23, 2002)
5014 ============================================
5015
5016    * Hopefully fixed the Ispell alignment error problem when Aspell is
5017      used with ispell.el.
5018
5019    * Fixed a problem with personal dictionaries on NFS mounted home
5020      directories.
5021
5022    * Compiled libaspell-common directory into libaspell for now to avoid
5023      forcing applications to relink whenever a new Aspell version is out
5024      which was due to the use of the libtool '-release' flag.
5025
5026    * Fixed Makefiles so that Aspell can be built outside the source tree
5027      (i.e.  with VPATH).
5028
5029    * Updated the section on compiling with Win32.
5030
5031    * Updated to Autoconf 2.56.
5032
5033 Changes from 0.50.1 to 0.50.2 (Sep 28, 2002)
5034 ============================================
5035
5036    * Fixed a number of bugs in Ispell compatibility mode
5037
5038    * Fixed a number of bugs with the handling of replacement pairs
5039
5040    * Other miscellaneous bug fixes
5041
5042    * Additional Win32 portability fixes
5043
5044    * Added the Ukrainian KOI8-U charset.
5045
5046 Changes from 0.50 to 0.50.1 (Aug 28, 2002)
5047 ==========================================
5048
5049    * A rather large number of portability fixes for non GNU/Linux
5050      platforms.
5051
5052    * Fixed pkglibdir and pkgdatadir in configure.
5053
5054    * Reintroduced some configure options from Aspell .33.7 included
5055      dict-dir, data-dir, curses, curses-include, win32-relocatable.
5056
5057    * Fixed Aspell so it will now compile with -O3 when using gcc.
5058
5059    * Updated note on Win32 support.
5060
5061    * Other minor manual improvements.
5062
5063    * Portability fixes in dictionary files
5064
5065    * Official dictionary package for the Slovak language.
5066
5067 Changes from .33.7.1 to 0.50 (Aug 23, 2002)
5068 ===========================================
5069
5070    * A complete overhaul of the source code which included merging
5071      Pspell into Aspell.
5072
5073    * Changed the way dictionaries and languages are handled.
5074
5075    * Added Dvorak keymap.
5076
5077    * Added the ability to list the available dictionaries
5078
5079    * Improved the spell checking interface a bit.
5080
5081    * Added support for using the Ispell keymapping when checking files.
5082
5083    * Complete rewrite of the filter interface.   It should now be
5084      fairly easy to add new filters to Aspell.
5085
5086    * Added some preliminary developer documentation.
5087
5088    * Lots of other changes due to the massive overhaul of the source
5089      code.
5090
5091 Changes from .33.7 to .33.7.1 (Aug 20, 2001)
5092 ============================================
5093
5094    * Minor manual fixes.
5095
5096    * Compile fix for Gcc 3.0 and Solaris.
5097
5098 Changes from .33.6.3 to .33.7 (Aug 2, 2001)
5099 ===========================================
5100
5101    * Updates to Autoconf 2.50 and switched to the HEAD branch of
5102      libtools.
5103
5104    * Fixed a bug which caused Aspell to crash when typo-analysis was not
5105      used such as when sug-mode is *fast* or *bad spellers*.
5106
5107    * Added support for typo-analysis even when a soundslike was not
5108      used.
5109
5110    * Fixed a bug which causes extended charters to display incorrectly
5111      on some platforms
5112
5113    * Compile fixes so that it will compile with Gcc 3.0.
5114
5115    * Compile fixed which should allow Aspell to compile with Egcs 1.1.
5116      I have not been able to actually test it though.  Please let me
5117      know at kevina@users.sourceforge.net if you have tried with Egcs
5118      1.1.
5119
5120    * Compile and configuration script fixes so that USE_FILE_INO will
5121      properly be defined and Aspell will compile correctly when it is
5122      defined.
5123
5124    * More ANSI C++ compliance fixes.
5125
5126 Changes from .33.6.2 to .33.6.3 (June 3, 2001)
5127 ==============================================
5128
5129    * Fixed a build problem in the manual/ directory by including
5130      manual-text and manual-html in the distribution.
5131
5132 Changes from .33.6.1 to .33.6.2 (June 3, 2001)
5133 ==============================================
5134
5135    * Compile fix so that Aspell will work correctly when not installed
5136      in /usr/local.
5137
5138    * Avoided regenerating the manual unless configured with
5139      enable-maintainer-mode.
5140
5141    * Added the missing documentation files in the scowl directory.
5142
5143 Changes from .33.6 to .33.6.1 (May 29, 2001)
5144 ============================================
5145
5146    * Fixed a formating problem with the manual involving <.
5147
5148    * Added a note about creating pwli files.
5149
5150    * Removed the space after between the -L and the directory name in
5151      the pspell-module/Makefile  which caused problems on some
5152      platforms.
5153
5154    * Added the configure option AM_MAINTAINER_MODE to avoid enabling
5155      rules which often causes generated build files to be rebuilt with
5156      the wrong version of Libtool by default.  I don't know why I
5157      didn't think to do this a long time ago.
5158
5159 Changes from .33.5 to .33.6 (May 18, 2001)
5160 ==========================================
5161
5162    * Fixed a minor bug where some words would have random compound tags
5163      attached to them.
5164
5165    * Fixed a compile problem on many platforms where fileno is defined
5166      as a macro.
5167
5168    * Updated the description for a few of Aspell's options.
5169
5170    * Removed the note of Aspell not being able to run when compiled with
5171      the upcoming Gcc 3.0 compiler as things seam to work now.
5172
5173    * Added a note about Aspell not being able to compile with Egcs 1.1.
5174
5175    * Added hack to deal with Libtool's interdependencies problem.  See
5176      bug #416981 for Pspell for more info.
5177
5178 Changes from .33 to .33.5 (April 5, 2001)
5179 =========================================
5180
5181    * *dump master* correctly detects which dictionary and language to
5182      use based on the `LANG' environment variable.
5183
5184    * Fixed a problem on Win32 which involves path names that began with
5185      <Drive Letter>:.
5186
5187    * Bug fixes and enhancements so that Aspell can once again run under
5188      MinGW.  You can even use the new full screen interface if Aspell is
5189      compiled with PDCurses.
5190
5191    * Some major modifications to make Aspell more C++ compliant in
5192      order to get Aspell to compile under the upcoming Gcc 3.0
5193      compiler.  This included only using STL features found in the
5194      standard version of C++.  (Which means Aspell will no longer
5195      require using the SGI version of the STL) This should also make
5196      compiling C++ under non-gcc compilers a lot simpler.  Please note
5197      that Aspell still has some problems with the upcoming Gcc 3.0
5198      compiler.
5199
5200    * Minor changes to remove some -Wall warnings.
5201
5202    * Added a hack so that Aspell would properly compile as a shared
5203      library under Solaris.
5204
5205    * Added a few important missing words to the English word list.
5206
5207 Changes from .32.6 to .33 (January 28, 2001)
5208 ============================================
5209
5210    * Added a new new curses based interface to replace the dumb terminal
5211      interface everyone has been bitching about.
5212
5213    * Added the ability to give higher priority to words such as "the"
5214      instead of "teh" which are likely to be due to typos.
5215
5216    * Reorganized the manual so that it is hopefully easier to follow.
5217
5218    * Ability to automatically select the best dictionary to use based on
5219      the setting of the `LANG' environment variable.
5220
5221    * Expanded the medium dictionary size to include more words which
5222      included the original words found in Ispell and eliminated the
5223      large size for now.
5224
5225    * Added three special variant add-on dictionaries.
5226
5227    * Switched to the multi-language branch of the CVS version of
5228      libtool.
5229
5230
5231 Changes from .32.5 to .32.6 (Nov 8, 2000)
5232 =========================================
5233
5234    * Fixed a bug where Aspell would crash when reading-in accented
5235      characters on some platforms.  This fixed bug # 112435.
5236
5237    * Fixed some other bugs so that it will run under Win32 under CygWin.
5238      Unfortunately it still won't run properly under Mingw.
5239
5240    * Fixed the mmap test in configure so that it won't fail on some
5241      platforms that use munmap(char *, int) instead of munmap(void *,
5242      int).
5243
5244    * Upgraded to the latest CVS version of libtool which fixed the
5245      problem with using GNU Make under Solaris.
5246
5247    * Added an option to copy files instead of using symbolic links for
5248      the special *multi* dictionary files.
5249
5250 Changes from .32.1 to .32.5 (August 18, 2000)
5251 =============================================
5252
5253    * Changed my email from kevinatk at home com to kevina at users
5254      sourceforge net please make a note of the new email address.
5255
5256    * Added an option to control if the personal replacement dictionary
5257      is saved when the save_all_wls method is called.
5258
5259    * Brought back the ability to dump the master word list even in the
5260      case of the special *multi* lists.
5261
5262    * Added a large number of hacker related words and some other slang
5263      terms to the medium size word list.
5264
5265    * Added an *ispell* and *spell* compatibility script for systems
5266      which don't have Ispell installed.  They are located in the
5267      scripts/ directory and are not installed by default.
5268
5269    * Manual fixes.
5270
5271    * Added a note on not using GNU Make on Solaris.
5272
5273 Changes from .32 to .32.1 (August 5, 2000)
5274 ==========================================
5275
5276    * Minor compile fixes for recent gcc snapshot.
5277
5278    * Fixed naming of pwli files.
5279
5280    * Fixed a bug when Aspell will crash when used with certain single
5281      letter flags.  This bug was most noticeable when used with Emacs.
5282
5283    * Word list changes, see SCOWL Readme.
5284
5285    * Other miscellaneous changes.
5286
5287 Changes from .31.1 to .32 (July 23, 2000)
5288 =========================================
5289
5290    * Added support for optionally doing without the soundslike data.
5291
5292    * Greatly reduced the amount of memory used when creating word lists.
5293
5294    * Added support for ignoring accents when coming up with suggestions.
5295
5296    * Added support for local-data-dir which is searched before data-dir.
5297
5298    * Added support for specifying which words may be used in compounds
5299      and where  they may be used.
5300
5301    * Added support for having more than one main word list as well as a
5302      special *multi* word list files which will allow multiple word
5303      lists to be treated as one.
5304
5305    * Aspell now uses a completely new word list.
5306
5307    * The apostrophe (') is no longer considered part of the word when
5308      it as at the end of the word such as in `dogs''.
5309
5310 Changes from .31 to .31.1 (June 18, 2000)
5311 =========================================
5312
5313    * Fixed a bug where Aspell would not create a complete dictionary
5314      file on some platforms when the data is 8-bit.
5315
5316    * Added a workaround so Aspell will work with ispell.el 3.3.
5317
5318    * Minor compile fixes so it would compile better with the very latest
5319      gcc (CVS Version).
5320
5321    * Removed note about compiling in Win32 as I was now able to get it
5322      to work.
5323
5324 Changes from .30.1 to .31 (June 11, 2000)
5325 =========================================
5326
5327    * Added support for spell checking run together words.
5328
5329    * Added an option to produce a list of misspelled words from
5330      standard input.
5331
5332    * More robust error reporting when reading in language data files.
5333
5334    * Fixed a bug that would cause Aspell to crash if the *special* line
5335      was not defined in the language data file.
5336
5337    * Updated Pspell Module.
5338
5339    * Minor bug fixes.
5340
5341    * Added cross references in "The Aspell Utility Chapter" for easier
5342      use.
5343
5344 Changes from .30 to .30.1 (April 29, 2000)
5345 ==========================================
5346
5347    * Ported Aspell to Win32 platforms.
5348
5349    * Portability fixes which may help Aspell compile on other platforms.
5350
5351    * Aspell will no longer fail if for some reason the mmap fails,
5352      instead it will just read the file in as normal and free the
5353      memory when done.
5354
5355    * Minor changes in the format of the main word list as a result of
5356      the changes, the old format should still work in most cases.
5357
5358    * Fixed a bug where Aspell was ignoring the extension of file names
5359      such as .html or .tex when checking files.
5360
5361    * Fixed a bug where Aspell will go into an infinite loop when
5362      creating the main word list from a word list which has duplicates
5363      in it.
5364
5365    * Minor changes to the manual for better clarity.
5366
5367 Changes from .29.1 to .30 (April 2, 2000)
5368 =========================================
5369
5370    * Fixed many of the capitalization bugs found in previous versions of
5371      Aspell.
5372
5373    * Changed the format of the main word list yet again.
5374
5375    * Fixed a bug so that `aspell check' will work on the PowerPC.
5376
5377    * Added ability to change configuration options in the middle of a
5378      session.
5379
5380    * Added words from /usr/dict/words found on most Linux systems as
5381      well as a bunch of commonly used abbreviations to the word list.
5382
5383    * Fixed a bug where Aspell would dump core after reporting certain
5384      errors when compiled with gcc 2.95 or higher.  This involved
5385      reworking the Exception heritage to get around a bug in gcc 2.95.
5386
5387    * Added a few more commands to the list of default commands the TeX
5388      filter knows about.
5389
5390    * Aspell will now check if a word only contains valid characters
5391      before adding it to any dictionaries.  This might mean that you
5392      have to manually delete a few words from your personal word list.
5393
5394    * Added option to ignore case when checking a document.
5395
5396    * Adjusted the parameters of the *normal* suggest mode to so that
5397      significantly less far fetched results are returned in cases such
5398      as tomatoe, which went from 100 suggestions down to 32, at the
5399      expense of getting slightly lower results (less than 1%),
5400
5401    * Improved the edit distance algorithm for slightly faster results.
5402
5403    * Removed the `$$m' command in pipe mode, you should now use `$$cs
5404      mode,MODE' to set the mode and *$$cr mode* to find out the current
5405      mode.
5406
5407    * Reworked parts of Aspell to use Pspell services to avoid
5408      duplicating code.
5409
5410    * Added a module for the newly released Pspell.  It will get
5411      installed with the rest of Aspell.
5412
5413    * Miscellaneous other bug fixes.
5414
5415 Changes from .29 to .29.1 (Feb 18, 2000)
5416 ========================================
5417
5418    * Improved the TeX filter so that it will accept '@' at the beginning
5419      of a command name and ignored trailing '*'s.  It also now has
5420      better defaults for which parameters to skip.
5421
5422    * Reworked the main dictionary so that it can be memory mapped in.
5423      This decreases startup time and allows multiple Aspell processes
5424      to use the same memory for the main word list.  This also also
5425      made Aspell 64 bit clean so that it should work on an alpha now.
5426
5427    * Fix so that Aspell could compile on platforms that gnu is not yet
5428      available for.
5429
5430    * Fixed issue with flock so it would compile on FreeBSD.
5431
5432    * Minor changes in the code to make it more C++ compliant although I
5433      am sure there will still be problems when using some other
5434      compiler other than gcc or egcs.
5435
5436    * Added some comments to the header files to better document a few of
5437      the classes.
5438
5439 Changes from .28.3 to .29 (Feb 6, 2000)
5440 =======================================
5441
5442    * Fixed a bug in the pipe mode with lines that start with `^$$'.
5443
5444    * Added support for ignoring all words less than or equal to a
5445      specified length
5446
5447    * New soundslike code based thanks to the contribution of Björn
5448      Jacke.  It now gets all of its data from a table making it easier
5449      for other people to add soundslike code for their native language.
5450      He also converted the metaphone algorithm to table form,
5451      eliminating the need for the old metaphone code.
5452
5453    * Major redesign of the suggestion code for better results.
5454
5455    * Changed the format of the personal word lists.  In most cases it
5456      should be converted automatically.
5457
5458    * Changed the format of the main word list.
5459
5460    * Name space cleanup for more consistent naming.  I now use name
5461      spaces which means that gcc 2.8.* and egcs 1.0.* will no longer
5462      cut it.
5463
5464    * Used file locks when reading and saving the personal dictionaries
5465      so that it truly multiprocesses safely.
5466
5467    * Added rudimentary filter support.
5468
5469    * Reworked the configuration system once again.  However, the
5470      changes to the end user who does not directly use my library
5471      should be minimal.
5472
5473    * Rewrote my code that handles parsing command line parameters so
5474      that it no longer used popt as it was causing too many problems
5475      and didn't integrate well with my new configuration system.
5476
5477    * Fixed pipe mode so that it will properly ignore lines starting with
5478      '~' for better Ispell compatibility.
5479
5480    * Aspell now has a new home page at
5481      `http://aspell.sourceforge.net/'.  Please make note of the new URL.
5482
5483    * Miscellaneous manual fixes and clarifications.
5484
5485 Changes from .28.2.1 to .28.3 (Nov 20, 1999)
5486 ============================================
5487
5488    * Fixed a bug that caused Aspell to crash when spell checking words
5489      over 60 characters long.
5490
5491    * Reworked *aspell check* so that
5492        1. You no longer have to hit enter when making a choice.
5493
5494        2. It will now overwrite the original file instead of creating a
5495           new file.  An optional backup can be made by using the -b
5496           option.
5497
5498    * Fixed a few bugs in data.cc.
5499
5500 Changes from .28.2 to .28.2.1 (Aug 25, 1999)
5501 ============================================
5502
5503    * Fixed the version number for the shared library.
5504
5505    * Fixed a problem with undefined references when linking to the
5506      shared library.
5507
5508 Changes from .28.1 to .28.2 (Aug 25, 1999)
5509 ==========================================
5510
5511    * Fixed a bunch of bugs in the language and configuration classes.
5512
5513    * Minor changes in the code so that it could compile with the new gcc
5514      2.95(.1).
5515
5516    * Changed the output of `dump config' so that default values are
5517      given the value `<default>'.  This means that the output can be
5518      used to create a configuration file.
5519
5520    * Added notes on using Aspell with VIM.
5521
5522 Changes from .28 to .28.1 (July 27, 1999)
5523 =========================================
5524
5525    * Removed some debug output
5526
5527    * Changed notes on compiling with gcc 2.8.* as I managed to get it to
5528      compile on my school account
5529
5530    * Avoided including *stdexcept* in `const_string.hh' so that I could
5531      get Aspell to compile on my school account with gcc 2.8.1.
5532
5533 Changes from .27.2 to .28 (July 25, 1999)
5534 =========================================
5535
5536      Provided an iterator for the replacement classes.
5537
5538    * Added support for dumping and creating and merging the personal and
5539      replacement word lists.
5540
5541    * Changed the Aspell utility command line a bit, it now used popt.
5542
5543    * Totally reworked Aspell configuration system.  Now Aspell could get
5544      configuration from any of 5 sources: the command line, the
5545      environment variable `ASPELL_CONF', the personal configuration
5546      file, the global configuration file, and finally the compiled-in
5547      defaults.
5548
5549    * Totally reworked the language class in preparation for my new
5550      language code.  See `http://aspell.sourceforge.net/international/'
5551      for more information of what I have in store.
5552
5553    * Added some options to the configure script: -enable-dict-dir=DIR,
5554      -enable-doc-dir=DIR, -enable-debug, and -enable-opt
5555
5556    * Removed some old header files.
5557
5558    * Reorganized the directory structure a bit
5559
5560    * Made the text version of the manual pages slightly easier to read
5561
5562    * Used the `\url' command for urls for better formating of the
5563      printed version.
5564
5565 Changes from .27.1 to .27.2 (Mar 1, 1999)
5566 =========================================
5567
5568    * Fixed a major bug that caused Aspell to dump core when used without
5569      any arguments
5570
5571    * Fixed another major bug that caused Aspell to do nothing when used
5572      in interactive mode.
5573
5574    * Added an option to exit in Aspell's interactive mode.
5575
5576    * Removed some old documentation files from the distribution.
5577
5578    * Minor changes to the the section on using Aspell with egcs.
5579
5580    * Minor changes to remove -Wall warnings.
5581
5582 Changes from .27 to .27.1 (Feb 24, 1999)
5583 ========================================
5584
5585    * Fixed a minor compile problem.
5586
5587    * Updated the section on using Aspell with egcs to it.  It was now
5588      more clear why the patch was necessary.
5589
5590 Changes from .26.2 to .27 (Feb 22, 1999)
5591 ========================================
5592
5593    * Totally reworked the C++ library which means you may need to change
5594      some things in your code.
5595
5596    * Added support for detachable and multiple personal dictionaries in
5597      the C++ class library.
5598
5599    * The C++ class library now throws exceptions.
5600
5601    * Reworked Aspell ability to learn from users misspellings a bit so
5602      that it now has a memory.  For more information see *Note Notes on
5603      Storing Replacement Pairs::.
5604
5605    * Upgraded autoconf to version 2.13 and automake to version 1.4 for
5606      better portability.
5607
5608    * Fixed the configuration so the `make dist' will work.  From now on
5609      Aspell will be distributed with `make dist'.
5610
5611    * Added support to skip over URL's, email addresses and host names.
5612
5613    * Added support for dumping the master and personal word list.  You
5614      can now also merge a personal word list.  Type aspell -help for
5615      help on using this feature.
5616
5617    * Reorganized the source code.
5618
5619    * Started using proper version numbers for the shared library.
5620
5621    * Fixed a bug that caused Aspell to crash when adding certain
5622      replacement pairs.
5623
5624    * Fixed the problem with duplicate lines when exiting pipe mode for
5625      good.
5626
5627 Changed from .26.1 to .26.2 (Jan 3, 1998)
5628 =========================================
5629
5630    * Fixed another compile problem.  Hopefully this time it will really
5631      compile OK on other peoples machines.
5632
5633 Changed from .26 to .26.1 (Jan 3, 1998)
5634 =======================================
5635
5636    * Fixed a small compile problem in `as_data.cc'.
5637
5638 Changed from .25.1 to .26 (Jan 3, 1999)
5639 =======================================
5640
5641    * Fixed a bug that caused duplicate items to be displayed in the
5642      suggestion list for good.  (If it still does it please send me
5643      email.)
5644
5645    * Added the ability for Aspell to learn form the users misspellings.
5646
5647    * Library Interface changes.  Still more to come ....
5648
5649    * Is now multiprocess safe.  When a personal dictionary (or
5650      replacement list) is saved it will now first update the list
5651      against the dictionary on disk in case another process modified it.
5652
5653    * Fixed the bug that caused duplicate output when used non
5654      interactively in pipe mode.
5655
5656    * Dropped support for gcc 2.7.2 as the C++ compiler.
5657
5658    * Updated the How Aspell Works (*Note Aspell Suggestion Strategy::.)
5659
5660    * Added support for the `ASPELL_DATA_DIR' environment variable.
5661
5662 Changes from .25 to .25.1 (Dec 10, 1998)
5663 ========================================
5664
5665    * Fixed the version number so that Aspell reports the correct version
5666      number.
5667
5668    * Changed the note on gcc 2.7.2 compilers to make it clear that only
5669      the C++ compiler cannot be gcc 2.7.2, it is OK if the C compiler
5670      is gcc 2.7.2.
5671
5672    * Updated the TODO list and reorganized it a bit.
5673
5674    * Fixed the directory so that all the documentation will get
5675      installed in ${prefix}/doc/aspell instead of half of it in
5676      ${prefix}/doc/aspell and half of it in ${prefix}/doc/kspell.
5677
5678 Changes from .24 to .25 (Nov 23, 1998)
5679 ======================================
5680
5681    * Total rework of how the main word list is stored.  Start up time
5682      decreased to about 1/3 of what it was in .24 and memory usage
5683      decreased to about 2/3.  (When used with the provided word list on
5684      a Linux system).
5685
5686      Also the format and default locations of the main word list data
5687      files changed in the process and the data is now machine
5688      dependent.  The personal word list format, however, stayed the
5689      same.
5690
5691    * Changed the scoring method to produce slightly better results with
5692      words like the vs.  teh.  And other simpler misspellings where two
5693      letters are swapped.
5694
5695    * Fixed the very unpredictable behavior of the `*', `&', `@'
5696      commands in the pipe mode.
5697
5698    * Added documentations for Aspell pipe mode (also known as `ispell
5699      -a' compatibility mode)
5700
5701    * Added a bunch of Aspell specific extensions to the pipe mode and
5702      documented them.
5703
5704    * Documented the `to_soundslike' and `soundslike' methods for the
5705      `aspell' class.
5706
5707    * Changed the scoring method to produce better results for words like
5708      _fone_ vs _phone_ and other words that have a spelling that
5709      doesn't directly relate to how the word sounds by using the phoneme
5710      equivalent of the word in the scoring of it.
5711
5712    * Added the `to_phoneme' and `have_phoneme' methods to the
5713      `SC_Language' class.
5714
5715    * Added the `to_phoneme' method to the `aspell' class.
5716
5717    * Added the framework for being able to learn from the users
5718      misspelling.  Right now it just keeps a log of replacements.
5719
5720    * Redid `stl_rope-30.diff'.  For some reason the version of patch on
5721      my system refused it.
5722
5723    * Rewrite of the "_Using as a replacement for Ispell_" section and
5724      added the `run-with-aspell' utility as a replacement of the old
5725      method of mapping Ispell to Aspell.
5726
5727    * Fixed a bug that caused duplicate words to appear in the suggestion
5728      list.
5729
5730 Changes from .23 to .24 (Nov 8, 1998)
5731 =====================================
5732
5733    * Fixed my code so that it can once again compile with g++ 2.7.2.
5734
5735    * Rewrote the How It Works chapter.
5736
5737    * Rewrote the Requirement section and added notes on compiling with
5738      g++ 2.7.2.
5739
5740    * Added a To Do chapter.
5741
5742    * Added a Glossary and References chapter.
5743
5744    * Other minor documentation improvements.
5745
5746    * Internal code documentation improvements.
5747
5748 Changes from .22.1 to .23 (Oct 31, 1998)
5749 ========================================
5750
5751    * Minor documentation fixes.
5752
5753    * Changed the scoring strategy for words with 3 or less letters.
5754      This cut the number of words returned for these roughly in half.
5755
5756    * Expanded the word list to also include *american.0* and
5757      *american.1* from the Ispell distribution.  It now includes
5758      *english.0*, *english.1*, *american.0* and *american.1* from the
5759      directory `languages/english' provided with Ispell 3.1.20.
5760
5761    * Added a link to the location of the latest Ispell.el in the
5762      documentation.
5763
5764    * Started a C interface and added some rough documentation for it.
5765
5766 Changes from .22 to .22.1 (Oct 27, 1998)
5767 ========================================
5768
5769    * Minor bug fixes.  I was deleting arrays with delete rather than
5770      delete[].  I was suprised that this had not created a problem.
5771
5772    * Added a simple test program to test for a memory leak present on
5773      some systems.  (Only debian slink at the moment.) See the file
5774      memleak-test.cc for more info.
5775
5776 Changes from .21 to .22 (Oct 26, 1998)
5777 ======================================
5778
5779    * Major redesign of the scoring method.  It now uses absolute
5780      distances rather than relative scores for more consistent results.
5781      See `suggest.cc' for more info.
5782
5783    * Suggest code rewritten in several places, however the core process
5784      stayed the same.
5785
5786    * The `suggest_ultra' method temporarily does nothing.  It should be
5787      working again by the next release.
5788
5789 Changes from .20 to .21 (Oct 13, 1998)
5790 ======================================
5791
5792    * Added documentation for aspell::Error
5793
5794    *  Changed the library name from `libspell' to `libaspell'.  It
5795      should never have been `libspell' in the first place.  Sorry for
5796      the incompatibility.
5797
5798    * Added `as_error.hh' to the list of files copied to the include
5799      directory so that you can actually use the library outside of the
5800      source dir.
5801
5802    * Fixed bug that caused a segmentation fault with words where the
5803      only suggestions was inserting a space or hyphen such as in
5804      *ledgerline*.
5805
5806    * Added the *score* method to `aspell'.
5807
5808    * Changed the scoring method to deal with word when the user uses
5809      "f" in place of "ph" a lot better.
5810
5811 Changes from .11 to .20 (Oct 10, 1998)
5812 ======================================
5813
5814    * _Name change_.  Everything that was Kspell is now Aspell.  Sorry,
5815      the name Kspell was already used by KDE and I didn't want to cause
5816      any confusion.
5817
5818    * Fixed a bug that causes a segmentation fault when the `HOME'
5819      environment variable doesn't exist.
5820
5821 Changes from .10 to .11 (Sep 12, 1998)
5822 ======================================
5823
5824    * Overhaul of the SC_Language class
5825
5826    * Added documentation for international support
5827
5828    * Added documentation for the C++ library
5829
5830    * Other minor bug fixes.
5831
5832 \1f
5833 File: aspell.info,  Node: Authors,  Next: Copying,  Prev: ChangeLog,  Up: Top
5834
5835 Appendix G Authors
5836 ******************
5837
5838 The following people or companies have contributed a non-trival amount
5839 of code to Aspell and thus own the Copyright to part of Aspell.
5840
5841 Jose Da Silva
5842      Bug fixes and enhancements to `word-list-compress'.
5843
5844 Sergey Poznyakoff
5845      Wrote the Nroff filter.
5846
5847 Tom Snyder
5848      Enhanced the SGML filter to also support skipping sgml tags such as
5849      "script" blocks.
5850
5851 Kevin B. Hendricks (and Contributers)
5852      Wrote MySpell which is a simple spell checker library that supports
5853      affix compression.  Aspell affix compression code is based on his
5854      code.
5855
5856 Christoph Hintermüller
5857      Added support for loadable filters.
5858
5859 Melvin Hadasht
5860      Wrote a locale independent version of strtol and strtod.  Wrote
5861      the original loadable filter support however his code has been
5862      completely rewritten by Christoph Hintermüller and Kevin Atkinson.
5863
5864 Björn Jacke
5865      Wrote the generic soundslike algorithm which gets all of its data
5866      from a file, thus eliminating almost all need for language
5867      specific code from Aspell.
5868
5869 Silicon Graphics Computer Systems, Inc.
5870 Hewlett-Packard Company
5871      Parts of the SGI STL code were used in various places throughout
5872      the Aspell source.
5873
5874
5875    In addition the authors of some of translated messages did not
5876 release their work into the Public Domain, and thus own the copyright
5877 to the translated text.  See the files `*.po' in the `po' directory for
5878 more details.
5879
5880    The folowing people also contributed to the development of Aspell
5881 but do not own the Copyright to part of Aspell.
5882
5883 Sergey Poznyakoff
5884      Added gettext support.
5885
5886 Chris Martin
5887      Converted the manual to texinfo.
5888
5889 Lawrence Philips
5890      Wrote the original metaphone algorithm; however, he released his
5891      work into the Public Domain.
5892
5893 Michael Kuhn
5894      Converted the metaphone algorithm into C code and made some
5895      enhancements to the original algorithm.  He also released his work
5896      into the Public Domain.
5897
5898 Geoff Kuenning (and contributers)
5899      The authors of Ispell.  Many of the ideas used in Aspell,
5900      especially with the affix code, were taken from Ispell.  However
5901      none of the original Ispell code is used in Aspell.
5902
5903
5904 \1f
5905 File: aspell.info,  Node: Copying,  Prev: Authors,  Up: Top
5906
5907 Appendix H Copying
5908 ******************
5909
5910 Copyright (C) 2000-2006 Kevin Atkinson.
5911
5912    Permission is granted to copy, distribute and/or modify this document
5913 under the terms of the GNU Free Documentation License, Version 1.1 or
5914 any later version published by the Free Software Foundation; with no
5915 Invariant Sections, no Front-Cover Texts and no Back-Cover Texts.  A
5916 copy of the license is included in the section entitled "GNU Free
5917 Documentation License".
5918
5919    The library and utility program is copyright (C) 2000-2006 by Kevin
5920 Atkinson.  You can redistribute it and/or modify it under the terms of
5921 the GNU Lesser General Public License as (LGPL) published by the Free
5922 Software Foundation; either version 2.1 of the License, or (at your
5923 option) any later version.
5924
5925    Certain parts of the library, as indicated at the top of the source
5926 file, are under a weaker license.  However, all parts of the library
5927 are LGPL Compatible.
5928
5929 * Menu:
5930
5931 * GNU Free Documentation License::
5932 * GNU Lesser General Public License::
5933
5934 \1f
5935 File: aspell.info,  Node: GNU Free Documentation License,  Next: GNU Lesser General Public License,  Up: Copying
5936
5937 H.1 GNU Free Documentation License
5938 ==================================
5939
5940                       Version 1.2, November 2002
5941
5942      Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
5943      59 Temple Place, Suite 330, Boston, MA  02111-1307, USA
5944
5945      Everyone is permitted to copy and distribute verbatim copies
5946      of this license document, but changing it is not allowed.
5947
5948   0. PREAMBLE
5949
5950      The purpose of this License is to make a manual, textbook, or other
5951      functional and useful document "free" in the sense of freedom: to
5952      assure everyone the effective freedom to copy and redistribute it,
5953      with or without modifying it, either commercially or
5954      noncommercially.  Secondarily, this License preserves for the
5955      author and publisher a way to get credit for their work, while not
5956      being considered responsible for modifications made by others.
5957
5958      This License is a kind of "copyleft", which means that derivative
5959      works of the document must themselves be free in the same sense.
5960      It complements the GNU General Public License, which is a copyleft
5961      license designed for free software.
5962
5963      We have designed this License in order to use it for manuals for
5964      free software, because free software needs free documentation: a
5965      free program should come with manuals providing the same freedoms
5966      that the software does.  But this License is not limited to
5967      software manuals; it can be used for any textual work, regardless
5968      of subject matter or whether it is published as a printed book.
5969      We recommend this License principally for works whose purpose is
5970      instruction or reference.
5971
5972   1. APPLICABILITY AND DEFINITIONS
5973
5974      This License applies to any manual or other work, in any medium,
5975      that contains a notice placed by the copyright holder saying it
5976      can be distributed under the terms of this License.  Such a notice
5977      grants a world-wide, royalty-free license, unlimited in duration,
5978      to use that work under the conditions stated herein.  The
5979      "Document", below, refers to any such manual or work.  Any member
5980      of the public is a licensee, and is addressed as "you".  You
5981      accept the license if you copy, modify or distribute the work in a
5982      way requiring permission under copyright law.
5983
5984      A "Modified Version" of the Document means any work containing the
5985      Document or a portion of it, either copied verbatim, or with
5986      modifications and/or translated into another language.
5987
5988      A "Secondary Section" is a named appendix or a front-matter section
5989      of the Document that deals exclusively with the relationship of the
5990      publishers or authors of the Document to the Document's overall
5991      subject (or to related matters) and contains nothing that could
5992      fall directly within that overall subject.  (Thus, if the Document
5993      is in part a textbook of mathematics, a Secondary Section may not
5994      explain any mathematics.)  The relationship could be a matter of
5995      historical connection with the subject or with related matters, or
5996      of legal, commercial, philosophical, ethical or political position
5997      regarding them.
5998
5999      The "Invariant Sections" are certain Secondary Sections whose
6000      titles are designated, as being those of Invariant Sections, in
6001      the notice that says that the Document is released under this
6002      License.  If a section does not fit the above definition of
6003      Secondary then it is not allowed to be designated as Invariant.
6004      The Document may contain zero Invariant Sections.  If the Document
6005      does not identify any Invariant Sections then there are none.
6006
6007      The "Cover Texts" are certain short passages of text that are
6008      listed, as Front-Cover Texts or Back-Cover Texts, in the notice
6009      that says that the Document is released under this License.  A
6010      Front-Cover Text may be at most 5 words, and a Back-Cover Text may
6011      be at most 25 words.
6012
6013      A "Transparent" copy of the Document means a machine-readable copy,
6014      represented in a format whose specification is available to the
6015      general public, that is suitable for revising the document
6016      straightforwardly with generic text editors or (for images
6017      composed of pixels) generic paint programs or (for drawings) some
6018      widely available drawing editor, and that is suitable for input to
6019      text formatters or for automatic translation to a variety of
6020      formats suitable for input to text formatters.  A copy made in an
6021      otherwise Transparent file format whose markup, or absence of
6022      markup, has been arranged to thwart or discourage subsequent
6023      modification by readers is not Transparent.  An image format is
6024      not Transparent if used for any substantial amount of text.  A
6025      copy that is not "Transparent" is called "Opaque".
6026
6027      Examples of suitable formats for Transparent copies include plain
6028      ASCII without markup, Texinfo input format, LaTeX input format,
6029      SGML or XML using a publicly available DTD, and
6030      standard-conforming simple HTML, PostScript or PDF designed for
6031      human modification.  Examples of transparent image formats include
6032      PNG, XCF and JPG.  Opaque formats include proprietary formats that
6033      can be read and edited only by proprietary word processors, SGML or
6034      XML for which the DTD and/or processing tools are not generally
6035      available, and the machine-generated HTML, PostScript or PDF
6036      produced by some word processors for output purposes only.
6037
6038      The "Title Page" means, for a printed book, the title page itself,
6039      plus such following pages as are needed to hold, legibly, the
6040      material this License requires to appear in the title page.  For
6041      works in formats which do not have any title page as such, "Title
6042      Page" means the text near the most prominent appearance of the
6043      work's title, preceding the beginning of the body of the text.
6044
6045      A section "Entitled XYZ" means a named subunit of the Document
6046      whose title either is precisely XYZ or contains XYZ in parentheses
6047      following text that translates XYZ in another language.  (Here XYZ
6048      stands for a specific section name mentioned below, such as
6049      "Acknowledgements", "Dedications", "Endorsements", or "History".)
6050      To "Preserve the Title" of such a section when you modify the
6051      Document means that it remains a section "Entitled XYZ" according
6052      to this definition.
6053
6054      The Document may include Warranty Disclaimers next to the notice
6055      which states that this License applies to the Document.  These
6056      Warranty Disclaimers are considered to be included by reference in
6057      this License, but only as regards disclaiming warranties: any other
6058      implication that these Warranty Disclaimers may have is void and
6059      has no effect on the meaning of this License.
6060
6061   2. VERBATIM COPYING
6062
6063      You may copy and distribute the Document in any medium, either
6064      commercially or noncommercially, provided that this License, the
6065      copyright notices, and the license notice saying this License
6066      applies to the Document are reproduced in all copies, and that you
6067      add no other conditions whatsoever to those of this License.  You
6068      may not use technical measures to obstruct or control the reading
6069      or further copying of the copies you make or distribute.  However,
6070      you may accept compensation in exchange for copies.  If you
6071      distribute a large enough number of copies you must also follow
6072      the conditions in section 3.
6073
6074      You may also lend copies, under the same conditions stated above,
6075      and you may publicly display copies.
6076
6077   3. COPYING IN QUANTITY
6078
6079      If you publish printed copies (or copies in media that commonly
6080      have printed covers) of the Document, numbering more than 100, and
6081      the Document's license notice requires Cover Texts, you must
6082      enclose the copies in covers that carry, clearly and legibly, all
6083      these Cover Texts: Front-Cover Texts on the front cover, and
6084      Back-Cover Texts on the back cover.  Both covers must also clearly
6085      and legibly identify you as the publisher of these copies.  The
6086      front cover must present the full title with all words of the
6087      title equally prominent and visible.  You may add other material
6088      on the covers in addition.  Copying with changes limited to the
6089      covers, as long as they preserve the title of the Document and
6090      satisfy these conditions, can be treated as verbatim copying in
6091      other respects.
6092
6093      If the required texts for either cover are too voluminous to fit
6094      legibly, you should put the first ones listed (as many as fit
6095      reasonably) on the actual cover, and continue the rest onto
6096      adjacent pages.
6097
6098      If you publish or distribute Opaque copies of the Document
6099      numbering more than 100, you must either include a
6100      machine-readable Transparent copy along with each Opaque copy, or
6101      state in or with each Opaque copy a computer-network location from
6102      which the general network-using public has access to download
6103      using public-standard network protocols a complete Transparent
6104      copy of the Document, free of added material.  If you use the
6105      latter option, you must take reasonably prudent steps, when you
6106      begin distribution of Opaque copies in quantity, to ensure that
6107      this Transparent copy will remain thus accessible at the stated
6108      location until at least one year after the last time you
6109      distribute an Opaque copy (directly or through your agents or
6110      retailers) of that edition to the public.
6111
6112      It is requested, but not required, that you contact the authors of
6113      the Document well before redistributing any large number of
6114      copies, to give them a chance to provide you with an updated
6115      version of the Document.
6116
6117   4. MODIFICATIONS
6118
6119      You may copy and distribute a Modified Version of the Document
6120      under the conditions of sections 2 and 3 above, provided that you
6121      release the Modified Version under precisely this License, with
6122      the Modified Version filling the role of the Document, thus
6123      licensing distribution and modification of the Modified Version to
6124      whoever possesses a copy of it.  In addition, you must do these
6125      things in the Modified Version:
6126
6127        A. Use in the Title Page (and on the covers, if any) a title
6128           distinct from that of the Document, and from those of
6129           previous versions (which should, if there were any, be listed
6130           in the History section of the Document).  You may use the
6131           same title as a previous version if the original publisher of
6132           that version gives permission.
6133
6134        B. List on the Title Page, as authors, one or more persons or
6135           entities responsible for authorship of the modifications in
6136           the Modified Version, together with at least five of the
6137           principal authors of the Document (all of its principal
6138           authors, if it has fewer than five), unless they release you
6139           from this requirement.
6140
6141        C. State on the Title page the name of the publisher of the
6142           Modified Version, as the publisher.
6143
6144        D. Preserve all the copyright notices of the Document.
6145
6146        E. Add an appropriate copyright notice for your modifications
6147           adjacent to the other copyright notices.
6148
6149        F. Include, immediately after the copyright notices, a license
6150           notice giving the public permission to use the Modified
6151           Version under the terms of this License, in the form shown in
6152           the Addendum below.
6153
6154        G. Preserve in that license notice the full lists of Invariant
6155           Sections and required Cover Texts given in the Document's
6156           license notice.
6157
6158        H. Include an unaltered copy of this License.
6159
6160        I. Preserve the section Entitled "History", Preserve its Title,
6161           and add to it an item stating at least the title, year, new
6162           authors, and publisher of the Modified Version as given on
6163           the Title Page.  If there is no section Entitled "History" in
6164           the Document, create one stating the title, year, authors,
6165           and publisher of the Document as given on its Title Page,
6166           then add an item describing the Modified Version as stated in
6167           the previous sentence.
6168
6169        J. Preserve the network location, if any, given in the Document
6170           for public access to a Transparent copy of the Document, and
6171           likewise the network locations given in the Document for
6172           previous versions it was based on.  These may be placed in
6173           the "History" section.  You may omit a network location for a
6174           work that was published at least four years before the
6175           Document itself, or if the original publisher of the version
6176           it refers to gives permission.
6177
6178        K. For any section Entitled "Acknowledgements" or "Dedications",
6179           Preserve the Title of the section, and preserve in the
6180           section all the substance and tone of each of the contributor
6181           acknowledgements and/or dedications given therein.
6182
6183        L. Preserve all the Invariant Sections of the Document,
6184           unaltered in their text and in their titles.  Section numbers
6185           or the equivalent are not considered part of the section
6186           titles.
6187
6188        M. Delete any section Entitled "Endorsements".  Such a section
6189           may not be included in the Modified Version.
6190
6191        N. Do not retitle any existing section to be Entitled
6192           "Endorsements" or to conflict in title with any Invariant
6193           Section.
6194
6195        O. Preserve any Warranty Disclaimers.
6196
6197      If the Modified Version includes new front-matter sections or
6198      appendices that qualify as Secondary Sections and contain no
6199      material copied from the Document, you may at your option
6200      designate some or all of these sections as invariant.  To do this,
6201      add their titles to the list of Invariant Sections in the Modified
6202      Version's license notice.  These titles must be distinct from any
6203      other section titles.
6204
6205      You may add a section Entitled "Endorsements", provided it contains
6206      nothing but endorsements of your Modified Version by various
6207      parties--for example, statements of peer review or that the text
6208      has been approved by an organization as the authoritative
6209      definition of a standard.
6210
6211      You may add a passage of up to five words as a Front-Cover Text,
6212      and a passage of up to 25 words as a Back-Cover Text, to the end
6213      of the list of Cover Texts in the Modified Version.  Only one
6214      passage of Front-Cover Text and one of Back-Cover Text may be
6215      added by (or through arrangements made by) any one entity.  If the
6216      Document already includes a cover text for the same cover,
6217      previously added by you or by arrangement made by the same entity
6218      you are acting on behalf of, you may not add another; but you may
6219      replace the old one, on explicit permission from the previous
6220      publisher that added the old one.
6221
6222      The author(s) and publisher(s) of the Document do not by this
6223      License give permission to use their names for publicity for or to
6224      assert or imply endorsement of any Modified Version.
6225
6226   5. COMBINING DOCUMENTS
6227
6228      You may combine the Document with other documents released under
6229      this License, under the terms defined in section 4 above for
6230      modified versions, provided that you include in the combination
6231      all of the Invariant Sections of all of the original documents,
6232      unmodified, and list them all as Invariant Sections of your
6233      combined work in its license notice, and that you preserve all
6234      their Warranty Disclaimers.
6235
6236      The combined work need only contain one copy of this License, and
6237      multiple identical Invariant Sections may be replaced with a single
6238      copy.  If there are multiple Invariant Sections with the same name
6239      but different contents, make the title of each such section unique
6240      by adding at the end of it, in parentheses, the name of the
6241      original author or publisher of that section if known, or else a
6242      unique number.  Make the same adjustment to the section titles in
6243      the list of Invariant Sections in the license notice of the
6244      combined work.
6245
6246      In the combination, you must combine any sections Entitled
6247      "History" in the various original documents, forming one section
6248      Entitled "History"; likewise combine any sections Entitled
6249      "Acknowledgements", and any sections Entitled "Dedications".  You
6250      must delete all sections Entitled "Endorsements."
6251
6252   6. COLLECTIONS OF DOCUMENTS
6253
6254      You may make a collection consisting of the Document and other
6255      documents released under this License, and replace the individual
6256      copies of this License in the various documents with a single copy
6257      that is included in the collection, provided that you follow the
6258      rules of this License for verbatim copying of each of the
6259      documents in all other respects.
6260
6261      You may extract a single document from such a collection, and
6262      distribute it individually under this License, provided you insert
6263      a copy of this License into the extracted document, and follow
6264      this License in all other respects regarding verbatim copying of
6265      that document.
6266
6267   7. AGGREGATION WITH INDEPENDENT WORKS
6268
6269      A compilation of the Document or its derivatives with other
6270      separate and independent documents or works, in or on a volume of
6271      a storage or distribution medium, is called an "aggregate" if the
6272      copyright resulting from the compilation is not used to limit the
6273      legal rights of the compilation's users beyond what the individual
6274      works permit.  When the Document is included in an aggregate, this
6275      License does not apply to the other works in the aggregate which
6276      are not themselves derivative works of the Document.
6277
6278      If the Cover Text requirement of section 3 is applicable to these
6279      copies of the Document, then if the Document is less than one half
6280      of the entire aggregate, the Document's Cover Texts may be placed
6281      on covers that bracket the Document within the aggregate, or the
6282      electronic equivalent of covers if the Document is in electronic
6283      form.  Otherwise they must appear on printed covers that bracket
6284      the whole aggregate.
6285
6286   8. TRANSLATION
6287
6288      Translation is considered a kind of modification, so you may
6289      distribute translations of the Document under the terms of section
6290      4.  Replacing Invariant Sections with translations requires special
6291      permission from their copyright holders, but you may include
6292      translations of some or all Invariant Sections in addition to the
6293      original versions of these Invariant Sections.  You may include a
6294      translation of this License, and all the license notices in the
6295      Document, and any Warranty Disclaimers, provided that you also
6296      include the original English version of this License and the
6297      original versions of those notices and disclaimers.  In case of a
6298      disagreement between the translation and the original version of
6299      this License or a notice or disclaimer, the original version will
6300      prevail.
6301
6302      If a section in the Document is Entitled "Acknowledgements",
6303      "Dedications", or "History", the requirement (section 4) to
6304      Preserve its Title (section 1) will typically require changing the
6305      actual title.
6306
6307   9. TERMINATION
6308
6309      You may not copy, modify, sublicense, or distribute the Document
6310      except as expressly provided for under this License.  Any other
6311      attempt to copy, modify, sublicense or distribute the Document is
6312      void, and will automatically terminate your rights under this
6313      License.  However, parties who have received copies, or rights,
6314      from you under this License will not have their licenses
6315      terminated so long as such parties remain in full compliance.
6316
6317  10. FUTURE REVISIONS OF THIS LICENSE
6318
6319      The Free Software Foundation may publish new, revised versions of
6320      the GNU Free Documentation License from time to time.  Such new
6321      versions will be similar in spirit to the present version, but may
6322      differ in detail to address new problems or concerns.  See
6323      `http://www.gnu.org/copyleft/'.
6324
6325      Each version of the License is given a distinguishing version
6326      number.  If the Document specifies that a particular numbered
6327      version of this License "or any later version" applies to it, you
6328      have the option of following the terms and conditions either of
6329      that specified version or of any later version that has been
6330      published (not as a draft) by the Free Software Foundation.  If
6331      the Document does not specify a version number of this License,
6332      you may choose any version ever published (not as a draft) by the
6333      Free Software Foundation.
6334
6335 H.1.1 ADDENDUM: How to use this License for your documents
6336 ----------------------------------------------------------
6337
6338 To use this License in a document you have written, include a copy of
6339 the License in the document and put the following copyright and license
6340 notices just after the title page:
6341
6342        Copyright (C)  YEAR  YOUR NAME.
6343        Permission is granted to copy, distribute and/or modify this document
6344        under the terms of the GNU Free Documentation License, Version 1.2
6345        or any later version published by the Free Software Foundation;
6346        with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
6347        Texts.  A copy of the license is included in the section entitled ``GNU
6348        Free Documentation License''.
6349
6350    If you have Invariant Sections, Front-Cover Texts and Back-Cover
6351 Texts, replace the "with...Texts." line with this:
6352
6353          with the Invariant Sections being LIST THEIR TITLES, with
6354          the Front-Cover Texts being LIST, and with the Back-Cover Texts
6355          being LIST.
6356
6357    If you have Invariant Sections without Cover Texts, or some other
6358 combination of the three, merge those two alternatives to suit the
6359 situation.
6360
6361    If your document contains nontrivial examples of program code, we
6362 recommend releasing these examples in parallel under your choice of
6363 free software license, such as the GNU General Public License, to
6364 permit their use in free software.
6365
6366 \1f
6367 File: aspell.info,  Node: GNU Lesser General Public License,  Prev: GNU Free Documentation License,  Up: Copying
6368
6369 H.2 GNU Lesser General Public License
6370 =====================================
6371
6372                       Version 2.1, February 1999
6373
6374      Copyright (C) 1991, 1999 Free Software Foundation, Inc.
6375      59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
6376
6377      Everyone is permitted to copy and distribute verbatim copies
6378      of this license document, but changing it is not allowed.
6379
6380      [This is the first released version of the Lesser GPL.  It also counts
6381      as the successor of the GNU Library Public License, version 2, hence the
6382      version number 2.1.]
6383
6384 H.2.1 Preamble
6385 --------------
6386
6387 The licenses for most software are designed to take away your freedom
6388 to share and change it.  By contrast, the GNU General Public Licenses
6389 are intended to guarantee your freedom to share and change free
6390 software--to make sure the software is free for all its users.
6391
6392    This license, the Lesser General Public License, applies to some
6393 specially designated software--typically libraries--of the Free
6394 Software Foundation and other authors who decide to use it.  You can use
6395 it too, but we suggest you first think carefully about whether this
6396 license or the ordinary General Public License is the better strategy to
6397 use in any particular case, based on the explanations below.
6398
6399    When we speak of free software, we are referring to freedom of use,
6400 not price.  Our General Public Licenses are designed to make sure that
6401 you have the freedom to distribute copies of free software (and charge
6402 for this service if you wish); that you receive source code or can get
6403 it if you want it; that you can change the software and use pieces of it
6404 in new free programs; and that you are informed that you can do these
6405 things.
6406
6407    To protect your rights, we need to make restrictions that forbid
6408 distributors to deny you these rights or to ask you to surrender these
6409 rights.  These restrictions translate to certain responsibilities for
6410 you if you distribute copies of the library or if you modify it.
6411
6412    For example, if you distribute copies of the library, whether gratis
6413 or for a fee, you must give the recipients all the rights that we gave
6414 you.  You must make sure that they, too, receive or can get the source
6415 code.  If you link other code with the library, you must provide
6416 complete object files to the recipients, so that they can relink them
6417 with the library after making changes to the library and recompiling
6418 it.  And you must show them these terms so they know their rights.
6419
6420    We protect your rights with a two-step method: (1) we copyright the
6421 library, and (2) we offer you this license, which gives you legal
6422 permission to copy, distribute and/or modify the library.
6423
6424    To protect each distributor, we want to make it very clear that
6425 there is no warranty for the free library.  Also, if the library is
6426 modified by someone else and passed on, the recipients should know that
6427 what they have is not the original version, so that the original
6428 author's reputation will not be affected by problems that might be
6429 introduced by others.
6430
6431    Finally, software patents pose a constant threat to the existence of
6432 any free program.  We wish to make sure that a company cannot
6433 effectively restrict the users of a free program by obtaining a
6434 restrictive license from a patent holder.  Therefore, we insist that
6435 any patent license obtained for a version of the library must be
6436 consistent with the full freedom of use specified in this license.
6437
6438    Most GNU software, including some libraries, is covered by the
6439 ordinary GNU General Public License.  This license, the GNU Lesser
6440 General Public License, applies to certain designated libraries, and is
6441 quite different from the ordinary General Public License.  We use this
6442 license for certain libraries in order to permit linking those
6443 libraries into non-free programs.
6444
6445    When a program is linked with a library, whether statically or using
6446 a shared library, the combination of the two is legally speaking a
6447 combined work, a derivative of the original library.  The ordinary
6448 General Public License therefore permits such linking only if the
6449 entire combination fits its criteria of freedom.  The Lesser General
6450 Public License permits more lax criteria for linking other code with
6451 the library.
6452
6453    We call this license the "Lesser" General Public License because it
6454 does _Less_ to protect the user's freedom than the ordinary General
6455 Public License.  It also provides other free software developers Less
6456 of an advantage over competing non-free programs.  These disadvantages
6457 are the reason we use the ordinary General Public License for many
6458 libraries.  However, the Lesser license provides advantages in certain
6459 special circumstances.
6460
6461    For example, on rare occasions, there may be a special need to
6462 encourage the widest possible use of a certain library, so that it
6463 becomes a de-facto standard.  To achieve this, non-free programs must be
6464 allowed to use the library.  A more frequent case is that a free
6465 library does the same job as widely used non-free libraries.  In this
6466 case, there is little to gain by limiting the free library to free
6467 software only, so we use the Lesser General Public License.
6468
6469    In other cases, permission to use a particular library in non-free
6470 programs enables a greater number of people to use a large body of free
6471 software.  For example, permission to use the GNU C Library in non-free
6472 programs enables many more people to use the whole GNU operating
6473 system, as well as its variant, the GNU/Linux operating system.
6474
6475    Although the Lesser General Public License is Less protective of the
6476 users' freedom, it does ensure that the user of a program that is
6477 linked with the Library has the freedom and the wherewithal to run that
6478 program using a modified version of the Library.
6479
6480    The precise terms and conditions for copying, distribution and
6481 modification follow.  Pay close attention to the difference between a
6482 "work based on the library" and a "work that uses the library".  The
6483 former contains code derived from the library, whereas the latter must
6484 be combined with the library in order to run.
6485
6486                    GNU LESSER GENERAL PUBLIC LICENSE
6487     TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
6488   0. This License Agreement applies to any software library or other
6489      program which contains a notice placed by the copyright holder or
6490      other authorized party saying it may be distributed under the
6491      terms of this Lesser General Public License (also called "this
6492      License").  Each licensee is addressed as "you".
6493
6494      A "library" means a collection of software functions and/or data
6495      prepared so as to be conveniently linked with application programs
6496      (which use some of those functions and data) to form executables.
6497
6498      The "Library", below, refers to any such software library or work
6499      which has been distributed under these terms.  A "work based on the
6500      Library" means either the Library or any derivative work under
6501      copyright law: that is to say, a work containing the Library or a
6502      portion of it, either verbatim or with modifications and/or
6503      translated straightforwardly into another language.  (Hereinafter,
6504      translation is included without limitation in the term
6505      "modification".)
6506
6507      "Source code" for a work means the preferred form of the work for
6508      making modifications to it.  For a library, complete source code
6509      means all the source code for all modules it contains, plus any
6510      associated interface definition files, plus the scripts used to
6511      control compilation and installation of the library.
6512
6513      Activities other than copying, distribution and modification are
6514      not covered by this License; they are outside its scope.  The act
6515      of running a program using the Library is not restricted, and
6516      output from such a program is covered only if its contents
6517      constitute a work based on the Library (independent of the use of
6518      the Library in a tool for writing it).  Whether that is true
6519      depends on what the Library does and what the program that uses
6520      the Library does.
6521
6522   1. You may copy and distribute verbatim copies of the Library's
6523      complete source code as you receive it, in any medium, provided
6524      that you conspicuously and appropriately publish on each copy an
6525      appropriate copyright notice and disclaimer of warranty; keep
6526      intact all the notices that refer to this License and to the
6527      absence of any warranty; and distribute a copy of this License
6528      along with the Library.
6529
6530      You may charge a fee for the physical act of transferring a copy,
6531      and you may at your option offer warranty protection in exchange
6532      for a fee.
6533
6534   2. You may modify your copy or copies of the Library or any portion
6535      of it, thus forming a work based on the Library, and copy and
6536      distribute such modifications or work under the terms of Section 1
6537      above, provided that you also meet all of these conditions:
6538
6539        a. The modified work must itself be a software library.
6540
6541        b. You must cause the files modified to carry prominent notices
6542           stating that you changed the files and the date of any change.
6543
6544        c. You must cause the whole of the work to be licensed at no
6545           charge to all third parties under the terms of this License.
6546
6547        d. If a facility in the modified Library refers to a function or
6548           a table of data to be supplied by an application program that
6549           uses the facility, other than as an argument passed when the
6550           facility is invoked, then you must make a good faith effort
6551           to ensure that, in the event an application does not supply
6552           such function or table, the facility still operates, and
6553           performs whatever part of its purpose remains meaningful.
6554
6555           (For example, a function in a library to compute square roots
6556           has a purpose that is entirely well-defined independent of the
6557           application.  Therefore, Subsection 2d requires that any
6558           application-supplied function or table used by this function
6559           must be optional: if the application does not supply it, the
6560           square root function must still compute square roots.)
6561
6562      These requirements apply to the modified work as a whole.  If
6563      identifiable sections of that work are not derived from the
6564      Library, and can be reasonably considered independent and separate
6565      works in themselves, then this License, and its terms, do not
6566      apply to those sections when you distribute them as separate
6567      works.  But when you distribute the same sections as part of a
6568      whole which is a work based on the Library, the distribution of
6569      the whole must be on the terms of this License, whose permissions
6570      for other licensees extend to the entire whole, and thus to each
6571      and every part regardless of who wrote it.
6572
6573      Thus, it is not the intent of this section to claim rights or
6574      contest your rights to work written entirely by you; rather, the
6575      intent is to exercise the right to control the distribution of
6576      derivative or collective works based on the Library.
6577
6578      In addition, mere aggregation of another work not based on the
6579      Library with the Library (or with a work based on the Library) on
6580      a volume of a storage or distribution medium does not bring the
6581      other work under the scope of this License.
6582
6583   3. You may opt to apply the terms of the ordinary GNU General Public
6584      License instead of this License to a given copy of the Library.
6585      To do this, you must alter all the notices that refer to this
6586      License, so that they refer to the ordinary GNU General Public
6587      License, version 2, instead of to this License.  (If a newer
6588      version than version 2 of the ordinary GNU General Public License
6589      has appeared, then you can specify that version instead if you
6590      wish.)  Do not make any other change in these notices.
6591
6592      Once this change is made in a given copy, it is irreversible for
6593      that copy, so the ordinary GNU General Public License applies to
6594      all subsequent copies and derivative works made from that copy.
6595
6596      This option is useful when you wish to copy part of the code of
6597      the Library into a program that is not a library.
6598
6599   4. You may copy and distribute the Library (or a portion or
6600      derivative of it, under Section 2) in object code or executable
6601      form under the terms of Sections 1 and 2 above provided that you
6602      accompany it with the complete corresponding machine-readable
6603      source code, which must be distributed under the terms of Sections
6604      1 and 2 above on a medium customarily used for software
6605      interchange.
6606
6607      If distribution of object code is made by offering access to copy
6608      from a designated place, then offering equivalent access to copy
6609      the source code from the same place satisfies the requirement to
6610      distribute the source code, even though third parties are not
6611      compelled to copy the source along with the object code.
6612
6613   5. A program that contains no derivative of any portion of the
6614      Library, but is designed to work with the Library by being
6615      compiled or linked with it, is called a "work that uses the
6616      Library".  Such a work, in isolation, is not a derivative work of
6617      the Library, and therefore falls outside the scope of this License.
6618
6619      However, linking a "work that uses the Library" with the Library
6620      creates an executable that is a derivative of the Library (because
6621      it contains portions of the Library), rather than a "work that
6622      uses the library".  The executable is therefore covered by this
6623      License.  Section 6 states terms for distribution of such
6624      executables.
6625
6626      When a "work that uses the Library" uses material from a header
6627      file that is part of the Library, the object code for the work may
6628      be a derivative work of the Library even though the source code is
6629      not.  Whether this is true is especially significant if the work
6630      can be linked without the Library, or if the work is itself a
6631      library.  The threshold for this to be true is not precisely
6632      defined by law.
6633
6634      If such an object file uses only numerical parameters, data
6635      structure layouts and accessors, and small macros and small inline
6636      functions (ten lines or less in length), then the use of the object
6637      file is unrestricted, regardless of whether it is legally a
6638      derivative work.  (Executables containing this object code plus
6639      portions of the Library will still fall under Section 6.)
6640
6641      Otherwise, if the work is a derivative of the Library, you may
6642      distribute the object code for the work under the terms of Section
6643      6.  Any executables containing that work also fall under Section 6,
6644      whether or not they are linked directly with the Library itself.
6645
6646   6. As an exception to the Sections above, you may also combine or
6647      link a "work that uses the Library" with the Library to produce a
6648      work containing portions of the Library, and distribute that work
6649      under terms of your choice, provided that the terms permit
6650      modification of the work for the customer's own use and reverse
6651      engineering for debugging such modifications.
6652
6653      You must give prominent notice with each copy of the work that the
6654      Library is used in it and that the Library and its use are covered
6655      by this License.  You must supply a copy of this License.  If the
6656      work during execution displays copyright notices, you must include
6657      the copyright notice for the Library among them, as well as a
6658      reference directing the user to the copy of this License.  Also,
6659      you must do one of these things:
6660
6661        a. Accompany the work with the complete corresponding
6662           machine-readable source code for the Library including
6663           whatever changes were used in the work (which must be
6664           distributed under Sections 1 and 2 above); and, if the work
6665           is an executable linked with the Library, with the complete
6666           machine-readable "work that uses the Library", as object code
6667           and/or source code, so that the user can modify the Library
6668           and then relink to produce a modified executable containing
6669           the modified Library.  (It is understood that the user who
6670           changes the contents of definitions files in the Library will
6671           not necessarily be able to recompile the application to use
6672           the modified definitions.)
6673
6674        b. Use a suitable shared library mechanism for linking with the
6675           Library.  A suitable mechanism is one that (1) uses at run
6676           time a copy of the library already present on the user's
6677           computer system, rather than copying library functions into
6678           the executable, and (2) will operate properly with a modified
6679           version of the library, if the user installs one, as long as
6680           the modified version is interface-compatible with the version
6681           that the work was made with.
6682
6683        c. Accompany the work with a written offer, valid for at least
6684           three years, to give the same user the materials specified in
6685           Subsection 6a, above, for a charge no more than the cost of
6686           performing this distribution.
6687
6688        d. If distribution of the work is made by offering access to copy
6689           from a designated place, offer equivalent access to copy the
6690           above specified materials from the same place.
6691
6692        e. Verify that the user has already received a copy of these
6693           materials or that you have already sent this user a copy.
6694
6695      For an executable, the required form of the "work that uses the
6696      Library" must include any data and utility programs needed for
6697      reproducing the executable from it.  However, as a special
6698      exception, the materials to be distributed need not include
6699      anything that is normally distributed (in either source or binary
6700      form) with the major components (compiler, kernel, and so on) of
6701      the operating system on which the executable runs, unless that
6702      component itself accompanies the executable.
6703
6704      It may happen that this requirement contradicts the license
6705      restrictions of other proprietary libraries that do not normally
6706      accompany the operating system.  Such a contradiction means you
6707      cannot use both them and the Library together in an executable
6708      that you distribute.
6709
6710   7. You may place library facilities that are a work based on the
6711      Library side-by-side in a single library together with other
6712      library facilities not covered by this License, and distribute
6713      such a combined library, provided that the separate distribution
6714      of the work based on the Library and of the other library
6715      facilities is otherwise permitted, and provided that you do these
6716      two things:
6717
6718        a. Accompany the combined library with a copy of the same work
6719           based on the Library, uncombined with any other library
6720           facilities.  This must be distributed under the terms of the
6721           Sections above.
6722
6723        b. Give prominent notice with the combined library of the fact
6724           that part of it is a work based on the Library, and explaining
6725           where to find the accompanying uncombined form of the same
6726           work.
6727
6728   8. You may not copy, modify, sublicense, link with, or distribute the
6729      Library except as expressly provided under this License.  Any
6730      attempt otherwise to copy, modify, sublicense, link with, or
6731      distribute the Library is void, and will automatically terminate
6732      your rights under this License.  However, parties who have
6733      received copies, or rights, from you under this License will not
6734      have their licenses terminated so long as such parties remain in
6735      full compliance.
6736
6737   9. You are not required to accept this License, since you have not
6738      signed it.  However, nothing else grants you permission to modify
6739      or distribute the Library or its derivative works.  These actions
6740      are prohibited by law if you do not accept this License.
6741      Therefore, by modifying or distributing the Library (or any work
6742      based on the Library), you indicate your acceptance of this
6743      License to do so, and all its terms and conditions for copying,
6744      distributing or modifying the Library or works based on it.
6745
6746  10. Each time you redistribute the Library (or any work based on the
6747      Library), the recipient automatically receives a license from the
6748      original licensor to copy, distribute, link with or modify the
6749      Library subject to these terms and conditions.  You may not impose
6750      any further restrictions on the recipients' exercise of the rights
6751      granted herein.  You are not responsible for enforcing compliance
6752      by third parties with this License.
6753
6754  11. If, as a consequence of a court judgment or allegation of patent
6755      infringement or for any other reason (not limited to patent
6756      issues), conditions are imposed on you (whether by court order,
6757      agreement or otherwise) that contradict the conditions of this
6758      License, they do not excuse you from the conditions of this
6759      License.  If you cannot distribute so as to satisfy simultaneously
6760      your obligations under this License and any other pertinent
6761      obligations, then as a consequence you may not distribute the
6762      Library at all.  For example, if a patent license would not permit
6763      royalty-free redistribution of the Library by all those who
6764      receive copies directly or indirectly through you, then the only
6765      way you could satisfy both it and this License would be to refrain
6766      entirely from distribution of the Library.
6767
6768      If any portion of this section is held invalid or unenforceable
6769      under any particular circumstance, the balance of the section is
6770      intended to apply, and the section as a whole is intended to apply
6771      in other circumstances.
6772
6773      It is not the purpose of this section to induce you to infringe any
6774      patents or other property right claims or to contest validity of
6775      any such claims; this section has the sole purpose of protecting
6776      the integrity of the free software distribution system which is
6777      implemented by public license practices.  Many people have made
6778      generous contributions to the wide range of software distributed
6779      through that system in reliance on consistent application of that
6780      system; it is up to the author/donor to decide if he or she is
6781      willing to distribute software through any other system and a
6782      licensee cannot impose that choice.
6783
6784      This section is intended to make thoroughly clear what is believed
6785      to be a consequence of the rest of this License.
6786
6787  12. If the distribution and/or use of the Library is restricted in
6788      certain countries either by patents or by copyrighted interfaces,
6789      the original copyright holder who places the Library under this
6790      License may add an explicit geographical distribution limitation
6791      excluding those countries, so that distribution is permitted only
6792      in or among countries not thus excluded.  In such case, this
6793      License incorporates the limitation as if written in the body of
6794      this License.
6795
6796  13. The Free Software Foundation may publish revised and/or new
6797      versions of the Lesser General Public License from time to time.
6798      Such new versions will be similar in spirit to the present version,
6799      but may differ in detail to address new problems or concerns.
6800
6801      Each version is given a distinguishing version number.  If the
6802      Library specifies a version number of this License which applies
6803      to it and "any later version", you have the option of following
6804      the terms and conditions either of that version or of any later
6805      version published by the Free Software Foundation.  If the Library
6806      does not specify a license version number, you may choose any
6807      version ever published by the Free Software Foundation.
6808
6809  14. If you wish to incorporate parts of the Library into other free
6810      programs whose distribution conditions are incompatible with these,
6811      write to the author to ask for permission.  For software which is
6812      copyrighted by the Free Software Foundation, write to the Free
6813      Software Foundation; we sometimes make exceptions for this.  Our
6814      decision will be guided by the two goals of preserving the free
6815      status of all derivatives of our free software and of promoting
6816      the sharing and reuse of software generally.
6817
6818                                 NO WARRANTY
6819  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
6820      WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE
6821      LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
6822      HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT
6823      WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT
6824      NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
6825      FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE
6826      QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU.  SHOULD THE
6827      LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY
6828      SERVICING, REPAIR OR CORRECTION.
6829
6830  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
6831      WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
6832      MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE
6833      LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
6834      INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
6835      INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF
6836      DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
6837      OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY
6838      OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
6839      ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
6840
6841                       END OF TERMS AND CONDITIONS
6842 H.2.2 How to Apply These Terms to Your New Libraries
6843 ----------------------------------------------------
6844
6845 If you develop a new library, and you want it to be of the greatest
6846 possible use to the public, we recommend making it free software that
6847 everyone can redistribute and change.  You can do so by permitting
6848 redistribution under these terms (or, alternatively, under the terms of
6849 the ordinary General Public License).
6850
6851    To apply these terms, attach the following notices to the library.
6852 It is safest to attach them to the start of each source file to most
6853 effectively convey the exclusion of warranty; and each file should have
6854 at least the "copyright" line and a pointer to where the full notice is
6855 found.
6856
6857      ONE LINE TO GIVE THE LIBRARY'S NAME AND AN IDEA OF WHAT IT DOES.
6858      Copyright (C) YEAR  NAME OF AUTHOR
6859
6860      This library is free software; you can redistribute it and/or modify it
6861      under the terms of the GNU Lesser General Public License as published by
6862      the Free Software Foundation; either version 2.1 of the License, or (at
6863      your option) any later version.
6864
6865      This library is distributed in the hope that it will be useful, but
6866      WITHOUT ANY WARRANTY; without even the implied warranty of
6867      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
6868      Lesser General Public License for more details.
6869
6870      You should have received a copy of the GNU Lesser General Public
6871      License along with this library; if not, write to the Free Software
6872      Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307,
6873      USA.
6874
6875    Also add information on how to contact you by electronic and paper
6876 mail.
6877
6878    You should also get your employer (if you work as a programmer) or
6879 your school, if any, to sign a "copyright disclaimer" for the library,
6880 if necessary.  Here is a sample; alter the names:
6881
6882      Yoyodyne, Inc., hereby disclaims all copyright interest in the library
6883      `Frob' (a library for tweaking knobs) written by James Random Hacker.
6884
6885      SIGNATURE OF TY COON, 1 April 1990
6886      Ty Coon, President of Vice
6887
6888    That's all there is to it!
6889
6890
6891 \1f
6892 Local Variables:
6893 coding: iso-8859-1
6894 End:
6895
6896 \1f
6897 Tag Table:
6898 Node: Top\7f827
6899 Node: Introduction\7f3602
6900 Node: Support\7f7428
6901 Node: Basic Usage\7f7898
6902 Node: Spellchecking Individual Files\7f8230
6903 Node: Using Aspell as a Replacement for Ispell\7f11546
6904 Ref: Differences From Ispell\7f13496
6905 Node: Using Aspell with other Applications\7f17114
6906 Node: Customizing Aspell\7f19498
6907 Node: Specifying Options\7f20776
6908 Node: The Options\7f26863
6909 Node: Dumping Configuration Values\7f38280
6910 Node: Notes on Various Options\7f38917
6911 Node: Notes on Various Filters and Filter Modes\7f39250
6912 Node: Notes on the Prefix Option\7f48179
6913 Node: Notes on Typo-Analysis\7f49034
6914 Node: Notes on the Different Suggestion Modes\7f51142
6915 Node: Working With Dictionaries\7f53458
6916 Node: Using aspell-import\7f54007
6917 Node: How Aspell Selects an Appropriate Dictionary\7f54832
6918 Node: Listing Available Dictionaries\7f56946
6919 Node: Dumping the Contents of the Word List\7f57391
6920 Node: Creating an Individual Word List\7f58004
6921 Node: Working With Affix Info in Word Lists\7f61229
6922 Node: Format of the Personal and Replacement Dictionaries\7f64908
6923 Ref: Format of the Personal Dictionary\7f65213
6924 Node: Using Multi Dictionaries\7f66615
6925 Node: Dictionary Naming\7f67503
6926 Node: AWLI files\7f68769
6927 Node: Writing programs to use Aspell\7f69563
6928 Node: Through the C API\7f70105
6929 Node: Through A Pipe\7f77834
6930 Node: Notes on Storing Replacement Pairs\7f82893
6931 Node: Adding Support For Other Languages\7f84279
6932 Node: The Language Data File\7f85223
6933 Ref: data-encoding\7f86634
6934 Node: Compiling the Word List\7f90884
6935 Node: Phonetic Code\7f91339
6936 Node: The Simple Soundslike\7f107350
6937 Node: Replacement Tables\7f108584
6938 Node: Affix Compression\7f109568
6939 Node: Controlling the Behavior of Run-together Words\7f114865
6940 Node: Creating A New Character Set\7f115793
6941 Node: Creating An Official Dictionary Package\7f117028
6942 Node: Implementation Notes\7f117760
6943 Node: Aspell Suggestion Strategy\7f118042
6944 Node: Notes on 8-bit Characters\7f120474
6945 Node: Languages Which Aspell can Support\7f124322
6946 Node: Supported\7f124924
6947 Node: Unsupported\7f141865
6948 Node: Multiple Scripts\7f145692
6949 Node: Planned Dictionaries\7f146530
6950 Node: References\7f150615
6951 Node: Language Related Issues\7f151634
6952 Node: Compound Words\7f152179
6953 Node: Words With Symbols in Them\7f155124
6954 Node: Unicode Normalization\7f158400
6955 Node: German Sharp S\7f159350
6956 Node: Context Sensitive Spelling\7f160014
6957 Node: To Do\7f160602
6958 Node: Important Items\7f160806
6959 Node: Other Items\7f165096
6960 Node: Notes on Various Items\7f167154
6961 Node: Word skipping by context\7f167390
6962 Node: Hidden Markov Model\7f169262
6963 Node: Email the Personal Dictionary\7f170125
6964 Node: Installing\7f171189
6965 Node: Generic Install Instructions\7f172220
6966 Node: HTML Manuals and "make clean"\7f173848
6967 Node: Curses Notes\7f174391
6968 Node: Loadable Filter Notes\7f176341
6969 Node: Upgrading from Aspell 0.50\7f176980
6970 Ref: Binary Compatibility\7f178087
6971 Node: Upgrading from Aspell .33/Pspell .12\7f179638
6972 Node: Upgrading from a Pre-0.50 snapshot\7f182150
6973 Node: WIN32 Notes\7f182662
6974 Ref: Win32-Directories\7f187800
6975 Node: ChangeLog\7f189271
6976 Node: Authors\7f226820
6977 Node: Copying\7f229095
6978 Node: GNU Free Documentation License\7f230163
6979 Node: GNU Lesser General Public License\7f252602
6980 \1f
6981 End Tag Table