summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2005-07-18 21:58:11 +0000
committerBram Moolenaar <Bram@vim.org>2005-07-18 21:58:11 +0000
commitce0842a6ee214621ccf03693ab77a94851c09ab0 (patch)
tree1dd3965d94b6497335e9c7ca77c0e02a58003218
parentbbebc857507f24c82cd5bb2f80305b74390b4611 (diff)
updated for version 7.0109v7.0109
-rw-r--r--runtime/doc/eval.txt6
-rw-r--r--runtime/doc/options.txt20
-rw-r--r--runtime/doc/syntax.txt27
-rw-r--r--runtime/doc/todo.txt17
-rw-r--r--runtime/doc/version7.txt4
-rw-r--r--runtime/filetype.vim5
-rw-r--r--runtime/syntax/html.vim14
-rw-r--r--src/dosinst.c2
-rw-r--r--src/edit.c18
-rw-r--r--src/eval.c8
-rw-r--r--src/ex_cmds2.c24
-rw-r--r--src/ex_getln.c8
-rw-r--r--src/fold.c5
-rw-r--r--src/gui_gtk.c6
-rw-r--r--src/gui_gtk_x11.c12
-rw-r--r--src/gui_w32.c3
-rw-r--r--src/memline.c8
-rw-r--r--src/menu.c3
-rw-r--r--src/misc1.c6
-rw-r--r--src/ops.c3
-rw-r--r--src/option.c5
-rw-r--r--src/os_amiga.c4
-rw-r--r--src/os_qnx.c3
-rw-r--r--src/proto/misc2.pro2
-rw-r--r--src/structs.h6
-rw-r--r--src/syntax.c66
-rw-r--r--src/testdir/test51.in2
-rw-r--r--src/testdir/test58.in15
-rw-r--r--src/version.c6
-rw-r--r--src/version.h4
30 files changed, 178 insertions, 134 deletions
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index aba8c5fb8a..93a2b4f61b 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt* For Vim version 7.0aa. Last change: 2005 Jul 07
+*eval.txt* For Vim version 7.0aa. Last change: 2005 Jul 18
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -3979,8 +3979,10 @@ synID({lnum}, {col}, {trans}) *synID()*
{lnum} and {col} in the current window.
The syntax ID can be used with |synIDattr()| and
|synIDtrans()| to obtain syntax information about text.
+
{col} is 1 for the leftmost column, {lnum} is 1 for the first
- line.
+ line. 'synmaxcol' applies, in a longer line zero is returned.
+
When {trans} is non-zero, transparent items are reduced to the
item that they reveal. This is useful when wanting to know
the effective color. When {trans} is zero, the transparent
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index fe4a47102e..d49135105a 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -1,4 +1,4 @@
-*options.txt* For Vim version 7.0aa. Last change: 2005 Jul 11
+*options.txt* For Vim version 7.0aa. Last change: 2005 Jul 18
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -5700,11 +5700,14 @@ A jump table for the options with a short description can be found at |Q_op|.
region by listing them: "en_us,en_ca" supports both US and Canadian
English, but not words specific for Australia, New Zealand or Great
Britain.
- As a special case the name of a .spl file can be given as-is. This is
- mainly for testing purposes. You must make sure the correct encoding
- is used, Vim doesn't check it.
+ As a special case the name of a .spl file can be given as-is. The
+ first "_xx" in the name is removed and used as the region name
+ (_xx is an underscore, two letters and followed by a non-letter).
+ This is mainly for testing purposes. You must make sure the correct
+ encoding is used, Vim doesn't check it.
When 'encoding' is set the word lists are reloaded. Thus it's a good
- idea to set 'spelllang' after setting 'encoding'.
+ idea to set 'spelllang' after setting 'encoding' to avoid loading the
+ files twice.
How the related spell files are found is explained here: |spell-load|.
*'spellsuggest'* *'sps'*
@@ -6021,10 +6024,9 @@ A jump table for the options with a short description can be found at |Q_op|.
{not in Vi}
{not available when compiled without the |+syntax|
feature}
- Maximum column in which to search for syntax items. With longer lines
- some parts may not be highlighted and following text may not be
- highlighted correctly (e.g., when the start or end of a region is not
- recognized because it is beyond 'synmaxcol').
+ Maximum column in which to search for syntax items. In long lines the
+ text after this column is not highlighted and following lines may not
+ be highlighted correctly, because the syntax state is cleared.
This helps to avoid very slow redrawing for an XML file that is one
long line.
Set to zero to remove the limit.
diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt
index 8272543350..130c9b3920 100644
--- a/runtime/doc/syntax.txt
+++ b/runtime/doc/syntax.txt
@@ -1,4 +1,4 @@
-*syntax.txt* For Vim version 7.0aa. Last change: 2005 Jul 05
+*syntax.txt* For Vim version 7.0aa. Last change: 2005 Jul 18
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -2516,17 +2516,17 @@ It will look much better with a font in a quadratic cell size, e.g. for X: >
Vim understands three types of syntax items:
-1. Keyword.
+1. Keyword
It can only contain keyword characters, according to the 'iskeyword'
option. It cannot contain other syntax items. It will only match with a
complete word (there are no keyword characters before or after the match).
The keyword "if" would match in "if(a=b)", but not in "ifdef x", because
"(" is not a keyword character and "d" is.
-2. Match.
+2. Match
This is a match with a single regexp pattern.
-3. Region.
+3. Region
This starts at a match of the "start" regexp pattern and ends with a match
with the "end" regexp pattern. Any other text can appear in between. A
"skip" regexp pattern can be used to avoid matching the "end" pattern.
@@ -2565,13 +2565,30 @@ When several syntax items may match, these rules are used:
DEFINING CASE *:syn-case* *E390*
-:sy[ntax] case [match|ignore]
+:sy[ntax] case [match | ignore]
This defines if the following ":syntax" commands will work with
matching case, when using "match", or with ignoring case, when using
"ignore". Note that any items before this are not affected, and all
items until the next ":syntax case" command are affected.
+SPELL CHECKING *:syn-spell*
+
+:sy[ntax] spell [toplevel | notoplevel | default]
+ This defines where spell checking is to be done for text that is not
+ in a syntax item:
+
+ toplevel: Text is spell checked.
+ notoplevel: Text is not spell checked.
+ default: When there is a @Spell cluster no spell checking.
+
+ For text in syntax items use the @Spell and @NoSpell clusters
+ |spell-syntax|. When there is no @Spell and no @NoSpell cluster then
+ spell checking is done for "default" and "toplevel".
+
+ To activate spell checking the 'spell' option must be set.
+
+
DEFINING KEYWORDS *:syn-keyword*
:sy[ntax] keyword {group-name} [{options}] {keyword} .. [{options}]
diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
index 989f7d53af..7bd9904114 100644
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt* For Vim version 7.0aa. Last change: 2005 Jul 13
+*todo.txt* For Vim version 7.0aa. Last change: 2005 Jul 18
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -30,9 +30,11 @@ be worked on, but only if you sponsor Vim development. See |sponsor|.
*known-bugs*
-------------------- Known bugs and current work -----------------------
-Use vim_strncpy() in more places.
+"at" and "it" text objects: recognize HTML/SGML/XML tag pairs <b>asdf</b>
-When going over 'synmaxcol' don't highlight anything, stop regions.
+":e *.foo" completion with file name starting with "+" should be escaped.
+
+VMS patch for term.c also in Vim 6.3 (Zoltan Arpadffy)
Add extra list of file locations. Can be used with:
:ltag list of matching tags, like :tselect
@@ -93,6 +95,7 @@ Awaiting response:
- Win32: tearoff menu window should have a scrollbar when it's taller than
the screen.
+mblen(NULL, 0) also in Vim 6.3?
PLANNED FOR VERSION 7.0:
@@ -1242,6 +1245,8 @@ Help:
User Friendlier:
+8 Windows install with NSIS: make it possible to do a silent install, see
+ http://nsis.sourceforge.net/Docs/Chapter4.html#4.12
8 Windows install with install.exe: Use .exe instead of .bat files for
links, so that command line arguments are passed on unmodified? (Walter
Briscoe)
@@ -2081,12 +2086,6 @@ GUI:
7 Support "-visual <type>" command line argument.
-VMS:
-- Improvement: rewrite term/TTY handling.
-- Improvement: create VMS GTK runtime libraries on OpenVMS 7.1-2 (today GTK
- works just on 7.3).
-
-
Autocommands:
7 For autocommand events that trigger multiple times per buffer (e.g.,
CursorHold), go through the list once and cache the result for a specific
diff --git a/runtime/doc/version7.txt b/runtime/doc/version7.txt
index 6a35fcdefd..4b7a09f0f2 100644
--- a/runtime/doc/version7.txt
+++ b/runtime/doc/version7.txt
@@ -1,4 +1,4 @@
-*version7.txt* For Vim version 7.0aa. Last change: 2005 Jul 12
+*version7.txt* For Vim version 7.0aa. Last change: 2005 Jul 13
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -448,6 +448,8 @@ Pascal indent file. (Neil Carter)
Many filetype plugins and others from Nikolai Weibull.
+Xquery syntax file. (Jean-Marc Vanel)
+
Moved all the indent settings from the filetype plugin to the indent file.
Implemented b:undo_indent to undo indent settings when setting 'filetype' to a
different value.
diff --git a/runtime/filetype.vim b/runtime/filetype.vim
index 44d8ce794b..d8fd0af529 100644
--- a/runtime/filetype.vim
+++ b/runtime/filetype.vim
@@ -1,7 +1,7 @@
" Vim support file to detect file types
"
" Maintainer: Bram Moolenaar <Bram@vim.org>
-" Last Change: 2005 Jul 04
+" Last Change: 2005 Jul 13
" Listen very carefully, I will say this only once
if exists("did_load_filetypes")
@@ -1812,6 +1812,9 @@ au BufNewFile,BufRead *.ts,*.ui setf xml
" Xdg menus
au BufNewFile,BufRead /etc/xdg/menus/*.menu setf xml
+" Xquery
+au BufNewFile,BufRead *.xq,*.xql,*.xqm,*.xquery,*.xqy setf xquery
+
" XSD
au BufNewFile,BufRead *.xsd setf xsd
diff --git a/runtime/syntax/html.vim b/runtime/syntax/html.vim
index 61bc6c820a..a2ffc1869f 100644
--- a/runtime/syntax/html.vim
+++ b/runtime/syntax/html.vim
@@ -2,7 +2,7 @@
" Language: HTML
" Maintainer: Claudio Fleiner <claudio@fleiner.com>
" URL: http://www.fleiner.com/vim/syntax/html.vim
-" Last Change: 2005 Jul 05
+" Last Change: 2005 Jul 18
" Please check :help html.vim for some comments and a description of the options
@@ -27,6 +27,8 @@ endif
syn case ignore
+syn spell toplevel
+
" mark illegal characters
syn match htmlError "[<>&]"
@@ -35,8 +37,8 @@ syn match htmlError "[<>&]"
syn region htmlString contained start=+"+ end=+"+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc
syn region htmlString contained start=+'+ end=+'+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc
syn match htmlValue contained "=[\t ]*[^'" \t>][^ \t>]*"hs=s+1 contains=javaScriptExpression,@htmlPreproc
-syn region htmlEndTag start=+</+ end=+>+ contains=htmlTagN,htmlTagError,@NoSpell
-syn region htmlTag start=+<[^/]+ end=+>+ contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition,@htmlPreproc,@htmlArgCluster,@NoSpell
+syn region htmlEndTag start=+</+ end=+>+ contains=htmlTagN,htmlTagError
+syn region htmlTag start=+<[^/]+ end=+>+ contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition,@htmlPreproc,@htmlArgCluster
syn match htmlTagN contained +<\s*[-a-zA-Z0-9]\++hs=s+1 contains=htmlTagName,htmlSpecialTagName,@htmlTagNameCluster
syn match htmlTagN contained +</\s*[-a-zA-Z0-9]\++hs=s+2 contains=htmlTagName,htmlSpecialTagName,@htmlTagNameCluster
syn match htmlTagError contained "[^>]<"ms=s+1
@@ -116,7 +118,7 @@ syn match htmlPreProcAttrName contained "\(expr\|errmsg\|sizefmt\|timefmt\|var\|
if !exists("html_no_rendering")
" rendering
- syn cluster htmlTop contains=htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLink,javaScript,@htmlPreproc
+ syn cluster htmlTop contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLink,javaScript,@htmlPreproc
syn region htmlBold start="<b\>" end="</b>"me=e-4 contains=@htmlTop,htmlBoldUnderline,htmlBoldItalic
syn region htmlBold start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop,htmlBoldUnderline,htmlBoldItalic
@@ -146,7 +148,7 @@ if !exists("html_no_rendering")
syn region htmlItalicUnderlineBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop
syn region htmlItalicUnderlineBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop
- syn region htmlLink start="<a\>\_[^>]*\<href\>" end="</a>"me=e-4 contains=htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,javaScript,@htmlPreproc
+ syn region htmlLink start="<a\>\_[^>]*\<href\>" end="</a>"me=e-4 contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,javaScript,@htmlPreproc
syn region htmlH1 start="<h1\>" end="</h1>"me=e-5 contains=@htmlTop
syn region htmlH2 start="<h2\>" end="</h2>"me=e-5 contains=@htmlTop
syn region htmlH3 start="<h3\>" end="</h3>"me=e-5 contains=@htmlTop
@@ -154,7 +156,7 @@ if !exists("html_no_rendering")
syn region htmlH5 start="<h5\>" end="</h5>"me=e-5 contains=@htmlTop
syn region htmlH6 start="<h6\>" end="</h6>"me=e-5 contains=@htmlTop
syn region htmlHead start="<head\>" end="</head>"me=e-7 end="<body\>"me=e-5 end="<h[1-6]\>"me=e-3 contains=htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLink,htmlTitle,javaScript,cssStyle,@htmlPreproc
- syn region htmlTitle start="<title\>" end="</title>"me=e-8 contains=htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,javaScript,@htmlPreproc
+ syn region htmlTitle start="<title\>" end="</title>"me=e-8 contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,javaScript,@htmlPreproc
endif
syn keyword htmlTagName contained noscript
diff --git a/src/dosinst.c b/src/dosinst.c
index deaf15f7a6..efc6fdfee0 100644
--- a/src/dosinst.c
+++ b/src/dosinst.c
@@ -2080,7 +2080,7 @@ print_cmd_line_help(void)
printf(" or $HOME directory\n");
#ifdef WIN3264
printf("-register-OLE");
- printf(" Register gvim for OLE\n");
+ printf(" Ignored\n");
#endif
printf("\n");
}
diff --git a/src/edit.c b/src/edit.c
index 7028dd32a0..bf7096111b 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -1970,8 +1970,7 @@ ins_compl_add_infercase(str, len, fname, dir, reuse)
{
/* Infer case of completed part -- webb */
/* Use IObuff, str would change text in buffer! */
- STRNCPY(IObuff, str, len);
- IObuff[len] = NUL;
+ vim_strncpy(IObuff, str, len);
/* Rule 1: Were any chars converted to lower? */
for (idx = 0; idx < completion_length; ++idx)
@@ -2010,7 +2009,7 @@ ins_compl_add_infercase(str, len, fname, dir, reuse)
}
/* Copy the original case of the part we typed */
- STRNCPY(IObuff, original_text, completion_length);
+ vim_strncpy(IObuff, original_text, completion_length);
return ins_compl_add(IObuff, len, fname, dir, reuse);
}
@@ -3053,17 +3052,17 @@ ins_compl_get_exp(ini, dir)
tmp_ptr = find_word_end(tmp_ptr);
if (tmp_ptr > ptr)
{
- if (*ptr != ')' && IObuff[len-1] != TAB)
+ if (*ptr != ')' && IObuff[len - 1] != TAB)
{
- if (IObuff[len-1] != ' ')
+ if (IObuff[len - 1] != ' ')
IObuff[len++] = ' ';
/* IObuf =~ "\k.* ", thus len >= 2 */
if (p_js
- && (IObuff[len-2] == '.'
+ && (IObuff[len - 2] == '.'
|| (vim_strchr(p_cpo, CPO_JOINSP)
== NULL
- && (IObuff[len-2] == '?'
- || IObuff[len-2] == '!'))))
+ && (IObuff[len - 2] == '?'
+ || IObuff[len - 2] == '!'))))
IObuff[len++] = ' ';
}
/* copy as much as posible of the new word */
@@ -3741,8 +3740,7 @@ ins_complete(c)
curr_match->number, completion_matches);
else
sprintf((char *)IObuff, _("match %d"), curr_match->number);
- STRNCPY(match_ref, IObuff, 30 );
- match_ref[30] = '\0';
+ vim_strncpy(match_ref, IObuff, 30);
edit_submode_extra = match_ref;
edit_submode_highl = HLF_R;
if (dollar_vcol)
diff --git a/src/eval.c b/src/eval.c
index a1404c2243..6adfb4d40d 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -6197,8 +6197,7 @@ dict_find(d, key, len)
else
{
/* Avoid a malloc/free by using buf[]. */
- STRNCPY(buf, key, len);
- buf[len] = NUL;
+ vim_strncpy(buf, key, len);
akey = buf;
}
@@ -10681,10 +10680,7 @@ f_inputdialog(argvars, rettv)
message = get_tv_string_chk(&argvars[0]);
if (argvars[1].v_type != VAR_UNKNOWN
&& (defstr = get_tv_string_buf_chk(&argvars[1], buf)) != NULL)
- {
- STRNCPY(IObuff, defstr, IOSIZE);
- IObuff[IOSIZE - 1] = NUL;
- }
+ vim_strncpy(IObuff, defstr, IOSIZE - 1);
else
IObuff[0] = NUL;
if (message != NULL && defstr != NULL
diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c
index b3faec86ce..923faf9bca 100644
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -5511,16 +5511,14 @@ prt_open_resource(resource)
switch (dsc_line.type)
{
case PRT_DSC_TITLE_TYPE:
- STRNCPY(resource->title, dsc_line.string, dsc_line.len);
- resource->title[dsc_line.len] = '\0';
+ vim_strncpy(resource->title, dsc_line.string, dsc_line.len);
seen_title = TRUE;
if (seen_version)
seen_all = TRUE;
break;
case PRT_DSC_VERSION_TYPE:
- STRNCPY(resource->version, dsc_line.string, dsc_line.len);
- resource->version[dsc_line.len] = '\0';
+ vim_strncpy(resource->version, dsc_line.string, dsc_line.len);
seen_version = TRUE;
if (seen_title)
seen_all = TRUE;
@@ -5862,8 +5860,7 @@ prt_build_cid_fontname(font, name, name_len)
fontname = (char *)alloc(name_len + 1);
if (fontname == NULL)
return FALSE;
- STRNCPY(fontname, name, name_len);
- fontname[name_len] = '\0';
+ vim_strncpy((char_u *)fontname, name, name_len);
prt_ps_mb_font.ps_fontname[font] = fontname;
return TRUE;
@@ -5977,7 +5974,6 @@ mch_print_init(psettings, jobname, forceit)
double bottom;
#ifdef FEAT_MBYTE
int cmap;
- int pmcs_len;
char_u *p_encoding;
struct prt_ps_encoding_S *p_mbenc;
struct prt_ps_encoding_S *p_mbenc_first;
@@ -6035,7 +6031,7 @@ mch_print_init(psettings, jobname, forceit)
if (prt_out_mbyte)
{
/* Build CMap name - will be same for all multi-byte fonts used */
- prt_cmap[0] = '\0';
+ prt_cmap[0] = NUL;
prt_custom_cmap = prt_out_mbyte && p_mbchar == NULL;
@@ -6051,26 +6047,26 @@ mch_print_init(psettings, jobname, forceit)
/* Add charset name if not empty */
if (p_mbchar->cmap_charset != NULL)
{
- STRCAT(prt_cmap, p_mbchar->cmap_charset);
+ vim_strncpy((char_u *)prt_cmap,
+ (char_u *)p_mbchar->cmap_charset, sizeof(prt_cmap) - 3);
STRCAT(prt_cmap, "-");
}
}
else
{
/* Add custom CMap character set name */
- pmcs_len = STRLEN(p_pmcs);
- if (pmcs_len == 0)
+ if (*p_pmcs == NUL)
{
EMSG(_("E674: printmbcharset cannot be empty with multi-byte encoding."));
return FALSE;
}
- STRNCPY(prt_cmap, p_pmcs, STRLEN(p_pmcs));
- prt_cmap[pmcs_len] = '\0';
+ vim_strncpy((char_u *)prt_cmap, p_pmcs, sizeof(prt_cmap) - 3);
STRCAT(prt_cmap, "-");
}
/* CMap name ends with (optional) encoding name and -H for horizontal */
- if (p_mbenc->cmap_encoding != NULL)
+ if (p_mbenc->cmap_encoding != NULL && STRLEN(prt_cmap)
+ + STRLEN(p_mbenc->cmap_encoding) + 3 < sizeof(prt_cmap))
{
STRCAT(prt_cmap, p_mbenc->cmap_encoding);
STRCAT(prt_cmap, "-");
diff --git a/src/ex_getln.c b/src/ex_getln.c
index 1192622544..c96f114883 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -3239,10 +3239,7 @@ ExpandOne(xp, str, orig, options, mode)
}
ss = alloc((unsigned)len + 1);
if (ss)
- {
- STRNCPY(ss, xp->xp_files[0], len);
- ss[len] = NUL;
- }
+ vim_strncpy(ss, xp->xp_files[0], (size_t)len);
findex = -1; /* next p_wc gets first one */
}
@@ -3749,8 +3746,7 @@ addstar(fname, len, context)
retval = alloc(len + 4);
if (retval != NULL)
{
- STRNCPY(retval, fname, len);
- retval[len] = NUL;
+ vim_strncpy(retval, fname, len);
/*
* Don't add a star to ~, ~user, $var or `cmd`.
diff --git a/src/fold.c b/src/fold.c
index 0380516d9a..cccc17e562 100644
--- a/src/fold.c
+++ b/src/fold.c
@@ -1809,10 +1809,7 @@ foldAddMarker(lnum, marker, markerlen)
return;
STRCPY(newline, line);
if (p == NULL)
- {
- STRNCPY(newline + line_len, marker, markerlen);
- newline[line_len + markerlen] = NUL;
- }
+ vim_strncpy(newline + line_len, marker, markerlen);
else
{
STRCPY(newline + line_len, cms);
diff --git a/src/gui_gtk.c b/src/gui_gtk.c
index 5bde7913c8..cdd645b659 100644
--- a/src/gui_gtk.c
+++ b/src/gui_gtk.c
@@ -1476,8 +1476,7 @@ dlg_destroy(GtkWidget *dlg)
const char *text;
text = gtk_entry_get_text(GTK_ENTRY(dialog_textentry));
- STRNCPY(dialog_textfield, text, IOSIZE);
- dialog_textfield[IOSIZE - 1] = NUL;
+ vim_strncpy(dialog_textfield, (char_u *)text, IOSIZE - 1);
}
/* Destroy the dialog, will break the waiting loop. */
@@ -2340,8 +2339,7 @@ gui_mch_dialog(int type, /* type of dialog */
text = (char_u *)gtk_entry_get_text(GTK_ENTRY(entry));
text = CONVERT_FROM_UTF8(text);
- STRNCPY(textfield, text, IOSIZE);
- textfield[IOSIZE - 1] = NUL;
+ vim_strncpy(textfield, text, IOSIZE - 1);
CONVERT_FROM_UTF8_FREE(text);
}
diff --git a/src/gui_gtk_x11.c b/src/gui_gtk_x11.c
index cd306093dc..d93f7bc756 100644
--- a/src/gui_gtk_x11.c
+++ b/src/gui_gtk_x11.c
@@ -2325,9 +2325,9 @@ sm_client_die(GnomeClient *client, gpointer data)
/* Don't write messages to the GUI anymore */
full_screen = FALSE;
- STRNCPY(IObuff, _("Vim: Received \"die\" request from session manager\n"),
- IOSIZE);
- IObuff[IOSIZE - 1] = NUL;
+ vim_strncpy(IObuff,
+ _("Vim: Received \"die\" request from session manager\n"),
+ IOSIZE - 1);
preserve_exit();
}
@@ -3527,9 +3527,9 @@ mainwin_destroy_cb(GtkObject *object, gpointer data)
if (!exiting) /* only do anything if the destroy was unexpected */
{
- STRNCPY(IObuff, _("Vim: Main window unexpectedly destroyed\n"),
- IOSIZE);
- IObuff[IOSIZE - 1] = NUL;
+ vim_strncpy(IObuff,
+ (char_u *)_("Vim: Main window unexpectedly destroyed\n"),
+ IOSIZE - 1);
preserve_exit();
}
}
diff --git a/src/gui_w32.c b/src/gui_w32.c
index 11d0281a62..f0b47172e6 100644
--- a/src/gui_w32.c
+++ b/src/gui_w32.c
@@ -3592,8 +3592,7 @@ gui_mch_tearoff(
if (label == NULL)
break;
- STRNCPY(text, menu->name, nameLen);
- text[nameLen] = NUL;
+ vim_strncpy(text, menu->name, nameLen);
text = vim_strchr(text, TAB); /* stop at TAB before actext */
if (text == NULL)
text = label + nameLen; /* no actext, use whole name */
diff --git a/src/memline.c b/src/memline.c
index 47dc00d84c..d1cf71f0d0 100644
--- a/src/memline.c
+++ b/src/memline.c
@@ -698,8 +698,7 @@ set_b0_fname(b0p, buf)
/* Systems that cannot translate "~user" back into a path: copy the
* file name unmodified. Do use slashes instead of backslashes for
* portability. */
- STRNCPY(b0p->b0_fname, buf->b_ffname, B0_FNAME_SIZE);
- b0p->b0_fname[B0_FNAME_SIZE - 1] = NUL;
+ vim_strncpy(b0p->b0_fname, buf->b_ffname, B0_FNAME_SIZE - 1);
# ifdef BACKSLASH_IN_FILENAME
forward_slash(b0p->b0_fname);
# endif
@@ -721,10 +720,7 @@ set_b0_fname(b0p, buf)
/* If there is no user name or it is too long, don't use "~/" */
if (get_user_name(uname, B0_UNAME_SIZE) == FAIL
|| (ulen = STRLEN(uname)) + flen > B0_FNAME_SIZE - 1)
- {
- STRNCPY(b0p->b0_fname, buf->b_ffname, B0_FNAME_SIZE);
- b0p->b0_fname[B0_FNAME_SIZE - 1] = NUL;
- }
+ vim_strncpy(b0p->b0_fname, buf->b_ffname, B0_FNAME_SIZE - 1);
else
{
mch_memmove(b0p->b0_fname + ulen + 1, b0p->b0_fname + 1, flen);
diff --git a/src/menu.c b/src/menu.c
index 08a7314a25..6787056942 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -1258,8 +1258,7 @@ set_context_in_menu_cmd(xp, cmd, arg, forceit)
path_name = alloc((unsigned)(after_dot - arg));
if (path_name == NULL)
return NULL;
- STRNCPY(path_name, arg, after_dot - arg - 1);
- path_name[after_dot - arg - 1] = NUL;
+ vim_strncpy(path_name, arg, after_dot - arg - 1);
}
name = path_name;
while (name != NULL && *name)
diff --git a/src/misc1.c b/src/misc1.c
index 29be8e50a5..f0de5935a2 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -976,8 +976,7 @@ open_line(dir, flags, old_indent)
lead_len = 0;
else
{
- STRNCPY(leader, saved_line, lead_len);
- leader[lead_len] = NUL;
+ vim_strncpy(leader, saved_line, lead_len);
/*
* Replace leader with lead_repl, right or left adjusted
@@ -3345,8 +3344,7 @@ init_homedir()
p = vim_strchr(var + 1, '%');
if (p != NULL)
{
- STRNCPY(NameBuff, var + 1, p - (var + 1));
- NameBuff[p - (var + 1)] = NUL;
+ vim_strncpy(NameBuff, var + 1, p - (var + 1));
exp = mch_getenv(NameBuff);
if (exp != NULL && *exp != NUL
&& STRLEN(exp) + STRLEN(p) < MAXPATHL)
diff --git a/src/ops.c b/src/ops.c
index bbeedbf4a1..8941941353 100644
--- a/src/ops.c
+++ b/src/ops.c
@@ -2532,8 +2532,7 @@ op_change(oap)
{
if ((ins_text = alloc_check((unsigned)(ins_len + 1))) != NULL)
{
- STRNCPY(ins_text, firstline + bd.textcol, ins_len);
- ins_text[ins_len] = NUL;
+ vim_strncpy(ins_text, firstline + bd.textcol, (size_t)ins_len);
for (linenr = oap->start.lnum + 1; linenr <= oap->end.lnum;
linenr++)
{
diff --git a/src/option.c b/src/option.c
index ab0740dd43..30341d60c8 100644
--- a/src/option.c
+++ b/src/option.c
@@ -4318,8 +4318,7 @@ skip:
if (errmsg != NULL)
{
- STRNCPY(IObuff, _(errmsg), IOSIZE - 1);
- IObuff[IOSIZE - 1] = NUL;
+ vim_strncpy(IObuff, (char_u *)_(errmsg), IOSIZE - 1);
i = STRLEN(IObuff) + 2;
if (i + (arg - startarg) < IOSIZE)
{
@@ -9365,7 +9364,7 @@ option_value2string(opp, opt_flags)
else if ((char_u **)opp->var == &p_pt)
str2specialbuf(p_pt, NameBuff, MAXPATHL);
else
- STRNCPY(NameBuff, varp, MAXPATHL);
+ vim_strncpy(NameBuff, varp, MAXPATHL - 1);
}
}
diff --git a/src/os_amiga.c b/src/os_amiga.c
index 8717825f39..2c2a770e01 100644
--- a/src/os_amiga.c
+++ b/src/os_amiga.c
@@ -626,7 +626,7 @@ mch_get_host_name(s, len)
char_u *s;
int len;
{
- STRNCPY(s, "Amiga", len);
+ vim_strncpy(s, "Amiga", len - 1);
}
/*
@@ -690,7 +690,7 @@ mch_FullName(fname, buf, len, force)
{
if (i < len - 1 && (i == 0 || buf[i - 1] != ':'))
buf[i++] = '/';
- STRNCPY(buf + i, fname, len - i);
+ vim_strncpy(buf + i, fname, len - i - 1);
}
}
}
diff --git a/src/os_qnx.c b/src/os_qnx.c
index 704061a4ed..1a7250eab1 100644
--- a/src/os_qnx.c
+++ b/src/os_qnx.c
@@ -148,8 +148,7 @@ clip_mch_set_selection( VimClipboard *cbd )
#endif
}
- STRNCPY( text_clip, str, len );
- text_clip[ len ] = NUL;
+ vim_strncpy( text_clip, str, len );
vim_clip[ 1 ] = NUL;
diff --git a/src/proto/misc2.pro b/src/proto/misc2.pro
index 936f38fad5..3f6e2edcad 100644
--- a/src/proto/misc2.pro
+++ b/src/proto/misc2.pro
@@ -36,7 +36,7 @@ char_u *strup_save __ARGS((char_u *orig));
void copy_spaces __ARGS((char_u *ptr, size_t count));
void copy_chars __ARGS((char_u *ptr, size_t count, int c));
void del_trailing_spaces __ARGS((char_u *ptr));
-void vim_strncpy __ARGS((char_u *to, char_u *from, int len));
+void vim_strncpy __ARGS((char_u *to, char_u *from, size_t len));
int copy_option_part __ARGS((char_u **option, char_u *buf, int maxlen, char *sep_chars));
void vim_free __ARGS((void *x));
int vim_stricmp __ARGS((char *s1, char *s2));
diff --git a/src/structs.h b/src/structs.h
index b7f39febfd..e238d0f6dd 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -1067,6 +1067,11 @@ struct dictvar_S
dict_T *dv_used_prev; /* previous dict in used dicts list */
};
+/* values for b_syn_spell: what to do with toplevel text */
+#define SYNSPL_DEFAULT 0 /* spell check if @Spell not defined */
+#define SYNSPL_TOP 1 /* spell check toplevel text */
+#define SYNSPL_NOTOP 2 /