Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse code

updated for version 7.0070

  • Loading branch information...
commit 9a96e055f40b68b5e218932e23253a0f9f7b93c1 1 parent d03bcf7
vimboss authored
2  Filelist
@@ -122,6 +122,8 @@ SRC_ALL2 = \
122 122 src/proto/undo.pro \
123 123 src/proto/version.pro \
124 124 src/proto/window.pro \
  125 + src/spell/*.diff \
  126 + src/spell/Makefile \
125 127
126 128
127 129 # source files for Unix only
11 runtime/doc/eval.txt
... ... @@ -1,4 +1,4 @@
1   -*eval.txt* For Vim version 7.0aa. Last change: 2005 Apr 04
  1 +*eval.txt* For Vim version 7.0aa. Last change: 2005 Apr 22
2 2
3 3
4 4 VIM REFERENCE MANUAL by Bram Moolenaar
@@ -338,6 +338,10 @@ Functions that are useful with a List: >
338 338 :let s = string(list) " String representation of list
339 339 :call map(list, '">> " . v:val') " prepend ">> " to each item
340 340
  341 +Don't forget that a combination of features can make things simple. For
  342 +example, to add up all the numbers in a list: >
  343 + :exe 'let sum = ' . join(nrlist, '+')
  344 +
341 345
342 346 1.4 Dictionaries ~
343 347 *Dictionaries* *Dictionary*
@@ -3719,7 +3723,10 @@ split({expr} [, {pattern}]) *split()*
3719 3723 it makes the function work a bit faster.
3720 3724 To split a string in individual characters: >
3721 3725 :for c in split(mystring, '\zs')
3722   -< The opposite function is |join()|.
  3726 +< If you want to keep the separator you can also use '\zs': >
  3727 + :echo split('abc:def:ghi', ':\zs')
  3728 +< ['abc:', 'def:', 'ghi'] ~
  3729 + The opposite function is |join()|.
3723 3730
3724 3731
3725 3732 strftime({format} [, {time}]) *strftime()*
50 runtime/doc/spell.txt
... ... @@ -1,4 +1,4 @@
1   -*spell.txt* For Vim version 7.0aa. Last change: 2005 Apr 20
  1 +*spell.txt* For Vim version 7.0aa. Last change: 2005 Apr 23
2 2
3 3
4 4 VIM REFERENCE MANUAL by Bram Moolenaar
@@ -160,16 +160,19 @@ procedure is recommended:
160 160 1. Obtain the xx_YY.aff and xx_YY.dic files from Myspell.
161 161 2. Make a copy of these files to xx_YY.orig.aff and xx_YY.orig.dic.
162 162 3. Change the xx_YY.aff and xx_YY.dic files to remove bad words, add missing
163   - words, etc.
164   -4. Use |:mkspell| to generate the Vim spell file and try it out.
  163 + words, define word characters with FOL/LOW/UPP, etc. The distributed
  164 + "src/spell/*.diff" files can be used.
  165 +4. Set 'encoding' to the desired encoding and use |:mkspell| to generate the
  166 + Vim spell file.
  167 +5. Try out the spell file with ":set spell spelllang=xx_YY".
165 168
166 169 When the Myspell files are updated you can merge the differences:
167   -5. Obtain the new Myspell files as xx_YY.new.aff and xx_UU.new.dic.
168   -6. Use Vimdiff to see what changed: >
  170 +1. Obtain the new Myspell files as xx_YY.new.aff and xx_UU.new.dic.
  171 +2. Use Vimdiff to see what changed: >
169 172 vimdiff xx_YY.orig.dic xx_YY.new.dic
170   -7. Take over the changes you like in xx_YY.dic.
  173 +3. Take over the changes you like in xx_YY.dic.
171 174 You may also need to change xx_YY.aff.
172   -8. Rename xx_YY.new.dic to xx_YY.orig.dic and xx_YY.new.aff to xx_YY.new.aff.
  175 +4. Rename xx_YY.new.dic to xx_YY.orig.dic and xx_YY.new.aff to xx_YY.new.aff.
173 176
174 177 ==============================================================================
175 178 9. Spell file format *spell-file-format*
@@ -272,5 +275,38 @@ Performance hint: Although using affixes reduces the number of words, it
272 275 reduces the speed. It's a good idea to put all the often used words in the
273 276 word list with the affixes prepended/appended.
274 277
  278 + *spell-affix-chars*
  279 +The affix file should define the word characters when using an 8-bit encoding
  280 +(as specified with ENC). This is because the system where ":mkspell" is used
  281 +may not support a locale with this encoding and isalpha() won't work. For
  282 +example when using "cp1250" on Unix.
  283 +
  284 + *E761* *E762*
  285 +Three lines in the affix file are needed. Simplistic example:
  286 +
  287 + FOL ������
  288 + LOW ������
  289 + UPP ������
  290 +
  291 +All three lines must have exactly the same number of characters.
  292 +
  293 +The "FOL" line specifies the case-folded characters. These are used to
  294 +compare words while ignoring case. For most encodings this is identical to
  295 +the lower case line.
  296 +
  297 +The "LOW" line specifies the characters in lower-case. Mostly it's equal to
  298 +the "FOL" line.
  299 +
  300 +The "UPP" line specifies the characters with upper-case. That is, a character
  301 +is upper-case where it's different from the character at the same position in
  302 +"FOL".
  303 +
  304 +ASCII characters should be omitted, Vim always handles these in the same way.
  305 +When the encoding is UTF-8 no word characters need to be specified.
  306 +
  307 + *E763*
  308 +All spell files for the same encoding must use the same word characters,
  309 +otherwise they can't be combined without errors.
  310 +
275 311
276 312 vim:tw=78:sw=4:ts=8:ft=help:norl:
6 runtime/doc/tags
@@ -3697,6 +3697,9 @@ E758 spell.txt /*E758*
3697 3697 E759 spell.txt /*E759*
3698 3698 E76 pattern.txt /*E76*
3699 3699 E760 spell.txt /*E760*
  3700 +E761 spell.txt /*E761*
  3701 +E762 spell.txt /*E762*
  3702 +E763 spell.txt /*E763*
3700 3703 E77 message.txt /*E77*
3701 3704 E78 motion.txt /*E78*
3702 3705 E79 message.txt /*E79*
@@ -4218,6 +4221,7 @@ blockwise-operators visual.txt /*blockwise-operators*
4218 4221 blockwise-register change.txt /*blockwise-register*
4219 4222 blockwise-visual visual.txt /*blockwise-visual*
4220 4223 book intro.txt /*book*
  4224 +bookmark usr_03.txt /*bookmark*
4221 4225 boolean options.txt /*boolean*
4222 4226 break-finally eval.txt /*break-finally*
4223 4227 browse() eval.txt /*browse()*
@@ -5113,7 +5117,6 @@ hebrew hebrew.txt /*hebrew*
5113 5117 hebrew.txt hebrew.txt /*hebrew.txt*
5114 5118 help various.txt /*help*
5115 5119 help-context help.txt /*help-context*
5116   -help-tags tags 1
5117 5120 help-translated various.txt /*help-translated*
5118 5121 help-xterm-window various.txt /*help-xterm-window*
5119 5122 help.txt help.txt /*help.txt*
@@ -6230,6 +6233,7 @@ spec_chglog_release_info pi_spec.txt /*spec_chglog_release_info*
6230 6233 special-buffers windows.txt /*special-buffers*
6231 6234 speed-up tips.txt /*speed-up*
6232 6235 spell spell.txt /*spell*
  6236 +spell-affix-chars spell.txt /*spell-affix-chars*
6233 6237 spell-affix-mbyte spell.txt /*spell-affix-mbyte*
6234 6238 spell-affix-vim spell.txt /*spell-affix-vim*
6235 6239 spell-file-format spell.txt /*spell-file-format*
18 runtime/lang/menu_sv_se.latin1.vim
... ... @@ -1,6 +1,6 @@
1 1 " Menu Translations: Swedish
2   -" Maintainer: Johan Svedberg <johan@svedberg.pp.se>
3   -" Last Change: 2004 May 16
  2 +" Maintainer: Johan Svedberg <johan@svedberg.com>
  3 +" Last Change: 2005 April 23
4 4
5 5 " Quit when menu translations have already been done.
6 6 if exists("did_menu_trans")
@@ -17,12 +17,13 @@ endif
17 17 " Help menu
18 18 menutrans &Help &Hj�lp
19 19 menutrans &Overview<Tab><F1> &�versikt<Tab><F1>
20   -menutrans &How-to\ links &Hur-g�ra-l�nkar
21 20 menutrans &User\ Manual &Anv�ndarmanual
22   -"menutrans &GUI &GUI
  21 +menutrans &How-to\ links &Hur-g�ra-l�nkar
  22 +menutrans &Find\.\.\. &S�k\.\.\.
23 23 menutrans &Credits &Tack
24 24 menutrans Co&pying &Kopieringsr�ttigheter
25   -menutrans &Find\.\.\. &S�k\.\.\.
  25 +menutrans &Sponsor/Register &Sponsra/Registrering
  26 +menutrans O&rphans F&�r�lderl�sa
26 27 menutrans &Version &Version
27 28 menutrans &About &Om
28 29
@@ -50,7 +51,7 @@ menutrans &Copy<Tab>"+y &Kopiera<Tab>"+y
50 51 menutrans &Paste<Tab>"+gP Klistra &in<Tab>"+gP
51 52 menutrans Put\ &Before<Tab>[p S�tt\ in\ &f�re<Tab>[p
52 53 menutrans Put\ &After<Tab>]p S�tt\ in\ &efter<Tab>]p
53   -menutrans &Select\ all<Tab>ggVG &Markera\ allt<Tab>ggVG
  54 +menutrans &Select\ All<Tab>ggVG &Markera\ allt<Tab>ggVG
54 55 menutrans &Find\.\.\. &S�k\.\.\.
55 56 menutrans &Find<Tab>/ &S�k<Tab>/
56 57 menutrans Find\ and\ Rep&lace\.\.\. S�k\ och\ ers�tt\.\.\.
@@ -75,6 +76,7 @@ menutrans Insert\ mode Infogningsl
75 76 menutrans Block\ and\ Insert Block\ och\ infogning
76 77 menutrans Always Alltid
77 78 menutrans Toggle\ Insert\ &Mode<Tab>:set\ im! V�xla\ infogningsl�ge<Tab>:set\ im!
  79 +menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp! V�xla\ Vi-kompatibelitet<Tab>:set\ cp!
78 80 menutrans Search\ &Path\.\.\. S�kv�g\.\.\.
79 81 menutrans Ta&g\ Files\.\.\. Taggfiler\.\.\.
80 82 menutrans Toggle\ &Toolbar V�xla\ verktygsrad
@@ -91,6 +93,8 @@ menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr! V
91 93 menutrans Toggle\ &expand-tab<Tab>:set\ et! V�xla\ tab-expandering<Tab>:set\ et!
92 94 menutrans Toggle\ &auto-indent<Tab>:set\ ai! V�xla\ auto-indentering<Tab>:set\ ai!
93 95 menutrans Toggle\ &C-indenting<Tab>:set\ cin! V�xla\ C-indentering<Tab>:set\ cin!
  96 +menutrans &Shiftwidth &Shiftbredd
  97 +menutrans Soft\ &Tabstop Mjuka\ &Tabbstopp
94 98 menutrans Te&xt\ Width\.\.\. Textbredd\.\.\.
95 99 menutrans &File\ Format\.\.\. Filformat\.\.\.
96 100
@@ -123,7 +127,7 @@ menutrans &Close\ all\ folds<Tab>zM St
123 127 menutrans O&pen\ more\ folds<Tab>zr �ppna\ mer\ veck<Tab>zr
124 128 menutrans &Open\ all\ folds<Tab>zR �ppna\ mer\ veck<Tab>zR
125 129 menutrans Fold\ Met&hod Veckmetod
126   -menutrans M&anual Manual
  130 +menutrans M&anual Manuell
127 131 menutrans I&ndent Indentering
128 132 menutrans E&xpression Uttryck
129 133 menutrans S&yntax Syntax
BIN  runtime/spell/en.latin1.spl
Binary file not shown
9 src/auto/configure
@@ -4629,7 +4629,7 @@ fi
4629 4629 if test "X$vi_cv_path_ruby" != "X"; then
4630 4630 echo "$as_me:$LINENO: checking Ruby version" >&5
4631 4631 echo $ECHO_N "checking Ruby version... $ECHO_C" >&6
4632   - if $vi_cv_path_ruby -e 'RUBY_VERSION >= "1.6.0" or exit 1' >/dev/null 2>/dev/null; then
  4632 + if $vi_cv_path_ruby -e '(VERSION rescue RUBY_VERSION) >= "1.6.0" or exit 1' >/dev/null 2>/dev/null; then
4633 4633 echo "$as_me:$LINENO: result: OK" >&5
4634 4634 echo "${ECHO_T}OK" >&6
4635 4635 echo "$as_me:$LINENO: checking Ruby header files" >&5
@@ -10989,6 +10989,7 @@ fi
10989 10989
10990 10990
10991 10991
  10992 +
10992 10993 for ac_header in stdarg.h stdlib.h string.h sys/select.h sys/utsname.h \
10993 10994 termcap.h fcntl.h sgtty.h sys/ioctl.h sys/time.h termio.h \
10994 10995 iconv.h langinfo.h unistd.h stropts.h errno.h \
@@ -10996,7 +10997,7 @@ for ac_header in stdarg.h stdlib.h string.h sys/select.h sys/utsname.h \
10996 10997 sys/stream.h sys/ptem.h termios.h libc.h sys/statfs.h \
10997 10998 poll.h sys/poll.h pwd.h utime.h sys/param.h libintl.h \
10998 10999 libgen.h util/debug.h util/msg18n.h frame.h \
10999   - sys/acl.h sys/access.h sys/sysctl.h sys/sysinfo.h wchar.h
  11000 + sys/acl.h sys/access.h sys/sysctl.h sys/sysinfo.h wchar.h wctype.h
11000 11001 do
11001 11002 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
11002 11003 if eval "test \"\${$as_ac_Header+set}\" = set"; then
@@ -13372,12 +13373,14 @@ fi
13372 13373
13373 13374
13374 13375
  13376 +
13375 13377 for ac_func in bcmp fchdir fchown fseeko fsync ftello getcwd getpseudotty \
13376 13378 getpwnam getpwuid getrlimit gettimeofday getwd lstat memcmp \
13377 13379 memset nanosleep opendir putenv qsort readlink select setenv \
13378 13380 setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
13379 13381 sigvec snprintf strcasecmp strerror strftime stricmp strncasecmp \
13380   - strnicmp strpbrk strtol tgetent towlower towupper usleep utime utimes
  13382 + strnicmp strpbrk strtol tgetent towlower towupper iswupper \
  13383 + usleep utime utimes
13381 13384 do
13382 13385 as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
13383 13386 echo "$as_me:$LINENO: checking for $ac_func" >&5
405 src/charset.c
@@ -915,97 +915,280 @@ vim_iswordc_buf(p, buf)
915 915 return (GET_CHARTAB(buf, *p) != 0);
916 916 }
917 917
918   -static char spell_chartab[256];
  918 +/*
  919 + * The tables used for spelling. These are only used for the first 256
  920 + * characters.
  921 + */
  922 +typedef struct spelltab_S
  923 +{
  924 + char_u st_isw[256]; /* flags: is word char */
  925 + char_u st_isu[256]; /* flags: is uppercase char */
  926 + char_u st_fold[256]; /* chars: folded case */
  927 +} spelltab_T;
  928 +
  929 +static spelltab_T spelltab;
  930 +static int did_set_spelltab;
  931 +
  932 +#define SPELL_ISWORD 1
  933 +#define SPELL_ISUPPER 2
  934 +
  935 +static void clear_spell_chartab __ARGS((spelltab_T *sp));
  936 +static int set_spell_finish __ARGS((spelltab_T *new_st));
  937 +
  938 +/*
  939 + * Init the chartab used for spelling for ASCII.
  940 + * EBCDIC is not supported!
  941 + */
  942 + static void
  943 +clear_spell_chartab(sp)
  944 + spelltab_T *sp;
  945 +{
  946 + int i;
  947 +
  948 + /* Init everything to FALSE. */
  949 + vim_memset(sp->st_isw, FALSE, sizeof(sp->st_isw));
  950 + vim_memset(sp->st_isu, FALSE, sizeof(sp->st_isu));
  951 + for (i = 0; i < 256; ++i)
  952 + sp->st_fold[i] = i;
  953 +
  954 + /* We include digits. A word shouldn't start with a digit, but handling
  955 + * that is done separately. */
  956 + for (i = '0'; i <= '9'; ++i)
  957 + sp->st_isw[i] = TRUE;
  958 + for (i = 'A'; i <= 'Z'; ++i)
  959 + {
  960 + sp->st_isw[i] = TRUE;
  961 + sp->st_isu[i] = TRUE;
  962 + sp->st_fold[i] = i + 0x20;
  963 + }
  964 + for (i = 'a'; i <= 'z'; ++i)
  965 + sp->st_isw[i] = TRUE;
  966 +}
