# man > ispell(5)

[_ISPELL_(5)](https://www.chedong.com/phpMan.php/man/ISPELL/5/markdown)                                File Formats Manual                               [_ISPELL_(5)](https://www.chedong.com/phpMan.php/man/ISPELL/5/markdown)

## NAME
       ispell - format of ispell dictionaries and affix files

## DESCRIPTION
       [_Ispell_(1)](https://www.chedong.com/phpMan.php/man/Ispell/1/markdown)  requires  two  files  to define the language that it is spell-checking.  The first
       file is a dictionary containing words for the language, and the second  is  an  "affix"  file
       that  defines  the meaning of special flags in the dictionary.  The two files are combined by
       _buildhash_ (see [_ispell_(1)](https://www.chedong.com/phpMan.php/man/ispell/1/markdown)) and written to a hash file which is not described here.

       A raw _ispell_ dictionary (either the main dictionary or your own personal dictionary) contains
       a list of words, one per line.  Each word may optionally be followed by a slash ("/") and one
       or more flags, which modify the root word as explained below.  Depending on the options  with
       which  _ispell_  was  built,  case may or may not be significant in either the root word or the
       flags, independently.  Specifically, if the compile-time option  CAPITALIZATION  is  defined,
       case  is significant in the root word; if not, case is ignored in the root word.  If the com‐
       pile-time option MASKBITS is set to a value of 32, case is ignored in  the  flags;  otherwise
       case is significant in the flags.  Contact your system administrator or _ispell_ maintainer for
       more information (or use the **-vv **flag to find out).  The dictionary should be sorted with the
### -f 
       which is the normal way of building dictionaries.

       If  the  dictionary contains words that have string characters (see the affix-file documenta‐
       tion below), they must be written in the format given by the **defstringtype **statement  in  the
       affix  file.   This  will be the case for most non-English languages.  Be careful to use this
       format, rather than that of your favorite formatter, when adding words to a dictionary.   (If
       you  add  words to your personal dictionary during an _ispell_ session, they will automatically
       be converted to the correct format.  This feature can be used to convert an entire dictionary
       if necessary:)

                   echo qqqqq > dummy.dict
                   buildhash dummy.dict _affix-file_ dummy.hash
                   awk '{print "*"}END{print "#"}' _old-dict-file_ \
                   | ispell -a -T _old-dict-string-type_ \
                     -d ./dummy.hash -p ./_new-dict-file_ \
                     > /dev/null
                   rm dummy.*

       The case of the root word controls the case of words accepted by _ispell_, as follows:

       (1)    If the root word appears only in lower case (e.g., _bob_), it will be accepted in  lower
              case, capitalized, or all capitals.

       (2)    If  the  root word appears capitalized (e.g., _Robert_), it will not be accepted in all-
              lower case, but will be accepted capitalized or all in capitals.

       (3)    If the root word appears all in capitals (e.g., _UNIX_), it will only be accepted all in
              capitals.

       (4)    If the root word appears with a "funny" capitalization (e.g., _ITCorp_), a word will  be
              accepted only if it follows that capitalization, or if it appears all in capitals.

       (5)    More  than one capitalization of a root word may appear in the dictionary.  Flags from
              different capitalizations are combined by OR-ing them together.

       Redundant capitalizations (e.g., _bob_ and _Bob_) will be combined by  _buildhash_  and  by  _ispell_
       (for personal dictionaries), and can be removed from a raw dictionary by _munchlist_.

       For example, the dictionary:

              bob
              Robert
              UNIX
              ITcorp
              ITCorp

       will  accept _bob_, _Bob_, _BOB_, _Robert_, _ROBERT_, _UNIX_, _ITcorp_, _ITCorp_, and _ITCORP_, and will reject
       all others.  Some of the unacceptable forms are _bOb_, _robert_, _Unix_, and _ItCorp_.

       As mentioned above, root words in any dictionary may be extended by flags.  Each  flag  is  a
       single  alphabetic  character,  which  represents a prefix or suffix that may be added to the
       root to form a new word.  For example, in an English dictionary the **D **flag can  be  added  to
       _bathe_  to make _bathed_.  Since flags are represented as a single bit in the hashed dictionary,
       this results in significant space savings.  The _munchlist_ script will reduce an existing  raw
       dictionary by adding flags when possible.

       When  a  word is extended with an affix, the affix will be accepted only if it appears in the
       same case as the initial (prefix) or final (suffix) letter of the word.  Thus,  for  example,
       the  entry _UNIX/M_ in the main dictionary (**M **means add an apostrophe and an "s" to make a pos‐
       sessive) would accept _UNIX'S_ but would reject _UNIX's_.  If _UNIX's_ is legal, it must appear  as
       a  separate  dictionary  entry,  and  it will not be combined by _munchlist_.  (In general, you
       don't need to worry about these things; _munchlist_ guarantees that its output dictionary  will
       accept  the same set of words as its input, so all you have to do is add words to the dictio‐
       nary and occasionally run munchlist to reduce its size).

       As mentioned, the affix definition file describes  the  affixes  associated  with  particular
       flags.  It also describes the character set used by the language.

       Although  the affix-definition grammar is designed for a line-oriented layout, it is actually
       a free-format yacc grammar and can be laid out weirdly if you want.  Comments are started  by
       a  pound (sharp) sign (#), and continue to the end of the line.  Backslashes are supported in
       the usual fashion (**\_**nnn_, plus specials **\n**, **\r**, **\t**, **\v**, **\f**, **\b**, and the new hex format  **\x_**nn_).
       Any  character with special meaning to the parser can be changed to an uninterpreted token by
       backslashing it; for example, you can declare a flag named 'asterisk' or  'colon'  with  _flag_
       _\*:_ or _flag_ _\::_.

       The grammar will be presented in a top-down fashion, with discussion of each element.  An af‐
       fix-definition file must contain exactly one table:

              _table_     :    [_headers_] [_prefixes_] [_suffixes_]

       At least one of _prefixes_ and _suffixes_ is required.  They can appear in either order.

              _headers_   :    [ _options_ ] _char-sets_

       The headers describe options global to this dictionary and language.  These include the char‐
       acter sets to be used and the formatter, and the defaults for certain _ispell_ flags.

              _options_   :    { _fmtr-stmt_ | _opt-stmt_ | _flag-stmt_ | _num-stmt_ }

       The  options  statements  define  the defaults for certain ispell flags and for the character
       sets used by the formatters.

              _fmtr-stmt_ :    { _nroff-stmt_ | _tex-stmt_ }

       A _fmtr-stmt_ describes characters that have special meaning to a  formatter.   Normally,  this
       statement  is not necessary, but some languages may have preempted the usual defaults for use
       as language-specific characters.  In this case, these statements may be used to redefine  the
       special characters expected by the formatter.

              _nroff-stmt_ :   { **nroffchars **| **troffchars **} _string_

       The **nroffchars **statement allows redefinition of certain _nroff_ control characters.  The string
       given  must  be  exactly  five  characters long, and must list substitutions for the left and
       right parentheses ("()") , the period ("."), the backslash ("\"),  and  the  asterisk  ("*").
       (The  right  parenthesis is not currently used, but is included for completeness.)  For exam‐
       ple, the statement:

              **nroffchars **{}.\\*

       would replace the left and right parentheses with left and right curly braces for purposes of
       parsing _nroff_/_troff_ strings, with no effect on the others (admittedly a  contrived  example).
       Note that the backslash is escaped with a backslash.

              _tex-stmt_  :    { **TeXchars **| **texchars **} _string_

       The  **TeXchars  **statement  allows  redefinition  of certain TeX/LaTeX control characters.  The
       string given must be exactly thirteen characters long, and must list  substitutions  for  the
       left  and  right parentheses ("()") , the left and right square brackets ("[]"), the left and
       right curly braces ("{}"), the left and right angle brackets ("<>"), the backslash ("\"), the
       dollar sign ("$"), the asterisk ("*"), the period or dot ("."), and the percent  sign  ("%").
       For example, the statement:

              **texchars **()\[]<\><\>\\$*.%

       would  replace the functions of the left and right curly braces with the left and right angle
       brackets for purposes of parsing TeX/LaTeX constructs, while retaining  their  functions  for
       the  _tib_  bibliographic  preprocessor.  Note that the backslash, the left square bracket, and
       the right angle bracket must be escaped with a backslash.

              _opt-stmt_  :    { _cmpnd-stmt_ | _aff-stmt_ }

              _cmpnd-stmt_ :   **compoundwords _**compound-opt_

              _aff-stmt_  :    **allaffixes _**on-or-off_

              _on-or-off_ :    { **on **| **off **}

              _compound-opt_ : { _on-or-off_ | **controlled _**character_ }

       An _opt-stmt_ controls certain ispell defaults that are best made language-specific.   The  **al‐**
       **laffixes  **statement  controls the default for the **-P **and **-m **options to _ispell._  If **allaffixes**
       is turned **off **(the default), _ispell_ will default to the behavior of the _-P_  flag:  root/affix
       suggestions will only be made if there are no "near misses".  If **allaffixes **is turned **on**, _is‐_
       _pell_ will default to the behavior of the _-m_ flag: root/affix suggestions will always be made.
       The  **compoundwords  **statement  controls  the default for the **-B **and **-C **options to _ispell._  If
       **compoundwords **is turned **off **(the default), _ispell_ will default to  the  behavior  of  the  _-B_
       flag:  run-together  words will be reported as errors.  If **compoundwords **is turned **on**, _ispell_
       will default to the behavior of the _-C_ flag: run-together words will be  considered  as  com‐
       pounds if both are in the dictionary.  This is useful for languages such as German and Norwe‐
       gian,  which  form large numbers of compound words.  Finally, if **compoundwords **is set to _con‐_
       _trolled_, only words marked with the flag indicated by _character_ (which should not  be  other‐
       wise  used)  will  be  allowed to participate in compound formation.  Because this option re‐
       quires the flags to be specified in the dictionary, it is  not  available  from  the  command
       line.

              _flag-stmt_ :    **flagmarker _**character_

       The  **flagmarker  **statement describes the character which is used to separate affix flags from
       the root word in a raw dictionary file.  This must be a character which is not found  in  any
       word  (including in string characters; see below).  The default is "/" because this character
       is not normally used to represent special characters in any language.

              _num-stmt_  :    **compoundmin _**digit_

       The **compoundmin **statement controls the length of the two components of a compound word.  This
       only has an effect if **compoundwords **is turned **on **or if the **-C **flag is given  to  _ispell_.   In
       that case, only words at least as long as the given minimum will be accepted as components of
       a compound.  The default is 3 characters.

              _char-sets_ :    _norm-sets_ [ _alt-sets_ ]

       The  character-set  section  describes the characters that can be part of a word, and defines
       their collating order.  There must always be a definition of "normal" character sets;  in ad‐
       dition, there may be one or more partial definitions of "alternate" sets which are used  with
       various text formatters.

              _norm-sets_ :    [ _deftype_ ] [ _set-options_ ] _charset-group_

       A  "normal"  character  set  may optionally begin with a definition of the file suffixes that
       make use of this set.  Following this are one or more character-set declarations.

              _deftype_   :         **defstringtype _**name_ _deformatter_ _suffix_*

       The **defstringtype **declaration gives a list of file suffixes which should make use of the  de‐
       fault  string  characters  defined as part of the base character set; it is only necessary if
       string characters are being defined.  The _name_ parameter is a string giving the  unique  name
       associated  with  these suffixes; often it is a formatter name.  If the formatter is a member
       of the troff family, "nroff" should be used for the name associated  with  the  most  popular
       macro package; members of the TeX family should use "tex".  Other names may be chosen freely,
       but  they should be kept simple, as they are used in _ispell_ _'s_ **-T **switch to specify a format‐
       ter type.  The _deformatter_ parameter specifies the deformatting style to use when  processing
       files with the given suffixes.  Currently, this must be **plain**, **tex**, **nroff**, or **html**.  The _suf‐_
       _fix_  parameters  are a whitespace-separated list of strings which, if present at the end of a
       filename, indicate that the associated set of string characters should be used by default for
       this file.  For example, the suffix list for the troff  family  typically  includes  suffixes
       such as ".ms", ".me", ".mm", etc.

              _set-options_ :  **options _**charset-options_*

       The **options **declaration activates one or more white-separated options for the given character
       set (default or alternate).  Currently, two options are supported: The **raw_display **option in‐
       dicates that string characters should be displayed as-is even if some of their components ap‐
       pear  to  be  non-printing; this option is useful for character sets such as UTF-8 or (if the
       terminal is configured appropriately) ISO Latin-1.  The **squeeze_string **option indicates  that
       when  _ispell_  is  interacting with an external client such as _emacs_ (via the **-a **flag), string
       characters should be considered to be of length 1 rather than their  true  length  in  bytes.
       This  option  is  needed to allow _ispell_ to synchronize with _emacs_ when processing files con‐
       taining UTF-8 characters; it should only be given for UTF-8 character sets.

              _charset-group_ :     { _char-stmt_ | _string-stmt_ | _dup-stmt_}*

       A _char-stmt_ describes single characters; a _string-stmt_ describes characters that must  appear
       together  as a string, and which usually represent a single character in the target language.
       Either may also describe conversion between upper and lower case.  A _dup-stmt_ is used to  de‐
       scribe  alternate  forms  of  string characters, so that a single dictionary may be used with
       several formatting programs that use different conventions for representing non-ASCII charac‐
       ters.

              _char-stmt_ :    **wordchars _**character-range_
                        |    **wordchars _**lowercase-range_ _uppercase-range_
                        |    **boundarychars _**character-range_
                        |    **boundarychars _**lowercase-range_ _uppercase-range_
              _string-stmt_ :  **stringchar _**string_
                        |    **stringchar _**lowercase-string_ _uppercase-string_

       Characters described with the **boundarychars **statement are considered part of a word  only  if
       they  appear  singly,  embedded  between characters declared with the **wordchars **or **stringchar**
       statements.  For example, if the hyphen is a  boundary  character  (useful  in  French),  the
       string  "foo-bar"  would  be  a  single  word,  but  "-foo"  would  be the same as "foo", and
       "foo--bar" would be two words separated by non-word characters.

       If two ranges or strings are given in a _char-stmt_ or _string-stmt_, the first describes charac‐
       ters that are interpreted as lowercase and the second describes uppercase.  In the case of  a
       **stringchar  **statement,  the  two  strings  must be of the same length.  Also, in a **stringchar**
       statement, the actual strings may contain both uppercase and  characters  themselves  without
       difficulty; for instance, the statement

              stringchar     "\\*(sS"  "\\*(Ss"

       is  legal and will not interfere with (or be interfered with by) other declarations of of "s"
       and "S" as lower and upper case, respectively.

       A final note on string characters: some languages collate certain special  characters  as  if
       they  were strings.  For example, the German "a-umlaut" is traditionally sorted as if it were
       "ae".  Ispell is not capable of this; each character must be treated as an individual entity.
       So in certain cases, ispell will sort a list of words into a different order than  the  stan‐
       dard "dictionary" order for the target language.

              _alt-sets_  :    _alttype_ [ _set-options_ ] [ _alt-stmt_* ]

       Because  different  formatters use different notations to represent non-ASCII characters, _is‐_
       _pell_ must be aware of the representations used by these formatters.  These  are  declared  as
       alternate sets of string characters.

              _alttype_   :    **altstringtype _**name_ _suffix_*

       The  **altstringtype  **statement  introduces each set by declaring the associated formatter name
       and filename suffix list.  This name and list are interpreted exactly as in the **defstringtype**
       statement above.  Following this header are one or more _alt-stmt_s which declare the alternate
       string characters used by this formatter.

              _alt-stmt_  :    **altstringchar _**alt-string_ _std-string_

       The _altstringchar_ statement describes alternate representations for string  characters.   For
       example,  the  -mm macro package of _troff_ represents the German "a-umlaut" as _a\*:_, while _TeX_
       uses the sequence _\"a_.  If the _troff_ versions are declared as  the  standard  versions  using
       **stringchar**, the _TeX_ versions may be declared as alternates by using the statement

              **altstringchar  **\\\"a     a\\*

       When the **altstringchar **statement is used to specify alternate forms, all forms for a particu‐
       lar  formatter  must  be declared together as a group.  Also, each formatter or macro package
       must provide a complete set of characters, both upper- and lower-case, and the character  se‐
       quences  used  for each formatter must be completely distinct.  Character sequences which de‐
       scribe upper- and lower-case versions of the same printable character must also be  the  same
       length.  It may be necessary to define some new macros for a given formatter to satisfy these
       restrictions.   (The  current  version  of _buildhash_ does not enforce these restrictions, but
       failure to obey them may result in errors being introduced into files that are processed with
       _ispell_.)

       An important minor point is that _ispell_ assumes that all characters declared as **wordchars  **or
       **boundarychars **will occupy exactly one position on the terminal screen.

       A  single character-set statement can declare either a single character or a contiguous range
       of characters.  A range is given as in egrep and the shell: [a-z] means  lowercase  alphabet‐
       ics;  [^a-z]  means  all  but  lowercase,  etc.   All  character-set  statements are combined
       (unioned) to produce the final list of characters that may be part of a word.  The  collating
       order of the characters is defined by the order of their declaration; if a range is used, the
       characters  are  considered  to have been declared in ASCII order.  Characters that have case
       are collated next to each other, with the uppercase character first.

       The character-declaration statements have a rather strange behavior caused  by  its  need  to
       match  each  lowercase  character  with  its uppercase equivalent.  In any given **wordchars **or
       **boundarychars **statement, the characters in each range are first sorted into a  collating  se‐
       quence  by their byte values, then matched one-for-one with the other range.  (The two ranges
       must have the same number of characters).  Thus, for example, the two statements:

              **wordchars **[aeiou] [AEIOU]
              **wordchars **[aeiou] [UOIEA]

       would produce exactly the same effect.  To get the vowels to match up "wrong", you would have
       to use separate statements:

              **wordchars **a U
              **wordchars **e O
              **wordchars **i I
              **wordchars **o E
              **wordchars **u A

       which would cause uppercase 'e' to be 'O', and lowercase 'O' to be 'e'.  This should normally
       be a problem only with languages that have been forced to use a strange  collating  sequence.
       If your uppercase and lowercase letters both collate in the same order, you shouldn't have to
       worry about this "feature".

       The  prefixes and suffixes sections have exactly the same syntax, except for the introductory
       keyword.

              _prefixes_  :    **prefixes _**flagdef_*
              _suffixes_  :    **suffixes _**flagdef_*
              _flagdef_   :    **flag **[*****|**~**] _char_ **: _**repl_*

       A prefix or suffix table consists of an introductory keyword and a list of flag  definitions.
       Flags  can  be defined more than once, in which case the definitions are combined.  Each flag
       controls one or more _repl_s (replacements) which are conditionally applied to  the  beginnings
       or endings of various words.

       Flags  are named by a single character _char_.  Depending on a configuration option, this char‐
       acter can be either any uppercase letter (the default configuration) or any 7-bit ASCII char‐
       acter.  Most languages should be able to get along with just 26 flags.

       A flag character may be prefixed with one or more option characters.  (If you wish to use one
       of the option characters as a flag character, simply enclose it in double quotes.)

       The asterisk (*****) option means that this flag participates in _cross-product_  formation.   This
       only  matters  if  the  file contains both prefix and suffix tables.  If so, all prefixes and
       suffixes marked with an asterisk will be applied in all cross-combinations to the root  word.
       For  example, consider the root _fix_ with prefixes _pre_ and _in_, and suffixes _es_ and _ed_.  If all
       flags controlling these prefixes and suffixes are marked with an asterisk,  then  the  single
       root _fix_ would also generate _prefix_, _prefixes_, _prefixed_, _infix_, _infixes_, _infixed_, _fix_, _fixes_,
       and  _fixed_.   Cross-product  formation  can  produce a large number of words quickly, some of
       which may be illegal, so watch out.  If cross-products produce illegal words, _munchlist_  will
       not produce those flag combinations, and the flag will not be useful.

              _repl_ :    _condition_* **> **[ **- _**strip-string_ **, **] _append-string_

       The  **~ **option specifies that the associated flag is only active when a compound word is being
       formed.  This is useful in a language like German, where the form of a word sometimes changes
       inside a compound.

       A _repl_ is a conditional rule for modifying a root word.  Up to 8 _conditions_ may be specified.
       If the _conditions_ are satisfied, the rules on the right-hand side of the _repl_ are applied, as
       follows:

       (1)    If a strip-string is given, it is first stripped from the beginning or ending (as  ap‐
              propriate) of the root word.

       (2)    Then the append-string is added at that point.

       For example, the _condition_ **.  **means "any word", and the _condition_ **Y **means "any word ending in
       Y".  The following (suffix) replacements:

              .    >    MENT
              Y    >    -Y,IES

       would  change  _induce_  to  _inducement_ and _fly_ to _flies_.  (If they were controlled by the same
       flag, they would also change _fly_ to _flyment_, which might not be what was  wanted.   _Munchlist_
       can be used to protect against this sort of problem; see the command sequence given below.)

       No  matter  how  much you might wish it, the strings on the right must be strings of specific
       characters, not ranges.  The reasons are rooted deeply in the way _ispell_ works, and it  would
       be  difficult  or impossible to provide for more flexibility.  For example, you might wish to
       write:

              [EY] >    -[EY],IES

       This will not work.  Instead, you must use two separate rules:

              E    >    -E,IES
              Y    >    -Y,IES

       The application of _repl_s can be restricted to certain words with _conditions_:

              _condition_ :    { **. **| _character_ | _range_ }

       A _condition_ is a restriction on the characters that  adjoin,  and/or  are  replaced  by,  the
       right-hand side of the _repl_.  Up to 8 _conditions_ may be given, which should be enough context
       for  anyone.  The right-hand side will be applied only if the _conditions_ in the _repl_ are sat‐
       isfied.  The _conditions_ also implicitly define a length; roots shorter  than  the  number  of
       _conditions_  will  not pass the test.  (As a special case, a _condition_ of a single dot "." de‐
       fines a length of zero, so that the rule applies to all words indiscriminately).  This length
       is independent of the separate test that insists that all flags produce an output word length
       of at least four.

       _Conditions_ that are single characters should be separated by white space.   For  example,  to
       specify words ending in "ED", write:

              E D  >    -ED,ING        # As in covered > covering

       If you write:

              ED   >    -ED,ING

       the effect will be the same as:

              [ED] >    -ED,ING

       As  a  final  minor, but important point, it is sometimes useful to rebuild a dictionary file
       using an incompatible suffix file.  For example, suppose you expanded the "R" flag to  gener‐
       ate  "er"  and  "ers"  (thus making the Z flag somewhat obsolete).  To build a new dictionary
       _newdict_ that, using _newaffixes_, will accept exactly the same list of words as  the  old  list
       _olddict_ did using _oldaffixes_, the **-c **switch of _munchlist_ is useful, as in the following exam‐
       ple:

              $ munchlist -c oldaffixes -l newaffixes olddict > newdict

       If  you use this procedure, your new dictionary will always accept the same list the original
       did, even if you badly screwed up the affix file.  This is  because  _munchlist_  compares  the
       words generated by a flag with the original word list, and refuses to use any flags that gen‐
       erate illegal words.

## EXAMPLES
       As  an example of conditional suffixes, here is the specification of the **S **flag from the Eng‐
       lish affix file:

              flag *S:
                  [^AEIOU]Y >    -Y,IES    # As in imply > implies
                  [AEIOU]Y  >    S         # As in convey > conveys
                  [SXZH]    >    ES        # As in fix > fixes
                  [^SXZHY]  >    S         # As in bat > bats

       The first line applies to words ending in Y, but not in vowel-Y.  The second  takes  care  of
       the  vowel-Y  words.  The third then handles those words that end in a sibilant or near-sibi‐
       lant, and the last picks up everything else.

       Note that the _conditions_ are written very carefully so that they apply to  disjoint  sets  of
       words.   In  particular,  note that the fourth line excludes words ending in Y as well as the
       obvious SXZH.  Otherwise, it would convert "imply" into "implys".

       Although the English affix file does not do so, you can also have a flag generate  more  than
       one variation on a root word.  For example, we could extend the English "R" flag as follows:

              flag *R:
                 E              >    R         # As in skate > skater
                 E              >    RS        # As in skate > skaters
                 [^AEIOU]Y >    -Y,IER    # As in multiply > multiplier
                 [^AEIOU]Y >    -Y,IERS   # As in multiply > multipliers
                 [AEIOU]Y  >    ER        # As in convey > conveyer
                 [AEIOU]Y  >    ERS       # As in convey > conveyers
                 [^EY]          >    ER        # As in build > builder
                 [^EY]          >    ERS       # As in build > builders

       This  flag  would  generate both "skater" and "skaters" from "skate".  This capability can be
       very useful in languages that make use of noun, verb, and adjective endings.   For  instance,
       one could define a single flag that generated all of the German "weak" verb endings.

## SEE ALSO
       [ispell(1)](https://www.chedong.com/phpMan.php/man/ispell/1/markdown)

                                                local                                      [_ISPELL_(5)](https://www.chedong.com/phpMan.php/man/ISPELL/5/markdown)
