0
0
mirror of https://github.com/vim/vim.git synced 2025-07-04 23:07:33 -04:00

updated for version 7.0128

This commit is contained in:
Bram Moolenaar 2005-08-11 19:59:29 +00:00
parent 0fa313a718
commit 8b59de9f2f
3 changed files with 178 additions and 66 deletions

View File

@ -1,4 +1,4 @@
*index.txt* For Vim version 7.0aa. Last change: 2005 Jul 29
*index.txt* For Vim version 7.0aa. Last change: 2005 Aug 11
VIM REFERENCE MANUAL by Bram Moolenaar
@ -152,11 +152,13 @@ commands in CTRL-X submode *i_CTRL-X_index*
|i_CTRL-X_CTRL-N| CTRL-X CTRL-N next completion
|i_CTRL-X_CTRL-O| CTRL-X CTRL-O occult completion
|i_CTRL-X_CTRL-P| CTRL-X CTRL-P previous completion
|i_CTRL-X_CTRL-S| CTRL-X CTRL-S spelling suggestions
|i_CTRL-X_CTRL-T| CTRL-X CTRL-T complete identifiers from thesaurus
|i_CTRL-X_CTRL-Y| CTRL-X CTRL-Y scroll down
|i_CTRL-X_CTRL-U| CTRL-X CTRL-U complete with 'completefunc'
|i_CTRL-X_CTRL-V| CTRL-X CTRL-V complete like in : command line
|i_CTRL-X_CTRL-]| CTRL-X CTRL-] complete tags
|i_CTRL-X_s| CTRL-X s spelling suggestions
{not available when compiled without the +insert_expand feature}
==============================================================================

View File

@ -1,8 +1,16 @@
" NetrwFileHandlers: contains various extension-based file handlers for
" netrw's browsers' x command ("eXecute launcher")
" Author: Charles E. Campbell, Jr.
" Date: Apr 07, 2005
" Version: 4a NOT RELEASED
" Date: Aug 08, 2005
" Version: 5a NOT RELEASED
" Copyright: Copyright (C) 1999-2005 Charles E. Campbell, Jr.
" Permission is hereby granted to use and distribute this code,
" with or without modifications, provided that this copyright
" notice is copied with it. Like anything else that's free,
" netrw.vim is provided *as is* and comes with no
" warranty of any kind, either expressed or implied. In no
" event will the copyright holder be liable for any damages
" resulting from the use of this software.
" ---------------------------------------------------------------------
" Load Once: {{{1
@ -11,7 +19,7 @@ if exists("g:loaded_netrwfilehandlers") || &cp
endif
let s:keepcpo= &cpo
set cpo&vim
let g:loaded_netrwfilehandlers= "v4a"
let g:loaded_netrwfilehandlers= "v5a"
" ---------------------------------------------------------------------
" NetrwFileHandler_html: handles html when the user hits "x" when the {{{1

View File