919 967
920 968 /*
921 969 * Init the chartab used for spelling. Only depends on 'encoding'.
922   - * Called once while starting up and when 'encoding' was changed.
923   - * Unfortunately, we can't use isalpha() here, since the current locale may
924   - * differ from 'encoding'.
  970 + * Called once while starting up and when 'encoding' changes.
  971 + * The default is to use isalpha(), but the spell file should define the word
  972 + * characters to make it possible that 'encoding' differs from the current
  973 + * locale.
925 974 */
926 975 void
927 976 init_spell_chartab()
928 977 {
929 978 int i;
930 979
931   - /* ASCII is always the same, no matter what 'encoding' is used.
932   - * EBCDIC is not supported! */
933   - for (i = 0; i < '0'; ++i)
934   - spell_chartab[i] = FALSE;
935   - /* We include numbers. A word shouldn't start with a number, but handling
936   - * that is done separately. */
937   - for ( ; i <= '9'; ++i)
938   - spell_chartab[i] = TRUE;
939   - for ( ; i < 'A'; ++i)
940   - spell_chartab[i] = FALSE;
941   - for ( ; i <= 'Z'; ++i)
942   - spell_chartab[i] = TRUE;
943   - for ( ; i < 'a'; ++i)
944   - spell_chartab[i] = FALSE;
945   - for ( ; i <= 'z'; ++i)
946   - spell_chartab[i] = TRUE;
  980 + did_set_spelltab = FALSE;
  981 + clear_spell_chartab(&spelltab);
  982 +
947 983 #ifdef FEAT_MBYTE
948 984 if (enc_dbcs)
949 985 {
950 986 /* DBCS: assume double-wide characters are word characters. */
951   - for ( ; i <= 255; ++i)
  987 + for (i = 128; i <= 255; ++i)
952 988 if (MB_BYTE2LEN(i) == 2)
953   - spell_chartab[i] = TRUE;
954   - else
955   - spell_chartab[i] = FALSE;
  989 + spelltab.st_isw[i] = TRUE;
956 990 }
957   - else if (STRCMP(p_enc, "cp850") == 0)
  991 + else
958 992 #endif
959   -#if defined(MSDOS) || defined(FEAT_MBYTE)
960 993 {
961   - /* cp850, MS-DOS */
962   - for ( ; i < 128; ++i)
963   - spell_chartab[i] = FALSE;
964   - for ( ; i <= 0x9a; ++i)
965   - spell_chartab[i] = TRUE;
966   - for ( ; i < 0xa0; ++i)
967   - spell_chartab[i] = FALSE;
968   - for ( ; i <= 0xa5; ++i)
969   - spell_chartab[i] = TRUE;
970   - for ( ; i <= 255; ++i)
971   - spell_chartab[i] = FALSE;
  994 + /* Rough guess: use isalpha() for characters above 128. */
  995 + for (i = 128; i < 256; ++i)
  996 + {
  997 + spelltab.st_isw[i] = isalpha(i);
  998 + if (isupper(i))
  999 + {
  1000 + spelltab.st_isu[i] = TRUE;
  1001 + spelltab.st_fold[i] = tolower(i);
  1002 + }
  1003 + }
972 1004 }
  1005 +}
  1006 +
  1007 +static char *e_affform = N_("E761: Format error in affix file FOL, LOW or UPP");
  1008 +static char *e_affrange = N_("E762: Character in FOL, LOW or UPP is out of range");
  1009 +
  1010 +/*
  1011 + * Set the spell character tables from strings in the affix file.
  1012 + */
  1013 + int
  1014 +set_spell_chartab(fol, low, upp)
  1015 + char_u *fol;
  1016 + char_u *low;
  1017 + char_u *upp;
  1018 +{
  1019 + /* We build the new tables here first, so that we can compare with the
  1020 + * previous one. */
  1021 + spelltab_T new_st;
  1022 + char_u *pf = fol, *pl = low, *pu = upp;
  1023 + int f, l, u;
  1024 +
  1025 + clear_spell_chartab(&new_st);
  1026 +
  1027 + while (*pf != NUL)
  1028 + {
  1029 + if (*pl == NUL || *pu == NUL)
  1030 + {
  1031 + EMSG(_(e_affform));
  1032 + return FAIL;
  1033 + }
  1034 +#ifdef FEAT_MBYTE
  1035 + f = mb_ptr2char_adv(&pf);
  1036 + l = mb_ptr2char_adv(&pl);
  1037 + u = mb_ptr2char_adv(&pu);
  1038 +#else
  1039 + f = *pf++;
  1040 + l = *pl++;
  1041 + u = *pu++;
973 1042 #endif
  1043 + /* Every character that appears is a word character. */
  1044 + if (f < 256)
  1045 + new_st.st_isw[f] = TRUE;
  1046 + if (l < 256)
  1047 + new_st.st_isw[l] = TRUE;
  1048 + if (u < 256)
  1049 + new_st.st_isw[u] = TRUE;
  1050 +
  1051 + /* if "LOW" and "FOL" are not the same the "LOW" char needs
  1052 + * case-folding */
  1053 + if (l < 256 && l != f)
  1054 + {
  1055 + if (f >= 256)
  1056 + {
  1057 + EMSG(_(e_affrange));
  1058 + return FAIL;
  1059 + }
  1060 + new_st.st_fold[l] = f;
  1061 + }
  1062 +
  1063 + /* if "UPP" and "FOL" are not the same the "UPP" char needs
  1064 + * case-folding and it's upper case. */
  1065 + if (u < 256 && u != f)
  1066 + {
  1067 + if (f >= 256)
  1068 + {
  1069 + EMSG(_(e_affrange));
  1070 + return FAIL;
  1071 + }
  1072 + new_st.st_fold[u] = f;
  1073 + new_st.st_isu[u] = TRUE;
  1074 + }
  1075 + }
  1076 +
  1077 + if (*pl != NUL || *pu != NUL)
  1078 + {
  1079 + EMSG(_(e_affform));
  1080 + return FAIL;
  1081 + }
  1082 +
  1083 + return set_spell_finish(&new_st);
  1084 +}
  1085 +
  1086 +/*
  1087 + * Set the spell character tables from strings in the .spl file.
  1088 + */
  1089 + int
  1090 +set_spell_charflags(flags, cnt, upp)
  1091 + char_u *flags;
  1092 + int cnt;
  1093 + char_u *upp;
  1094 +{
  1095 + /* We build the new tables here first, so that we can compare with the
  1096 + * previous one. */
  1097 + spelltab_T new_st;
  1098 + int i;
  1099 + char_u *p = upp;
  1100 +
  1101 + clear_spell_chartab(&new_st);
  1102 +
  1103 + for (i = 0; i < cnt; ++i)
  1104 + {
  1105 + new_st.st_isw[i + 128] = (flags[i] & SPELL_ISWORD) != 0;
  1106 + new_st.st_isu[i + 128] = (flags[i] & SPELL_ISUPPER) != 0;
  1107 +
  1108 + if (*p == NUL)
  1109 + return FAIL;
974 1110 #ifdef FEAT_MBYTE
975   - else if (STRCMP(p_enc, "iso-8859-2") == 0)
  1111 + new_st.st_fold[i + 128] = mb_ptr2char_adv(&p);
  1112 +#else
  1113 + new_st.st_fold[i + 128] = *p++;
  1114 +#endif
  1115 + }
  1116 +
  1117 + return set_spell_finish(&new_st);
  1118 +}
  1119 +
  1120 + static int
  1121 +set_spell_finish(new_st)
  1122 + spelltab_T *new_st;
  1123 +{
  1124 + int i;
  1125 +
  1126 + if (did_set_spelltab)
976 1127 {
977   - /* latin2 */
978   - for ( ; i <= 0xa0; ++i)
979   - spell_chartab[i] = FALSE;
980   - for ( ; i <= 255; ++i)
981   - spell_chartab[i] = TRUE;
982   - spell_chartab[0xa4] = FALSE; /* currency sign */
983   - spell_chartab[0xa7] = FALSE; /* paragraph sign */
984   - spell_chartab[0xad] = FALSE; /* dash */
985   - spell_chartab[0xb0] = FALSE; /* degrees */
986   - spell_chartab[0xf7] = FALSE; /* divide-by */
  1128 + /* check that it's the same table */
  1129 + for (i = 0; i < 256; ++i)
  1130 + {
  1131 + if (spelltab.st_isw[i] != new_st->st_isw[i]
  1132 + || spelltab.st_isu[i] != new_st->st_isu[i]
  1133 + || spelltab.st_fold[i] != new_st->st_fold[i])
  1134 + {
  1135 + EMSG(_("E763: Word characters differ between spell files"));
  1136 + return FAIL;
  1137 + }
  1138 + }
987 1139 }
988 1140 else
989   -#endif
990   -#if defined(FEAT_MBYTE) || !defined(MSDOS)
991 1141 {
992   - /* Rough guess: anything we don't recognize assumes word characters
993   - * like latin1. */
994   - for ( ; i < 0xc0; ++i)
995   - spell_chartab[i] = FALSE;
996   - for ( ; i <= 255; ++i)
997   - spell_chartab[i] = TRUE;
998   -# ifdef FEAT_MBYTE
999   - if (STRCMP(p_enc, "latin1") == 0)
1000   -# endif
1001   - spell_chartab[0xf7] = FALSE; /* divide-by */
  1142 + /* copy the new spelltab into the one being used */
  1143 + spelltab = *new_st;
  1144 + did_set_spelltab = TRUE;
1002 1145 }
1003   -#endif
  1146 +
  1147 + return OK;
  1148 +}
  1149 +
  1150 +#if defined(FEAT_MBYTE) || defined(PROTO)
  1151 +/*
  1152 + * Write the current tables into the .spl file.
  1153 + */
  1154 + void
  1155 +write_spell_chartab(fd)
  1156 + FILE *fd;
  1157 +{
  1158 + char_u charbuf[256 * 4];
  1159 + int len = 0;
  1160 + int flags;
  1161 + int i;
  1162 +
  1163 + if (!did_set_spelltab)
  1164 + {
  1165 + /* No character table specified, write zero counts. */
  1166 + fputc(0, fd);
  1167 + fputc(0, fd);
  1168 + fputc(0, fd);
  1169 + return;
  1170 + }
  1171 +
  1172 + fputc(128, fd); /* <charflagslen> */
  1173 + for (i = 128; i < 256; ++i)
  1174 + {
  1175 + flags = 0;
  1176 + if (spelltab.st_isw[i])
  1177 + flags |= SPELL_ISWORD;
  1178 + if (spelltab.st_isu[i])
  1179 + flags |= SPELL_ISUPPER;
  1180 + fputc(flags, fd); /* <charflags> */
  1181 +
  1182 + len += mb_char2bytes(spelltab.st_fold[i], charbuf + len);
  1183 + }
  1184 +
  1185 + put_bytes(fd, (long_u)len, 2); /* <fcharlen> */
  1186 + fwrite(charbuf, (size_t)len, (size_t)1, fd); /* <fchars> */
1004 1187 }
  1188 +#endif
