Lines Matching refs:su

73 #define WAS_BANNED(su, word) (!HASHITEM_EMPTY(hash_find(&su->su_banned, word)))  argument
78 #define SUG_CLEAN_COUNT(su) ((su)->su_maxcount < 130 ? 150 : (su)->su_maxcount + 20) argument
82 #define SUG_MAX_COUNT(su) (SUG_CLEAN_COUNT(su) + 50) argument
200 static void spell_find_suggest(char_u *badptr, int badlen, suginfo_T *su, int maxcount, int banbadw…
202 static void spell_suggest_expr(suginfo_T *su, char_u *expr);
204 static void spell_suggest_file(suginfo_T *su, char_u *fname);
205 static void spell_suggest_intern(suginfo_T *su, int interactive);
206 static void spell_find_cleanup(suginfo_T *su);
207 static void suggest_try_special(suginfo_T *su);
208 static void suggest_try_change(suginfo_T *su);
209 static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, int soundfold);
212 static void score_comp_sal(suginfo_T *su);
213 static void score_combine(suginfo_T *su);
214 static int stp_sal_score(suggest_T *stp, suginfo_T *su, slang_T *slang, char_u *badsound);
216 static void suggest_try_soundalike(suginfo_T *su);
218 static void add_sound_suggest(suginfo_T *su, char_u *goodword, int score, langp_T *lp);
221 static void add_suggestion(suginfo_T *su, garray_T *gap, char_u *goodword, int badlen, int score, i…
222 static void check_suggestions(suginfo_T *su, garray_T *gap);
223 static void add_banned(suginfo_T *su, char_u *word);
224 static void rescore_suggestions(suginfo_T *su);
225 static void rescore_one(suginfo_T *su, suggest_T *stp);
756 suginfo_T *su, in spell_find_suggest() argument
776 CLEAR_POINTER(su); in spell_find_suggest()
777 ga_init2(&su->su_ga, (int)sizeof(suggest_T), 10); in spell_find_suggest()
778 ga_init2(&su->su_sga, (int)sizeof(suggest_T), 10); in spell_find_suggest()
781 hash_init(&su->su_banned); in spell_find_suggest()
783 su->su_badptr = badptr; in spell_find_suggest()
785 su->su_badlen = badlen; in spell_find_suggest()
787 su->su_badlen = spell_check(curwin, su->su_badptr, &attr, NULL, FALSE); in spell_find_suggest()
788 su->su_maxcount = maxcount; in spell_find_suggest()
789 su->su_maxscore = SCORE_MAXINIT; in spell_find_suggest()
791 if (su->su_badlen >= MAXWLEN) in spell_find_suggest()
792 su->su_badlen = MAXWLEN - 1; // just in case in spell_find_suggest()
793 vim_strncpy(su->su_badword, su->su_badptr, su->su_badlen); in spell_find_suggest()
794 (void)spell_casefold(curwin, su->su_badptr, su->su_badlen, in spell_find_suggest()
795 su->su_fbadword, MAXWLEN); in spell_find_suggest()
798 su->su_fbadword[su->su_badlen] = NUL; in spell_find_suggest()
801 su->su_badflags = badword_captype(su->su_badptr, in spell_find_suggest()
802 su->su_badptr + su->su_badlen); in spell_find_suggest()
804 su->su_badflags |= WF_ONECAP; in spell_find_suggest()
815 su->su_sallang = lp->lp_sallang; in spell_find_suggest()
822 if (su->su_sallang != NULL) in spell_find_suggest()
823 spell_soundfold(su->su_sallang, su->su_fbadword, TRUE, in spell_find_suggest()
824 su->su_sal_badword); in spell_find_suggest()
829 c = PTR2CHAR(su->su_badptr); in spell_find_suggest()
832 make_case_word(su->su_badword, buf, WF_ONECAP); in spell_find_suggest()
833 add_suggestion(su, &su->su_ga, buf, su->su_badlen, SCORE_ICASE, in spell_find_suggest()
834 0, TRUE, su->su_sallang, FALSE); in spell_find_suggest()
839 add_banned(su, su->su_badword); in spell_find_suggest()
859 spell_suggest_expr(su, buf + 5); in spell_find_suggest()
866 spell_suggest_file(su, buf + 5); in spell_find_suggest()
870 spell_suggest_intern(su, interactive); in spell_find_suggest()
882 score_combine(su); in spell_find_suggest()
890 spell_suggest_expr(suginfo_T *su, char_u *expr) in spell_suggest_expr() argument
900 list = eval_spell_expr(su->su_badword, expr); in spell_suggest_expr()
909 if (score >= 0 && score <= su->su_maxscore) in spell_suggest_expr()
910 add_suggestion(su, &su->su_ga, p, su->su_badlen, in spell_suggest_expr()
911 score, 0, TRUE, su->su_sallang, FALSE); in spell_suggest_expr()
917 check_suggestions(su, &su->su_ga); in spell_suggest_expr()
918 (void)cleanup_suggestions(&su->su_ga, su->su_maxscore, su->su_maxcount); in spell_suggest_expr()
926 spell_suggest_file(suginfo_T *su, char_u *fname) in spell_suggest_file() argument
951 if (STRICMP(su->su_badword, line) == 0) in spell_suggest_file()
962 make_case_word(p, cword, su->su_badflags); in spell_suggest_file()
966 add_suggestion(su, &su->su_ga, p, su->su_badlen, in spell_suggest_file()
967 SCORE_FILE, 0, TRUE, su->su_sallang, FALSE); in spell_suggest_file()
974 check_suggestions(su, &su->su_ga); in spell_suggest_file()
975 (void)cleanup_suggestions(&su->su_ga, su->su_maxscore, su->su_maxcount); in spell_suggest_file()
982 spell_suggest_intern(suginfo_T *su, int interactive) in spell_suggest_intern() argument
991 suggest_try_special(su); in spell_suggest_intern()
995 suggest_try_change(su); in spell_suggest_intern()
999 score_comp_sal(su); in spell_suggest_intern()
1007 rescore_suggestions(su); in spell_suggest_intern()
1018 su->su_maxscore = SCORE_SFMAX1; in spell_suggest_intern()
1019 su->su_sfmaxscore = SCORE_MAXINIT * 3; in spell_suggest_intern()
1020 suggest_try_soundalike(su); in spell_suggest_intern()
1021 if (su->su_ga.ga_len < SUG_CLEAN_COUNT(su)) in spell_suggest_intern()
1025 su->su_maxscore = SCORE_SFMAX2; in spell_suggest_intern()
1026 suggest_try_soundalike(su); in spell_suggest_intern()
1027 if (su->su_ga.ga_len < SUG_CLEAN_COUNT(su)) in spell_suggest_intern()
1031 su->su_maxscore = SCORE_SFMAX3; in spell_suggest_intern()
1032 suggest_try_soundalike(su); in spell_suggest_intern()
1035 su->su_maxscore = su->su_sfmaxscore; in spell_suggest_intern()
1048 if ((sps_flags & SPS_DOUBLE) == 0 && su->su_ga.ga_len != 0) in spell_suggest_intern()
1052 rescore_suggestions(su); in spell_suggest_intern()
1055 check_suggestions(su, &su->su_ga); in spell_suggest_intern()
1056 (void)cleanup_suggestions(&su->su_ga, su->su_maxscore, su->su_maxcount); in spell_suggest_intern()
1064 spell_find_cleanup(suginfo_T *su) in spell_find_cleanup() argument
1069 for (i = 0; i < su->su_ga.ga_len; ++i) in spell_find_cleanup()
1070 vim_free(SUG(su->su_ga, i).st_word); in spell_find_cleanup()
1071 ga_clear(&su->su_ga); in spell_find_cleanup()
1072 for (i = 0; i < su->su_sga.ga_len; ++i) in spell_find_cleanup()
1073 vim_free(SUG(su->su_sga, i).st_word); in spell_find_cleanup()
1074 ga_clear(&su->su_sga); in spell_find_cleanup()
1077 hash_clear_all(&su->su_banned, 0); in spell_find_cleanup()
1084 suggest_try_special(suginfo_T *su) in suggest_try_special() argument
1092 p = skiptowhite(su->su_fbadword); in suggest_try_special()
1093 len = p - su->su_fbadword; in suggest_try_special()
1095 if (STRLEN(p) == len && STRNCMP(su->su_fbadword, p, len) == 0) in suggest_try_special()
1099 c = su->su_fbadword[len]; in suggest_try_special()
1100 su->su_fbadword[len] = NUL; in suggest_try_special()
1101 make_case_word(su->su_fbadword, word, su->su_badflags); in suggest_try_special()
1102 su->su_fbadword[len] = c; in suggest_try_special()
1106 add_suggestion(su, &su->su_ga, word, su->su_badlen, in suggest_try_special()
1107 RESCORE(SCORE_REP, 0), 0, TRUE, su->su_sallang, FALSE); in suggest_try_special()
1165 suggest_try_change(suginfo_T *su) in suggest_try_change() argument
1176 STRCPY(fword, su->su_fbadword); in suggest_try_change()
1178 p = su->su_badptr + su->su_badlen; in suggest_try_change()
1182 n = (int)STRLEN(su->su_badptr); in suggest_try_change()
1199 suggest_trie_walk(su, lp, fword, FALSE); in suggest_try_change()
1207 #define TRY_DEEPER(su, stack, depth, add) \ argument
1208 (stack[depth].ts_score + (add) < su->su_maxscore)
1243 suginfo_T *su, in suggest_trie_walk() argument
1354 sp->ts_save_badflags = su->su_badflags; in suggest_trie_walk()
1363 n = nofold_len(fword, sp->ts_fidx, su->su_badptr); in suggest_trie_walk()
1366 flags = badword_captype(su->su_badptr, su->su_badptr + n); in suggest_trie_walk()
1367 su->su_badflags = badword_captype(su->su_badptr + n, in suggest_trie_walk()
1368 su->su_badptr + su->su_badlen); in suggest_trie_walk()
1396 sp->ts_save_badflags = su->su_badflags; in suggest_trie_walk()
1475 if (newscore <= su->su_maxscore) in suggest_trie_walk()
1476 add_suggestion(su, &su->su_ga, preword, in suggest_trie_walk()
1544 c = su->su_badflags; in suggest_trie_walk()
1546 && su->su_badlen == (*mb_ptr2len)(su->su_badptr)) in suggest_trie_walk()
1564 add_banned(su, preword + sp->ts_prewordlen); in suggest_trie_walk()
1568 && WAS_BANNED(su, preword + sp->ts_prewordlen)) in suggest_trie_walk()
1569 || WAS_BANNED(su, preword)) in suggest_trie_walk()
1587 if (!spell_valid_case(su->su_badflags, in suggest_trie_walk()
1614 add_sound_suggest(su, preword, sp->ts_score, lp); in suggest_trie_walk()
1637 if (score <= su->su_maxscore) in suggest_trie_walk()
1639 add_suggestion(su, &su->su_ga, preword, in suggest_trie_walk()
1643 if (su->su_badflags & WF_MIXCAP) in suggest_trie_walk()
1654 add_suggestion(su, &su->su_ga, preword, in suggest_trie_walk()
1677 try_split = (sp->ts_fidx - repextra < su->su_badlen) in suggest_trie_walk()
1764 if (TRY_DEEPER(su, stack, depth, newscore)) in suggest_trie_walk()
1776 sp->ts_save_badflags = su->su_badflags; in suggest_trie_walk()
1830 n = nofold_len(fword, sp->ts_fidx, su->su_badptr); in suggest_trie_walk()
1833 su->su_badflags = badword_captype(su->su_badptr + n, in suggest_trie_walk()
1834 su->su_badptr + su->su_badlen); in suggest_trie_walk()
1855 su->su_badflags = sp->ts_save_badflags; in suggest_trie_walk()
1868 su->su_badflags = sp->ts_save_badflags; in suggest_trie_walk()
1913 && TRY_DEEPER(su, stack, depth, newscore)) in suggest_trie_walk()
2053 && TRY_DEEPER(su, stack, depth, newscore)) in suggest_trie_walk()
2150 && TRY_DEEPER(su, stack, depth, newscore)) in suggest_trie_walk()
2250 if (c2 != NUL && TRY_DEEPER(su, stack, depth, SCORE_SWAP)) in suggest_trie_walk()
2338 if (TRY_DEEPER(su, stack, depth, SCORE_SWAP3)) in suggest_trie_walk()
2405 if (TRY_DEEPER(su, stack, depth, SCORE_SWAP3)) in suggest_trie_walk()
2466 if (TRY_DEEPER(su, stack, depth, SCORE_SWAP3)) in suggest_trie_walk()
2533 || sp->ts_score + SCORE_REP >= su->su_maxscore in suggest_trie_walk()
2579 && TRY_DEEPER(su, stack, depth, SCORE_REP)) in suggest_trie_walk()
2826 score_comp_sal(suginfo_T *su) in score_comp_sal() argument
2836 if (ga_grow(&su->su_sga, su->su_ga.ga_len) == FAIL) in score_comp_sal()
2846 spell_soundfold(lp->lp_slang, su->su_fbadword, TRUE, badsound); in score_comp_sal()
2848 for (i = 0; i < su->su_ga.ga_len; ++i) in score_comp_sal()
2850 stp = &SUG(su->su_ga, i); in score_comp_sal()
2854 score = stp_sal_score(stp, su, lp->lp_slang, badsound); in score_comp_sal()
2858 sstp = &SUG(su->su_sga, su->su_sga.ga_len); in score_comp_sal()
2866 ++su->su_sga.ga_len; in score_comp_sal()
2880 score_combine(suginfo_T *su) in score_combine() argument
2902 spell_soundfold(slang, su->su_fbadword, TRUE, badsound); in score_combine()
2904 for (i = 0; i < su->su_ga.ga_len; ++i) in score_combine()
2906 stp = &SUG(su->su_ga, i); in score_combine()
2907 stp->st_altscore = stp_sal_score(stp, su, slang, badsound); in score_combine()
2921 (void)cleanup_suggestions(&su->su_ga, su->su_maxscore, in score_combine()
2922 su->su_maxcount); in score_combine()
2927 for (i = 0; i < su->su_sga.ga_len; ++i) in score_combine()
2929 stp = &SUG(su->su_sga, i); in score_combine()
2931 su->su_badword, stp->st_word); in score_combine()
2941 check_suggestions(su, &su->su_ga); in score_combine()
2942 (void)cleanup_suggestions(&su->su_ga, su->su_maxscore, su->su_maxcount); in score_combine()
2943 check_suggestions(su, &su->su_sga); in score_combine()
2944 (void)cleanup_suggestions(&su->su_sga, su->su_maxscore, su->su_maxcount); in score_combine()
2947 if (ga_grow(&ga, su->su_ga.ga_len + su->su_sga.ga_len) == FAIL) in score_combine()
2951 for (i = 0; i < su->su_ga.ga_len || i < su->su_sga.ga_len; ++i) in score_combine()
2957 gap = round == 1 ? &su->su_ga : &su->su_sga; in score_combine()
2973 ga_clear(&su->su_ga); in score_combine()
2974 ga_clear(&su->su_sga); in score_combine()
2977 if (ga.ga_len > su->su_maxcount) in score_combine()
2979 for (i = su->su_maxcount; i < ga.ga_len; ++i) in score_combine()
2981 ga.ga_len = su->su_maxcount; in score_combine()
2984 su->su_ga = ga; in score_combine()
2994 suginfo_T *su, in stp_sal_score() argument
3007 lendiff = (int)(su->su_badlen - stp->st_orglen); in stp_sal_score()
3014 su->su_badptr, stp->st_orglen, fword, MAXWLEN); in stp_sal_score()
3020 if (VIM_ISWHITE(su->su_badptr[su->su_badlen]) in stp_sal_score()
3035 su->su_badptr + su->su_badlen - lendiff, lendiff); in stp_sal_score()
3086 suggest_try_soundalike(suginfo_T *su) in suggest_try_soundalike() argument
3102 spell_soundfold(slang, su->su_fbadword, TRUE, salword); in suggest_try_soundalike()
3110 suggest_trie_walk(su, lp, salword, TRUE); in suggest_try_soundalike()
3160 suginfo_T *su, in add_sound_suggest() argument
3283 flags |= su->su_badflags; in add_sound_suggest()
3298 if (score <= su->su_maxscore) in add_sound_suggest()
3299 add_suggestion(su, &su->su_sga, p, su->su_badlen, in add_sound_suggest()
3318 bc = PTR2CHAR(su->su_badword); in add_sound_suggest()
3331 limit = MAXSCORE(su->su_sfmaxscore - goodscore, score); in add_sound_suggest()
3333 goodscore += spell_edit_score(slang, su->su_badword, p); in add_sound_suggest()
3335 goodscore += spell_edit_score_limit(slang, su->su_badword, in add_sound_suggest()
3346 if (goodscore <= su->su_sfmaxscore) in add_sound_suggest()
3347 add_suggestion(su, &su->su_ga, p, su->su_badlen, in add_sound_suggest()
3477 suginfo_T *su, in add_suggestion() argument
3498 pbad = su->su_badptr + badlenarg; in add_suggestion()
3502 badlen = (int)(pbad - su->su_badptr); in add_suggestion()
3506 MB_PTR_BACK(su->su_badptr, pbad); in add_suggestion()
3551 rescore_one(su, stp); in add_suggestion()
3558 rescore_one(su, &new_sug); in add_suggestion()
3589 if (gap->ga_len > SUG_MAX_COUNT(su)) in add_suggestion()
3592 su->su_sfmaxscore = cleanup_suggestions(gap, in add_suggestion()
3593 su->su_sfmaxscore, SUG_CLEAN_COUNT(su)); in add_suggestion()
3595 su->su_maxscore = cleanup_suggestions(gap, in add_suggestion()
3596 su->su_maxscore, SUG_CLEAN_COUNT(su)); in add_suggestion()
3608 suginfo_T *su, in check_suggestions() argument
3625 vim_strncpy(longword + len, su->su_badptr + stp[i].st_orglen, in check_suggestions()
3647 suginfo_T *su, in add_banned() argument
3655 hi = hash_lookup(&su->su_banned, word, hash); in add_banned()
3660 hash_add_item(&su->su_banned, hi, s, hash); in add_banned()
3669 rescore_suggestions(suginfo_T *su) in rescore_suggestions() argument
3673 if (su->su_sallang != NULL) in rescore_suggestions()
3674 for (i = 0; i < su->su_ga.ga_len; ++i) in rescore_suggestions()
3675 rescore_one(su, &SUG(su->su_ga, i)); in rescore_suggestions()
3682 rescore_one(suginfo_T *su, suggest_T *stp) in rescore_one() argument
3692 if (slang == su->su_sallang) in rescore_one()
3693 p = su->su_sal_badword; in rescore_one()
3696 spell_soundfold(slang, su->su_fbadword, TRUE, sal_badword); in rescore_one()
3700 stp->st_altscore = stp_sal_score(stp, su, slang, p); in rescore_one()