Mercurial > pidgin
comparison plugins/spellchk.c @ 11317:cdd9d1011d97
[gaim-migrate @ 13519]
Reapplying the previous changes, plus Levi's changes to fix the crashing, plus a couple more cosmetic fixes by me.
committer: Tailor Script <tailor@pidgin.im>
author | Richard Laager <rlaager@wiktel.com> |
---|---|
date | Fri, 19 Aug 2005 20:06:37 +0000 |
parents | bcc7f30c91bd |
children | 519dc2186438 |
comparison
equal
deleted
inserted
replaced
11316:12f6164ee2c6 | 11317:cdd9d1011d97 |
---|---|
54 #define SPELLCHK_OBJECT_KEY "spellchk" | 54 #define SPELLCHK_OBJECT_KEY "spellchk" |
55 | 55 |
56 enum { | 56 enum { |
57 BAD_COLUMN, | 57 BAD_COLUMN, |
58 GOOD_COLUMN, | 58 GOOD_COLUMN, |
59 WORD_ONLY_COLUMN, | |
59 N_COLUMNS | 60 N_COLUMNS |
60 }; | 61 }; |
61 | 62 |
62 struct _spellchk { | 63 struct _spellchk { |
63 GtkTextView *view; | 64 GtkTextView *view; |
64 GtkTextMark *mark_insert_start; | 65 GtkTextMark *mark_insert_start; |
65 GtkTextMark *mark_insert_end; | 66 GtkTextMark *mark_insert_end; |
66 | 67 |
67 gchar *word; | 68 const gchar *word; |
68 gboolean inserting; | 69 gboolean inserting; |
69 gboolean ignore_correction; | 70 gboolean ignore_correction; |
70 gint pos; | 71 gint pos; |
71 }; | 72 }; |
72 | 73 |
73 typedef struct _spellchk spellchk; | 74 typedef struct _spellchk spellchk; |
74 | 75 |
75 static GtkListStore *model; | 76 static GtkListStore *model; |
76 | 77 |
77 static gboolean | 78 static gboolean |
78 is_word_uppercase(gchar *word) | 79 is_word_uppercase(const gchar *word) |
79 { | 80 { |
80 for (; word[0] != '\0'; word = g_utf8_find_next_char (word, NULL)) { | 81 for (; word[0] != '\0'; word = g_utf8_find_next_char (word, NULL)) { |
81 if (!g_unichar_isupper(g_utf8_get_char(word)) && | 82 if (!g_unichar_isupper(g_utf8_get_char(word)) && |
82 !g_unichar_ispunct(g_utf8_get_char(word))) | 83 !g_unichar_ispunct(g_utf8_get_char(word))) |
83 return FALSE; | 84 return FALSE; |
85 | 86 |
86 return TRUE; | 87 return TRUE; |
87 } | 88 } |
88 | 89 |
89 static gboolean | 90 static gboolean |
90 is_word_lowercase(gchar *word) | 91 is_word_lowercase(const gchar *word) |
91 { | 92 { |
92 for (; word[0] != '\0'; word = g_utf8_find_next_char(word, NULL)) { | 93 for (; word[0] != '\0'; word = g_utf8_find_next_char(word, NULL)) { |
93 if (!g_unichar_islower(g_utf8_get_char(word)) && | 94 if (!g_unichar_islower(g_utf8_get_char(word)) && |
94 !g_unichar_ispunct(g_utf8_get_char(word))) | 95 !g_unichar_ispunct(g_utf8_get_char(word))) |
95 return FALSE; | 96 return FALSE; |
97 | 98 |
98 return TRUE; | 99 return TRUE; |
99 } | 100 } |
100 | 101 |
101 static gboolean | 102 static gboolean |
102 is_word_proper(gchar *word) | 103 is_word_proper(const gchar *word) |
103 { | 104 { |
104 if (word[0] == '\0') | 105 if (word[0] == '\0') |
105 return FALSE; | 106 return FALSE; |
106 | 107 |
107 if (!g_unichar_isupper(g_utf8_get_char_validated(word, -1))) | 108 if (!g_unichar_isupper(g_utf8_get_char_validated(word, -1))) |
109 | 110 |
110 return is_word_lowercase(g_utf8_offset_to_pointer(word, 1)); | 111 return is_word_lowercase(g_utf8_offset_to_pointer(word, 1)); |
111 } | 112 } |
112 | 113 |
113 static gchar * | 114 static gchar * |
114 make_word_proper(gchar *word) | 115 make_word_proper(const gchar *word) |
115 { | 116 { |
116 gchar *state = g_utf8_strdown(word, -1); | 117 gchar *state = g_utf8_strdown(word, -1); |
117 | 118 |
118 state[0] = g_unichar_toupper(g_utf8_get_char(word)); | 119 state[0] = g_unichar_toupper(g_utf8_get_char(word)); |
119 | 120 |
120 return state; | 121 return state; |
122 } | |
123 | |
124 static gboolean | |
125 substitute_simple_buffer(GtkTextBuffer *buffer) | |
126 { | |
127 GtkTextIter start; | |
128 GtkTextIter end; | |
129 GtkTreeIter treeiter; | |
130 gchar *text = NULL; | |
131 | |
132 gtk_text_buffer_get_iter_at_offset(buffer, &start, 0); | |
133 gtk_text_buffer_get_iter_at_offset(buffer, &end, 0); | |
134 gtk_text_iter_forward_to_end(&end); | |
135 | |
136 text = gtk_text_buffer_get_text(buffer, &start, &end, FALSE); | |
137 | |
138 if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &treeiter) && text) { | |
139 do{ | |
140 GValue val0 = {0, }; | |
141 GValue val1 = {0, }; | |
142 GValue val2 = {0, }; | |
143 const gchar *bad; | |
144 const gchar *good; | |
145 gchar *cursor; | |
146 gboolean word_only; | |
147 glong char_pos; | |
148 | |
149 gtk_tree_model_get_value(GTK_TREE_MODEL(model), &treeiter, BAD_COLUMN, &val0); | |
150 gtk_tree_model_get_value(GTK_TREE_MODEL(model), &treeiter, GOOD_COLUMN, &val1); | |
151 gtk_tree_model_get_value(GTK_TREE_MODEL(model), &treeiter, WORD_ONLY_COLUMN, &val2); | |
152 | |
153 bad = g_value_get_string(&val0); | |
154 good = g_value_get_string(&val1); | |
155 word_only = g_value_get_boolean(&val2); | |
156 | |
157 /* using g_utf8_* to get /character/ offsets instead of byte offsets for buffer */ | |
158 if (!word_only && (cursor = g_strrstr(text, bad))) | |
159 { | |
160 char_pos = g_utf8_pointer_to_offset(text, cursor); | |
161 gtk_text_buffer_get_iter_at_offset(buffer, &start, char_pos); | |
162 gtk_text_buffer_get_iter_at_offset(buffer, &end, char_pos + g_utf8_strlen(bad, -1)); | |
163 gtk_text_buffer_delete(buffer, &start, &end); | |
164 | |
165 gtk_text_buffer_get_iter_at_offset(buffer, &start, char_pos); | |
166 gtk_text_buffer_insert(buffer, &start, good, -1); | |
167 | |
168 g_value_unset(&val0); | |
169 g_value_unset(&val1); | |
170 g_value_unset(&val2); | |
171 | |
172 return TRUE; | |
173 } | |
174 | |
175 } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &treeiter)); | |
176 } | |
177 | |
178 return FALSE; | |
121 } | 179 } |
122 | 180 |
123 static gchar * | 181 static gchar * |
124 substitute_word(gchar *word) | 182 substitute_word(gchar *word) |
125 { | 183 { |
134 | 192 |
135 if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter)) { | 193 if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter)) { |
136 do { | 194 do { |
137 GValue val0 = {0, }; | 195 GValue val0 = {0, }; |
138 GValue val1 = {0, }; | 196 GValue val1 = {0, }; |
139 char *bad; | 197 GValue val2 = {0, }; |
140 char *good; | 198 const char *bad; |
199 const char *good; | |
141 gchar *tmpbad; | 200 gchar *tmpbad; |
142 gchar *tmpword; | 201 gchar *tmpword; |
143 | 202 gboolean word_only; |
144 gtk_tree_model_get_value(GTK_TREE_MODEL(model), &iter, 0, &val0); | 203 |
145 gtk_tree_model_get_value(GTK_TREE_MODEL(model), &iter, 1, &val1); | 204 gtk_tree_model_get_value(GTK_TREE_MODEL(model), &iter, BAD_COLUMN, &val0); |
146 | 205 gtk_tree_model_get_value(GTK_TREE_MODEL(model), &iter, GOOD_COLUMN, &val1); |
147 bad = (char *) g_value_get_string(&val0); | 206 gtk_tree_model_get_value(GTK_TREE_MODEL(model), &iter, WORD_ONLY_COLUMN, &val2); |
148 good = (char *) g_value_get_string(&val1); | 207 |
208 bad = g_value_get_string(&val0); | |
209 good = g_value_get_string(&val1); | |
210 word_only = g_value_get_boolean(&val2); | |
149 | 211 |
150 tmpbad = g_utf8_casefold(bad, -1); | 212 tmpbad = g_utf8_casefold(bad, -1); |
151 tmpword = g_utf8_casefold(word, -1); | 213 tmpword = g_utf8_casefold(word, -1); |
152 | 214 |
153 if (!strcmp(bad, lowerword) || (!is_word_lowercase(bad) && !strcmp(tmpbad, tmpword))) { | 215 if (word_only && (!strcmp(bad, lowerword) || (!is_word_lowercase(bad) && !strcmp(tmpbad, tmpword)))) { |
216 g_free(tmpbad); | |
217 g_free(tmpword); | |
218 | |
154 outword = g_strdup(good); | 219 outword = g_strdup(good); |
155 | 220 |
156 if (is_word_lowercase(bad) && is_word_lowercase(good)) { | 221 if (is_word_lowercase(bad) && is_word_lowercase(good)) { |
157 | 222 |
158 if (is_word_uppercase (word)) { | 223 if (is_word_uppercase (word)) { |
170 } | 235 } |
171 } | 236 } |
172 | 237 |
173 g_value_unset(&val0); | 238 g_value_unset(&val0); |
174 g_value_unset(&val1); | 239 g_value_unset(&val1); |
175 | 240 g_value_unset(&val2); |
176 g_free(tmpbad); | |
177 g_free(tmpword); | |
178 | 241 |
179 return outword; | 242 return outword; |
180 } | 243 } |
244 | |
181 g_value_unset(&val0); | 245 g_value_unset(&val0); |
182 g_value_unset(&val1); | 246 g_value_unset(&val1); |
183 | 247 g_value_unset(&val2); |
184 g_free(tmpbad); | 248 g_free(tmpbad); |
185 g_free(tmpword); | 249 g_free(tmpword); |
186 | 250 |
187 } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter)); | 251 } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter)); |
188 } | 252 } |
287 | 351 |
288 gboolean result; | 352 gboolean result; |
289 gchar *tmp; | 353 gchar *tmp; |
290 int period_count = 0; | 354 int period_count = 0; |
291 gchar *word; | 355 gchar *word; |
356 GtkTextMark *mark; | |
357 GtkTextIter pos; | |
358 | |
359 if (substitute_simple_buffer(buffer)) | |
360 { | |
361 mark = gtk_text_buffer_get_insert(buffer); | |
362 gtk_text_buffer_get_iter_at_mark(buffer, &pos, mark); | |
363 spell->pos = gtk_text_iter_get_offset(&pos); | |
364 | |
365 gtk_text_buffer_get_iter_at_mark(buffer, &start, mark); | |
366 gtk_text_buffer_get_iter_at_mark(buffer, &end, mark); | |
367 } | |
292 | 368 |
293 /* We need to go backwords to find out if we are inside a word or not. */ | 369 /* We need to go backwords to find out if we are inside a word or not. */ |
294 gtk_text_iter_backward_char(&end); | 370 gtk_text_iter_backward_char(&end); |
295 | 371 |
296 if (spellchk_inside_word(&end)) { | 372 if (spellchk_inside_word(&end)) { |
355 g_free(tmp); | 431 g_free(tmp); |
356 return; | 432 return; |
357 } | 433 } |
358 g_free(tmp); | 434 g_free(tmp); |
359 | 435 |
360 /* g_free(spell->word); */ | |
361 spell->word = NULL; | 436 spell->word = NULL; |
362 | 437 |
363 } | 438 } |
364 | 439 |
365 /* insertion works like this: | 440 /* insertion works like this: |
375 if (spell->inserting == TRUE) | 450 if (spell->inserting == TRUE) |
376 return; | 451 return; |
377 | 452 |
378 spell->inserting = TRUE; | 453 spell->inserting = TRUE; |
379 | 454 |
380 if (spell->word) { | 455 spell->word = NULL; |
381 /* g_free(spell->word); */ | |
382 spell->word = NULL; | |
383 } | |
384 | 456 |
385 gtk_text_buffer_move_mark(buffer, spell->mark_insert_start, iter); | 457 gtk_text_buffer_move_mark(buffer, spell->mark_insert_start, iter); |
386 } | 458 } |
387 | 459 |
388 static void | 460 static void |
429 mark = gtk_text_buffer_get_insert(buffer); | 501 mark = gtk_text_buffer_get_insert(buffer); |
430 gtk_text_buffer_get_iter_at_mark(buffer, &pos, mark); | 502 gtk_text_buffer_get_iter_at_mark(buffer, &pos, mark); |
431 place = gtk_text_iter_get_offset(&pos); | 503 place = gtk_text_iter_get_offset(&pos); |
432 | 504 |
433 if ((place + 1) != spell->pos) { | 505 if ((place + 1) != spell->pos) { |
434 /* g_free(spell->word); */ | |
435 spell->word = NULL; | 506 spell->word = NULL; |
436 return; | 507 return; |
437 } | 508 } |
438 | 509 |
439 gtk_text_buffer_get_iter_at_mark(buffer, &start2, spell->mark_insert_start); | 510 gtk_text_buffer_get_iter_at_mark(buffer, &start2, spell->mark_insert_start); |
441 | 512 |
442 gtk_text_buffer_delete(buffer, &start2, &end2); | 513 gtk_text_buffer_delete(buffer, &start2, &end2); |
443 gtk_text_buffer_insert(buffer, &start2, spell->word, -1); | 514 gtk_text_buffer_insert(buffer, &start2, spell->word, -1); |
444 spell->ignore_correction = TRUE; | 515 spell->ignore_correction = TRUE; |
445 | 516 |
446 /* g_free(spell->word); */ | |
447 spell->inserting = FALSE; | 517 spell->inserting = FALSE; |
448 spell->word = NULL; | 518 spell->word = NULL; |
449 } | 519 } |
450 | 520 |
451 spellchk* | 521 static void |
452 spellchk_new_attach(GaimConversation *c) { | 522 spellchk_new_attach(GaimConversation *c) { |
453 spellchk *spell; | 523 spellchk *spell; |
454 GtkTextBuffer *buffer; | 524 GtkTextBuffer *buffer; |
455 GtkTextIter start, end; | 525 GtkTextIter start, end; |
456 GaimGtkConversation *gtkconv; | 526 GaimGtkConversation *gtkconv; |
459 gtkconv = GAIM_GTK_CONVERSATION(c); | 529 gtkconv = GAIM_GTK_CONVERSATION(c); |
460 | 530 |
461 view = GTK_TEXT_VIEW(gtkconv->entry); | 531 view = GTK_TEXT_VIEW(gtkconv->entry); |
462 | 532 |
463 spell = g_object_get_data(G_OBJECT(view), SPELLCHK_OBJECT_KEY); | 533 spell = g_object_get_data(G_OBJECT(view), SPELLCHK_OBJECT_KEY); |
464 if(spell){ | 534 if (spell != NULL) |
465 return spell; | 535 return; |
466 } | |
467 | 536 |
468 /* attach to the widget */ | 537 /* attach to the widget */ |
469 spell = g_new0(spellchk, 1); | 538 spell = g_new0(spellchk, 1); |
470 spell->view = view; | 539 spell->view = view; |
471 | 540 |
494 G_CALLBACK(insert_text_before), spell); | 563 G_CALLBACK(insert_text_before), spell); |
495 g_signal_connect_after(G_OBJECT(buffer), | 564 g_signal_connect_after(G_OBJECT(buffer), |
496 "insert-text", | 565 "insert-text", |
497 G_CALLBACK(insert_text_after), spell); | 566 G_CALLBACK(insert_text_after), spell); |
498 | 567 |
499 return spell; | 568 return; |
500 } | 569 } |
501 | 570 |
502 static int buf_get_line(char *ibuf, char **buf, int *position, int len) | 571 static int buf_get_line(char *ibuf, char **buf, int *position, int len) |
503 { | 572 { |
504 int pos = *position; | 573 int pos = *position; |
527 return 1; | 596 return 1; |
528 } | 597 } |
529 | 598 |
530 static void load_conf() | 599 static void load_conf() |
531 { | 600 { |
532 /* There are things in this word list that the plugin can't yet correct. | 601 /* Corrections to change "...", "(c)", "(r)", and "(tm)" to their |
533 * For example, BAD "words" with spaces in them. I've left them in the | |
534 * list because if the plugin is enhanced in the future, they'll be | |
535 * useful corrections. | |
536 * | |
537 * Corrections to change "...", "(c)", "(r)", and "(tm)" to their | |
538 * Unicode character equivalents were not added here even though | 602 * Unicode character equivalents were not added here even though |
539 * they existed in the source list(s). This plugin doesn't yet | 603 * they existed in the source list(s). I think these corrections |
540 * handle them and it seems that even if it did, those corrections | |
541 * would be more trouble than they're worth. | 604 * would be more trouble than they're worth. |
542 * | |
543 * - Richard Laager (rlaager) | |
544 */ | 605 */ |
545 const char * const defaultconf = | 606 const char * const defaultconf = |
546 "BAD abbout\nGOOD about\n" | 607 "BAD abbout\nGOOD about\n" |
547 "BAD abotu\nGOOD about\n" | 608 "BAD abotu\nGOOD about\n" |
548 "BAD abouta\nGOOD about a\n" | 609 "BAD abouta\nGOOD about a\n" |
567 "BAD adequite\nGOOD adequate\n" | 628 "BAD adequite\nGOOD adequate\n" |
568 "BAD adn\nGOOD and\n" | 629 "BAD adn\nGOOD and\n" |
569 "BAD advanage\nGOOD advantage\n" | 630 "BAD advanage\nGOOD advantage\n" |
570 "BAD affraid\nGOOD afraid\n" | 631 "BAD affraid\nGOOD afraid\n" |
571 "BAD afterthe\nGOOD after the\n" | 632 "BAD afterthe\nGOOD after the\n" |
572 "BAD againstt he\nGOOD against the\n" | 633 "COMPLETE 0\nBAD againstt he\nGOOD against the\n" |
573 "BAD aganist\nGOOD against\n" | 634 "BAD aganist\nGOOD against\n" |
574 "BAD aggresive\nGOOD aggressive\n" | 635 "BAD aggresive\nGOOD aggressive\n" |
575 "BAD agian\nGOOD again\n" | 636 "BAD agian\nGOOD again\n" |
576 "BAD agreemeent\nGOOD agreement\n" | 637 "BAD agreemeent\nGOOD agreement\n" |
577 "BAD agreemeents\nGOOD agreements\n" | 638 "BAD agreemeents\nGOOD agreements\n" |
603 "BAD amkes\nGOOD makes\n" | 664 "BAD amkes\nGOOD makes\n" |
604 "BAD anbd\nGOOD and\n" | 665 "BAD anbd\nGOOD and\n" |
605 "BAD andone\nGOOD and one\n" | 666 "BAD andone\nGOOD and one\n" |
606 "BAD andteh\nGOOD and the\n" | 667 "BAD andteh\nGOOD and the\n" |
607 "BAD andthe\nGOOD and the\n" | 668 "BAD andthe\nGOOD and the\n" |
608 "BAD andt he\nGOOD and the\n" | 669 "COMPLETE 0\nBAD andt he\nGOOD and the\n" |
609 "BAD anothe\nGOOD another\n" | 670 "BAD anothe\nGOOD another\n" |
610 "BAD anual\nGOOD annual\n" | 671 "BAD anual\nGOOD annual\n" |
611 "BAD any1\nGOOD anyone\n" | 672 "BAD any1\nGOOD anyone\n" |
612 "BAD apparant\nGOOD apparent\n" | 673 "BAD apparant\nGOOD apparent\n" |
613 "BAD apparrent\nGOOD apparent\n" | 674 "BAD apparrent\nGOOD apparent\n" |
620 "BAD approrpiate\nGOOD appropriate\n" | 681 "BAD approrpiate\nGOOD appropriate\n" |
621 "BAD approrpriate\nGOOD appropriate\n" | 682 "BAD approrpriate\nGOOD appropriate\n" |
622 "BAD aquisition\nGOOD acquisition\n" | 683 "BAD aquisition\nGOOD acquisition\n" |
623 "BAD aquisitions\nGOOD acquisitions\n" | 684 "BAD aquisitions\nGOOD acquisitions\n" |
624 "BAD arent\nGOOD aren't\n" | 685 "BAD arent\nGOOD aren't\n" |
625 "BAD aren;t\nGOOD aren't\n" | 686 "COMPLETE 0\nBAD aren;t\nGOOD aren't\n" |
626 "BAD arguement\nGOOD argument\n" | 687 "BAD arguement\nGOOD argument\n" |
627 "BAD arguements\nGOOD arguments\n" | 688 "BAD arguements\nGOOD arguments\n" |
628 "BAD arn't\nGOOD aren't\n" | 689 "COMPLETE 0\nBAD arn't\nGOOD aren't\n" |
629 "BAD arond\nGOOD around\n" | 690 "BAD arond\nGOOD around\n" |
630 "BAD artical\nGOOD article\n" | 691 "BAD artical\nGOOD article\n" |
631 "BAD articel\nGOOD article\n" | 692 "BAD articel\nGOOD article\n" |
632 "BAD asdvertising\nGOOD advertising\n" | 693 "BAD asdvertising\nGOOD advertising\n" |
633 "BAD askt he\nGOOD ask the\n" | 694 "COMPLETE 0\nBAD askt he\nGOOD ask the\n" |
634 "BAD assistent\nGOOD assistant\n" | 695 "BAD assistent\nGOOD assistant\n" |
635 "BAD asthe\nGOOD as the\n" | 696 "BAD asthe\nGOOD as the\n" |
636 "BAD atention\nGOOD attention\n" | 697 "BAD atention\nGOOD attention\n" |
637 "BAD atmospher\nGOOD atmosphere\n" | 698 "BAD atmospher\nGOOD atmosphere\n" |
638 "BAD attentioin\nGOOD attention\n" | 699 "BAD attentioin\nGOOD attention\n" |
680 "BAD blase\nGOOD blasé\n" | 741 "BAD blase\nGOOD blasé\n" |
681 "BAD boxs\nGOOD boxes\n" | 742 "BAD boxs\nGOOD boxes\n" |
682 "BAD brodcast\nGOOD broadcast\n" | 743 "BAD brodcast\nGOOD broadcast\n" |
683 "BAD butthe\nGOOD but the\n" | 744 "BAD butthe\nGOOD but the\n" |
684 "BAD bve\nGOOD be\n" | 745 "BAD bve\nGOOD be\n" |
685 "BAD byt he\nGOOD by the\n" | 746 "COMPLETE 0\nBAD byt he\nGOOD by the\n" |
686 "BAD cafe\nGOOD café\n" | 747 "BAD cafe\nGOOD café\n" |
687 "BAD caharcter\nGOOD character\n" | 748 "BAD caharcter\nGOOD character\n" |
688 "BAD calcullated\nGOOD calculated\n" | 749 "BAD calcullated\nGOOD calculated\n" |
689 "BAD calulated\nGOOD calculated\n" | 750 "BAD calulated\nGOOD calculated\n" |
690 "BAD candidtae\nGOOD candidate\n" | 751 "BAD candidtae\nGOOD candidate\n" |
691 "BAD candidtaes\nGOOD candidates\n" | 752 "BAD candidtaes\nGOOD candidates\n" |
692 "BAD cant\nGOOD can't\n" | 753 "BAD cant\nGOOD can't\n" |
693 "BAD can;t\nGOOD can't\n" | 754 "COMPLETE 0\nBAD can;t\nGOOD can't\n" |
694 "BAD can't of been\nGOOD can't have been\n" | 755 "COMPLETE 0\nBAD can't of been\nGOOD can't have been\n" |
695 "BAD catagory\nGOOD category\n" | 756 "BAD catagory\nGOOD category\n" |
696 "BAD categiory\nGOOD category\n" | 757 "BAD categiory\nGOOD category\n" |
697 "BAD certian\nGOOD certain\n" | 758 "BAD certian\nGOOD certain\n" |
698 "BAD challange\nGOOD challenge\n" | 759 "BAD challange\nGOOD challenge\n" |
699 "BAD challanges\nGOOD challenges\n" | 760 "BAD challanges\nGOOD challenges\n" |
734 "BAD committments\nGOOD commitments\n" | 795 "BAD committments\nGOOD commitments\n" |
735 "BAD committy\nGOOD committee\n" | 796 "BAD committy\nGOOD committee\n" |
736 "BAD comntain\nGOOD contain\n" | 797 "BAD comntain\nGOOD contain\n" |
737 "BAD comntains\nGOOD contains\n" | 798 "BAD comntains\nGOOD contains\n" |
738 "BAD compair\nGOOD compare\n" | 799 "BAD compair\nGOOD compare\n" |
739 "BAD company;s\nGOOD company's\n" | 800 "COMPLETE 0\nBAD company;s\nGOOD company's\n" |
740 "BAD competetive\nGOOD competitive\n" | 801 "BAD competetive\nGOOD competitive\n" |
741 "BAD compleated\nGOOD completed\n" | 802 "BAD compleated\nGOOD completed\n" |
742 "BAD compleatly\nGOOD completely\n" | 803 "BAD compleatly\nGOOD completely\n" |
743 "BAD compleatness\nGOOD completeness\n" | 804 "BAD compleatness\nGOOD completeness\n" |
744 "BAD completly\nGOOD completely\n" | 805 "BAD completly\nGOOD completely\n" |
764 "BAD corproation\nGOOD corporation\n" | 825 "BAD corproation\nGOOD corporation\n" |
765 "BAD corproations\nGOOD corporations\n" | 826 "BAD corproations\nGOOD corporations\n" |
766 "BAD corruptable\nGOOD corruptible\n" | 827 "BAD corruptable\nGOOD corruptible\n" |
767 "BAD cotten\nGOOD cotton\n" | 828 "BAD cotten\nGOOD cotton\n" |
768 "BAD coudl\nGOOD could\n" | 829 "BAD coudl\nGOOD could\n" |
769 "BAD coudln't\nGOOD couldn't\n" | 830 "COMPLETE 0\nBAD coudln't\nGOOD couldn't\n" |
770 "BAD coudn't\nGOOD couldn't\n" | 831 "COMPLETE 0\nBAD coudn't\nGOOD couldn't\n" |
771 "BAD couldnt\nGOOD couldn't\n" | 832 "BAD couldnt\nGOOD couldn't\n" |
772 "BAD couldn;t\nGOOD couldn't\n" | 833 "COMPLETE 0\nBAD couldn;t\nGOOD couldn't\n" |
773 "BAD could of been\nGOOD could have been\n" | 834 "COMPLETE 0\nBAD could of been\nGOOD could have been\n" |
774 "BAD could of had\nGOOD could have had\n" | 835 "COMPLETE 0\nBAD could of had\nGOOD could have had\n" |
775 "BAD couldthe\nGOOD could the\n" | 836 "BAD couldthe\nGOOD could the\n" |
776 "BAD couldve\nGOOD could've\n" | 837 "BAD couldve\nGOOD could've\n" |
777 "BAD cpoy\nGOOD copy\n" | 838 "BAD cpoy\nGOOD copy\n" |
778 "BAD creme\nGOOD crème\n" | 839 "BAD creme\nGOOD crème\n" |
779 "BAD ctaegory\nGOOD category\n" | 840 "BAD ctaegory\nGOOD category\n" |
790 "BAD decison\nGOOD decision\n" | 851 "BAD decison\nGOOD decision\n" |
791 "BAD decisons\nGOOD decisions\n" | 852 "BAD decisons\nGOOD decisions\n" |
792 "BAD decor\nGOOD décor\n" | 853 "BAD decor\nGOOD décor\n" |
793 "BAD defendent\nGOOD defendant\n" | 854 "BAD defendent\nGOOD defendant\n" |
794 "BAD definately\nGOOD definitely\n" | 855 "BAD definately\nGOOD definitely\n" |
795 "BAD deja vu\nGOOD déjà vu\n" | 856 "COMPLETE 0\nBAD deja vu\nGOOD déjà vu\n" |
796 "BAD deptartment\nGOOD department\n" | 857 "BAD deptartment\nGOOD department\n" |
797 "BAD desicion\nGOOD decision\n" | 858 "BAD desicion\nGOOD decision\n" |
798 "BAD desicions\nGOOD decisions\n" | 859 "BAD desicions\nGOOD decisions\n" |
799 "BAD desision\nGOOD decision\n" | 860 "BAD desision\nGOOD decision\n" |
800 "BAD desisions\nGOOD decisions\n" | 861 "BAD desisions\nGOOD decisions\n" |
816 "BAD develpment\nGOOD development\n" | 877 "BAD develpment\nGOOD development\n" |
817 "BAD diaplay\nGOOD display\n" | 878 "BAD diaplay\nGOOD display\n" |
818 "BAD didint\nGOOD didn't\n" | 879 "BAD didint\nGOOD didn't\n" |
819 "BAD didnot\nGOOD did not\n" | 880 "BAD didnot\nGOOD did not\n" |
820 "BAD didnt\nGOOD didn't\n" | 881 "BAD didnt\nGOOD didn't\n" |
821 "BAD didn;t\nGOOD didn't\n" | 882 "COMPLETE 0\nBAD didn;t\nGOOD didn't\n" |
822 "BAD difefrent\nGOOD different\n" | 883 "BAD difefrent\nGOOD different\n" |
823 "BAD diferences\nGOOD differences\n" | 884 "BAD diferences\nGOOD differences\n" |
824 "BAD differance\nGOOD difference\n" | 885 "BAD differance\nGOOD difference\n" |
825 "BAD differances\nGOOD differences\n" | 886 "BAD differances\nGOOD differences\n" |
826 "BAD differant\nGOOD different\n" | 887 "BAD differant\nGOOD different\n" |
840 "BAD docuement\nGOOD documents\n" | 901 "BAD docuement\nGOOD documents\n" |
841 "BAD docuemnt\nGOOD document\n" | 902 "BAD docuemnt\nGOOD document\n" |
842 "BAD documetn\nGOOD document\n" | 903 "BAD documetn\nGOOD document\n" |
843 "BAD documnet\nGOOD document\n" | 904 "BAD documnet\nGOOD document\n" |
844 "BAD documnets\nGOOD documents\n" | 905 "BAD documnets\nGOOD documents\n" |
845 "BAD doens't\nGOOD doesn't\n" | 906 "COMPLETE 0\nBAD doens't\nGOOD doesn't\n" |
846 "BAD doese\nGOOD does\n" | 907 "BAD doese\nGOOD does\n" |
847 "BAD doe snot\nGOOD does not\n" | 908 "COMPLETE 0\nBAD doe snot\nGOOD does not\n" |
848 "BAD doesnt\nGOOD doesn't\n" | 909 "BAD doesnt\nGOOD doesn't\n" |
849 "BAD doesn;t\nGOOD doesn't\n" | 910 "COMPLETE 0\nBAD doesn;t\nGOOD doesn't\n" |
850 "BAD doign\nGOOD doing\n" | 911 "BAD doign\nGOOD doing\n" |
851 "BAD doimg\nGOOD doing\n" | 912 "BAD doimg\nGOOD doing\n" |
852 "BAD doind\nGOOD doing\n" | 913 "BAD doind\nGOOD doing\n" |
853 "BAD dollers\nGOOD dollars\n" | 914 "BAD dollers\nGOOD dollars\n" |
854 "BAD donig\nGOOD doing\n" | 915 "BAD donig\nGOOD doing\n" |
855 "BAD donno\nGOOD don't know\n" | 916 "BAD donno\nGOOD don't know\n" |
856 "BAD dont\nGOOD don't\n" | 917 "BAD dont\nGOOD don't\n" |
857 "BAD do'nt\nGOOD don't\n" | 918 "COMPLETE 0\nBAD do'nt\nGOOD don't\n" |
858 "BAD don;t\nGOOD don't\n" | 919 "COMPLETE 0\nBAD don;t\nGOOD don't\n" |
859 "BAD don't no\nGOOD don't know\n" | 920 "COMPLETE 0\nBAD don't no\nGOOD don't know\n" |
860 "BAD dosn't\nGOOD doesn't\n" | 921 "COMPLETE 0\nBAD dosn't\nGOOD doesn't\n" |
861 "BAD driveing\nGOOD driving\n" | 922 "BAD driveing\nGOOD driving\n" |
862 "BAD drnik\nGOOD drink\n" | 923 "BAD drnik\nGOOD drink\n" |
863 "BAD dunno\nGOOD don't know\n" | 924 "BAD dunno\nGOOD don't know\n" |
864 "BAD eclair\nGOOD éclair\n" | 925 "BAD eclair\nGOOD éclair\n" |
865 "BAD efel\nGOOD feel\n" | 926 "BAD efel\nGOOD feel\n" |
921 "BAD freindly\nGOOD friendly\n" | 982 "BAD freindly\nGOOD friendly\n" |
922 "BAD freinds\nGOOD friends\n" | 983 "BAD freinds\nGOOD friends\n" |
923 "BAD friday\nGOOD Friday\n" | 984 "BAD friday\nGOOD Friday\n" |
924 "BAD frmo\nGOOD from\n" | 985 "BAD frmo\nGOOD from\n" |
925 "BAD fromthe\nGOOD from the\n" | 986 "BAD fromthe\nGOOD from the\n" |
926 "BAD fromt he\nGOOD from the\n" | 987 "COMPLETE 0\nBAD fromt he\nGOOD from the\n" |
927 "BAD furneral\nGOOD funeral\n" | 988 "BAD furneral\nGOOD funeral\n" |
928 "BAD fwe\nGOOD few\n" | 989 "BAD fwe\nGOOD few\n" |
929 "BAD garantee\nGOOD guarantee\n" | 990 "BAD garantee\nGOOD guarantee\n" |
930 "BAD gaurd\nGOOD guard\n" | 991 "BAD gaurd\nGOOD guard\n" |
931 "BAD gemeral\nGOOD general\n" | 992 "BAD gemeral\nGOOD general\n" |
943 "BAD gruops\nGOOD groups\n" | 1004 "BAD gruops\nGOOD groups\n" |
944 "BAD grwo\nGOOD grow\n" | 1005 "BAD grwo\nGOOD grow\n" |
945 "BAD guidlines\nGOOD guidelines\n" | 1006 "BAD guidlines\nGOOD guidelines\n" |
946 "BAD hadbeen\nGOOD had been\n" | 1007 "BAD hadbeen\nGOOD had been\n" |
947 "BAD hadnt\nGOOD hadn't\n" | 1008 "BAD hadnt\nGOOD hadn't\n" |
948 "BAD hadn;t\nGOOD hadn't\n" | 1009 "COMPLETE 0\nBAD hadn;t\nGOOD hadn't\n" |
949 "BAD haev\nGOOD have\n" | 1010 "BAD haev\nGOOD have\n" |
950 "BAD hapen\nGOOD happen\n" | 1011 "BAD hapen\nGOOD happen\n" |
951 "BAD hapened\nGOOD happened\n" | 1012 "BAD hapened\nGOOD happened\n" |
952 "BAD hapening\nGOOD happening\n" | 1013 "BAD hapening\nGOOD happening\n" |
953 "BAD hapens\nGOOD happens\n" | 1014 "BAD hapens\nGOOD happens\n" |
954 "BAD happend\nGOOD happened\n" | 1015 "BAD happend\nGOOD happened\n" |
955 "BAD hasbeen\nGOOD has been\n" | 1016 "BAD hasbeen\nGOOD has been\n" |
956 "BAD hasnt\nGOOD hasn't\n" | 1017 "BAD hasnt\nGOOD hasn't\n" |
957 "BAD hasn;t\nGOOD hasn't\n" | 1018 "COMPLETE 0\nBAD hasn;t\nGOOD hasn't\n" |
958 "BAD havebeen\nGOOD have been\n" | 1019 "BAD havebeen\nGOOD have been\n" |
959 "BAD haveing\nGOOD having\n" | 1020 "BAD haveing\nGOOD having\n" |
960 "BAD havent\nGOOD haven't\n" | 1021 "BAD havent\nGOOD haven't\n" |
961 "BAD haven;t\nGOOD haven't\n" | 1022 "COMPLETE 0\nBAD haven;t\nGOOD haven't\n" |
962 "BAD hda\nGOOD had\n" | 1023 "BAD hda\nGOOD had\n" |
963 "BAD hearign\nGOOD hearing\n" | 1024 "BAD hearign\nGOOD hearing\n" |
964 "BAD he;d\nGOOD he'd\n" | 1025 "COMPLETE 0\nBAD he;d\nGOOD he'd\n" |
965 "BAD hel\nGOOD he'll\n" | 1026 "BAD hel\nGOOD he'll\n" |
966 "BAD he;ll\nGOOD he'll\n" | 1027 "COMPLETE 0\nBAD he;ll\nGOOD he'll\n" |
967 "BAD helpfull\nGOOD helpful\n" | 1028 "BAD helpfull\nGOOD helpful\n" |
968 "BAD herat\nGOOD heart\n" | 1029 "BAD herat\nGOOD heart\n" |
969 "BAD heres\nGOOD here's\n" | 1030 "BAD heres\nGOOD here's\n" |
970 "BAD here;s\nGOOD here's\n" | 1031 "COMPLETE 0\nBAD here;s\nGOOD here's\n" |
971 "BAD hes\nGOOD he's\n" | 1032 "BAD hes\nGOOD he's\n" |
972 "BAD he;s\nGOOD he's\n" | 1033 "COMPLETE 0\nBAD he;s\nGOOD he's\n" |
973 "BAD hesaid\nGOOD he said\n" | 1034 "BAD hesaid\nGOOD he said\n" |
974 "BAD hewas\nGOOD he was\n" | 1035 "BAD hewas\nGOOD he was\n" |
975 "BAD hge\nGOOD he\n" | 1036 "BAD hge\nGOOD he\n" |
976 "BAD hismelf\nGOOD himself\n" | 1037 "BAD hismelf\nGOOD himself\n" |
977 "BAD hlep\nGOOD help\n" | 1038 "BAD hlep\nGOOD help\n" |
985 "BAD htese\nGOOD these\n" | 1046 "BAD htese\nGOOD these\n" |
986 "BAD htey\nGOOD they\n" | 1047 "BAD htey\nGOOD they\n" |
987 "BAD hting\nGOOD thing\n" | 1048 "BAD hting\nGOOD thing\n" |
988 "BAD htink\nGOOD think\n" | 1049 "BAD htink\nGOOD think\n" |
989 "BAD htis\nGOOD this\n" | 1050 "BAD htis\nGOOD this\n" |
990 "BAD htp:\nGOOD http:\n" | 1051 "COMPLETE 0\nBAD htp:\nGOOD http:\n" |
991 "BAD http:\\\\nGOOD http://\n" | 1052 "COMPLETE 0\nBAD http:\\\\nGOOD http://\n" |
992 "BAD httpL\nGOOD http:\n" | 1053 "BAD httpL\nGOOD http:\n" |
993 "BAD hvae\nGOOD have\n" | 1054 "BAD hvae\nGOOD have\n" |
994 "BAD hvaing\nGOOD having\n" | 1055 "BAD hvaing\nGOOD having\n" |
995 "BAD hwich\nGOOD which\n" | 1056 "BAD hwich\nGOOD which\n" |
996 "BAD i\nGOOD I\n" | 1057 "BAD i\nGOOD I\n" |
997 "BAD i c\nGOOD I see\n" | 1058 "COMPLETE 0\nBAD i c\nGOOD I see\n" |
998 "BAD i;d\nGOOD I'd\n" | 1059 "COMPLETE 0\nBAD i;d\nGOOD I'd\n" |
999 "BAD i'd\nGOOD I'd\n" | 1060 "COMPLETE 0\nBAD i'd\nGOOD I'd\n" |
1000 "BAD I;d\nGOOD I'd\n" | 1061 "COMPLETE 0\nBAD I;d\nGOOD I'd\n" |
1001 "BAD idae\nGOOD idea\n" | 1062 "BAD idae\nGOOD idea\n" |
1002 "BAD idaes\nGOOD ideas\n" | 1063 "BAD idaes\nGOOD ideas\n" |
1003 "BAD identofy\nGOOD identify\n" | 1064 "BAD identofy\nGOOD identify\n" |
1004 "BAD ihs\nGOOD his\n" | 1065 "BAD ihs\nGOOD his\n" |
1005 "BAD iits the\nGOOD it's the\n" | 1066 "BAD iits the\nGOOD it's the\n" |
1006 "BAD i'll\nGOOD I'll\n" | 1067 "COMPLETE 0\nBAD i'll\nGOOD I'll\n" |
1007 "BAD I;ll\nGOOD I'll\n" | 1068 "COMPLETE 0\nBAD I;ll\nGOOD I'll\n" |
1008 "BAD i;m\nGOOD I'm\n" | 1069 "COMPLETE 0\nBAD i;m\nGOOD I'm\n" |
1009 "BAD i'm\nGOOD I'm\n" | 1070 "COMPLETE 0\nBAD i'm\nGOOD I'm\n" |
1010 "BAD I\"m\nGOOD I'm\n" | 1071 "COMPLETE 0\nBAD I\"m\nGOOD I'm\n" |
1011 "BAD imediate\nGOOD immediate\n" | 1072 "BAD imediate\nGOOD immediate\n" |
1012 "BAD imediatly\nGOOD immediately\n" | 1073 "BAD imediatly\nGOOD immediately\n" |
1013 "BAD immediatly\nGOOD immediately\n" | 1074 "BAD immediatly\nGOOD immediately\n" |
1014 "BAD importent\nGOOD important\n" | 1075 "BAD importent\nGOOD important\n" |
1015 "BAD importnat\nGOOD important\n" | 1076 "BAD importnat\nGOOD important\n" |
1031 "BAD insted\nGOOD instead\n" | 1092 "BAD insted\nGOOD instead\n" |
1032 "BAD insurence\nGOOD insurance\n" | 1093 "BAD insurence\nGOOD insurance\n" |
1033 "BAD inteh\nGOOD in the\n" | 1094 "BAD inteh\nGOOD in the\n" |
1034 "BAD interum\nGOOD interim\n" | 1095 "BAD interum\nGOOD interim\n" |
1035 "BAD inthe\nGOOD in the\n" | 1096 "BAD inthe\nGOOD in the\n" |
1036 "BAD int he\nGOOD in the\n" | 1097 "COMPLETE 0\nBAD int he\nGOOD in the\n" |
1037 "BAD inturn\nGOOD intern\n" | 1098 "BAD inturn\nGOOD intern\n" |
1038 "BAD inwhich\nGOOD in which\n" | 1099 "BAD inwhich\nGOOD in which\n" |
1039 "BAD i snot\nGOOD is not\n" | 1100 "COMPLETE 0\nBAD i snot\nGOOD is not\n" |
1040 "BAD isnt\nGOOD isn't\n" | 1101 "BAD isnt\nGOOD isn't\n" |
1041 "BAD isn;t\nGOOD isn't\n" | 1102 "COMPLETE 0\nBAD isn;t\nGOOD isn't\n" |
1042 "BAD isthe\nGOOD is the\n" | 1103 "BAD isthe\nGOOD is the\n" |
1043 "BAD itd\nGOOD it'd\n" | 1104 "BAD itd\nGOOD it'd\n" |
1044 "BAD it;d\nGOOD it'd\n" | 1105 "COMPLETE 0\nBAD it;d\nGOOD it'd\n" |
1045 "BAD itis\nGOOD it is\n" | 1106 "BAD itis\nGOOD it is\n" |
1046 "BAD ititial\nGOOD initial\n" | 1107 "BAD ititial\nGOOD initial\n" |
1047 "BAD itll\nGOOD it'll\n" | 1108 "BAD itll\nGOOD it'll\n" |
1048 "BAD it;ll\nGOOD it'll\n" | 1109 "COMPLETE 0\nBAD it;ll\nGOOD it'll\n" |
1049 "BAD itnerest\nGOOD interest\n" | 1110 "BAD itnerest\nGOOD interest\n" |
1050 "BAD itnerested\nGOOD interested\n" | 1111 "BAD itnerested\nGOOD interested\n" |
1051 "BAD itneresting\nGOOD interesting\n" | 1112 "BAD itneresting\nGOOD interesting\n" |
1052 "BAD itnerests\nGOOD interests\n" | 1113 "BAD itnerests\nGOOD interests\n" |
1053 "BAD it;s\nGOOD it's\n" | 1114 "COMPLETE 0\nBAD it;s\nGOOD it's\n" |
1054 "BAD itsa\nGOOD it's a\n" | 1115 "BAD itsa\nGOOD it's a\n" |
1055 "BAD its a\nGOOD it's a\n" | 1116 "COMPLETE 0\nBAD its a\nGOOD it's a\n" |
1056 "BAD it snot\nGOOD it's not\n" | 1117 "COMPLETE 0\nBAD it snot\nGOOD it's not\n" |
1057 "BAD it' snot\nGOOD it's not\n" | 1118 "COMPLETE 0\nBAD it' snot\nGOOD it's not\n" |
1058 "BAD its the\nGOOD it's the\n" | 1119 "COMPLETE 0\nBAD its the\nGOOD it's the\n" |
1059 "BAD itwas\nGOOD it was\n" | 1120 "BAD itwas\nGOOD it was\n" |
1060 "BAD ive\nGOOD I've\n" | 1121 "BAD ive\nGOOD I've\n" |
1061 "BAD i;ve\nGOOD I've\n" | 1122 "COMPLETE 0\nBAD i;ve\nGOOD I've\n" |
1062 "BAD i've\nGOOD I've\n" | 1123 "COMPLETE 0\nBAD i've\nGOOD I've\n" |
1063 "BAD iwll\nGOOD will\n" | 1124 "BAD iwll\nGOOD will\n" |
1064 "BAD iwth\nGOOD with\n" | 1125 "BAD iwth\nGOOD with\n" |
1065 "BAD jsut\nGOOD just\n" | 1126 "BAD jsut\nGOOD just\n" |
1066 "BAD jugment\nGOOD judgment\n" | 1127 "BAD jugment\nGOOD judgment\n" |
1067 "BAD k\nGOOD okay\n" | 1128 "BAD k\nGOOD okay\n" |
1077 "BAD labratory\nGOOD laboratory\n" | 1138 "BAD labratory\nGOOD laboratory\n" |
1078 "BAD lastyear\nGOOD last year\n" | 1139 "BAD lastyear\nGOOD last year\n" |
1079 "BAD laterz\nGOOD later\n" | 1140 "BAD laterz\nGOOD later\n" |
1080 "BAD learnign\nGOOD learning\n" | 1141 "BAD learnign\nGOOD learning\n" |
1081 "BAD lenght\nGOOD length\n" | 1142 "BAD lenght\nGOOD length\n" |
1082 "BAD let;s\nGOOD let's\n" | 1143 "COMPLETE 0\nBAD let;s\nGOOD let's\n" |
1083 "BAD let's him\nGOOD lets him\n" | 1144 "COMPLETE 0\nBAD let's him\nGOOD lets him\n" |
1084 "BAD let's it\nGOOD lets it\n" | 1145 "COMPLETE 0\nBAD let's it\nGOOD lets it\n" |
1085 "BAD levle\nGOOD level\n" | 1146 "BAD levle\nGOOD level\n" |
1086 "BAD libary\nGOOD library\n" | 1147 "BAD libary\nGOOD library\n" |
1087 "BAD librarry\nGOOD library\n" | 1148 "BAD librarry\nGOOD library\n" |
1088 "BAD librery\nGOOD library\n" | 1149 "BAD librery\nGOOD library\n" |
1089 "BAD liek\nGOOD like\n" | 1150 "BAD liek\nGOOD like\n" |
1104 "BAD maintenence\nGOOD maintenance\n" | 1165 "BAD maintenence\nGOOD maintenance\n" |
1105 "BAD makeing\nGOOD making\n" | 1166 "BAD makeing\nGOOD making\n" |
1106 "BAD managment\nGOOD management\n" | 1167 "BAD managment\nGOOD management\n" |
1107 "BAD mantain\nGOOD maintain\n" | 1168 "BAD mantain\nGOOD maintain\n" |
1108 "BAD marraige\nGOOD marriage\n" | 1169 "BAD marraige\nGOOD marriage\n" |
1109 "BAD may of been\nGOOD may have been\n" | 1170 "COMPLETE 0\nBAD may of been\nGOOD may have been\n" |
1110 "BAD may of had\nGOOD may have had\n" | 1171 "COMPLETE 0\nBAD may of had\nGOOD may have had\n" |
1111 "BAD memeber\nGOOD member\n" | 1172 "BAD memeber\nGOOD member\n" |
1112 "BAD merchent\nGOOD merchant\n" | 1173 "BAD merchent\nGOOD merchant\n" |
1113 "BAD mesage\nGOOD message\n" | 1174 "BAD mesage\nGOOD message\n" |
1114 "BAD mesages\nGOOD messages\n" | 1175 "BAD mesages\nGOOD messages\n" |
1115 "BAD might of been\nGOOD might have been\n" | 1176 "COMPLETE 0\nBAD might of been\nGOOD might have been\n" |
1116 "BAD might of had\nGOOD might have had\n" | 1177 "COMPLETE 0\nBAD might of had\nGOOD might have had\n" |
1117 "BAD mispell\nGOOD misspell\n" | 1178 "BAD mispell\nGOOD misspell\n" |
1118 "BAD mispelling\nGOOD misspelling\n" | 1179 "BAD mispelling\nGOOD misspelling\n" |
1119 "BAD mispellings\nGOOD misspellings\n" | 1180 "BAD mispellings\nGOOD misspellings\n" |
1120 "BAD mkae\nGOOD make\n" | 1181 "BAD mkae\nGOOD make\n" |
1121 "BAD mkaes\nGOOD makes\n" | 1182 "BAD mkaes\nGOOD makes\n" |
1122 "BAD mkaing\nGOOD making\n" | 1183 "BAD mkaing\nGOOD making\n" |
1123 "BAD moeny\nGOOD money\n" | 1184 "BAD moeny\nGOOD money\n" |
1124 "BAD monday\nGOOD Monday\n" | 1185 "BAD monday\nGOOD Monday\n" |
1125 "BAD morgage\nGOOD mortgage\n" | 1186 "BAD morgage\nGOOD mortgage\n" |
1126 "BAD mroe\nGOOD more\n" | 1187 "BAD mroe\nGOOD more\n" |
1127 "BAD must of been\nGOOD must have been\n" | 1188 "COMPLETE 0\nBAD must of been\nGOOD must have been\n" |
1128 "BAD must of had\nGOOD must have had\n" | 1189 "COMPLETE 0\nBAD must of had\nGOOD must have had\n" |
1129 "BAD mysefl\nGOOD myself\n" | 1190 "BAD mysefl\nGOOD myself\n" |
1130 "BAD myu\nGOOD my\n" | 1191 "BAD myu\nGOOD my\n" |
1131 "BAD naive\nGOOD naïve\n" | 1192 "BAD naive\nGOOD naïve\n" |
1132 "BAD ne way\nGOOD anyway\n" | 1193 "COMPLETE 0\nBAD ne way\nGOOD anyway\n" |
1133 "BAD ne ways\nGOOD anyways\n" | 1194 "COMPLETE 0\nBAD ne ways\nGOOD anyways\n" |
1134 "BAD ne1\nGOOD anyone\n" | 1195 "BAD ne1\nGOOD anyone\n" |
1135 "BAD neway\nGOOD anyway\n" | 1196 "BAD neway\nGOOD anyway\n" |
1136 "BAD neways\nGOOD anyways\n" | 1197 "BAD neways\nGOOD anyways\n" |
1137 "BAD necassarily\nGOOD necessarily\n" | 1198 "BAD necassarily\nGOOD necessarily\n" |
1138 "BAD necassary\nGOOD necessary\n" | 1199 "BAD necassary\nGOOD necessary\n" |
1165 "BAD ohter\nGOOD other\n" | 1226 "BAD ohter\nGOOD other\n" |
1166 "BAD omre\nGOOD more\n" | 1227 "BAD omre\nGOOD more\n" |
1167 "BAD oneof\nGOOD one of\n" | 1228 "BAD oneof\nGOOD one of\n" |
1168 "BAD onepoint\nGOOD one point\n" | 1229 "BAD onepoint\nGOOD one point\n" |
1169 "BAD onthe\nGOOD on the\n" | 1230 "BAD onthe\nGOOD on the\n" |
1170 "BAD ont he\nGOOD on the\n" | 1231 "COMPLETE 0\nBAD ont he\nGOOD on the\n" |
1171 "BAD onyl\nGOOD only\n" | 1232 "BAD onyl\nGOOD only\n" |
1172 "BAD oppasite\nGOOD opposite\n" | 1233 "BAD oppasite\nGOOD opposite\n" |
1173 "BAD opperation\nGOOD operation\n" | 1234 "BAD opperation\nGOOD operation\n" |
1174 "BAD oppertunity\nGOOD opportunity\n" | 1235 "BAD oppertunity\nGOOD opportunity\n" |
1175 "BAD opposate\nGOOD opposite\n" | 1236 "BAD opposate\nGOOD opposite\n" |
1285 "BAD rythm\nGOOD rhythm\n" | 1346 "BAD rythm\nGOOD rhythm\n" |
1286 "BAD saidhe\nGOOD said he\n" | 1347 "BAD saidhe\nGOOD said he\n" |
1287 "BAD saidit\nGOOD said it\n" | 1348 "BAD saidit\nGOOD said it\n" |
1288 "BAD saidthat\nGOOD said that\n" | 1349 "BAD saidthat\nGOOD said that\n" |
1289 "BAD saidthe\nGOOD said the\n" | 1350 "BAD saidthe\nGOOD said the\n" |
1290 "BAD saidt he\nGOOD said the\n" | 1351 "COMPLETE 0\nBAD saidt he\nGOOD said the\n" |
1291 "BAD sandwhich\nGOOD sandwich\n" | 1352 "BAD sandwhich\nGOOD sandwich\n" |
1292 "BAD sandwitch\nGOOD sandwich\n" | 1353 "BAD sandwitch\nGOOD sandwich\n" |
1293 "BAD saturday\nGOOD Saturday\n" | 1354 "BAD saturday\nGOOD Saturday\n" |
1294 "BAD scedule\nGOOD schedule\n" | 1355 "BAD scedule\nGOOD schedule\n" |
1295 "BAD sceduled\nGOOD scheduled\n" | 1356 "BAD sceduled\nGOOD scheduled\n" |
1302 "BAD sentance\nGOOD sentence\n" | 1363 "BAD sentance\nGOOD sentence\n" |
1303 "BAD separeate\nGOOD separate\n" | 1364 "BAD separeate\nGOOD separate\n" |
1304 "BAD seperate\nGOOD separate\n" | 1365 "BAD seperate\nGOOD separate\n" |
1305 "BAD sercumstances\nGOOD circumstances\n" | 1366 "BAD sercumstances\nGOOD circumstances\n" |
1306 "BAD shcool\nGOOD school\n" | 1367 "BAD shcool\nGOOD school\n" |
1307 "BAD she'\nGOOD she'll\n" | 1368 "COMPLETE 0\nBAD she;d\nGOOD she'd\n" |
1308 "BAD she;d\nGOOD she'd\n" | 1369 "COMPLETE 0\nBAD she;ll\nGOOD she'll\n" |
1309 "BAD she;ll\nGOOD she'll\n" | |
1310 "BAD shes\nGOOD she's\n" | 1370 "BAD shes\nGOOD she's\n" |
1311 "BAD she;s\nGOOD she's\n" | 1371 "COMPLETE 0\nBAD she;s\nGOOD she's\n" |
1312 "BAD shesaid\nGOOD she said\n" | 1372 "BAD shesaid\nGOOD she said\n" |
1313 "BAD shineing\nGOOD shining\n" | 1373 "BAD shineing\nGOOD shining\n" |
1314 "BAD shiped\nGOOD shipped\n" | 1374 "BAD shiped\nGOOD shipped\n" |
1315 "BAD shoudl\nGOOD should\n" | 1375 "BAD shoudl\nGOOD should\n" |
1316 "BAD shoudln't\nGOOD shouldn't\n" | 1376 "COMPLETE 0\nBAD shoudln't\nGOOD shouldn't\n" |
1317 "BAD shouldent\nGOOD shouldn't\n" | 1377 "BAD shouldent\nGOOD shouldn't\n" |
1318 "BAD shouldnt\nGOOD shouldn't\n" | 1378 "BAD shouldnt\nGOOD shouldn't\n" |
1319 "BAD shouldn;t\nGOOD shouldn't\n" | 1379 "COMPLETE 0\nBAD shouldn;t\nGOOD shouldn't\n" |
1320 "BAD should of been\nGOOD should have been\n" | 1380 "COMPLETE 0\nBAD should of been\nGOOD should have been\n" |
1321 "BAD should of had\nGOOD should have had\n" | 1381 "COMPLETE 0\nBAD should of had\nGOOD should have had\n" |
1322 "BAD shouldve\nGOOD should've\n" | 1382 "BAD shouldve\nGOOD should've\n" |
1323 "BAD showinf\nGOOD showing\n" | 1383 "BAD showinf\nGOOD showing\n" |
1324 "BAD signifacnt\nGOOD significant\n" | 1384 "BAD signifacnt\nGOOD significant\n" |
1325 "BAD simalar\nGOOD similar\n" | 1385 "BAD simalar\nGOOD similar\n" |
1326 "BAD similiar\nGOOD similar\n" | 1386 "BAD similiar\nGOOD similar\n" |
1336 "BAD somethign\nGOOD something\n" | 1396 "BAD somethign\nGOOD something\n" |
1337 "BAD someting\nGOOD something\n" | 1397 "BAD someting\nGOOD something\n" |
1338 "BAD somewaht\nGOOD somewhat\n" | 1398 "BAD somewaht\nGOOD somewhat\n" |
1339 "BAD somthing\nGOOD something\n" | 1399 "BAD somthing\nGOOD something\n" |
1340 "BAD somtimes\nGOOD sometimes\n" | 1400 "BAD somtimes\nGOOD sometimes\n" |
1341 "BAD sot hat\nGOOD so that\n" | 1401 "COMPLETE 0\nBAD sot hat\nGOOD so that\n" |
1342 "BAD soudn\nGOOD sound\n" | 1402 "BAD soudn\nGOOD sound\n" |
1343 "BAD soudns\nGOOD sounds\n" | 1403 "BAD soudns\nGOOD sounds\n" |
1344 "BAD speach\nGOOD speech\n" | 1404 "BAD speach\nGOOD speech\n" |
1345 "BAD specificaly\nGOOD specifically\n" | 1405 "BAD specificaly\nGOOD specifically\n" |
1346 "BAD specificalyl\nGOOD specifically\n" | 1406 "BAD specificalyl\nGOOD specifically\n" |
1377 "BAD talkign\nGOOD talking\n" | 1437 "BAD talkign\nGOOD talking\n" |
1378 "BAD tath\nGOOD that\n" | 1438 "BAD tath\nGOOD that\n" |
1379 "BAD tecnical\nGOOD technical\n" | 1439 "BAD tecnical\nGOOD technical\n" |
1380 "BAD teh\nGOOD the\n" | 1440 "BAD teh\nGOOD the\n" |
1381 "BAD tehy\nGOOD they\n" | 1441 "BAD tehy\nGOOD they\n" |
1382 "BAD tellt he\nGOOD tell the\n" | 1442 "COMPLETE 0\nBAD tellt he\nGOOD tell the\n" |
1383 "BAD termoil\nGOOD turmoil\n" | 1443 "BAD termoil\nGOOD turmoil\n" |
1384 "BAD tets\nGOOD test\n" | 1444 "BAD tets\nGOOD test\n" |
1385 "BAD tghe\nGOOD the\n" | 1445 "BAD tghe\nGOOD the\n" |
1386 "BAD tghis\nGOOD this\n" | 1446 "BAD tghis\nGOOD this\n" |
1387 "BAD thansk\nGOOD thanks\n" | 1447 "BAD thansk\nGOOD thanks\n" |
1388 "BAD thanx\nGOOD thanks\n" | 1448 "BAD thanx\nGOOD thanks\n" |
1389 "BAD thats\nGOOD that's\n" | 1449 "BAD thats\nGOOD that's\n" |
1390 "BAD thatthe\nGOOD that the\n" | 1450 "BAD thatthe\nGOOD that the\n" |
1391 "BAD thatt he\nGOOD that the\n" | 1451 "COMPLETE 0\nBAD thatt he\nGOOD that the\n" |
1392 "BAD thecompany\nGOOD the company\n" | 1452 "BAD thecompany\nGOOD the company\n" |
1393 "BAD thefirst\nGOOD the first\n" | 1453 "BAD thefirst\nGOOD the first\n" |
1394 "BAD thegovernment\nGOOD the government\n" | 1454 "BAD thegovernment\nGOOD the government\n" |
1395 "BAD their are\nGOOD there are\n" | 1455 "COMPLETE 0\nBAD their are\nGOOD there are\n" |
1396 "BAD their is\nGOOD there is\n" | 1456 "COMPLETE 0\nBAD their is\nGOOD there is\n" |
1397 "BAD themself\nGOOD themselves\n" | 1457 "BAD themself\nGOOD themselves\n" |
1398 "BAD themselfs\nGOOD themselves\n" | 1458 "BAD themselfs\nGOOD themselves\n" |
1399 "BAD thenew\nGOOD the new\n" | 1459 "BAD thenew\nGOOD the new\n" |
1400 "BAD theres\nGOOD there's\n" | 1460 "BAD theres\nGOOD there's\n" |
1401 "BAD there's is\nGOOD theirs is\n" | 1461 "COMPLETE 0\nBAD there's is\nGOOD theirs is\n" |
1402 "BAD theri\nGOOD their\n" | 1462 "BAD theri\nGOOD their\n" |
1403 "BAD thesame\nGOOD the same\n" | 1463 "BAD thesame\nGOOD the same\n" |
1404 "BAD thetwo\nGOOD the two\n" | 1464 "BAD thetwo\nGOOD the two\n" |
1405 "BAD theyd\nGOOD they'd\n" | 1465 "BAD theyd\nGOOD they'd\n" |
1406 "BAD they;d\nGOOD they'd\n" | 1466 "COMPLETE 0\nBAD they;d\nGOOD they'd\n" |
1407 "BAD they;l\nGOOD they'll\n" | 1467 "COMPLETE 0\nBAD they;l\nGOOD they'll\n" |
1408 "BAD theyll\nGOOD they'll\n" | 1468 "BAD theyll\nGOOD they'll\n" |
1409 "BAD they;ll\nGOOD they'll\n" | 1469 "COMPLETE 0\nBAD they;ll\nGOOD they'll\n" |
1410 "BAD they;r\nGOOD they're\n" | 1470 "COMPLETE 0\nBAD they;r\nGOOD they're\n" |
1411 "BAD theyre\nGOOD they're\n" | 1471 "COMPLETE 0\nBAD theyre\nGOOD they're\n" |
1412 "BAD they;re\nGOOD they're\n" | 1472 "COMPLETE 0\nBAD they;re\nGOOD they're\n" |
1413 "BAD they're are\nGOOD there are\n" | 1473 "COMPLETE 0\nBAD they're are\nGOOD there are\n" |
1414 "BAD they're is\nGOOD there is\n" | 1474 "COMPLETE 0\nBAD they're is\nGOOD there is\n" |
1415 "BAD they;v\nGOOD they've\n" | 1475 "COMPLETE 0\nBAD they;v\nGOOD they've\n" |
1416 "BAD theyve\nGOOD they've\n" | 1476 "BAD theyve\nGOOD they've\n" |
1417 "BAD they;ve\nGOOD they've\n" | 1477 "COMPLETE 0\nBAD they;ve\nGOOD they've\n" |
1418 "BAD thgat\nGOOD that\n" | 1478 "BAD thgat\nGOOD that\n" |
1419 "BAD thge\nGOOD the\n" | 1479 "BAD thge\nGOOD the\n" |
1420 "BAD thier\nGOOD their \n" | 1480 "BAD thier\nGOOD their \n" |
1421 "BAD thigsn\nGOOD things\n" | 1481 "BAD thigsn\nGOOD things\n" |
1422 "BAD thisyear\nGOOD this year\n" | 1482 "BAD thisyear\nGOOD this year\n" |
1442 "BAD tkaing\nGOOD taking\n" | 1502 "BAD tkaing\nGOOD taking\n" |
1443 "BAD tlaking\nGOOD talking\n" | 1503 "BAD tlaking\nGOOD talking\n" |
1444 "BAD tnx\nGOOD thanks\n" | 1504 "BAD tnx\nGOOD thanks\n" |
1445 "BAD todya\nGOOD today\n" | 1505 "BAD todya\nGOOD today\n" |
1446 "BAD togehter\nGOOD together\n" | 1506 "BAD togehter\nGOOD together\n" |
1447 "BAD toldt he\nGOOD told the\n" | 1507 "COMPLETE 0\nBAD toldt he\nGOOD told the\n" |
1448 "BAD tomorow\nGOOD tomorrow\n" | 1508 "BAD tomorow\nGOOD tomorrow\n" |
1449 "BAD tongiht\nGOOD tonight\n" | 1509 "BAD tongiht\nGOOD tonight\n" |
1450 "BAD tonihgt\nGOOD tonight\n" | 1510 "BAD tonihgt\nGOOD tonight\n" |
1451 "BAD tonite\nGOOD tonight\n" | 1511 "BAD tonite\nGOOD tonight\n" |
1452 "BAD totaly\nGOOD totally\n" | 1512 "BAD totaly\nGOOD totally\n" |
1453 "BAD totalyl\nGOOD totally\n" | 1513 "BAD totalyl\nGOOD totally\n" |
1454 "BAD tothe\nGOOD to the\n" | 1514 "BAD tothe\nGOOD to the\n" |
1455 "BAD tot he\nGOOD to the\n" | 1515 "COMPLETE 0\nBAD tot he\nGOOD to the\n" |
1456 "BAD towrad\nGOOD toward\n" | 1516 "BAD towrad\nGOOD toward\n" |
1457 "BAD traditionalyl\nGOOD traditionally\n" | 1517 "BAD traditionalyl\nGOOD traditionally\n" |
1458 "BAD transfered\nGOOD transferred\n" | 1518 "BAD transfered\nGOOD transferred\n" |
1459 "BAD truely\nGOOD truly\n" | 1519 "BAD truely\nGOOD truly\n" |
1460 "BAD truley\nGOOD truly\n" | 1520 "BAD truley\nGOOD truly\n" |
1464 "BAD tyhat\nGOOD that\n" | 1524 "BAD tyhat\nGOOD that\n" |
1465 "BAD tyhe\nGOOD the\n" | 1525 "BAD tyhe\nGOOD the\n" |
1466 "BAD u\nGOOD you\n" | 1526 "BAD u\nGOOD you\n" |
1467 "BAD udnerstand\nGOOD understand\n" | 1527 "BAD udnerstand\nGOOD understand\n" |
1468 "BAD understnad\nGOOD understand\n" | 1528 "BAD understnad\nGOOD understand\n" |
1469 "BAD undert he\nGOOD under the\n" | 1529 "COMPLETE 0\nBAD undert he\nGOOD under the\n" |
1470 "BAD unforseen\nGOOD unforeseen\n" | 1530 "BAD unforseen\nGOOD unforeseen\n" |
1471 "BAD UnitedStates\nGOOD United States\n" | 1531 "BAD UnitedStates\nGOOD United States\n" |
1472 "BAD unliek\nGOOD unlike\n" | 1532 "BAD unliek\nGOOD unlike\n" |
1473 "BAD unpleasently\nGOOD unpleasantly\n" | 1533 "BAD unpleasently\nGOOD unpleasantly\n" |
1474 "BAD untill\nGOOD until\n" | 1534 "BAD untill\nGOOD until\n" |
1477 "BAD useing\nGOOD using\n" | 1537 "BAD useing\nGOOD using\n" |
1478 "BAD usualyl\nGOOD usually\n" | 1538 "BAD usualyl\nGOOD usually\n" |
1479 "BAD veyr\nGOOD very\n" | 1539 "BAD veyr\nGOOD very\n" |
1480 "BAD virtualyl\nGOOD virtually\n" | 1540 "BAD virtualyl\nGOOD virtually\n" |
1481 "BAD visavis\nGOOD vis-a-vis\n" | 1541 "BAD visavis\nGOOD vis-a-vis\n" |
1482 "BAD vis-a-vis\nGOOD vis-Ã -vis\n" | 1542 "COMPLETE 0\nBAD vis-a-vis\nGOOD vis-Ã -vis\n" |
1483 "BAD vrey\nGOOD very\n" | 1543 "BAD vrey\nGOOD very\n" |
1484 "BAD vulnerible\nGOOD vulnerable\n" | 1544 "BAD vulnerible\nGOOD vulnerable\n" |
1485 "BAD waht\nGOOD what\n" | 1545 "BAD waht\nGOOD what\n" |
1486 "BAD warrent\nGOOD warrant\n" | 1546 "BAD warrent\nGOOD warrant\n" |
1487 "BAD wa snot\nGOOD was not\n" | 1547 "COMPLETE 0\nBAD wa snot\nGOOD was not\n" |
1488 "BAD wasnt\nGOOD wasn't\n" | 1548 "COMPLETE 0\nBAD wasnt\nGOOD wasn't\n" |
1489 "BAD wasn;t\nGOOD wasn't\n" | 1549 "COMPLETE 0\nBAD wasn;t\nGOOD wasn't\n" |
1490 "BAD wat\nGOOD what\n" | 1550 "BAD wat\nGOOD what\n" |
1491 "BAD watn\nGOOD want\n" | 1551 "BAD watn\nGOOD want\n" |
1492 "BAD we;d\nGOOD we'd\n" | 1552 "COMPLETE 0\nBAD we;d\nGOOD we'd\n" |
1493 "BAD wednesday\nGOOD Wednesday\n" | 1553 "BAD wednesday\nGOOD Wednesday\n" |
1494 "BAD wel\nGOOD we'll\n" | 1554 "BAD wel\nGOOD we'll\n" |
1495 "BAD wehn\nGOOD when\n" | 1555 "BAD wehn\nGOOD when\n" |
1496 "BAD we'l\nGOOD we'll\n" | 1556 "COMPLETE 0\nBAD we'l\nGOOD we'll\n" |
1497 "BAD we;ll\nGOOD we'll\n" | 1557 "COMPLETE 0\nBAD we;ll\nGOOD we'll\n" |
1498 "BAD we;re\nGOOD we're\n" | 1558 "COMPLETE 0\nBAD we;re\nGOOD we're\n" |
1499 "BAD werent\nGOOD weren't\n" | 1559 "BAD werent\nGOOD weren't\n" |
1500 "BAD weren;t\nGOOD weren't\n" | 1560 "COMPLETE 0\nBAD weren;t\nGOOD weren't\n" |
1501 "BAD wern't\nGOOD weren't\n" | 1561 "COMPLETE 0\nBAD wern't\nGOOD weren't\n" |
1502 "BAD werre\nGOOD were\n" | 1562 "BAD werre\nGOOD were\n" |
1503 "BAD weve\nGOOD we've\n" | 1563 "BAD weve\nGOOD we've\n" |
1504 "BAD we;ve\nGOOD we've\n" | 1564 "COMPLETE 0\nBAD we;ve\nGOOD we've\n" |
1505 "BAD whats\nGOOD what's\n" | 1565 "BAD whats\nGOOD what's\n" |
1506 "BAD what;s\nGOOD what's\n" | 1566 "COMPLETE 0\nBAD what;s\nGOOD what's\n" |
1507 "BAD whcih\nGOOD which\n" | 1567 "BAD whcih\nGOOD which\n" |
1508 "BAD whent he\nGOOD when the\n" | 1568 "COMPLETE 0\nBAD whent he\nGOOD when the\n" |
1509 "BAD wheres\nGOOD where's\n" | 1569 "BAD wheres\nGOOD where's\n" |
1510 "BAD where;s\nGOOD where's\n" | 1570 "COMPLETE 0\nBAD where;s\nGOOD where's\n" |
1511 "BAD wherre\nGOOD where\n" | 1571 "BAD wherre\nGOOD where\n" |
1512 "BAD whic\nGOOD which\n" | 1572 "BAD whic\nGOOD which\n" |
1513 "BAD whicht he\nGOOD which the\n" | 1573 "COMPLETE 0\nBAD whicht he\nGOOD which the\n" |
1514 "BAD whihc\nGOOD which\n" | 1574 "BAD whihc\nGOOD which\n" |
1515 "BAD wholl\nGOOD who'll\n" | 1575 "BAD wholl\nGOOD who'll\n" |
1516 "BAD whos\nGOOD who's\n" | 1576 "BAD whos\nGOOD who's\n" |
1517 "BAD who;s\nGOOD who's\n" | 1577 "COMPLETE 0\nBAD who;s\nGOOD who's\n" |
1518 "BAD whove\nGOOD who've\n" | 1578 "BAD whove\nGOOD who've\n" |
1519 "BAD who;ve\nGOOD who've\n" | 1579 "COMPLETE 0\nBAD who;ve\nGOOD who've\n" |
1520 "BAD whta\nGOOD what\n" | 1580 "BAD whta\nGOOD what\n" |
1521 "BAD whys\nGOOD why's\n" | 1581 "BAD whys\nGOOD why's\n" |
1522 "BAD wief\nGOOD wife\n" | 1582 "BAD wief\nGOOD wife\n" |
1523 "BAD wierd\nGOOD weird\n" | 1583 "BAD wierd\nGOOD weird\n" |
1524 "BAD wihch\nGOOD which\n" | 1584 "BAD wihch\nGOOD which\n" |
1525 "BAD wiht\nGOOD with\n" | 1585 "BAD wiht\nGOOD with\n" |
1526 "BAD willbe\nGOOD will be\n" | 1586 "BAD willbe\nGOOD will be\n" |
1527 "BAD will of been\nGOOD will have been\n" | 1587 "COMPLETE 0\nBAD will of been\nGOOD will have been\n" |
1528 "BAD will of had\nGOOD will have had\n" | 1588 "COMPLETE 0\nBAD will of had\nGOOD will have had\n" |
1529 "BAD windoes\nGOOD windows\n" | 1589 "BAD windoes\nGOOD windows\n" |
1530 "BAD witha\nGOOD with a\n" | 1590 "BAD witha\nGOOD with a\n" |
1531 "BAD withe\nGOOD with\n" | 1591 "BAD withe\nGOOD with\n" |
1532 "BAD withthe\nGOOD with the\n" | 1592 "COMPLETE 0\nBAD withthe\nGOOD with the\n" |
1533 "BAD witht he\nGOOD with the\n" | 1593 "BAD witht he\nGOOD with the\n" |
1534 "BAD wiull\nGOOD will\n" | 1594 "BAD wiull\nGOOD will\n" |
1535 "BAD wnat\nGOOD want\n" | 1595 "BAD wnat\nGOOD want\n" |
1536 "BAD wnated\nGOOD wanted\n" | 1596 "BAD wnated\nGOOD wanted\n" |
1537 "BAD wnats\nGOOD wants\n" | 1597 "BAD wnats\nGOOD wants\n" |
1538 "BAD woh\nGOOD who\n" | 1598 "BAD woh\nGOOD who\n" |
1539 "BAD wohle\nGOOD whole\n" | 1599 "BAD wohle\nGOOD whole\n" |
1540 "BAD wokr\nGOOD work\n" | 1600 "BAD wokr\nGOOD work\n" |
1541 "BAD wont\nGOOD won't\n" | 1601 "BAD wont\nGOOD won't\n" |
1542 "BAD wo'nt\nGOOD won't\n" | 1602 "COMPLETE 0\nBAD wo'nt\nGOOD won't\n" |
1543 "BAD won;t\nGOOD won't\n" | 1603 "COMPLETE 0\nBAD won;t\nGOOD won't\n" |
1544 "BAD woudl\nGOOD would\n" | 1604 "BAD woudl\nGOOD would\n" |
1545 "BAD woudln't\nGOOD wouldn't\n" | 1605 "COMPLETE 0\nBAD woudln't\nGOOD wouldn't\n" |
1546 "BAD wouldbe\nGOOD would be\n" | 1606 "BAD wouldbe\nGOOD would be\n" |
1547 "BAD wouldnt\nGOOD wouldn't\n" | 1607 "BAD wouldnt\nGOOD wouldn't\n" |
1548 "BAD wouldn;t\nGOOD wouldn't\n" | 1608 "COMPLETE 0\nBAD wouldn;t\nGOOD wouldn't\n" |
1549 "BAD would of been\nGOOD would have been\n" | 1609 "COMPLETE 0\nBAD would of been\nGOOD would have been\n" |
1550 "BAD would of had\nGOOD would have had\n" | 1610 "COMPLETE 0\nBAD would of had\nGOOD would have had\n" |
1551 "BAD wouldve\nGOOD would've\n" | 1611 "BAD wouldve\nGOOD would've\n" |
1552 "BAD wriet\nGOOD write\n" | 1612 "BAD wriet\nGOOD write\n" |
1553 "BAD writting\nGOOD writing\n" | 1613 "BAD writting\nGOOD writing\n" |
1554 "BAD wrod\nGOOD word\n" | 1614 "BAD wrod\nGOOD word\n" |
1555 "BAD wroet\nGOOD wrote\n" | 1615 "BAD wroet\nGOOD wrote\n" |
1564 "BAD yeras\nGOOD years\n" | 1624 "BAD yeras\nGOOD years\n" |
1565 "BAD yersa\nGOOD years\n" | 1625 "BAD yersa\nGOOD years\n" |
1566 "BAD yoiu\nGOOD you\n" | 1626 "BAD yoiu\nGOOD you\n" |
1567 "BAD youare\nGOOD you are\n" | 1627 "BAD youare\nGOOD you are\n" |
1568 "BAD youd\nGOOD you'd\n" | 1628 "BAD youd\nGOOD you'd\n" |
1569 "BAD you;d\nGOOD you'd\n" | 1629 "COMPLETE 0\nBAD you;d\nGOOD you'd\n" |
1570 "BAD youll\nGOOD you'll\n" | 1630 "BAD youll\nGOOD you'll\n" |
1571 "BAD your a\nGOOD you're a\n" | 1631 "COMPLETE 0\nBAD your a\nGOOD you're a\n" |
1572 "BAD your an\nGOOD you're an\n" | 1632 "COMPLETE 0\nBAD your an\nGOOD you're an\n" |
1573 "BAD youre\nGOOD you're\n" | 1633 "BAD youre\nGOOD you're\n" |
1574 "BAD you;re\nGOOD you're\n" | 1634 "COMPLETE 0\nBAD you;re\nGOOD you're\n" |
1575 "BAD you're own\nGOOD your own\n" | 1635 "COMPLETE 0\nBAD you're own\nGOOD your own\n" |
1576 "BAD your her\nGOOD you're her\n" | 1636 "COMPLETE 0\nBAD your her\nGOOD you're her\n" |
1577 "BAD your here\nGOOD you're here\n" | 1637 "COMPLETE 0\nBAD your here\nGOOD you're here\n" |
1578 "BAD your his\nGOOD you're his\n" | 1638 "COMPLETE 0\nBAD your his\nGOOD you're his\n" |
1579 "BAD your my\nGOOD you're my\n" | 1639 "COMPLETE 0\nBAD your my\nGOOD you're my\n" |
1580 "BAD your the\nGOOD you're the\n" | 1640 "COMPLETE 0\nBAD your the\nGOOD you're the\n" |
1581 "BAD your their\nGOOD you're their\n" | 1641 "COMPLETE 0\nBAD your their\nGOOD you're their\n" |
1582 "BAD your your\nGOOD you're your\n" | 1642 "COMPLETE 0\nBAD your your\nGOOD you're your\n" |
1583 "BAD youve\nGOOD you've\n" | 1643 "BAD youve\nGOOD you've\n" |
1584 "BAD you;ve\nGOOD you've\n" | 1644 "COMPLETE 0\nBAD you;ve\nGOOD you've\n" |
1585 "BAD ytou\nGOOD you\n" | 1645 "BAD ytou\nGOOD you\n" |
1586 "BAD yuo\nGOOD you\n" | 1646 "BAD yuo\nGOOD you\n" |
1587 "BAD yuor\nGOOD your\n"; | 1647 "BAD yuor\nGOOD your\n"; |
1588 gchar *buf; | 1648 gchar *buf; |
1589 gchar *ibuf; | 1649 gchar *ibuf; |
1590 GHashTable *hashes; | 1650 GHashTable *hashes; |
1591 char bad[82] = ""; | 1651 char bad[82] = ""; |
1592 char good[256] = ""; | 1652 char good[256] = ""; |
1653 char completestr[BUFSIZ] = ""; | |
1593 int pnt = 0; | 1654 int pnt = 0; |
1594 gsize size; | 1655 gsize size; |
1656 gboolean complete = TRUE; | |
1595 | 1657 |
1596 buf = g_build_filename(gaim_user_dir(), "dict", NULL); | 1658 buf = g_build_filename(gaim_user_dir(), "dict", NULL); |
1597 g_file_get_contents(buf, &ibuf, &size, NULL); | 1659 g_file_get_contents(buf, &ibuf, &size, NULL); |
1598 g_free(buf); | 1660 g_free(buf); |
1599 if (!ibuf) { | 1661 if (!ibuf) { |
1600 ibuf = g_strdup(defaultconf); | 1662 ibuf = g_strdup(defaultconf); |
1601 size = strlen(defaultconf); | 1663 size = strlen(defaultconf); |
1602 } | 1664 } |
1603 | 1665 |
1604 model = gtk_list_store_new((gint)N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING); | 1666 model = gtk_list_store_new((gint)N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN); |
1605 hashes = g_hash_table_new(g_str_hash, g_str_equal); | 1667 hashes = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); |
1606 | 1668 |
1607 while (buf_get_line(ibuf, &buf, &pnt, size)) { | 1669 while (buf_get_line(ibuf, &buf, &pnt, size)) { |
1608 if (*buf != '#') { | 1670 if (*buf != '#') { |
1609 if (!strncasecmp(buf, "BAD ", 4)) | 1671 if (!strncasecmp(buf, "BAD ", 4)) |
1672 { | |
1610 strncpy(bad, buf + 4, 81); | 1673 strncpy(bad, buf + 4, 81); |
1611 else if (!strncasecmp(buf, "GOOD ", 5)) { | 1674 } |
1675 else if(!strncasecmp(buf, "COMPLETE ", 9)) | |
1676 { | |
1677 strncpy(completestr, buf + 9, BUFSIZ - 1); | |
1678 complete = (gboolean)strtol(completestr, NULL, 10); | |
1679 } | |
1680 else if (!strncasecmp(buf, "GOOD ", 5)) | |
1681 { | |
1612 strncpy(good, buf + 5, 255); | 1682 strncpy(good, buf + 5, 255); |
1613 | 1683 |
1614 if (*bad && *good && g_hash_table_lookup(hashes, bad) == NULL) { | 1684 if (*bad && *good && g_hash_table_lookup(hashes, bad) == NULL) { |
1615 GtkTreeIter iter; | 1685 GtkTreeIter iter; |
1616 | 1686 |
1617 /* We don't actually need to store the good string, since this | 1687 /* We don't actually need to store the good string, since this |
1618 * hash is just being used to eliminate duplicate bad strings. | 1688 * hash is just being used to eliminate duplicate bad strings. |
1689 * The value has to be non-NULL so the lookup above will work. | |
1619 */ | 1690 */ |
1620 g_hash_table_insert(hashes, g_strdup(bad), GINT_TO_POINTER(1)); | 1691 g_hash_table_insert(hashes, g_strdup(bad), GINT_TO_POINTER(1)); |
1621 | 1692 |
1622 gtk_list_store_append(model, &iter); | 1693 gtk_list_store_append(model, &iter); |
1623 gtk_list_store_set(model, &iter, | 1694 gtk_list_store_set(model, &iter, |
1624 0, bad, | 1695 0, bad, |
1625 1, good, | 1696 1, good, |
1697 2, complete, | |
1626 -1); | 1698 -1); |
1627 } | 1699 } |
1628 bad[0] = '\0'; | 1700 bad[0] = '\0'; |
1701 complete = TRUE; | |
1629 } | 1702 } |
1630 } | 1703 } |
1631 } | 1704 } |
1632 g_free(ibuf); | 1705 g_free(ibuf); |
1633 g_hash_table_foreach(hashes, (GHFunc)g_free, NULL); | |
1634 g_hash_table_destroy(hashes); | 1706 g_hash_table_destroy(hashes); |
1635 | 1707 |
1636 gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(model), | 1708 gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(model), |
1637 0, GTK_SORT_ASCENDING); | 1709 0, GTK_SORT_ASCENDING); |
1638 } | 1710 } |
1639 | 1711 |
1640 static GtkWidget *tree; | 1712 static GtkWidget *tree; |
1641 static GtkWidget *bad_entry; | 1713 static GtkWidget *bad_entry; |
1642 static GtkWidget *good_entry; | 1714 static GtkWidget *good_entry; |
1715 static GtkWidget *complete_toggle; | |
1643 | 1716 |
1644 static void save_list(); | 1717 static void save_list(); |
1645 | 1718 |
1646 static void on_edited(GtkCellRendererText *cellrenderertext, | 1719 static void on_edited(GtkCellRendererText *cellrenderertext, |
1647 gchar *path, gchar *arg2, gpointer data) | 1720 gchar *path, gchar *arg2, gpointer data) |
1662 save_list(); | 1735 save_list(); |
1663 } | 1736 } |
1664 g_value_unset(&val); | 1737 g_value_unset(&val); |
1665 } | 1738 } |
1666 | 1739 |
1740 | |
1741 static void on_toggled(GtkCellRendererToggle *cellrenderertoggle, | |
1742 gchar *path, gpointer data){ | |
1743 GtkTreeIter iter; | |
1744 gboolean enabled; | |
1745 | |
1746 g_return_if_fail(gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(model), &iter, path)); | |
1747 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, | |
1748 WORD_ONLY_COLUMN, &enabled, | |
1749 -1); | |
1750 | |
1751 gtk_list_store_set(GTK_LIST_STORE(model), &iter, | |
1752 WORD_ONLY_COLUMN, !enabled, | |
1753 -1); | |
1754 | |
1755 save_list(); | |
1756 } | |
1757 | |
1667 static void list_add_new() | 1758 static void list_add_new() |
1668 { | 1759 { |
1669 GtkTreeIter iter; | 1760 GtkTreeIter iter; |
1670 | 1761 |
1671 if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter)) { | 1762 if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter)) { |
1673 | 1764 |
1674 do { | 1765 do { |
1675 GValue val0 = {0, }; | 1766 GValue val0 = {0, }; |
1676 char *bad; | 1767 char *bad; |
1677 | 1768 |
1678 gtk_tree_model_get_value(GTK_TREE_MODEL(model), &iter, 0, &val0); | 1769 gtk_tree_model_get_value(GTK_TREE_MODEL(model), &iter, BAD_COLUMN, &val0); |
1679 bad = g_utf8_casefold(g_value_get_string(&val0), -1); | 1770 bad = g_utf8_casefold(g_value_get_string(&val0), -1); |
1680 | 1771 |
1681 if (!strcmp(bad, tmpword)) { | 1772 if (!strcmp(bad, tmpword)) { |
1682 g_value_unset(&val0); | 1773 g_value_unset(&val0); |
1683 g_free(bad); | 1774 g_free(bad); |
1698 } | 1789 } |
1699 | 1790 |
1700 | 1791 |
1701 gtk_list_store_append(model, &iter); | 1792 gtk_list_store_append(model, &iter); |
1702 gtk_list_store_set(model, &iter, | 1793 gtk_list_store_set(model, &iter, |
1703 0, gtk_entry_get_text(GTK_ENTRY(bad_entry)), | 1794 BAD_COLUMN, gtk_entry_get_text(GTK_ENTRY(bad_entry)), |
1704 1, gtk_entry_get_text(GTK_ENTRY(good_entry)), | 1795 GOOD_COLUMN, gtk_entry_get_text(GTK_ENTRY(good_entry)), |
1796 WORD_ONLY_COLUMN, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(complete_toggle)), | |
1705 -1); | 1797 -1); |
1798 | |
1706 gtk_editable_delete_text(GTK_EDITABLE(bad_entry), 0, -1); | 1799 gtk_editable_delete_text(GTK_EDITABLE(bad_entry), 0, -1); |
1707 gtk_editable_delete_text(GTK_EDITABLE(good_entry), 0, -1); | 1800 gtk_editable_delete_text(GTK_EDITABLE(good_entry), 0, -1); |
1801 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(complete_toggle), TRUE); | |
1708 gtk_widget_grab_focus(bad_entry); | 1802 gtk_widget_grab_focus(bad_entry); |
1709 | 1803 |
1710 save_list(); | 1804 save_list(); |
1711 } | 1805 } |
1712 | 1806 |
1749 | 1843 |
1750 if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter)) { | 1844 if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter)) { |
1751 do { | 1845 do { |
1752 GValue val0 = {0, }; | 1846 GValue val0 = {0, }; |
1753 GValue val1 = {0, }; | 1847 GValue val1 = {0, }; |
1754 | 1848 GValue val2 = {0, }; |
1755 gtk_tree_model_get_value(GTK_TREE_MODEL(model), &iter, 0, &val0); | 1849 |
1756 gtk_tree_model_get_value(GTK_TREE_MODEL(model), &iter, 1, &val1); | 1850 gtk_tree_model_get_value(GTK_TREE_MODEL(model), &iter, BAD_COLUMN, &val0); |
1757 | 1851 gtk_tree_model_get_value(GTK_TREE_MODEL(model), &iter, GOOD_COLUMN, &val1); |
1758 g_string_append_printf(data, "BAD %s\nGOOD %s\n\n", g_value_get_string(&val0), g_value_get_string(&val1)); | 1852 gtk_tree_model_get_value(GTK_TREE_MODEL(model), &iter, WORD_ONLY_COLUMN, &val2); |
1853 | |
1854 g_string_append_printf(data, "COMPLETE %d\nBAD %s\nGOOD %s\n\n", g_value_get_boolean(&val2), g_value_get_string(&val0), g_value_get_string(&val1)); | |
1759 | 1855 |
1760 g_value_unset(&val0); | 1856 g_value_unset(&val0); |
1761 g_value_unset(&val1); | 1857 g_value_unset(&val1); |
1858 g_value_unset(&val2); | |
1762 | 1859 |
1763 } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter)); | 1860 } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter)); |
1764 } | 1861 } |
1765 | 1862 |
1766 gaim_util_write_data_to_file("dict", data->str, -1); | 1863 gaim_util_write_data_to_file("dict", data->str, -1); |
1819 { | 1916 { |
1820 GtkWidget *ret, *vbox, *win; | 1917 GtkWidget *ret, *vbox, *win; |
1821 GtkWidget *hbox, *label; | 1918 GtkWidget *hbox, *label; |
1822 GtkWidget *button; | 1919 GtkWidget *button; |
1823 GtkSizeGroup *sg; | 1920 GtkSizeGroup *sg; |
1921 GtkSizeGroup *sg2; | |
1824 GtkCellRenderer *renderer; | 1922 GtkCellRenderer *renderer; |
1825 GtkTreeViewColumn *column; | 1923 GtkTreeViewColumn *column; |
1826 | 1924 |
1827 sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); | |
1828 | |
1829 ret = gtk_vbox_new(FALSE, 18); | 1925 ret = gtk_vbox_new(FALSE, 18); |
1830 gtk_container_set_border_width (GTK_CONTAINER(ret), 12); | 1926 gtk_container_set_border_width (GTK_CONTAINER(ret), 12); |
1831 | 1927 |
1832 vbox = gaim_gtk_make_frame(ret, _("Text Replacements")); | 1928 vbox = gaim_gtk_make_frame(ret, _("Text Replacements")); |
1833 gtk_container_set_border_width(GTK_CONTAINER(vbox), 4); | 1929 gtk_container_set_border_width(GTK_CONTAINER(vbox), 4); |
1834 gtk_widget_set_size_request(vbox, 300, -1); | 1930 gtk_widget_set_size_request(vbox, 445, -1); |
1835 gtk_widget_show(vbox); | 1931 gtk_widget_show(vbox); |
1836 | 1932 |
1837 win = gtk_scrolled_window_new(0, 0); | 1933 win = gtk_scrolled_window_new(0, 0); |
1838 gtk_container_add(GTK_CONTAINER(vbox), win); | 1934 gtk_container_add(GTK_CONTAINER(vbox), win); |
1839 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(win), | 1935 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(win), |
1843 GTK_POLICY_AUTOMATIC); | 1939 GTK_POLICY_AUTOMATIC); |
1844 gtk_widget_show(win); | 1940 gtk_widget_show(win); |
1845 | 1941 |
1846 tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(model)); | 1942 tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(model)); |
1847 /* gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(tree), TRUE); */ | 1943 /* gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(tree), TRUE); */ |
1848 gtk_widget_set_size_request(tree, 260,200); | 1944 gtk_widget_set_size_request(tree, 445, 200); |
1849 | 1945 |
1850 renderer = gtk_cell_renderer_text_new(); | 1946 renderer = gtk_cell_renderer_text_new(); |
1851 g_object_set(G_OBJECT(renderer), | 1947 g_object_set(G_OBJECT(renderer), |
1852 "editable", TRUE, | 1948 "editable", TRUE, |
1853 NULL); | 1949 NULL); |
1866 g_signal_connect(G_OBJECT(renderer), "edited", | 1962 g_signal_connect(G_OBJECT(renderer), "edited", |
1867 G_CALLBACK(on_edited), GINT_TO_POINTER(1)); | 1963 G_CALLBACK(on_edited), GINT_TO_POINTER(1)); |
1868 column = gtk_tree_view_column_new_with_attributes(_("You send"), | 1964 column = gtk_tree_view_column_new_with_attributes(_("You send"), |
1869 renderer, "text", GOOD_COLUMN, NULL); | 1965 renderer, "text", GOOD_COLUMN, NULL); |
1870 gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); | 1966 gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); |
1967 gtk_tree_view_column_set_fixed_width(column, 150); | |
1968 /* gtk_tree_view_column_set_resizable(column, TRUE); */ | |
1969 gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column); | |
1970 renderer = gtk_cell_renderer_toggle_new(); | |
1971 g_object_set(G_OBJECT(renderer), | |
1972 "activatable", TRUE, | |
1973 NULL); | |
1974 g_signal_connect(G_OBJECT(renderer), "toggled", | |
1975 G_CALLBACK(on_toggled), GINT_TO_POINTER(2)); | |
1976 column = gtk_tree_view_column_new_with_attributes(_("Complete words"), | |
1977 renderer, "active", WORD_ONLY_COLUMN, NULL); | |
1978 gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); | |
1871 gtk_tree_view_column_set_fixed_width(column, 130); | 1979 gtk_tree_view_column_set_fixed_width(column, 130); |
1872 /* gtk_tree_view_column_set_resizable(column, TRUE); */ | 1980 /* gtk_tree_view_column_set_resizable(column, TRUE); */ |
1873 gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column); | 1981 gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column); |
1874 gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(tree)), | 1982 gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(tree)), |
1875 GTK_SELECTION_MULTIPLE); | 1983 GTK_SELECTION_MULTIPLE); |
1892 gtk_widget_show(button); | 2000 gtk_widget_show(button); |
1893 | 2001 |
1894 vbox = gaim_gtk_make_frame(ret, _("Add a new text replacement")); | 2002 vbox = gaim_gtk_make_frame(ret, _("Add a new text replacement")); |
1895 gtk_widget_set_size_request(vbox, 300, -1); | 2003 gtk_widget_set_size_request(vbox, 300, -1); |
1896 | 2004 |
2005 sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); | |
2006 sg2 = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); | |
2007 | |
1897 hbox = gtk_hbox_new(FALSE, 2); | 2008 hbox = gtk_hbox_new(FALSE, 2); |
1898 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); | 2009 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); |
1899 gtk_widget_show(hbox); | 2010 gtk_widget_show(hbox); |
1900 | 2011 |
1901 label = gtk_label_new_with_mnemonic(_("You _type:")); | 2012 label = gtk_label_new_with_mnemonic(_("You _type:")); |
1902 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); | 2013 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); |
2014 gtk_size_group_add_widget(sg, label); | |
2015 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); | |
1903 | 2016 |
1904 bad_entry = gtk_entry_new(); | 2017 bad_entry = gtk_entry_new(); |
1905 gtk_entry_set_max_length(GTK_ENTRY(bad_entry), 40); | 2018 gtk_entry_set_max_length(GTK_ENTRY(bad_entry), 40); |
1906 gtk_box_pack_start(GTK_BOX(hbox), bad_entry, TRUE, TRUE, 0); | 2019 gtk_box_pack_start(GTK_BOX(hbox), bad_entry, TRUE, TRUE, 0); |
1907 gtk_size_group_add_widget(sg, bad_entry); | 2020 gtk_size_group_add_widget(sg2, bad_entry); |
1908 gtk_label_set_mnemonic_widget(GTK_LABEL(label), bad_entry); | 2021 gtk_label_set_mnemonic_widget(GTK_LABEL(label), bad_entry); |
1909 gtk_widget_show(bad_entry); | 2022 gtk_widget_show(bad_entry); |
1910 | 2023 |
1911 hbox = gtk_hbox_new(FALSE, 2); | 2024 hbox = gtk_hbox_new(FALSE, 2); |
1912 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); | 2025 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); |
1913 gtk_widget_show(hbox); | 2026 gtk_widget_show(hbox); |
1914 | 2027 |
1915 label = gtk_label_new_with_mnemonic(_("You _send:")); | 2028 label = gtk_label_new_with_mnemonic(_("You _send:")); |
1916 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); | 2029 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); |
2030 gtk_size_group_add_widget(sg, label); | |
2031 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); | |
1917 | 2032 |
1918 good_entry = gtk_entry_new(); | 2033 good_entry = gtk_entry_new(); |
1919 gtk_entry_set_max_length(GTK_ENTRY(good_entry), 255); | 2034 gtk_entry_set_max_length(GTK_ENTRY(good_entry), 255); |
1920 gtk_box_pack_start(GTK_BOX(hbox), good_entry, TRUE, TRUE, 0); | 2035 gtk_box_pack_start(GTK_BOX(hbox), good_entry, TRUE, TRUE, 0); |
1921 gtk_size_group_add_widget(sg, good_entry); | 2036 gtk_size_group_add_widget(sg2, good_entry); |
1922 gtk_label_set_mnemonic_widget(GTK_LABEL(label), good_entry); | 2037 gtk_label_set_mnemonic_widget(GTK_LABEL(label), good_entry); |
1923 gtk_widget_show(good_entry); | 2038 gtk_widget_show(good_entry); |
2039 | |
2040 complete_toggle = gtk_check_button_new_with_mnemonic(_("Only replace _complete words")); | |
2041 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(complete_toggle), TRUE); | |
2042 gtk_widget_show(complete_toggle); | |
2043 gtk_box_pack_start(GTK_BOX(vbox), complete_toggle, FALSE, FALSE, 0); | |
1924 | 2044 |
1925 hbox = gtk_hbutton_box_new(); | 2045 hbox = gtk_hbutton_box_new(); |
1926 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); | 2046 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); |
1927 button = gtk_button_new_from_stock(GTK_STOCK_ADD); | 2047 button = gtk_button_new_from_stock(GTK_STOCK_ADD); |
1928 g_signal_connect(G_OBJECT(button), "clicked", | 2048 g_signal_connect(G_OBJECT(button), "clicked", |