1005 1189
1006 1190 /*
1007   - * Return TRUE if "p" points to a word character.
1008   - * This only depends on 'encoding', not on 'iskeyword'.
  1191 + * Return TRUE if "p" points to a word character for spelling.
1009 1192 */
1010 1193 int
1011 1194 spell_iswordc(p)
@@ -1015,9 +1198,103 @@ spell_iswordc(p)
1015 1198 if (has_mbyte && MB_BYTE2LEN(*p) > 1)
1016 1199 return mb_get_class(p) >= 2;
1017 1200 # endif
1018   - return spell_chartab[*p];
  1201 + return spelltab.st_isw[*p];
  1202 +}
  1203 +
  1204 +/*
  1205 + * Return TRUE if "c" is an upper-case character for spelling.
  1206 + */
  1207 + int
  1208 +spell_isupper(c)
  1209 + int c;
  1210 +{
  1211 +# ifdef FEAT_MBYTE
  1212 + if (enc_utf8)
  1213 + {
  1214 + /* For Unicode we can call utf_isupper(), but don't do that for ASCII,
  1215 + * because we don't want to use 'casemap' here. */
  1216 + if (c >= 128)
  1217 + return utf_isupper(c);
  1218 + }
  1219 + else if (has_mbyte && c > 256)
  1220 + {
  1221 + /* For characters above 255 we don't have something specfied.
  1222 + * Fall back to locale-dependent iswupper(). If not available
  1223 + * simply return FALSE. */
  1224 +# ifdef HAVE_ISWUPPER
  1225 + return iswupper(c);
  1226 +# else
  1227 + return FALSE;
  1228 +# endif
  1229 + }
  1230 +# endif
  1231 + return spelltab.st_isu[c];
1019 1232 }
  1233 +
  1234 +/*
  1235 + * case-fold "p[len]" into "buf[buflen]". Used for spell checking.
  1236 + * Returns FAIL when something wrong.
  1237 + */
  1238 + int
  1239 +spell_casefold(p, len, buf, buflen)
  1240 + char_u *p;
  1241 + int len;
  1242 + char_u *buf;
  1243 + int buflen;
  1244 +{
  1245 + int i;
  1246 +
  1247 + if (len >= buflen)
  1248 + {
  1249 + buf[0] = NUL;
  1250 + return FAIL; /* result will not fit */
  1251 + }
  1252 +
  1253 +#ifdef FEAT_MBYTE
  1254 + if (has_mbyte)
  1255 + {
  1256 + int c;
  1257 + int outi = 0;
  1258 +
  1259 + /* Fold one character at a time. */
  1260 + for (i = 0; i < len; i += mb_ptr2len_check(p + i))
  1261 + {
  1262 + c = mb_ptr2char(p + i);
  1263 + if (enc_utf8)
  1264 + /* For Unicode case folding is always the same, no need to use
  1265 + * the table from the spell file. */
  1266 + c = utf_fold(c);
  1267 + else if (c < 256)
  1268 + /* Use the table from the spell file. */
  1269 + c = spelltab.st_fold[c];
  1270 +# ifdef HAVE_TOWLOWER
  1271 + else
  1272 + /* We don't know what to do, fall back to towlower(), it
  1273 + * depends on the current locale. */
  1274 + c = towlower(c);
  1275 +# endif
  1276 + if (outi + MB_MAXBYTES > buflen)
  1277 + {
  1278 + buf[outi] = NUL;
  1279 + return FAIL;
  1280 + }
  1281 + outi += mb_char2bytes(c, buf + outi);
  1282 + }
  1283 + buf[outi] = NUL;
  1284 + }
  1285 + else
1020 1286 #endif
  1287 + {
  1288 + /* Be quick for non-multibyte encodings. */
  1289 + for (i = 0; i < len; ++i)
  1290 + buf[i] = spelltab.st_fold[p[i]];
  1291 + buf[i] = NUL;
  1292 + }
  1293 +
  1294 + return OK;
  1295 +}
  1296 +
  1297 +#endif /* FEAT_SYN_HL */
