home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-bin / info / ispell.info < prev    next >
Encoding:
GNU Info File  |  1996-02-19  |  25.1 KB  |  683 lines

  1. This is Info file ispell.info, produced by Makeinfo-1.55 from the input
  2. file ispell.texi.
  3.  
  4.    This file documents GNU ISPELL, an interactive spelling corrector.
  5.  
  6.    Copyright (C) 1990 Free Software Foundation, Inc.
  7.  
  8.    Permission is granted to make and distribute verbatim copies of this
  9. manual provided the copyright notice and this permission notice are
  10. preserved on all copies.
  11.  
  12.    Permission is granted to copy and distribute modified versions of
  13. this manual under the conditions for verbatim copying, provided that
  14. the entire resulting derived work is distributed under the terms of a
  15. permission notice identical to this one.
  16.  
  17.    Permission is granted to copy and distribute translations of this
  18. manual into another language, under the above conditions for modified
  19. versions, except that this permission notice may be stated in a
  20. translation approved by the Foundation.
  21.  
  22. 
  23. File: ispell.info,  Node: Top,  Next: License,  Prev: (dir),  Up: (dir)
  24.  
  25.    `Ispell' is a program that helps you to correct typos in a file, and
  26. to find the correct spelling of words.  When presented with a word that
  27. is not in the dictionary, `ispell' attempts to find "near misses" that
  28. might include the word you meant.
  29.  
  30.    This manual describes how to use ispell, as well as a little about
  31. its implementation.
  32.  
  33. * Menu:
  34.  
  35. * License::        Licensing information.
  36. * Emacs::        Using ispell from emacs
  37. * Standalone::        Using ispell by itself
  38. * Ask::            Using ispell to look up individual words
  39. * Private::        Your private dictionary
  40. * Compatibility::    Compatibility with the traditional spell program
  41. * Command summary::    All commands in emacs and standalone modes
  42.  
  43. Implementation details:
  44. * Near misses::        Definition of a near miss
  45. * Arguments::        Flags to the ispell command
  46. * Interface::        How other programs can use ispell
  47. * Dictionary flags::    How the suffix stripper works
  48. * History::        Where it came from; authors
  49.  
  50. 
  51. File: ispell.info,  Node: License,  Next: Emacs,  Prev: Top,  Up: Top
  52.  
  53. Licensing Information
  54. *********************
  55.  
  56.    Ispell is "free"; this means that everyone is free to use it and
  57. free to redistribute it on a free basis.  Ispell is not in the public
  58. domain; it is copyrighted and there are restrictions on its
  59. distribution, but these restrictions are designed to permit everything
  60. that a good cooperating citizen would want to do.  What is not allowed
  61. is to try to prevent others from further sharing any version of ispell
  62. that they might get from you.
  63.  
  64.    Specifically, we want to make sure that you have the right to give
  65. away copies of ispell, that you receive source code or else can get it
  66. if you want it, that you can change ispell or use pieces of it in new
  67. free programs, and that you know you can do these things.
  68.  
  69.    To make sure that everyone has such rights, we have to forbid you to
  70. deprive anyone else of these rights.  For example, if you distribute
  71. copies of ispell, you must give the recipients all the rights that you
  72. have.  You must make sure that they, too, receive or can get the source
  73. code.  And you must tell them their rights.
  74.  
  75.    Also, for our own protection, we must make certain that everyone
  76. finds out that there is no warranty for ispell.  If these programs are
  77. modified by someone else and passed on, we want their recipients to know
  78. that what they have is not what we distributed, so that any problems
  79. introduced by others will not reflect on our reputation.
  80.  
  81.    The precise conditions of the licenses for ispell are found in the
  82. General Public Licenses.  The programs that are part of GNU Emacs are
  83. covered by the GNU Emacs copying terms (*note License:
  84. (emacs)License.), and other programs are covered by licenses that are
  85. contained in their source files.
  86.  
  87. 
  88. File: ispell.info,  Node: Emacs,  Next: Standalone,  Prev: License,  Up: Top
  89.  
  90. Using ispell from emacs
  91. =======================
  92.  
  93. * Menu:
  94.  
  95. * Word::    Checking a single word
  96. * Buffer::    Checking a whole buffer
  97. * Region::    Checking a region
  98. * Old Emacs::    Using ispell with older versions of emacs
  99.         Look here if M-$ calls the old spell program in your emacs.
  100.  
  101. 
  102. File: ispell.info,  Node: Word,  Next: Buffer,  Prev: Emacs,  Up: Emacs
  103.  
  104. Checking a single word
  105. ----------------------
  106.  
  107.    The simplest emacs command for calling ispell is 'M-$' (meta-dollar.
  108. On some terminals, you must type ESC-$.) This checks the spelling of
  109. the word under the cursor.  If the word is found in the dictionary,
  110. then a message is printed in the echo area.  Otherwise, ISPELL attempts
  111. to generate near misses.
  112.  
  113.    If any near misses are found, they are displayed in a separate
  114. window, each preceded by a digit.  If one of these is the word you
  115. wanted, just type its digit, and it will replace the original word in
  116. your buffer.
  117.  
  118.    If no near miss is right, or if none are displayed, you have four
  119. choices:
  120.  
  121. `I'
  122.      Insert the word in your private dictionary.  Use this if you know
  123.      that the word is spelled correctly.
  124.  
  125. `A'
  126.      Accept the word for the duration of this editing session, but do
  127.      not put it in your private dictionary.  Use this if you are not
  128.      sure about the spelling of the word, but you do not want to look
  129.      it up immediately.  The next time you start ispell, it will have
  130.      forgotten any accepted words.  You can make it forget accepted
  131.      words at any time by typing `M-x reload-ispell'.
  132.  
  133. `SPC'
  134.      Leave the word alone, and consider it misspelled if it is checked
  135.      again.
  136.  
  137. `R'
  138.      Replace the word.  This command prompts you for a string in the
  139.      minibuffer.  You may type more than one word, and each word you
  140.      type is checked again, possibly finding other near misses.  This
  141.      command provides a handy way to close in on a word that you have
  142.      no idea how to spell.  You can keep trying different spellings
  143.      until you find one that is close enough to get a near miss.
  144.  
  145. `L'
  146.      Lookup.  Display words from the dictionary that contain a
  147.      specified substring.  The substring is a regular expression, which
  148.      means it can contain special characters to be more selective about
  149.      which words get displayed.  *Note Regexps: (emacs)Regexps.
  150.  
  151.      If the only special character in the regular express is a leading
  152.      `^', then a very fast binary search will be used, instead of
  153.      scanning the whole file.
  154.  
  155.      Only a few matching words can be displayed in the ISPELL window.
  156.      If you want to see more, use the `look' program directly from the
  157.      shell.
  158.  
  159.    Of course, you can also typeG to stop the command without changing
  160. anything.
  161.  
  162.    If you make a change that you don't like, just use emacs' normal undo
  163. feature *Note undo: (emacs)undo.
  164.  
  165. 
  166. File: ispell.info,  Node: Buffer,  Next: Region,  Prev: Word,  Up: Emacs
  167.  
  168. Checking a whole buffer
  169. -----------------------
  170.  
  171.    If you want to check the spelling of all the words in a buffer, type
  172. the command `M-x ispell'.  This command scans the file, and makes a
  173. list of all the misspelled words.  When it is done, it moves the cursor
  174. to the first word on the list, and acts like you just typed M-$ *Note
  175. Word::.
  176.  
  177.    When you finish with one word, the cursor is automatically moved to
  178. the next.  If you want to stop in the middle of the list type `Q' or
  179. G'.  Later, you can pick up where you left off by typing `C-X $'.
  180.  
  181. 
  182. File: ispell.info,  Node: Region,  Next: Old Emacs,  Prev: Buffer,  Up: Emacs
  183.  
  184. Checking a region
  185. -----------------
  186.  
  187.    You may check the words in the region with the command M-x
  188. ispell-region.  See *Note mark: (emacs)mark.
  189.  
  190.    The commands available are the same as for checking a whole buffer.
  191.  
  192. 
  193. File: ispell.info,  Node: Old Emacs,  Prev: Region,  Up: Emacs
  194.  
  195. Old Emacs
  196. =========
  197.  
  198.    Until ispell becomes part of the standard emacs distribution, you
  199. will have to explicitly request that it be loaded.  Put the following
  200. lines in your emacs init file *Note init file: (emacs)init file.
  201.  
  202.      (autoload 'ispell "ispell" "Run ispell over buffer" t)
  203.      (autoload 'ispell-region "ispell" "Run ispell over region" t)
  204.      (autoload 'ispell-word "ispell" "Check word under cursor" t)
  205.      (define-key esc-map "$" 'ispell-word)
  206.  
  207.    (It will do no harm to have these lines in your init file even after
  208. ispell is installed by default.)
  209.  
  210. 
  211. File: ispell.info,  Node: Standalone,  Next: Ask,  Prev: Emacs,  Up: Top
  212.  
  213. Using ispell by itself
  214. ======================
  215.  
  216.    To check the words in a file, give the command `ispell FILE'.  This
  217. will present a screen of information, and accept commands for every word
  218. that is not found in the dictionary.
  219.  
  220.    The screen shows the offending word at the top, as well as two lines
  221. of context at the bottom.  If any near misses are found, they are shown
  222. in the middle of the screen, each preceded by a digit.
  223.  
  224.    You may use the same commands as inside of emacs to accept the word,
  225. place it in your private dictionary, select a near miss, or type a
  226. replacement *Note Word::.  You may also choose from the following
  227. commands:
  228.  
  229. `?'
  230.      Print a help message.
  231.  
  232. `Q'
  233.      Quit.  Accept the rest of the words in the file and exit.
  234.  
  235. `X'
  236.      Exit.  Abandon any changes made to this file and exit immediately.
  237.      You are asked if you are sure you want to do this.
  238.  
  239. `!'
  240.      Shell escape.  The shell command that you type is executed as a
  241.      subprocess.
  242.  
  243. `^Z'
  244.      Suspend.  On systems that support job control, this suspends
  245.      ISPELL.  On other systems it executes a subshell.
  246.  
  247. `^L'
  248.      Redraw the screen.
  249.  
  250.    If you type your interrupt character (usuallyC or DEL), then ispell
  251. will immediately enter its command loop.  If ispell was generating near
  252. misses at the time, then all that it had found so far will be
  253. displayed, along with a message stating that there might be more, and
  254. that you can type RET to generate them.  If it was scanning the file, it
  255. will display `(INTERRUPT)' where it would normally display a bad word,
  256. and the commands that change the file will be disabled.
  257.  
  258.    The feature is handy if you have left out a space between words, and
  259. ispell is futilely looking up the 1000 potential near misses for a
  260. string that has twenty letters.
  261.  
  262. 
  263. File: ispell.info,  Node: Ask,  Next: Private,  Prev: Standalone,  Up: Top
  264.  
  265. Using ispell to look up individual words
  266. ========================================
  267.  
  268.    When ispell is run with no arguments, it reads words from the
  269. standard input.  For each one, it prints a message telling whether it
  270. is in the dictionary.  For any words not in the dictionary, near misses
  271. are computed, and any that are found are printed.
  272.  
  273.      % ispell
  274.      word: independant
  275.      how about: independent
  276.      word: xyzzy
  277.      not found
  278.      word:D
  279.  
  280. 
  281. File: ispell.info,  Node: Private,  Next: Compatibility,  Prev: Ask,  Up: Top
  282.  
  283. Your private dictionary
  284. =======================
  285.  
  286.    Whenever ispell is started the file `ispell.words' is read from your
  287. home directory (if it exists).  This file contains a list of words, one
  288. per line, and neither the order nor the case of the words is important.
  289. Ispell will consider all of the words good, and will use them as
  290. possible near misses.
  291.  
  292.    The `I' command adds words to `ispell.words', so normally you don't
  293. have to worry about the file.  You may want to check it from time to
  294. time to make sure you have not accidentally inserted a misspelled word.
  295.  
  296. 
  297. File: ispell.info,  Node: Compatibility,  Next: Command summary,  Prev: Private,  Up: Top
  298.  
  299. Compatibility with the traditional spell program
  300. ================================================
  301.  
  302.    The `-u' flag tells ispell to be compatible with the traditional
  303. `spell' program.  This flag is automatically turned on if the program
  304. is invoked by the name `spell'.
  305.  
  306.    This flag causes the following behavior:
  307.  
  308.    All of the files listed as arguments (or the standard input if none)
  309. are checked, and misspellings are printed on the standard output.  The
  310. output is sorted, only one instance of each word appears (however, a
  311. word may appear more than once with different capitalizations.)
  312.  
  313.    You may specify a file containing good words with `+filename'.
  314.  
  315.    The troff commands `.so' and `.nx' (to include a file, or switch to
  316. a file, respectively) are obeyed, unless you give the flag `-i'.
  317.  
  318.    The other `spell' flags `-v', `-b', `-x' and `-l' are ignored.
  319.  
  320.    By the way, ispell seems to be about three times faster than
  321. traditional spell.
  322.  
  323. 
  324. File: ispell.info,  Node: Command summary,  Next: Near misses,  Prev: Compatibility,  Up: Top
  325.  
  326. All commands in emacs and standalone modes
  327. ==========================================
  328.  
  329.    Commands valid in both modes:
  330.  
  331.    DIGIT    Select a near miss I    Insert into private dictionary
  332. A    Accept for this session SPACE    Skip this time R    Replace with one
  333. or more words L    Lookup: search the dictionary using a regular
  334. expression
  335.  
  336.    Standalone only:
  337.  
  338.    Q    Accept rest of file X    Abandon changes !    Shell escape ?    Help
  339. ^Z    Suspend ^L    Redraw screen ^C    Give up generating near misses, or
  340. show position in file
  341.  
  342.    Emacs only:
  343.  
  344.    M-$            Check word M-x ispell        Check buffer M-x ispell-region    Check
  345. region M-x reload-ispell    Reread private dictionary M-x
  346. kill-ispell        Kill current subprocess, and start a new one             next
  347. time ^G            When in M-x ispell, stop working on current             bad word list ^X
  348. $            Resume working on bad word list.
  349.  
  350. 
  351. File: ispell.info,  Node: Near misses,  Next: Arguments,  Prev: Command summary,  Up: Top
  352.  
  353. Definition of a near miss
  354. =========================
  355.  
  356.    Two words are near each other if they can be made identical with one
  357. of the following changes to one of the words:
  358.  
  359.      Interchange two adjacent letters.
  360.      Change one letter.
  361.      Delete one letter.
  362.      Add one letter.
  363.  
  364.    Someday, perhaps ispell will be extended so that words that sound
  365. alike would also be considered near misses.  If you would like to
  366. implement this, see Knuth, Volume 3, page 392 for a description of the
  367. Soundex algorithm which might apply.
  368.  
  369. 
  370. File: ispell.info,  Node: Arguments,  Next: Interface,  Prev: Near misses,  Up: Top
  371.  
  372. Flags to the ispell command
  373. ===========================
  374.  
  375.    Ispell's arguments are parsed by getopt(3).  Therefore, there is
  376. considerable flexibility about where to put spaces between arguments.
  377. The way to be safe is to give only one flag per dash, and put a space
  378. between a flag and its argument.
  379.  
  380.    If ispell is run with no arguments, it enters `ask' mode *Note Ask::.
  381. With one or more file name arguments, it interactively checks each one.
  382.  
  383. `-p privname'
  384.      Use privname as the private dictionary.
  385.  
  386. `-d dictname'
  387.      Use dictname as the system dictionary.  You may also specify a
  388.      system dictionary with the environment variable ISPELL_DICTIONARY.
  389.  
  390. `-l'
  391.      List mode.  Scan the file, and print any misspellings on the
  392.      standard output.  This mode is compatible with the traditional
  393.      spell program, except that the output is not sorted.  *Note
  394.      Compatibility::.
  395.  
  396. `-u'
  397.      Compatibility mode. *Note Compatibility::.
  398.  
  399. `-a'
  400.      Old style program interface, *Note Interface::.
  401.  
  402. `-S'
  403.      New program interface, *Note Interface::.
  404.  
  405. `-D'
  406.      Print the dictionary on the standard output with flags.
  407.  
  408. `-E'
  409.      Print the dictionary on the standard output with all flags
  410.      expanded.
  411.  
  412. 
  413. File: ispell.info,  Node: Interface,  Next: Dictionary flags,  Prev: Arguments,  Up: Top
  414.  
  415. How other programs can use ispell
  416. =================================
  417.  
  418.    Ispell can be used as a subprocess communicating through a pipe.  Two
  419. interfaces are available:
  420.  
  421. * Menu:
  422.  
  423. * New interface::    New style, for EMACS
  424. * Old interface::    Old style, like ITS
  425.  
  426. 
  427. File: ispell.info,  Node: New interface,  Next: Old interface,  Prev: Interface,  Up: Interface
  428.  
  429. New style, for EMACS
  430. ====================
  431.  
  432.    To use this interface, start ispell with the '-S' flag.  Ispell will
  433. print a version number and greeting message that looks like:
  434.  
  435.      (1 "ISPELL V4.0")=
  436.  
  437.    The number is the version number of the protocol to be spoken over
  438. the pipe.  The string is a message possibly of interest to the user.
  439.  
  440.    All messages from ispell end in an equal sign, and ispell guarantees
  441. not to print an equal sign except to end a message.  Therefore, if you
  442. do not want to deal with the greeting, just throw away characters until
  443. you get to an equals.
  444.  
  445.    Ispell then reads one line commands from the standard input, and
  446. writes responses on the standard output.
  447.  
  448.    If a command does not start with a colon, then it is considered a
  449. single word.  The word is looked up in the dictionary, and if it is
  450. found, the response is `t'.  If the word is not in the dictionary, and
  451. no near misses can be found, then the response is `nil'.  If there are
  452. near misses, the response is a line containing a list of strings in
  453. lisp form.  For example:
  454.  
  455.        INPUT        OUTPUT     the        t     xxx        nil     teh        ("tea" "ten"
  456. "the")
  457.  
  458.    The near miss response is suitable for passing directly to the lisp
  459. `read' function, but it can also be parsed simply in C.  In particular,
  460. ispell promises that the list will appear all on one line, and that the
  461. structure will not change.  A parser that reads the whole line, then
  462. treats the parentheses and quotes as whitespace will work fine.
  463.  
  464.    The list will contain a maximum of ten strings, and each string will
  465. be no longer than 40 characters.  Also, the capitalization of the near
  466. misses is the same as the input word.
  467.  
  468. Colon commands
  469. --------------
  470.  
  471.    If the input line starts with a colon, then it is one of the
  472. following commands:
  473.  
  474.    `:file FILENAME' Run the word checker over the named FILENAME.  The
  475. response is zero or more lines each containing a number.  The numbers
  476. are file offsets of words that do not appear in the dictionary.  Since
  477. the near miss checker is not run, this is fairly fast.
  478.  
  479.    After the last number, there will be a line containing either `t' if
  480. the checker got to the end of the file, or `nil' if it received an
  481. interrupt.  If ispell ignores any interrupts received except while
  482. scanning a file.
  483.  
  484.    `:insert WORD' Place WORD in the private dictionary.
  485.  
  486.    `:accept WORD' Do not complain about WORD for the rest of the
  487. session.
  488.  
  489.    `:dump' Write the private dictionary.
  490.  
  491.    `:reload' Reread the private dictionary.
  492.  
  493.    `:tex' Enable the tex parser for future `:file' commands.
  494.  
  495.    `:troff' Enable the tex parser for future `:file' commands.
  496.  
  497.    `:generic' Disable any text formatter parsers for future `:file'
  498. commands.
  499.  
  500. 
  501. File: ispell.info,  Node: Old interface,  Prev: New interface,  Up: Interface
  502.  
  503. Old style, like ITS
  504. ===================
  505.  
  506.    To use this interface, start ispell with the '-a' flag.  Ispell will
  507. read words from its standard input (one per line), and write a one line
  508. of output for each one.
  509.  
  510.    If the first character of the line is `*', then word was found in the
  511. dictionary.  (Other versions of ispell made a distinction between words
  512. that were found directly, and words that were found after suffix
  513. removal.  These lines began with `+', followed by a space, then
  514. followed by the root word.  To remain compatible with these version,
  515. treat `+' and `*' the same.)
  516.  
  517.    If the line starts with `&', then the input word was not found, but
  518. some near misses were found.  They are listed on the output line
  519. separated by spaces.  Also, the output words will have the same
  520. capitalization as the input.
  521.  
  522.    Finally, if the line starts with `#', then the word was not in the
  523. dictionaries, and no near misses were found.
  524.  
  525.        INPUT        OUTPUT     the        *     xxx        #     teh        & tea ten the
  526.  
  527. 
  528. File: ispell.info,  Node: Dictionary flags,  Next: History,  Prev: Interface,  Up: Top
  529.  
  530. How the suffix stripper works
  531. =============================
  532.  
  533.    This section is excerpted from the ITS spell.info file.
  534.  
  535.    Words  in SPELL's main dictionary (but not the private dictionary)
  536. may have flags associated with  them  to  indicate  the  legality  of
  537. suffixes without  the  need  to keep the full suffixed words in the
  538. dictionary.  The flags have "names" consisting of single  letters.
  539. Their  meaning  is  as follows:
  540.  
  541.    Let  #  and  @  be  "variables"  that can stand for any letter.
  542. Upper case letters are constants.  "..."  stands  for  any  string  of
  543. zero  or  more letters,  but note that no word may exist in the
  544. dictionary which is not at least 2 letters long, so, for example, FLY
  545. may not be produced  by  placing the  "Y"  flag  on "F".  Also, no flag
  546. is effective unless the word that it creates is at least 4 letters
  547. long,  so,  for  example,  WED  may  not  be produced by placing the
  548. "D" flag on "WE".
  549.  
  550.    "V" flag:         ...E -> ...IVE  as in CREATE -> CREATIVE
  551. if # .ne. E, ...# -> ...#IVE  as in PREVENT -> PREVENTIVE
  552.  
  553.    "N" flag:         ...E -> ...ION  as in CREATE -> CREATION
  554. ...Y -> ...ICATION  as in MULTIPLY -> MULTIPLICATION         if # .ne.
  555. E or Y, ...# -> ...#EN  as in FALL -> FALLEN
  556.  
  557.    "X" flag:         ...E -> ...IONS  as in CREATE -> CREATIONS
  558. ...Y -> ...ICATIONS  as in MULTIPLY -> MULTIPLICATIONS         if #
  559. .ne. E or Y, ...# -> ...#ENS  as in WEAK -> WEAKENS
  560.  
  561.    "H" flag:         ...Y -> ...IETH  as in TWENTY -> TWENTIETH
  562. if # .ne. Y, ...# -> ...#TH  as in HUNDRED -> HUNDREDTH
  563.  
  564.    "Y" FLAG:         ... -> ...LY  as in QUICK -> QUICKLY
  565.  
  566.    "G" FLAG:         ...E -> ...ING  as in FILE -> FILING         if #
  567. .ne. E, ...# -> ...#ING  as in CROSS -> CROSSING
  568.  
  569.    "J" FLAG"         ...E -> ...INGS  as in FILE -> FILINGS         if
  570. # .ne. E, ...# -> ...#INGS  as in CROSS -> CROSSINGS
  571.  
  572.    "D" FLAG:         ...E -> ...ED  as in CREATE -> CREATED         if
  573. @ .ne. A, E, I, O, or U,                 ...@Y -> ...@IED  as in IMPLY
  574. -> IMPLIED         if # .ne. E or Y, or (# = Y and @ = A, E, I, O, or U)
  575.                ...@# -> ...@#ED  as in CROSS -> CROSSED
  576.                 or CONVEY -> CONVEYED
  577.  
  578.    "T" FLAG:         ...E -> ...EST  as in LATE -> LATEST         if @
  579. .ne. A, E, I, O, or U,                 ...@Y -> ...@IEST  as in DIRTY
  580. -> DIRTIEST         if # .ne. E or Y, or (# = Y and @ = A, E, I, O, or
  581. U)                 ...@# -> ...@#EST  as in SMALL -> SMALLEST
  582.                      or GRAY -> GRAYEST
  583.  
  584.    "R" FLAG:         ...E -> ...ER  as in SKATE -> SKATER         if @
  585. .ne. A, E, I, O, or U,                 ...@Y -> ...@IER  as in MULTIPLY
  586. -> MULTIPLIER         if # .ne. E or Y, or (# = Y and @ = A, E, I, O,
  587. or U)                 ...@# -> ...@#ER  as in BUILD -> BUILDER
  588.                       or CONVEY -> CONVEYER
  589.  
  590.    "Z FLAG:         ...E -> ...ERS  as in SKATE -> SKATERS         if @
  591. .ne. A, E, I, O, or U,                 ...@Y -> ...@IERS  as in
  592. MULTIPLY -> MULTIPLIERS         if # .ne. E or Y, or (# = Y and @ = A,
  593. E, I, O, or U)                 ...@# -> ...@#ERS  as in BUILD ->
  594. BUILDERS                                 or SLAY -> SLAYERS
  595.  
  596.    "S" FLAG:         if @ .ne. A, E, I, O, or U,                 ...@Y
  597. -> ...@IES  as in IMPLY -> IMPLIES         if # .eq. S, X, Z, or H,
  598.            ...# -> ...#ES  as in FIX -> FIXES         if # .ne. S, X,
  599. Z, H, or Y, or (# = Y and @ = A, E, I, O, or U)                 ...# ->
  600. ...#S  as in BAT -> BATS                                 or CONVEY ->
  601. CONVEYS
  602.  
  603.    "P" FLAG:         if @ .ne. A, E, I, O, or U,                 ...@Y
  604. -> ...@INESS  as in CLOUDY -> CLOUDINESS         if # .ne. Y, or @ = A,
  605. E, I, O, or U,                 ...@# -> ...@#NESS  as in LATE ->
  606. LATENESS                                 or GRAY -> GRAYNESS
  607.  
  608.    "M" FLAG:         ... -> ...'S  as in DOG -> DOG'S
  609.  
  610.    Note:    The  existence of a flag on a root word in the directory is
  611. not by itself sufficient to cause SPELL to recognize the  indicated
  612. word  ending.  If there is more than one root for which a flag will
  613. indicate a given word, only  one  of the roots is the correct one for
  614. which the flag is effective; generally it is the longest root.  For
  615. example, the "D" rule  implies  that either PASS or PASSE, with a "D"
  616. flag, will yield PASSED.  The flag must be on  PASSE;  it  will  be
  617. ineffective on PASS.  This is because, when SPELL encounters the word
  618. PASSED and fails to  find  it  in  its  dictionary,  it strips off the
  619. "D" and looks up PASSE.  Upon finding PASSE, it then accepts PASSED  if
  620. and  only if PASSE has the "D" flag.  Only if the word PASSE is not in
  621. the main dictionary at all does the program strip off  the  "E"  and
  622. search  for PASS.
  623.  
  624.    Therefore, never install a flag by hand.  Instead, just add complete
  625. new words to the dictionary file, then use the build program with the
  626. options '-a -r' to replace as many roots with flags as possible.
  627.  
  628. 
  629. File: ispell.info,  Node: History,  Prev: Dictionary flags,  Up: Top
  630.  
  631. Where it came from
  632. ==================
  633.  
  634.    I first came across ispell on TOPS-20 systems at MIT.  I tracked it
  635. down to ITS where I found the PDP-10 assembly program.  It appeared
  636. that it had been in use at the MIT-AI lab since at least the late
  637. 1970's.  I think it case from California before then.
  638.  
  639.    I wrote the first C implementation in the spring of 1983, mostly
  640. working from the ITS INFO file.
  641.  
  642.    The present version was created in early 1988, and was motivated by
  643. the desire to make it run on 80286's, and to provide a better interface
  644. for GNU EMACS.
  645.  
  646.    There is another widely distributed version of ispell, which was
  647. forked from my 1983 version and has a different set of features and
  648. clever extensions.  It is available from the directory /u/public/ispell
  649. at celray.cs.yale.edu.
  650.  
  651.    People who have contributed to various versions of ispell include:
  652. Walt Buehring, Mark Davies, Geoff Kuenning, Rober McQueer, Ashwin Ram,
  653. Greg Schaffer, Perry Smith, Ken Stevens, and Andrew Vignaux.
  654.  
  655. Pace Willisson
  656. pace@ai.mit.edu  pace@hx.lcs.mit.edu
  657. (617) 625-3452
  658.  
  659.  
  660. 
  661. Tag Table:
  662. Node: Top876
  663. Node: License1882
  664. Node: Emacs3679
  665. Node: Word4032
  666. Node: Buffer6573
  667. Node: Region7197
  668. Node: Old Emacs7495
  669. Node: Standalone8130
  670. Node: Ask9981
  671. Node: Private10511
  672. Node: Compatibility11158
  673. Node: Command summary12198
  674. Node: Near misses13110
  675. Node: Arguments13728
  676. Node: Interface15020
  677. Node: New interface15368
  678. Node: Old interface18156
  679. Node: Dictionary flags19221
  680. Node: History24178
  681. 
  682. End Tag Table
  683.