comparison src/spell.c @ 11127:506f5d8b7d8b v8.0.0451

patch 8.0.0451: some macros are in lower case commit https://github.com/vim/vim/commit/91acfffc1e6c0d8c2abfb186a0e79a5bf19c3f3f Author: Bram Moolenaar <Bram@vim.org> Date: Sun Mar 12 19:22:36 2017 +0100 patch 8.0.0451: some macros are in lower case Problem: Some macros are in lower case. Solution: Make a few more macros upper case. Avoid lower case macros use an argument twice.
author Christian Brabandt <cb@256bit.org>
date Sun, 12 Mar 2017 19:30:05 +0100
parents 778c10516955
children f4ea50924c6d
comparison
equal deleted inserted replaced
11126:48599a3eae0b 11127:506f5d8b7d8b
466 mi.mi_fend = ptr; 466 mi.mi_fend = ptr;
467 if (spell_iswordp(mi.mi_fend, wp)) 467 if (spell_iswordp(mi.mi_fend, wp))
468 { 468 {
469 do 469 do
470 { 470 {
471 mb_ptr_adv(mi.mi_fend); 471 MB_PTR_ADV(mi.mi_fend);
472 } while (*mi.mi_fend != NUL && spell_iswordp(mi.mi_fend, wp)); 472 } while (*mi.mi_fend != NUL && spell_iswordp(mi.mi_fend, wp));
473 473
474 if (capcol != NULL && *capcol == 0 && wp->w_s->b_cap_prog != NULL) 474 if (capcol != NULL && *capcol == 0 && wp->w_s->b_cap_prog != NULL)
475 { 475 {
476 /* Check word starting with capital letter. */ 476 /* Check word starting with capital letter. */
492 mi.mi_win = wp; 492 mi.mi_win = wp;
493 493
494 /* case-fold the word with one non-word character, so that we can check 494 /* case-fold the word with one non-word character, so that we can check
495 * for the word end. */ 495 * for the word end. */
496 if (*mi.mi_fend != NUL) 496 if (*mi.mi_fend != NUL)
497 mb_ptr_adv(mi.mi_fend); 497 MB_PTR_ADV(mi.mi_fend);
498 498
499 (void)spell_casefold(ptr, (int)(mi.mi_fend - ptr), mi.mi_fword, 499 (void)spell_casefold(ptr, (int)(mi.mi_fend - ptr), mi.mi_fword,
500 MAXWLEN + 1); 500 MAXWLEN + 1);
501 mi.mi_fwordlen = (int)STRLEN(mi.mi_fword); 501 mi.mi_fwordlen = (int)STRLEN(mi.mi_fword);
502 502
580 return 1; 580 return 1;
581 } 581 }
582 else if (mi.mi_end == ptr) 582 else if (mi.mi_end == ptr)
583 /* Always include at least one character. Required for when there 583 /* Always include at least one character. Required for when there
584 * is a mixup in "midword". */ 584 * is a mixup in "midword". */
585 mb_ptr_adv(mi.mi_end); 585 MB_PTR_ADV(mi.mi_end);
586 else if (mi.mi_result == SP_BAD 586 else if (mi.mi_result == SP_BAD
587 && LANGP_ENTRY(wp->w_s->b_langp, 0)->lp_slang->sl_nobreak) 587 && LANGP_ENTRY(wp->w_s->b_langp, 0)->lp_slang->sl_nobreak)
588 { 588 {
589 char_u *p, *fp; 589 char_u *p, *fp;
590 int save_result = mi.mi_result; 590 int save_result = mi.mi_result;
596 { 596 {
597 p = mi.mi_word; 597 p = mi.mi_word;
598 fp = mi.mi_fword; 598 fp = mi.mi_fword;
599 for (;;) 599 for (;;)
600 { 600 {
601 mb_ptr_adv(p); 601 MB_PTR_ADV(p);
602 mb_ptr_adv(fp); 602 MB_PTR_ADV(fp);
603 if (p >= mi.mi_end) 603 if (p >= mi.mi_end)
604 break; 604 break;
605 mi.mi_compoff = (int)(fp - mi.mi_fword); 605 mi.mi_compoff = (int)(fp - mi.mi_fword);
606 find_word(&mi, FIND_COMPOUND); 606 find_word(&mi, FIND_COMPOUND);
607 if (mi.mi_result != SP_BAD) 607 if (mi.mi_result != SP_BAD)
825 * when folding case. This can be slow, take a shortcut when the 825 * when folding case. This can be slow, take a shortcut when the
826 * case-folded word is equal to the keep-case word. */ 826 * case-folded word is equal to the keep-case word. */
827 p = mip->mi_word; 827 p = mip->mi_word;
828 if (STRNCMP(ptr, p, wlen) != 0) 828 if (STRNCMP(ptr, p, wlen) != 0)
829 { 829 {
830 for (s = ptr; s < ptr + wlen; mb_ptr_adv(s)) 830 for (s = ptr; s < ptr + wlen; MB_PTR_ADV(s))
831 mb_ptr_adv(p); 831 MB_PTR_ADV(p);
832 wlen = (int)(p - mip->mi_word); 832 wlen = (int)(p - mip->mi_word);
833 } 833 }
834 } 834 }
835 #endif 835 #endif
836 836
950 if (has_mbyte && STRNCMP(ptr, mip->mi_word, 950 if (has_mbyte && STRNCMP(ptr, mip->mi_word,
951 mip->mi_compoff) != 0) 951 mip->mi_compoff) != 0)
952 { 952 {
953 /* case folding may have changed the length */ 953 /* case folding may have changed the length */
954 p = mip->mi_word; 954 p = mip->mi_word;
955 for (s = ptr; s < ptr + mip->mi_compoff; mb_ptr_adv(s)) 955 for (s = ptr; s < ptr + mip->mi_compoff; MB_PTR_ADV(s))
956 mb_ptr_adv(p); 956 MB_PTR_ADV(p);
957 } 957 }
958 else 958 else
959 #endif 959 #endif
960 p = mip->mi_word + mip->mi_compoff; 960 p = mip->mi_word + mip->mi_compoff;
961 capflags = captype(p, mip->mi_word + wlen); 961 capflags = captype(p, mip->mi_word + wlen);
967 { 967 {
968 /* When the character before the word is a word 968 /* When the character before the word is a word
969 * character we do not accept a Onecap word. We do 969 * character we do not accept a Onecap word. We do
970 * accept a no-caps word, even when the dictionary 970 * accept a no-caps word, even when the dictionary
971 * word specifies ONECAP. */ 971 * word specifies ONECAP. */
972 mb_ptr_back(mip->mi_word, p); 972 MB_PTR_BACK(mip->mi_word, p);
973 if (spell_iswordp_nmw(p, mip->mi_win) 973 if (spell_iswordp_nmw(p, mip->mi_win)
974 ? capflags == WF_ONECAP 974 ? capflags == WF_ONECAP
975 : (flags & WF_ONECAP) != 0 975 : (flags & WF_ONECAP) != 0
976 && capflags != WF_ONECAP) 976 && capflags != WF_ONECAP)
977 continue; 977 continue;
1036 * folding case. This can be slow, take a shortcut when 1036 * folding case. This can be slow, take a shortcut when
1037 * the case-folded word is equal to the keep-case word. */ 1037 * the case-folded word is equal to the keep-case word. */
1038 p = mip->mi_fword; 1038 p = mip->mi_fword;
1039 if (STRNCMP(ptr, p, wlen) != 0) 1039 if (STRNCMP(ptr, p, wlen) != 0)
1040 { 1040 {
1041 for (s = ptr; s < ptr + wlen; mb_ptr_adv(s)) 1041 for (s = ptr; s < ptr + wlen; MB_PTR_ADV(s))
1042 mb_ptr_adv(p); 1042 MB_PTR_ADV(p);
1043 mip->mi_compoff = (int)(p - mip->mi_fword); 1043 mip->mi_compoff = (int)(p - mip->mi_fword);
1044 } 1044 }
1045 } 1045 }
1046 #endif 1046 #endif
1047 #if 0 /* Disabled, see below */ 1047 #if 0 /* Disabled, see below */
1504 char_u *p; 1504 char_u *p;
1505 1505
1506 p = mip->mi_fend; 1506 p = mip->mi_fend;
1507 do 1507 do
1508 { 1508 {
1509 mb_ptr_adv(mip->mi_fend); 1509 MB_PTR_ADV(mip->mi_fend);
1510 } while (*mip->mi_fend != NUL && spell_iswordp(mip->mi_fend, mip->mi_win)); 1510 } while (*mip->mi_fend != NUL && spell_iswordp(mip->mi_fend, mip->mi_win));
1511 1511
1512 /* Include the non-word character so that we can check for the word end. */ 1512 /* Include the non-word character so that we can check for the word end. */
1513 if (*mip->mi_fend != NUL) 1513 if (*mip->mi_fend != NUL)
1514 mb_ptr_adv(mip->mi_fend); 1514 MB_PTR_ADV(mip->mi_fend);
1515 1515
1516 (void)spell_casefold(p, (int)(mip->mi_fend - p), 1516 (void)spell_casefold(p, (int)(mip->mi_fend - p),
1517 mip->mi_fword + mip->mi_fwordlen, 1517 mip->mi_fword + mip->mi_fwordlen,
1518 MAXWLEN - mip->mi_fwordlen); 1518 MAXWLEN - mip->mi_fwordlen);
1519 flen = (int)STRLEN(mip->mi_fword + mip->mi_fwordlen); 1519 flen = (int)STRLEN(mip->mi_fword + mip->mi_fwordlen);
2758 int firstcap; 2758 int firstcap;
2759 int allcap; 2759 int allcap;
2760 int past_second = FALSE; /* past second word char */ 2760 int past_second = FALSE; /* past second word char */
2761 2761
2762 /* find first letter */ 2762 /* find first letter */
2763 for (p = word; !spell_iswordp_nmw(p, curwin); mb_ptr_adv(p)) 2763 for (p = word; !spell_iswordp_nmw(p, curwin); MB_PTR_ADV(p))
2764 if (end == NULL ? *p == NUL : p >= end) 2764 if (end == NULL ? *p == NUL : p >= end)
2765 return 0; /* only non-word characters, illegal word */ 2765 return 0; /* only non-word characters, illegal word */
2766 #ifdef FEAT_MBYTE 2766 #ifdef FEAT_MBYTE
2767 if (has_mbyte) 2767 if (has_mbyte)
2768 c = mb_ptr2char_adv(&p); 2768 c = mb_ptr2char_adv(&p);
2773 2773
2774 /* 2774 /*
2775 * Need to check all letters to find a word with mixed upper/lower. 2775 * Need to check all letters to find a word with mixed upper/lower.
2776 * But a word with an upper char only at start is a ONECAP. 2776 * But a word with an upper char only at start is a ONECAP.
2777 */ 2777 */
2778 for ( ; end == NULL ? *p != NUL : p < end; mb_ptr_adv(p)) 2778 for ( ; end == NULL ? *p != NUL : p < end; MB_PTR_ADV(p))
2779 if (spell_iswordp_nmw(p, curwin)) 2779 if (spell_iswordp_nmw(p, curwin))
2780 { 2780 {
2781 c = PTR2CHAR(p); 2781 c = PTR2CHAR(p);
2782 if (!SPELL_ISUPPER(c)) 2782 if (!SPELL_ISUPPER(c))
2783 { 2783 {
2816 if (flags & WF_KEEPCAP) 2816 if (flags & WF_KEEPCAP)
2817 { 2817 {
2818 /* Count the number of UPPER and lower case letters. */ 2818 /* Count the number of UPPER and lower case letters. */
2819 l = u = 0; 2819 l = u = 0;
2820 first = FALSE; 2820 first = FALSE;
2821 for (p = word; p < end; mb_ptr_adv(p)) 2821 for (p = word; p < end; MB_PTR_ADV(p))
2822 { 2822 {
2823 c = PTR2CHAR(p); 2823 c = PTR2CHAR(p);
2824 if (SPELL_ISUPPER(c)) 2824 if (SPELL_ISUPPER(c))
2825 { 2825 {
2826 ++u; 2826 ++u;
3383 curwin->w_cursor = prev_cursor; 3383 curwin->w_cursor = prev_cursor;
3384 line = ml_get_curline(); 3384 line = ml_get_curline();
3385 p = line + curwin->w_cursor.col; 3385 p = line + curwin->w_cursor.col;
3386 /* Backup to before start of word. */ 3386 /* Backup to before start of word. */
3387 while (p > line && spell_iswordp_nmw(p, curwin)) 3387 while (p > line && spell_iswordp_nmw(p, curwin))
3388 mb_ptr_back(line, p); 3388 MB_PTR_BACK(line, p);
3389 /* Forward to start of word. */ 3389 /* Forward to start of word. */
3390 while (*p != NUL && !spell_iswordp_nmw(p, curwin)) 3390 while (*p != NUL && !spell_iswordp_nmw(p, curwin))
3391 mb_ptr_adv(p); 3391 MB_PTR_ADV(p);
3392 3392
3393 if (!spell_iswordp_nmw(p, curwin)) /* No word found. */ 3393 if (!spell_iswordp_nmw(p, curwin)) /* No word found. */
3394 { 3394 {
3395 beep_flush(); 3395 beep_flush();
3396 return; 3396 return;
3622 regmatch.regprog = curwin->w_s->b_cap_prog; 3622 regmatch.regprog = curwin->w_s->b_cap_prog;
3623 regmatch.rm_ic = FALSE; 3623 regmatch.rm_ic = FALSE;
3624 p = line + endcol; 3624 p = line + endcol;
3625 for (;;) 3625 for (;;)
3626 { 3626 {
3627 mb_ptr_back(line, p); 3627 MB_PTR_BACK(line, p);
3628 if (p == line || spell_iswordp_nmw(p, curwin)) 3628 if (p == line || spell_iswordp_nmw(p, curwin))
3629 break; 3629 break;
3630 if (vim_regexec(&regmatch, p, 0) 3630 if (vim_regexec(&regmatch, p, 0)
3631 && regmatch.endp[0] == line + endcol) 3631 && regmatch.endp[0] == line + endcol)
3632 { 3632 {
4642 compound_ok = FALSE; 4642 compound_ok = FALSE;
4643 } 4643 }
4644 4644
4645 /* Get pointer to last char of previous word. */ 4645 /* Get pointer to last char of previous word. */
4646 p = preword + sp->ts_prewordlen; 4646 p = preword + sp->ts_prewordlen;
4647 mb_ptr_back(preword, p); 4647 MB_PTR_BACK(preword, p);
4648 } 4648 }
4649 } 4649 }
4650 4650
4651 /* 4651 /*
4652 * Form the word with proper case in preword. 4652 * Form the word with proper case in preword.
4744 else if (sp->ts_fidx > 0) 4744 else if (sp->ts_fidx > 0)
4745 { 4745 {
4746 /* Give a penalty when changing non-word char to word 4746 /* Give a penalty when changing non-word char to word
4747 * char, e.g., "thes," -> "these". */ 4747 * char, e.g., "thes," -> "these". */
4748 p = fword + sp->ts_fidx; 4748 p = fword + sp->ts_fidx;
4749 mb_ptr_back(fword, p); 4749 MB_PTR_BACK(fword, p);
4750 if (!spell_iswordp(p, curwin)) 4750 if (!spell_iswordp(p, curwin))
4751 { 4751 {
4752 p = preword + STRLEN(preword); 4752 p = preword + STRLEN(preword);
4753 mb_ptr_back(preword, p); 4753 MB_PTR_BACK(preword, p);
4754 if (spell_iswordp(p, curwin)) 4754 if (spell_iswordp(p, curwin))
4755 newscore += SCORE_NONWORD; 4755 newscore += SCORE_NONWORD;
4756 } 4756 }
4757 4757
4758 /* Give a bonus to words seen before. */ 4758 /* Give a bonus to words seen before. */
5155 /* If the previous character was the same, 5155 /* If the previous character was the same,
5156 * thus doubling a character, give a bonus 5156 * thus doubling a character, give a bonus
5157 * to the score. Also for the soundfold 5157 * to the score. Also for the soundfold
5158 * tree (might seem illogical but does 5158 * tree (might seem illogical but does
5159 * give better scores). */ 5159 * give better scores). */
5160 mb_ptr_back(tword, p); 5160 MB_PTR_BACK(tword, p);
5161 if (c == mb_ptr2char(p)) 5161 if (c == mb_ptr2char(p))
5162 sp->ts_score -= SCORE_INS 5162 sp->ts_score -= SCORE_INS
5163 - SCORE_INSDUP; 5163 - SCORE_INSDUP;
5164 } 5164 }
5165 } 5165 }
5865 nofold_len(char_u *fword, int flen, char_u *word) 5865 nofold_len(char_u *fword, int flen, char_u *word)
5866 { 5866 {
5867 char_u *p; 5867 char_u *p;
5868 int i = 0; 5868 int i = 0;
5869 5869
5870 for (p = fword; p < fword + flen; mb_ptr_adv(p)) 5870 for (p = fword; p < fword + flen; MB_PTR_ADV(p))
5871 ++i; 5871 ++i;
5872 for (p = word; i > 0; mb_ptr_adv(p)) 5872 for (p = word; i > 0; MB_PTR_ADV(p))
5873 --i; 5873 --i;
5874 return (int)(p - word); 5874 return (int)(p - word);
5875 } 5875 }
5876 #endif 5876 #endif
5877 5877
6743 { 6743 {
6744 goodlen = (int)(pgood - goodword); 6744 goodlen = (int)(pgood - goodword);
6745 badlen = (int)(pbad - su->su_badptr); 6745 badlen = (int)(pbad - su->su_badptr);
6746 if (goodlen <= 0 || badlen <= 0) 6746 if (goodlen <= 0 || badlen <= 0)
6747 break; 6747 break;
6748 mb_ptr_back(goodword, pgood); 6748 MB_PTR_BACK(goodword, pgood);
6749 mb_ptr_back(su->su_badptr, pbad); 6749 MB_PTR_BACK(su->su_badptr, pbad);
6750 #ifdef FEAT_MBYTE 6750 #ifdef FEAT_MBYTE
6751 if (has_mbyte) 6751 if (has_mbyte)
6752 { 6752 {
6753 if (mb_ptr2char(pgood) != mb_ptr2char(pbad)) 6753 if (mb_ptr2char(pgood) != mb_ptr2char(pbad))
6754 break; 6754 break;
8974 spell_to_word_end(char_u *start, win_T *win) 8974 spell_to_word_end(char_u *start, win_T *win)
8975 { 8975 {
8976 char_u *p = start; 8976 char_u *p = start;
8977 8977
8978 while (*p != NUL && spell_iswordp(p, win)) 8978 while (*p != NUL && spell_iswordp(p, win))
8979 mb_ptr_adv(p); 8979 MB_PTR_ADV(p);
8980 return p; 8980 return p;
8981 } 8981 }
8982 8982
8983 #if defined(FEAT_INS_EXPAND) || defined(PROTO) 8983 #if defined(FEAT_INS_EXPAND) || defined(PROTO)
8984 /* 8984 /*
9000 9000
9001 /* Find a word character before "startcol". */ 9001 /* Find a word character before "startcol". */
9002 line = ml_get_curline(); 9002 line = ml_get_curline();
9003 for (p = line + startcol; p > line; ) 9003 for (p = line + startcol; p > line; )
9004 { 9004 {
9005 mb_ptr_back(line, p); 9005 MB_PTR_BACK(line, p);
9006 if (spell_iswordp_nmw(p, curwin)) 9006 if (spell_iswordp_nmw(p, curwin))
9007 break; 9007 break;
9008 } 9008 }
9009 9009
9010 /* Go back to start of the word. */ 9010 /* Go back to start of the word. */
9011 while (p > line) 9011 while (p > line)
9012 { 9012 {
9013 col = (int)(p - line); 9013 col = (int)(p - line);
9014 mb_ptr_back(line, p); 9014 MB_PTR_BACK(line, p);
9015 if (!spell_iswordp(p, curwin)) 9015 if (!spell_iswordp(p, curwin))
9016 break; 9016 break;
9017 col = 0; 9017 col = 0;
9018 } 9018 }
9019 9019