1021 1298
1022 1299 /*
1023 1300 * return TRUE if 'c' is a valid file-name character
2  src/config.h.in
@@ -180,6 +180,7 @@
180 180 #undef HAVE_TGETENT
181 181 #undef HAVE_TOWLOWER
182 182 #undef HAVE_TOWUPPER
  183 +#undef HAVE_ISWUPPER
183 184 #undef HAVE_USLEEP
184 185 #undef HAVE_UTIME
185 186 #undef HAVE_BIND_TEXTDOMAIN_CODESET
@@ -224,6 +225,7 @@
224 225 #undef HAVE_SYS_TIME_H
225 226 #undef HAVE_SYS_UTSNAME_H
226 227 #undef HAVE_WCHAR_H
  228 +#undef HAVE_WCTYPE_H
227 229 #undef HAVE_TERMCAP_H
228 230 #undef HAVE_TERMIOS_H
229 231 #undef HAVE_TERMIO_H
5 src/configure.in
@@ -2245,7 +2245,7 @@ AC_CHECK_HEADERS(stdarg.h stdlib.h string.h sys/select.h sys/utsname.h \
2245 2245 sys/stream.h sys/ptem.h termios.h libc.h sys/statfs.h \
2246 2246 poll.h sys/poll.h pwd.h utime.h sys/param.h libintl.h \
2247 2247 libgen.h util/debug.h util/msg18n.h frame.h \
2248   - sys/acl.h sys/access.h sys/sysctl.h sys/sysinfo.h wchar.h)
  2248 + sys/acl.h sys/access.h sys/sysctl.h sys/sysinfo.h wchar.h wctype.h)
2249 2249
2250 2250 dnl pthread_np.h may exist but can only be used after including pthread.h
2251 2251 AC_MSG_CHECKING([for pthread_np.h])
@@ -2637,7 +2637,8 @@ AC_CHECK_FUNCS(bcmp fchdir fchown fseeko fsync ftello getcwd getpseudotty \
2637 2637 memset nanosleep opendir putenv qsort readlink select setenv \
2638 2638 setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
2639 2639 sigvec snprintf strcasecmp strerror strftime stricmp strncasecmp \
2640   - strnicmp strpbrk strtol tgetent towlower towupper usleep utime utimes)
  2640 + strnicmp strpbrk strtol tgetent towlower towupper iswupper \
  2641 + usleep utime utimes)
2641 2642
2642 2643 dnl fstatfs() can take 2 to 4 arguments, try to use st_blksize if possible
2643 2644 AC_MSG_CHECKING(for st_blksize)
28 src/option.c
@@ -5658,10 +5658,20 @@ did_set_string_option(opt_idx, varp, new_value_alloced, oldval, errbuf,
5658 5658 #endif
5659 5659
5660 5660 #ifdef FEAT_SYN_HL
5661   - /* When 'spelllang' is set, load the wordlists. */
  5661 + /* When 'spelllang' is set and there is a window for this buffer in which
  5662 + * 'spell' is set load the wordlists. */