@ -478,6 +478,7 @@ typedef struct suggest_S
#define SCORE_DELDUP 64 /* delete a duplicated character */
#define SCORE_INS 96 /* insert a character */
#define SCORE_INSDUP 66 /* insert a duplicate character */
#define SCORE_INSCOMP 30 /* insert a composing character */
#define SCORE_NONWORD 103 /* change non-word to word char */
#define SCORE_FILE 30 /* suggestion from a file */
@ -646,6 +647,7 @@ static int set_spell_charflags __ARGS((char_u *flags, int cnt, char_u *upp));
static int set_spell_chartab __ARGS((char_u *fol, char_u *low, char_u *upp));
static void write_spell_chartab __ARGS((FILE *fd));
static int spell_casefold __ARGS((char_u *p, int len, char_u *buf, int buflen));
static int check_need_cap __ARGS((linenr_T lnum, colnr_T col));
static void spell_find_suggest __ARGS((char_u *badptr, suginfo_T *su, int maxcount, int banbadword, int need_cap));
#ifdef FEAT_EVAL
static void spell_suggest_expr __ARGS((suginfo_T *su, char_u *expr));
@ -2959,6 +2961,7 @@ badword_captype(word, end)
char_u *end;
{
int flags = captype(word, end);
int c;
int l, u;
int first;
char_u *p;
@ -2970,7 +2973,8 @@ badword_captype(word, end)
first = FALSE;
for (p = word; p < end; mb_ptr_adv(p))
{
if (SPELL_ISUPPER(PTR2CHAR(p)))
c = PTR2CHAR(p);
if (SPELL_ISUPPER(c))
{
++u;
if (p == word)
@ -6568,9 +6572,6 @@ spell_suggest()
suggest_T *stp;
int mouse_used;
int need_cap;
regmatch_T regmatch;
int endcol;
char_u *line_copy = NULL;
/* Find the start of the badly spelled word. */
if (spell_move_to(FORWARD, TRUE, TRUE) == FAIL
@ -6600,60 +6601,11 @@ spell_suggest()
}
/* Get the word and its length. */
line = ml_get_curline();
/* Figure out if the word should be capitalised. */
need_cap = FALSE;
if (curbuf->b_cap_prog != NULL)
{
endcol = 0;
if ((int)(skipwhite(line) - line) == (int)curwin->w_cursor.col)
{
/* At start of line, check if previous line is empty or sentence
* ends there. */
if (curwin->w_cursor.lnum == 1)
need_cap = TRUE;
else
{
line = ml_get(curwin->w_cursor.lnum - 1);
if (*skipwhite(line) == NUL)
need_cap = TRUE;
else
{
/* Append a space in place of the line break. */
line_copy = concat_str(line, (char_u *)" ");
line = line_copy;
endcol = STRLEN(line);
}
}
}
else
endcol = curwin->w_cursor.col;
need_cap = check_need_cap(curwin->w_cursor.lnum, curwin->w_cursor.col);
if (endcol > 0)
{
/* Check if sentence ends before the bad word. */
regmatch.regprog = curbuf->b_cap_prog;
regmatch.rm_ic = FALSE;
p = line + endcol;
for (;;)
{
mb_ptr_back(line, p);
if (p == line || spell_iswordp_nmw(p))
break;
if (vim_regexec(&regmatch, p, 0)
&& regmatch.endp[0] == line + endcol)
{
need_cap = TRUE;
break;
}
}
}
/* get the line again, we may have been using the previous one */
line = ml_get_curline();
vim_free(line_copy);
}
line = ml_get_curline();
/* Get the list of suggestions */
spell_find_suggest(line + curwin->w_cursor.col, &sug, (int)Rows - 2,
@ -6786,6 +6738,76 @@ spell_suggest()
spell_find_cleanup(&sug);
}
/*
* Check if the word at line "lnum" column "col" is required to start with a
* capital. This uses 'spellcapcheck' of the current buffer.
*/
static int
check_need_cap(lnum, col)
linenr_T lnum;
colnr_T col;
{
int need_cap = FALSE;
char_u *line;
char_u *line_copy = NULL;
char_u *p;
colnr_T endcol;
regmatch_T regmatch;
if (curbuf->b_cap_prog == NULL)
return FALSE;
line = ml_get_curline();
endcol = 0;
if ((int)(skipwhite(line) - line) >= (int)col)
{
/* At start of line, check if previous line is empty or sentence
* ends there. */
if (lnum == 1)
need_cap = TRUE;
else
{
line = ml_get(lnum - 1);
if (*skipwhite(line) == NUL)
need_cap = TRUE;
else
{
/* Append a space in place of the line break. */
line_copy = concat_str(line, (char_u *)" ");
line = line_copy;
endcol = STRLEN(line);
}
}
}
else
endcol = col;
if (endcol > 0)
{
/* Check if sentence ends before the bad word. */
regmatch.regprog = curbuf->b_cap_prog;
regmatch.rm_ic = FALSE;
p = line + endcol;
for (;;)
{
mb_ptr_back(line, p);
if (p == line || spell_iswordp_nmw(p))
break;
if (vim_regexec(&regmatch, p, 0)
&& regmatch.endp[0] == line + endcol)
{
need_cap = TRUE;
break;
}
}
}
vim_free(line_copy);
return need_cap;
}
/*
* ":spellrepall"
*/
@ -6854,17 +6876,18 @@ ex_spellrepall(eap)
* a list of allocated strings.
*/
void
spell_suggest_list(gap, word, maxcount)
spell_suggest_list(gap, word, maxcount, need_cap)
garray_T *gap;
char_u *word;
int maxcount; /* maximum nr of suggestions */
int need_cap; /* 'spellcapcheck' matched */
{
suginfo_T sug;
int i;
suggest_T *stp;
char_u *wcopy;
spell_find_suggest(word, &sug, maxcount, FALSE, FALSE);
spell_find_suggest(word, &sug, maxcount, FALSE, need_cap);
/* Make room in "gap". */
ga_init2(gap, sizeof(char_u *), sug.su_ga.ga_len + 1);
@ -7732,16 +7755,26 @@ suggest_try_change(su)
else if (sp->ts_isdiff == DIFF_INSERT
&& sp->ts_twordlen > sp->ts_tcharlen)
{
/* If the previous character was the same,
* thus doubling a character, give a bonus
* to the score. */
p = tword + sp->ts_twordlen
- sp->ts_tcharlen;
c = mb_ptr2char(p);
mb_ptr_back(tword, p);
if (c == mb_ptr2char(p))
if (enc_utf8 && utf_iscomposing(c))
{
/* Inserting a composing char doesn't
* count that much. */
sp->ts_score -= SCORE_INS
- SCORE_INSCOMP;
}
else
{
/* If the previous character was the
* same, thus doubling a character,
* give a bonus to the score. */
mb_ptr_back(tword, p);
if (c == mb_ptr2char(p))
sp->ts_score -= SCORE_INS
- SCORE_INSDUP;
}
}
/* Starting a new char, reset the length. */
@ -10547,4 +10580,73 @@ apply_prefixes(slang, word, round, flags, startlnum)
return lnum;
}
#if defined(FEAT_INS_EXPAND) || defined(PROTO)
static int spell_expand_need_cap;
/*
* Find start of the word in front of the cursor. We don't check if it is
* badly spelled, with completion we can only change the word in front of the
* cursor.
* Used for Insert mode completion CTRL-X ?.
* Returns the column number of the word.
*/
int
spell_word_start(startcol)
int startcol;
{
char_u *line;
char_u *p;
int col = 0;
if (no_spell_checking())
return startcol;
/* Find a word character before "startcol". */
line = ml_get_curline();
for (p = line + startcol; p > line; )
{
mb_ptr_back(line, p);
if (spell_iswordp_nmw(p))
break;
}
/* Go back to start of the word. */
while (p > line)
{
col = p - line;
mb_ptr_back(line, p);
if (!spell_iswordp(p, curbuf))
break;
col = 0;
}
/* Need to check for 'spellcapcheck' now, the word is removed before
* expand_spelling() is called. Therefore the ugly global variable. */
spell_expand_need_cap = check_need_cap(curwin->w_cursor.lnum, col);
return col;
}
/*
* Get list of spelling suggestions.
* Used for Insert mode completion CTRL-X ?.
* Returns the number of matches. The matches are in "matchp[]", array of
* allocated strings.
*/
/*ARGSUSED*/
int
expand_spelling(lnum, col, pat, matchp)
linenr_T lnum;
int col;
char_u *pat;
char_u ***matchp;
{
garray_T ga;
spell_suggest_list(&ga, pat, 100, spell_expand_need_cap);
*matchp = ga.ga_data;
return ga.ga_len;
}
#endif
#endif /* FEAT_SYN_HL */