home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume2 / correct < prev    next >
Internet Message Format  |  1991-08-07  |  8KB

  1. From: powell@ole.UUCP (Gary Powell)
  2. Newsgroups: comp.sources.misc
  3. Subject: v02i071: shell script to manage personal dictionary and correct text
  4. Message-ID: <7474@ncoast.UUCP>
  5. Date: 5 Mar 88 23:52:35 GMT
  6. Approved: allbery@ncoast.UUCP
  7.  
  8. Comp.sources.misc: Volume 2, Issue 71
  9. Submitted-By: "Gary Powell" <powell@ole.UUCP>
  10. Archive-Name: correct
  11.  
  12. #--------------------------------CUT HERE-------------------------------------
  13. #! /bin/sh
  14. #
  15. # This is a shell archive.  Save this into a file, edit it
  16. # and delete all lines above this comment.  Then give this
  17. # file to sh by executing the command "sh file".  The files
  18. # will be extracted into the current directory owned by
  19. # you with default permissions.
  20. #
  21. # The files contained herein are:
  22. #
  23. # -rw-r--r--   1 allbery  System      5303 Mar  5 18:32 correct.csh
  24. # -rw-rw-rw-   1 allbery  uucp         829 Mar  5 18:33 correct.l
  25. #
  26. echo 'x - correct.csh'
  27. if test -f correct.csh; then echo 'shar: not overwriting correct.csh'; else
  28. sed 's/^X//' << '________This_Is_The_END________' > correct.csh
  29. X#! /bin/csh -f
  30. X
  31. X#
  32. X# This script takes a file name as an argument and looks for misspellings.
  33. X# If you want to change the file, a sed script is provided, or you
  34. X# can change your personal dictionary. It will add one if you need it.
  35. X#
  36. X#   Author : G. Powell Seattle Silicon Co.  11/3/87
  37. X#
  38. X
  39. X# extract the file name from the command line.
  40. Xset text = $1
  41. X
  42. X# Your personal dictionary, and lookup table file names.
  43. Xset mylist = ~/.myhdict
  44. Xset mylook = ~/.mylook
  45. X
  46. X# Temp files for use while this script is running
  47. Xset temptext = /tmp/$1.$$
  48. Xset tempfile = /tmp/tmp_file.$$
  49. Xset tmplist  = /tmp/myhdict_tmp.$$
  50. Xset tmplook  = /tmp/mylook_tmp.$$
  51. Xset sedfile  = /tmp/sed_spell.$$
  52. X
  53. X# Delilimaters of a "word"
  54. Xset delim = '\([\.,?\!(){}\[\]""";:     ]\)'
  55. X
  56. Xecho "Checking spelling in $text."
  57. X
  58. X#
  59. X# if you have a personal dictionary use it.
  60. X#
  61. Xif (-e $mylist) then
  62. X    set list = $mylist
  63. Xelse
  64. X    set list = /usr/dict/hlista
  65. Xendif
  66. X
  67. Xset llook = $mylook
  68. X
  69. Xecho "Type h for help"
  70. X
  71. Xforeach i (`spell -d $list $text`)
  72. X    set word = $i
  73. X  Query:
  74. X    echo -n "< $word > ? "
  75. X    switch ($<)
  76. X    case 'a':
  77. X      Addword:
  78. X    echo "Adding $word to list $mylist."
  79. X#
  80. X# Add word to your personal dictionary
  81. X#
  82. X    if (! -e $tmplist) then
  83. X        cp $list $tmplist
  84. X        set list = $tmplist
  85. X    endif
  86. X    echo $word | spellin $list > $tempfile
  87. X    mv -f $tempfile $list
  88. X#
  89. X# Add word to your personal lookup list
  90. X#
  91. X    if (! -e $tmplook && -e $mylook) then
  92. X        cp $mylook $tmplook
  93. X    endif
  94. X    set llook = $tmplook
  95. X    echo $word >> $tmplook
  96. X    cat $tmplook | sort | uniq > $tempfile
  97. X    mv -f $tempfile $tmplook
  98. X    breaksw
  99. X    case 'c':
  100. X    echo -n "New spelling? "
  101. X    set neword = ($<)
  102. X    echo "-> Changing occurances of $word to $neword in $text."
  103. X#
  104. X# Look for new word word in dictionary
  105. X#
  106. X    @ change = 0
  107. X    set foundword = `echo $neword | spellout $list`
  108. X    if ($foundword == $neword) then
  109. X        echo "$neword was not found in your dictionary."
  110. X        echo -n "Do you still want to change it? [y/n] "
  111. X        if ('y' != $<) then
  112. X        goto Query
  113. X        endif
  114. X        @ change = 1
  115. X    endif
  116. X
  117. X    if (! -e $temptext) then
  118. X        cp $text $temptext
  119. X    endif
  120. X    echo /$word/s/'^'$word"$delim"/$neword'\1'/g > sedfile
  121. X    echo /$word/s/"$delim"$word'$'/'\1'$neword/g >> sedfile
  122. X    echo /$word/s/"$delim"$word"$delim"/'\1'$neword'\2'/g >> sedfile
  123. X    mv $temptext $tempfile
  124. X    sed -f sedfile $tempfile > $temptext
  125. X    /bin/rm sedfile
  126. X    /bin/rm $tempfile
  127. X
  128. X    if ( $change == 1) then
  129. X        echo -n "Do you want add $neword to your dictionary? [y/n] "
  130. X        if ('y' == $<) then
  131. X        set word = $neword
  132. X        goto Addword
  133. X        endif
  134. X    endif
  135. X    breaksw
  136. X    case 'd':
  137. X    if (-e $temptext) then
  138. X        diff $text $temptext | less -emQ
  139. X    else
  140. X        echo "You haven't made any changes yet."
  141. X    endif
  142. X    goto Query
  143. X    breaksw
  144. X    case 'h':
  145. X    echo " a    - add this word to your personal directory $mylist"
  146. X    echo " c    - change all occurances of this word in the file $text"
  147. X    echo " d    - diff file $text and the tempfile changes."
  148. X    echo " h    - help (this command)"
  149. X    echo " l    - look up the word for near spellings"
  150. X    echo " p    - print the context of the words."
  151. X    echo " q    - quit (you can save current changes.)"
  152. X    echo " r    - remove a word from your dictionary, $mylist."
  153. X    echo " s    - look up an entered word for near spellings"
  154. X    echo "<cr>  - skip to the next word."
  155. X    goto Query
  156. X    breaksw
  157. X    case 'l':
  158. X    set lookup = $word
  159. X      Lookup:
  160. X    @ ccount = `echo $lookup | wc -c`
  161. X      Lookagain:
  162. X    look $lookup > $tempfile
  163. X    if (-e $llook) then
  164. X        look $lookup $llook >> $tempfile
  165. X    endif
  166. X    @ wcount = `cat $tempfile | wc -l`
  167. X    if ( $wcount <= 0 ) then
  168. X        if ($ccount > 3) then
  169. X        @ ccount --
  170. X        set lookup = `echo $lookup | colrm $ccount`
  171. X        echo "Nothing found yet, trying...$lookup"
  172. X        goto Lookagain
  173. X        else
  174. X        echo "No words found."
  175. X        /bin/rm $tempfile
  176. X        goto Query
  177. X        endif
  178. X    endif
  179. X    cat $tempfile | sort | uniq | less -emQ
  180. X    /bin/rm $tempfile
  181. X    goto Query
  182. X    breaksw
  183. X    case 'p':
  184. X    set search = '\<'$word'\>'
  185. X    if (-e $temptext) then
  186. X        grep "$search" $temptext | less -emQ
  187. X    else
  188. X        grep "$search" $text | less -emQ
  189. X    endif
  190. X    goto Query
  191. X    breaksw
  192. X    case 'q':
  193. X    echo "quit."
  194. X    goto Done
  195. X    breaksw
  196. X    case 'r':
  197. X    if (-e $tmplook) then
  198. X        /bin/rm $list
  199. X        cp $mylist $list
  200. X    else
  201. X        if (-e $mylook && -e $mydict) then
  202. X        cp $mylook $tmplook
  203. X        set llook = $tmplook
  204. X        cp /usr/dict/hlista $tmplist
  205. X        set list = $tmplist
  206. X        else
  207. X        echo "You don't have a personal word list."
  208. X        goto Query
  209. X        endif
  210. X    endif
  211. X    echo -n "Enter word to remove : "
  212. X    sed -e "/$</d" $llook > $tempfile
  213. X    mv -f $tempfile $llook
  214. X    foreach k (`cat $llook`)
  215. X        echo $k | spellin $list > $tempfile
  216. X        mv -f $tempfile $list 
  217. X    end
  218. X    goto Query
  219. X    breaksw
  220. X    case 's':
  221. X    echo -n "Enter word to find near derivations : "
  222. X    set lookup = $<
  223. X    goto Lookup
  224. X    breaksw
  225. X    endsw
  226. Xend
  227. X
  228. X#
  229. X#  Save changes
  230. X#
  231. XDone:
  232. Xset answer = y
  233. Xif (-e $temptext) then
  234. X    echo -n "Would you like to see your changes? "
  235. X    if ('y' == $<) then
  236. X    diff $text $temptext | less -emQ
  237. X    endif
  238. X    echo -n "Do you want to keep your changes? "
  239. X    set answer = $<
  240. X    if ('y' == $answer) then
  241. X    mv -f $temptext $text
  242. X    else
  243. X    /bin/rm $temptext
  244. X    endif
  245. Xendif
  246. X
  247. X#
  248. X#  Save new Dictionary
  249. X#
  250. Xif (-e $tmplist && $answer == 'y') then
  251. X    echo -n "Do You want to save your updated dictionary? [y/n] "
  252. X    if ('n' == $<) then
  253. X    /bin/rm $tmplist
  254. X    /bin/rm $tmplook
  255. X    else
  256. X    mv -f $tmplist $mylist
  257. X    mv -f $tmplook $mylook
  258. X    endif
  259. Xendif
  260. X
  261. Xecho "Done."
  262. ________This_Is_The_END________
  263. if test `wc -c < correct.csh` -ne 5303; then
  264.     echo 'shar: correct.csh was damaged during transit (should have been 5303 bytes)'
  265. fi
  266. fi        ; : end of overwriting check
  267. echo 'x - correct.l'
  268. if test -f correct.l; then echo 'shar: not overwriting correct.l'; else
  269. sed 's/^X//' << '________This_Is_The_END________' > correct.l
  270. X.TH CORRECT l "2 FEBRUARY 1988"
  271. X.UC 4
  272. X.SH NAME
  273. Xcorrect - Correct the spelling in a ascii text file.
  274. X.SH SYNOPSIS
  275. X.LP
  276. X.nf
  277. Xcorrect filename
  278. X.fi
  279. X.SH DESCRIPION
  280. X.PP
  281. Xcorrect is a shell script which runs interactively to 
  282. Xhelp you correct your spelling and manage a personal dictionary
  283. Xand word list.  It uses the UNIX calls to spell, list, and grep
  284. Xto perform the work.
  285. X.PP
  286. X.SH FILES
  287. X.nf
  288. X        /usr/local/bin/correct                          shell script
  289. X
  290. X        ~/.myhdict                    personal dictionary
  291. X        ~/.mylook                    personal word list
  292. X
  293. XTemp files for use while this script is runs
  294. X        /tmp/$1.$$
  295. X        /tmp/tmp_file.$$
  296. X        /tmp/myhdict_tmp.$$
  297. X        /tmp/mylook_tmp.$$
  298. X        /tmp/sed_spell.$$
  299. X
  300. X.fi
  301. X.SH AUTHOR
  302. X.nf
  303. X        Gary Powell
  304. X.fi
  305. X.SH BUGS
  306. X.PP
  307. XIf you attempt to substitute two words for one the script dies.
  308. ________This_Is_The_END________
  309. if test `wc -c < correct.l` -ne 829; then
  310.     echo 'shar: correct.l was damaged during transit (should have been 829 bytes)'
  311. fi
  312. fi        ; : end of overwriting check
  313. exit 0
  314. -- 
  315.    _Q   _Q    _Q     _Q  _Q_Q    _Q    _Q                                    _Q
  316.   /_\) /_\)  /_\)   /_\)/_/\\)  /_\)  /_\)                    Gary Powell   /_\)
  317. _O|/O_O|/O__O|/O___O|/O_OO|/O__O|/O__O|/O__________________________________O|/O_
  318. UUCP!uw-beaver!tikal!ole!powell             Seattle Silicon Corp. (206) 828-4422
  319.