5662 5663 else if (varp == &(curbuf->b_p_spl))
5663 5664 {
5664   - errmsg = did_set_spelllang(curbuf);
  5665 + win_T *wp;
  5666 +
  5667 + FOR_ALL_WINDOWS(wp)
  5668 + if (wp->w_buffer == curbuf && wp->w_p_spell)
  5669 + {
  5670 + errmsg = did_set_spelllang(curbuf);
  5671 +# ifdef FEAT_WINDOWS
  5672 + break;
  5673 +# endif
  5674 + }
5665 5675 }
5666 5676 #endif
5667 5677
@@ -6636,6 +6646,19 @@ set_bool_option(opt_idx, varp, value, opt_flags)
6636 6646 }
6637 6647 #endif
6638 6648
  6649 +#ifdef FEAT_SYN_HL
  6650 + /* 'spell' */
  6651 + else if ((int *)varp == &curwin->w_p_spell)
  6652 + {
  6653 + if (curwin->w_p_spell)
  6654 + {
  6655 + char_u *errmsg = did_set_spelllang(curbuf);
  6656 + if (errmsg != NULL)
  6657 + EMSG(_(errmsg));
  6658 + }
  6659 + }
  6660 +#endif
  6661 +
6639 6662 #ifdef FEAT_FKMAP
6640 6663 else if ((int *)varp == &p_altkeymap)
6641 6664 {
@@ -8586,7 +8609,6 @@ buf_copy_options(buf, flags)
8586 8609 /* Don't copy 'syntax', it must be set */
8587 8610 buf->b_p_syn = empty_option;
8588 8611 buf->b_p_spl = vim_strsave(p_spl);
8589   - did_set_spelllang(buf);
8590 8612 #endif
8591 8613 #if defined(FEAT_CINDENT) && defined(FEAT_EVAL)
8592 8614 buf->b_p_inde = vim_strsave(p_inde);
1  src/proto/spell.pro
@@ -3,5 +3,6 @@ int spell_check __ARGS((win_T *wp, char_u *line, char_u *ptr, int *attrp));
3 3 int spell_move_to __ARGS((int dir, int allwords));
4 4 char_u *did_set_spelllang __ARGS((buf_T *buf));
5 5 void spell_reload __ARGS((void));
  6 +void put_bytes __ARGS((FILE *fd, long_u nr, int len));
6 7 void ex_mkspell __ARGS((exarg_T *eap));
7 8 /* vim: set ft=c : */
5 src/screen.c
@@ -2603,7 +2603,10 @@ win_line(wp, lnum, startrow, endrow)
2603 2603 }
2604 2604 }
2605 2605
2606   - if (wp->w_p_spell && *wp->w_buffer->b_p_spl != NUL)
  2606 + if (wp->w_p_spell
  2607 + && *wp->w_buffer->b_p_spl != NUL
  2608 + && wp->w_buffer->b_langp.ga_len > 0
  2609 + && *(char **)(wp->w_buffer->b_langp.ga_data) != NULL)
2607 2610 {
2608 2611 /* Prepare for spell checking. */
2609 2612 has_spell = TRUE;
93 src/spell/Makefile
... ... @@ -0,0 +1,93 @@
  1 +# Makefile for Vim spell files.
  2 +
  3 +SPELLDIR = ../../runtime/spell
  4 +VIM = ../vim
  5 +
  6 +all: en
  7 +
  8 +en: $(SPELLDIR)/en.latin1.spl \
  9 + $(SPELLDIR)/en.utf-8.spl \
  10 + $(SPELLDIR)/en.ascii.spl
  11 +
  12 +pl: $(SPELLDIR)/pl.iso-8859-2.spl \
  13 + $(SPELLDIR)/pl.utf-8.spl
  14 +
  15 +nl: $(SPELLDIR)/nl.latin1.spl \
  16 + $(SPELLDIR)/nl.utf-8.spl
  17 +
  18 +fr: $(SPELLDIR)/fr.latin1.spl \
  19 + $(SPELLDIR)/fr.utf-8.spl
  20 +
  21 +diff:
  22 + -diff -a -C 1 en_US.orig.aff en_US.aff >en_US.diff
  23 + -diff -a -C 1 en_US.orig.dic en_US.dic >>en_US.diff
  24 + -diff -a -C 1 en_AU.orig.aff en_AU.aff >en_AU.diff
  25 + -diff -a -C 1 en_AU.orig.dic en_AU.dic >>en_AU.diff
  26 + -diff -a -C 1 en_CA.orig.aff en_CA.aff >en_CA.diff
  27 + -diff -a -C 1 en_CA.orig.dic en_CA.dic >>en_CA.diff
  28 + -diff -a -C 1 en_GB.orig.aff en_GB.aff >en_GB.diff
  29 + -diff -a -C 1 en_GB.orig.dic en_GB.dic >>en_GB.diff
  30 + -diff -a -C 1 en_NZ.orig.aff en_NZ.aff >en_NZ.diff
  31 + -diff -a -C 1 en_NZ.orig.dic en_NZ.dic >>en_NZ.diff
  32 +
  33 + -diff -a -C 1 nl_NL.orig.aff nl_NL.aff >nl_NL.diff
  34 + -diff -a -C 1 nl_NL.orig.dic nl_NL.dic >>nl_NL.diff
  35 +
  36 + -diff -a -C 1 pl_PL.orig.aff pl_PL.aff >pl_PL.diff
  37 + -diff -a -C 1 pl_PL.orig.dic pl_PL.dic >>pl_PL.diff
  38 +
  39 + -diff -a -C 1 fr_FR.orig.aff fr_FR.aff >fr_FR.diff
  40 + -diff -a -C 1 fr_FR.orig.dic fr_FR.dic >>fr_FR.diff
  41 +
  42 +$(SPELLDIR)/en.latin1.spl : $(VIM) \
  43 + en_US.aff en_US.dic \
  44 + en_AU.aff en_AU.dic \
  45 + en_CA.aff en_CA.dic \
  46 + en_GB.aff en_GB.dic \
  47 + en_NZ.aff en_NZ.dic
  48 + env LANG=en_US.ISO8859-1 \
  49 + $(VIM) -e -c "mkspell! $(SPELLDIR)/en en_US en_AU en_CA en_GB \
  50 + en_NZ" -c q
  51 +
  52 +$(SPELLDIR)/en.utf-8.spl : $(VIM) \
  53 + en_US.aff en_US.dic \
  54 + en_AU.aff en_AU.dic \
  55 + en_CA.aff en_CA.dic \
  56 + en_GB.aff en_GB.dic \
  57 + en_NZ.aff en_NZ.dic
  58 + env LANG=en_US.UTF-8 \
  59 + $(VIM) -e -c "mkspell! $(SPELLDIR)/en en_US en_AU en_CA en_GB \
  60 + en_NZ" -c q
  61 +
  62 +$(SPELLDIR)/en.ascii.spl : $(VIM) \
  63 + en_US.aff en_US.dic \
  64 + en_AU.aff en_AU.dic \
  65 + en_CA.aff en_CA.dic \
  66 + en_GB.aff en_GB.dic \
  67 + en_NZ.aff en_NZ.dic
  68 + $(VIM) -e -c "mkspell! -ascii $(SPELLDIR)/en en_US en_AU en_CA en_GB \
  69 + en_NZ" -c q
  70 +
  71 +$(SPELLDIR)/pl.iso-8859-2.spl : $(VIM) \
  72 + pl_PL.aff pl_PL.dic
  73 + env LANG=pl_PL.ISO8859-2 $(VIM) -e -c "mkspell! $(SPELLDIR)/pl pl_PL" -c q
  74 +
  75 +$(SPELLDIR)/pl.utf-8.spl : $(VIM) \
  76 + pl_PL.aff pl_PL.dic
  77 + env LANG=pl_PL.UTF-8 $(VIM) -e -c "mkspell! $(SPELLDIR)/pl pl_PL" -c q
  78 +
  79 +$(SPELLDIR)/nl.latin1.spl : $(VIM) \
  80 + nl_NL.aff nl_NL.dic
  81 + env LANG=nl_NL.ISO8859-1 $(VIM) -e -c "mkspell! $(SPELLDIR)/nl nl_NL" -c q
  82 +
  83 +$(SPELLDIR)/nl.utf-8.spl : $(VIM) \
  84 + nl_NL.aff nl_NL.dic
  85 + env LANG=nl_NL.UTF-8 $(VIM) -e -c "mkspell! $(SPELLDIR)/nl nl_NL" -c q
  86 +
  87 +$(SPELLDIR)/fr.latin1.spl : $(VIM) \
  88 + fr_FR.aff fr_FR.dic
  89 + env LANG=fr_FR.ISO8859-1 $(VIM) -e -c "mkspell! $(SPELLDIR)/fr fr_FR" -c q
  90 +
  91 +$(SPELLDIR)/fr.utf-8.spl : $(VIM) \
  92 + fr_FR.aff fr_FR.dic
  93 + env LANG=fr_FR.UTF-8 $(VIM) -e -c "mkspell! $(SPELLDIR)/fr fr_FR" -c q
2,268 src/spell/en_GB.diff
... ... @@ -0,0 +1,2268 @@
  1 +*** en_GB.orig.aff Fri Apr 15 13:20:36 2005
  2 +--- en_GB.aff Sat Apr 23 19:57:46 2005
  3 +***************
  4 +*** 7,9 ****
  5 + SET ISO8859-1
  6 +! TRY esia�nrtolcdugmphbyfvkw-'.zqjxSNRTLCGDMPHBEAUYOFIVKW���ZQJX����������
  7 + REP 24
  8 +--- 7,14 ----
  9 + SET ISO8859-1
  10 +! TRY esia�nrtolcdugmphbyfvkw-'.zqjxSNRTLCGDMPHBEAUYOFIVKW���ZQJX����������
  11 +!
  12 +! FOL ��������������������������������������������������������������
  13 +! LOW ��������������������������������������������������������������
  14 +! UPP ��������������������������������������������������������������
  15 +!
  16 + REP 24
  17 +***************
  18 +*** 34,53 ****
  19 + PFX A Y 2
  20 +! PFX A 0 re [^e]
  21 +! PFX A 0 re- e
  22 + PFX a Y 1
  23 +! PFX a 0 mis .
  24 + PFX I Y 4
  25 +! PFX I 0 il l
  26 +! PFX I 0 ir r
  27 +! PFX I 0 im [bmp]
  28 +! PFX I 0 in [^blmpr]
  29 + PFX c Y 1
  30 +! PFX c 0 over .
  31 + PFX U Y 1
  32 +! PFX U 0 un .
  33 + PFX C Y 2
  34 +! PFX C 0 de [^e]
  35 +! PFX C 0 de- e
  36 + PFX E Y 1
  37 +! PFX E 0 dis .
  38 + PFX F Y 5
  39 +--- 39,58 ----
  40 + PFX A Y 2
  41 +! PFX A 0 re [^e]
  42 +! PFX A 0 re- e
  43 + PFX a Y 1
  44 +! PFX a 0 mis .
  45 + PFX I Y 4
  46 +! PFX I 0 il l
  47 +! PFX I 0 ir r
  48 +! PFX I 0 im [bmp]
  49 +! PFX I 0 in [^blmpr]
  50 + PFX c Y 1
  51 +! PFX c 0 over .
  52 + PFX U Y 1
  53 +! PFX U 0 un .
  54 + PFX C Y 2
  55 +! PFX C 0 de [^e]
  56 +! PFX C 0 de- e
  57 + PFX E Y 1
  58 +! PFX E 0 dis .
  59 + PFX F Y 5
  60 +***************
  61 +*** 57,451 ****
  62 + PFX F 0 col l
  63 +! PFX F 0 con [^abehilmopru].
  64 + PFX K Y 1
  65 +! PFX K 0 pre .
  66 + PFX e Y 1
  67 +! PFX e 0 out .
  68 + PFX f Y 2
  69 +! PFX f 0 under [^r]
  70 +! PFX f 0 under- r
  71 + PFX O Y 1
  72 +! PFX O 0 non- .
  73 + PFX 4 Y 1
  74 +! PFX 4 0 trans .
  75 + SFX V Y 15
  76 +! SFX V 0 tive [aio]
  77 +! SFX V b ptive b
  78 +! SFX V d sive d
  79 +! SFX V be ptive be
  80 +! SFX V e tive ce
  81 +! SFX V de sive de
  82 +! SFX V ke cative ke
  83 +! SFX V e ptive me
  84 +! SFX V e ive [st]e
  85 +! SFX V e ative [^bcdkmst]e
  86 +! SFX V 0 lative [aeiou]l
  87 +! SFX V 0 ative [^aeiou]l
  88 +! SFX V 0 ive [st]
  89 +! SFX V y icative y
  90 +! SFX V 0 ative [^abdeilosty]
  91 + SFX v Y 15
  92 +! SFX v 0 tively [aio]
  93 +! SFX v b ptively b
  94 +! SFX v d sively d
  95 +! SFX v be ptively be
  96 +! SFX v e tively ce
  97 +! SFX v de sively de
  98 +! SFX v ke catively ke
  99 +! SFX v e ptively me
  100 +! SFX v e ively [st]e
  101 +! SFX v e atively [^bcdkmst]e
  102 +! SFX v 0 latively [aeiou]l
  103 +! SFX v 0 atively [^aeiou]l
  104 +! SFX v 0 ively [st]
  105 +! SFX v y icatively y
  106 +! SFX v 0 atively [^abdeilosty]
  107 + SFX u Y 15
  108 +! SFX u 0 tiveness [aio]
  109 +! SFX u b ptiveness b
  110 +! SFX u d siveness d
  111 +! SFX u be ptiveness be
  112 +! SFX u e tiveness ce
  113 +! SFX u de siveness de
  114 +! SFX u ke cativeness ke
  115 +! SFX u e ptiveness me
  116 +! SFX u e iveness [st]e
  117 +! SFX u e ativeness [^bcdkmst]e
  118 +! SFX u 0 lativeness [aeiou]l
  119 +! SFX u 0 ativeness [^aeiou]l
  120 +! SFX u 0 iveness [st]
  121 +! SFX u y icativeness y
  122 +! SFX u 0 ativeness [^abdeilosty]
  123 + SFX N Y 26
  124 +! SFX N b ption b
  125 +! SFX N d sion d
  126 +! SFX N be ption be
  127 +! SFX N e tion ce
  128 +! SFX N de sion de
  129 +! SFX N ke cation ke
  130 +! SFX N e ption ume
  131 +! SFX N e mation [^u]me
  132 +! SFX N e ion [^o]se
  133 +! SFX N e ition ose
  134 +! SFX N e ation [iou]te
  135 +! SFX N e ion [^iou]te
  136 +! SFX N e ation [^bcdkmst]e
  137 +! SFX N el ulsion el
  138 +! SFX N 0 lation [aiou]l
  139 +! SFX N 0 ation [^aeiou]l
  140 +! SFX N 0 mation [aeiou]m
  141 +! SFX N 0 ation [^aeiou]m
  142 +! SFX N er ration er
  143 +! SFX N 0 ation [^e]r
  144 +! SFX N 0 ion [sx]
  145 +! SFX N t ssion mit
  146 +! SFX N 0 ion [^m]it
  147 +! SFX N 0 ation [^i]t
  148 +! SFX N y ication y
  149 +! SFX N 0 ation [^bdelmrstxy]
  150 + SFX n Y 28
  151 +! SFX n 0 tion a
  152 +! SFX n e tion ce
  153 +! SFX n ke cation ke
  154 +! SFX n e ation [iou]te
  155 +! SFX n e ion [^iou]te
  156 +! SFX n e ation [^ckt]e
  157 +! SFX n el ulsion el
  158 +! SFX n 0 lation [aiou]l
  159 +! SFX n 0 ation [^aeiou]l
  160 +! SFX n er ration er
  161 +! SFX n 0 ation [^e]r
  162 +! SFX n y ation py
  163 +! SFX n y ication [^p]y
  164 +! SFX n 0 ation [^aelry]
  165 +! SFX n 0 tions a
  166 +! SFX n e tions ce
  167 +! SFX n ke cations ke
  168 +! SFX n e ations [iou]te
  169 +! SFX n e ions [^iou]te
  170 +! SFX n e ations [^ckt]e
  171 +! SFX n el ulsions el
  172 +! SFX n 0 lations [aiou]l
  173 +! SFX n 0 ations [^aeiou]l
  174 +! SFX n er rations er
  175 +! SFX n 0 ations [^e]r
  176 +! SFX n y ations py
  177 +! SFX n y ications [^p]y
  178 +! SFX n 0 ations [^aelry]
  179 + SFX X Y 26
  180 +! SFX X b ptions b
  181 +! SFX X d sions d
  182 +! SFX X be ptions be
  183 +! SFX X e tions ce
  184 +! SFX X ke cations ke
  185 +! SFX X de sions de
  186 +! SFX X e ptions ume
  187 +! SFX X e mations [^u]me
  188 +! SFX X e ions [^o]se
  189 +! SFX X e itions ose
  190 +! SFX X e ations [iou]te
  191 +! SFX X e ions [^iou]te
  192 +! SFX X e ations [^bcdkmst]e
  193 +! SFX X el ulsions el
  194 +! SFX X 0 lations [aiou]l
  195 +! SFX X 0 ations [^aeiou]l
  196 +! SFX X 0 mations [aeiou]m
  197 +! SFX X 0 ations [^aeiou]m
  198 +! SFX X er rations er
  199 +! SFX X 0 ations [^e]r
  200 +! SFX X 0 ions [sx]
  201 +! SFX X t ssions mit
  202 +! SFX X 0 ions [^m]it
  203 +! SFX X 0 ations [^i]t
  204 +! SFX X y ications y
  205 +! SFX X 0 ations [^bdelmrstxy]
  206 + SFX x Y 40
  207 +! SFX x b ptional b
  208 +! SFX x d sional d
  209 +! SFX x be ptional be
  210 +! SFX x e tional ce
  211 +! SFX x ke cational ke
  212 +! SFX x de sional de
  213 +! SFX x e ional [^o]se
  214 +! SFX x e itional ose
  215 +! SFX x e ional te
  216 +! SFX x e ational [^bcdkst]e
  217 +! SFX x el ulsional el
  218 +! SFX x 0 lational [aiou]l
  219 +! SFX x 0 ational [^aeiou]l
  220 +! SFX x er rational er
  221 +! SFX x 0 ational [^e]r
  222 +! SFX x 0 ional [sx]
  223 +! SFX x 0 ional [^n]t
  224 +! SFX x 0 ational nt
  225 +! SFX x y icational y
  226 +! SFX x 0 ational [^bdelrstxy]
  227 +! SFX x b ptionally b
  228 +! SFX x d sionally d
  229 +! SFX x be ptionally be
  230 +! SFX x e tionally ce
  231 +! SFX x ke cationally ke
  232 +! SFX x de sionally de
  233 +! SFX x e ionally [^o]se
  234 +! SFX x e itionally ose
  235 +! SFX x e ionally te
  236 +! SFX x e ationally [^bcdkst]e
  237 +! SFX x el ulsionally el
  238 +! SFX x 0 lationally [aiou]l
  239 +! SFX x 0 ationally [^aeiou]l
  240 +! SFX x er rationally er
  241 +! SFX x 0 ationally [^e]r
  242 +! SFX x 0 ionally [sx]
  243 +! SFX x 0 ionally [^n]t
  244 +! SFX x 0 ationally nt
  245 +! SFX x y icationally y
  246 +! SFX x 0 ationally [^bdelrstxy]
  247 + SFX H N 13
  248 +! SFX H y ieth y
  249 +! SFX H ree ird ree
  250 +! SFX H ve fth ve
  251 +! SFX H e th [^ev]e
  252 +! SFX H 0 h t
  253 +! SFX H 0 th [^ety]
  254 +! SFX H y ieths y
  255 +! SFX H ree irds ree
  256 +! SFX H ve fths ve
  257 +! SFX H e ths [^ev]e
  258 +! SFX H 0 hs t
  259 +! SFX H 0 ths [^ety]
  260 +! SFX H 0 fold .
  261 + SFX Y Y 9
  262 +! SFX Y 0 ally ic
  263 +! SFX Y 0 ly [^i]c
  264 +! SFX Y e y [^aeiou]le
  265 +! SFX Y 0 ly [aeiou]le
  266 +! SFX Y 0 ly [^l]e
  267 +! SFX Y 0 y [^aeiou]l
  268 +! SFX Y y ily [^aeiou]y
  269 +! SFX Y 0 ly [aeiou][ly]
  270 +! SFX Y 0 ly [^cely]
  271 + SFX G Y 24
  272 +! SFX G e ing [^eioy]e
  273 +! SFX G 0 ing [eoy]e
  274 +! SFX G ie ying ie
  275 +! SFX G 0 bing [^aeio][aeiou]b
  276 +! SFX G 0 king [^aeio][aeiou]c
  277 +! SFX G 0 ding [^aeio][aeiou]d
  278 +! SFX G 0 fing [^aeio][aeiou]f
  279 +! SFX G 0 ging [^aeio][aeiou]g
  280 +! SFX G 0 king [^aeio][aeiou]k
  281 +! SFX G 0 ling [^aeio][eiou]l
  282 +! SFX G 0 ing [aeio][eiou]l
  283 +! SFX G 0 ling [^aeo]al
  284 +! SFX G 0 ing [aeo]al
  285 +! SFX G 0 ming [^aeio][aeiou]m
  286 +! SFX G 0 ning [^aeio][aeiou]n
  287 +! SFX G 0 ping [^aeio][aeiou]p
  288 +! SFX G 0 ring [^aeio][aeiou]r
  289 +! SFX G 0 sing [^aeio][aeiou]s
  290 +! SFX G 0 ting [^aeio][aeiou]t
  291 +! SFX G 0 ving [^aeio][aeiou]v
  292 +! SFX G 0 zing [^aeio][aeiou]z
  293 +! SFX G 0 ing [aeio][aeiou][bcdfgkmnprstvz]
  294 +! SFX G 0 ing [^aeiou][bcdfgklmnprstvz]
  295 +! SFX G 0 ing [^ebcdfgklmnprstvz]
  296 + SFX J Y 25
  297 +! SFX J e ings [^eioy]e
  298 +! SFX J 0 ings [eoy]e
  299 <