Hi,

With this patch, I got the following warnings:

```
clang -c ...<snip>... -o objects/syntax.o syntax.c
syntax.c:991:22: warning: declaration shadows a variable in the global
scope [-Wshadow]
save_chartab(char_u *chartab)
                     ^
./globals.h:1015:15: note: previous declaration is here
EXTERN char_u   chartab[256];           /* table used in charset.c; See
                ^
syntax.c:1002:25: warning: declaration shadows a variable in the global
scope [-Wshadow]
restore_chartab(char_u *chartab)
                        ^
./globals.h:1015:15: note: previous declaration is here
EXTERN char_u   chartab[256];           /* table used in charset.c; See
                ^
2 warnings generated.
```

Best regards,
Kazunobu Kuriyama

2016-01-20 6:29 GMT+09:00 Bram Moolenaar <[email protected]>:

>
> Patch 7.4.1142
> Problem:    Cannot define keyword characters for a syntax file.
> Solution:   Add the ":syn iskeyword" command. (Christian Brabandt)
> Files:      runtime/doc/options.txt, runtime/doc/syntax.txt, src/buffer.c,
>             src/option.c, src/structs.h, src/syntax.c,
>             src/testdir/Make_all.mak, src/testdir/test_syntax.vim
>
>
> *** ../vim-7.4.1141/runtime/doc/options.txt     2016-01-09
> 19:39:39.269686032 +0100
> --- runtime/doc/options.txt     2016-01-19 21:30:01.442488287 +0100
> ***************
> *** 4474,4479 ****
> --- 4489,4496 ----
>         '*', '"' and '|' (so that CTRL-] on a command finds the help for
> that
>         command).
>         When the 'lisp' option is on the '-' character is always included.
> +       This option also influences syntax highlighting, unless the syntax
> +       uses |:syn-iskeyword|.
>         NOTE: This option is set to the Vi default value when 'compatible'
> is
>         set and to the Vim default value when 'compatible' is reset.
>
> *** ../vim-7.4.1141/runtime/doc/syntax.txt      2013-08-10
> 13:25:01.000000000 +0200
> --- runtime/doc/syntax.txt      2016-01-19 21:33:26.156237734 +0100
> ***************
> *** 3325,3330 ****
> --- 3438,3469 ----
>
>         To activate spell checking the 'spell' option must be set.
>
> + SYNTAX ISKEYWORD SETTING                              *:syn-iskeyword*
> +
> + :sy[ntax] iskeyword [clear | {option}]
> +       This defines the keyword characters.  It's like the 'iskeyword'
> option
> +       for but only applies to syntax highlighting.
> +
> +       clear:          Syntax specific iskeyword setting is disabled and
> the
> +                       buffer-local 'iskeyword' setting is used.
> +       {option}        Set the syntax 'iskeyword' option to a new value.
> +
> +       Example: >
> +   :syntax iskeyword @,48-57,192-255,$,_
> + <
> +       This would set the syntax specific iskeyword option to include all
> +       alphabetic characters, plus the numeric characters, all accented
> +       characters and also includes the "_" and the "$".
> +
> +       If no argument is given, the current value will be output.
> +
> +       Setting this option influences what |/\k| matches in syntax
> patterns
> +       and also determines where |:syn-keywords| will be checked for a new
> +       match.
> +
> +       It is recommended when writing syntax files, to use this command
> +       to the correct value for the specific syntax language and not
> change
> +       the 'iskeyword' option.
>
>   DEFINING KEYWORDS                                     *:syn-keyword*
>
> ***************
> *** 3356,3361 ****
> --- 3495,3501 ----
>         isn't, the keyword will never be recognized.
>         Multi-byte characters can also be used.  These do not have to be in
>         'iskeyword'.
> +       See |:syn-iskeyword| for defining syntax specific iskeyword
> settings.
>
>         A keyword always has higher priority than a match or region, the
>         keyword is used if more than one item matches.  Keywords do not
> nest
> *** ../vim-7.4.1141/src/buffer.c        2016-01-10 20:54:11.827626122 +0100
> --- src/buffer.c        2016-01-19 21:27:08.264381494 +0100
> ***************
> *** 1955,1960 ****
> --- 1955,1961 ----
>       clear_string_option(&buf->b_p_nf);
>   #ifdef FEAT_SYN_HL
>       clear_string_option(&buf->b_p_syn);
> +     clear_string_option(&buf->b_s.b_syn_isk);
>   #endif
>   #ifdef FEAT_SPELL
>       clear_string_option(&buf->b_s.b_p_spc);
> *** ../vim-7.4.1141/src/option.c        2016-01-09 19:39:39.281685901 +0100
> --- src/option.c        2016-01-19 21:35:21.074967397 +0100
> ***************
> *** 5494,5499 ****
> --- 5494,5500 ----
>   #endif
>   #ifdef FEAT_SYN_HL
>       check_string_option(&buf->b_p_syn);
> +     check_string_option(&buf->b_s.b_syn_isk);
>   #endif
>   #ifdef FEAT_SPELL
>       check_string_option(&buf->b_s.b_p_spc);
> ***************
> *** 10821,10826 ****
> --- 10822,10828 ----
>             /* Don't copy 'syntax', it must be set */
>             buf->b_p_syn = empty_option;
>             buf->b_p_smc = p_smc;
> +           buf->b_s.b_syn_isk = empty_option;
>   #endif
>   #ifdef FEAT_SPELL
>             buf->b_s.b_p_spc = vim_strsave(p_spc);
> *** ../vim-7.4.1141/src/structs.h       2016-01-18 23:28:44.157810770 +0100
> --- src/structs.h       2016-01-19 21:27:08.268381451 +0100
> ***************
> *** 1362,1367 ****
> --- 1362,1369 ----
>   #if !defined(FEAT_SYN_HL) && !defined(FEAT_SPELL)
>       int               dummy;
>   #endif
> +     char_u    b_syn_chartab[32];      /* syntax iskeyword option */
> +     char_u    *b_syn_isk;             /* iskeyword option */
>   } synblock_T;
>
>
> *** ../vim-7.4.1141/src/syntax.c        2016-01-19 20:52:39.102986014 +0100
> --- src/syntax.c        2016-01-19 22:16:13.619962539 +0100
> ***************
> *** 376,381 ****
> --- 376,383 ----
>   #define CUR_STATE(idx)        ((stateitem_T
> *)(current_state.ga_data))[idx]
>
>   static void syn_sync __ARGS((win_T *wp, linenr_T lnum, synstate_T
> *last_valid));
> + static void save_chartab(char_u *chartab);
> + static void restore_chartab(char_u *chartab);
>   static int syn_match_linecont __ARGS((linenr_T lnum));
>   static void syn_start_line __ARGS((void));
>   static void syn_update_ends __ARGS((int startofline));
> ***************
> *** 458,463 ****
> --- 460,466 ----
>   static char_u *get_group_name __ARGS((char_u *arg, char_u **name_end));
>   static char_u *get_syn_options __ARGS((char_u *arg, syn_opt_arg_T *opt,
> int *conceal_char));
>   static void syn_cmd_include __ARGS((exarg_T *eap, int syncing));
> + static void syn_cmd_iskeyword __ARGS((exarg_T *eap, int syncing));
>   static void syn_cmd_keyword __ARGS((exarg_T *eap, int syncing));
>   static void syn_cmd_match __ARGS((exarg_T *eap, int syncing));
>   static void syn_cmd_region __ARGS((exarg_T *eap, int syncing));
> ***************
> *** 984,989 ****
> --- 987,1010 ----
>       validate_current_state();
>   }
>
> +     static void
> + save_chartab(char_u *chartab)
> + {
> +     if (syn_block->b_syn_isk != empty_option)
> +     {
> +       mch_memmove(chartab, syn_buf->b_chartab, (size_t)32);
> +       mch_memmove(syn_buf->b_chartab, syn_win->w_s->b_syn_chartab,
> +
>  (size_t)32);
> +     }
> + }
> +
> +     static void
> + restore_chartab(char_u *chartab)
> + {
> +     if (syn_win->w_s->b_syn_isk != empty_option)
> +       mch_memmove(syn_buf->b_chartab, chartab, (size_t)32);
> + }
> +
>   /*
>    * Return TRUE if the line-continuation pattern matches in line "lnum".
>    */
> ***************
> *** 993,1006 ****
> --- 1014,1031 ----
>   {
>       regmmatch_T regmatch;
>       int r;
> +     char_u    buf_chartab[32];  /* chartab array for syn iskyeyword */
>
>       if (syn_block->b_syn_linecont_prog != NULL)
>       {
> +       /* use syntax iskeyword option */
> +       save_chartab(buf_chartab);
>         regmatch.rmm_ic = syn_block->b_syn_linecont_ic;
>         regmatch.regprog = syn_block->b_syn_linecont_prog;
>         r = syn_regexec(&regmatch, lnum, (colnr_T)0,
>
> IF_SYN_TIME(&syn_block->b_syn_linecont_time));
>         syn_block->b_syn_linecont_prog = regmatch.regprog;
> +       restore_chartab(buf_chartab);
>         return r;
>       }
>       return FALSE;
> ***************
> *** 1891,1896 ****
> --- 1916,1922 ----
>       lpos_T    pos;
>       int               lc_col;
>       reg_extmatch_T *cur_extmatch = NULL;
> +     char_u    buf_chartab[32];  /* chartab array for syn iskyeyword */
>       char_u    *line;          /* current line.  NOTE: becomes invalid
> after
>                                    looking for a pattern match! */
>
> ***************
> *** 1945,1950 ****
> --- 1971,1979 ----
>        * avoid matching the same item in the same position twice. */
>       ga_init2(&zero_width_next_ga, (int)sizeof(int), 10);
>
> +     /* use syntax iskeyword option */
> +     save_chartab(buf_chartab);
> +
>       /*
>        * Repeat matching keywords and patterns, to find contained items at
> the
>        * same column.  This stops when there are no extra matches at the
> current
> ***************
> *** 1956,1961 ****
> --- 1985,1991 ----
>         keep_next_list = FALSE;
>         syn_id = 0;
>
> +
>         /*
>          * 1. Check for a current state.
>          *    Only when there is no current state, or if the current state
> may
> ***************
> *** 2309,2314 ****
> --- 2339,2346 ----
>
>       } while (found_match);
>
> +     restore_chartab(buf_chartab);
> +
>       /*
>        * Use attributes from the current state, if within its highlighting.
>        * If not, use attributes from the current-but-one state, etc.
> ***************
> *** 2915,2920 ****
> --- 2947,2953 ----
>       lpos_T    pos;
>       char_u    *line;
>       int               had_match = FALSE;
> +     char_u    buf_chartab[32];  /* chartab array for syn option
> iskyeyword */
>
>       /* just in case we are invoked for a keyword */
>       if (idx < 0)
> ***************
> *** 2961,2966 ****
> --- 2994,3003 ----
>       matchcol = startpos->col; /* start looking for a match at sstart */
>       start_idx = idx;          /* remember the first END pattern. */
>       best_regmatch.startpos[0].col = 0;                /* avoid compiler
> warning */
> +
> +     /* use syntax iskeyword option */
> +     save_chartab(buf_chartab);
> +
>       for (;;)
>       {
>         /*
> ***************
> *** 3117,3122 ****
> --- 3154,3161 ----
>       if (!had_match)
>         m_endpos->lnum = 0;
>
> +     restore_chartab(buf_chartab);
> +
>       /* Remove external matches. */
>       unref_extmatch(re_extmatch_in);
>       re_extmatch_in = NULL;
> ***************
> *** 3482,3487 ****
> --- 3521,3577 ----
>   }
>
>   /*
> +  * Handle ":syntax iskeyword" command.
> +  */
> +     static void
> + syn_cmd_iskeyword(eap, syncing)
> +     exarg_T   *eap;
> +     int               syncing UNUSED;
> + {
> +     char_u    *arg = eap->arg;
> +     char_u    save_chartab[32];
> +     char_u    *save_isk;
> +
> +     if (eap->skip)
> +       return;
> +
> +     arg = skipwhite(arg);
> +     if (*arg == NUL)
> +     {
> +       MSG_PUTS("\n");
> +       MSG_PUTS(_("syntax iskeyword "));
> +       if (curwin->w_s->b_syn_isk != empty_option)
> +           msg_outtrans(curwin->w_s->b_syn_isk);
> +       else
> +           msg_outtrans((char_u *)"not set");
> +     }
> +     else
> +     {
> +       if (STRNICMP(arg, "clear", 5) == 0)
> +       {
> +           mch_memmove(curwin->w_s->b_syn_chartab, curbuf->b_chartab,
> +
>  (size_t)32);
> +           clear_string_option(&curwin->w_s->b_syn_isk);
> +       }
> +       else
> +       {
> +           mch_memmove(save_chartab, curbuf->b_chartab, (size_t)32);
> +           save_isk = curbuf->b_p_isk;
> +           curbuf->b_p_isk = vim_strsave(arg);
> +
> +           buf_init_chartab(curbuf, FALSE);
> +           mch_memmove(curwin->w_s->b_syn_chartab, curbuf->b_chartab,
> +
>  (size_t)32);
> +           mch_memmove(curbuf->b_chartab, save_chartab, (size_t)32);
> +           clear_string_option(&curwin->w_s->b_syn_isk);
> +           curwin->w_s->b_syn_isk = curbuf->b_p_isk;
> +           curbuf->b_p_isk = save_isk;
> +       }
> +     }
> +     redraw_win_later(curwin, NOT_VALID);
> + }
> +
> + /*
>    * Clear all syntax info for one buffer.
>    */
>       void
> ***************
> *** 3523,3528 ****
> --- 3613,3619 ----
>   #ifdef FEAT_FOLDING
>       block->b_syn_folditems = 0;
>   #endif
> +     clear_string_option(&block->b_syn_isk);
>
>       /* free the stored states */
>       syn_stack_free_all(block);
> ***************
> *** 3569,3576 ****
>       curwin->w_s->b_syn_linecont_prog = NULL;
>       vim_free(curwin->w_s->b_syn_linecont_pat);
>       curwin->w_s->b_syn_linecont_pat = NULL;
>
> !     syn_stack_free_all(curwin->w_s);          /* Need to recompute all
> syntax. */
>   }
>
>   /*
> --- 3660,3668 ----
>       curwin->w_s->b_syn_linecont_prog = NULL;
>       vim_free(curwin->w_s->b_syn_linecont_pat);
>       curwin->w_s->b_syn_linecont_pat = NULL;
> +     clear_string_option(&curwin->w_s->b_syn_isk);
>
> !     syn_stack_free_all(curwin->w_s);  /* Need to recompute all syntax. */
>   }
>
>   /*
> ***************
> *** 3777,3782 ****
> --- 3869,3875 ----
>       eap->nextcmd = check_nextcmd(eap->arg);
>       if (!eap->skip)
>       {
> +       clear_string_option(&curwin->w_s->b_syn_isk);
>         set_internal_string_var((char_u *)"syntax_cmd", (char_u *)"reset");
>         do_cmdline_cmd((char_u *)"runtime! syntax/syncolor.vim");
>         do_unlet((char_u *)"g:syntax_cmd", TRUE);
> ***************
> *** 6253,6258 ****
> --- 6346,6352 ----
>       {"conceal",               syn_cmd_conceal},
>       {"enable",                syn_cmd_enable},
>       {"include",               syn_cmd_include},
> +     {"iskeyword",     syn_cmd_iskeyword},
>       {"keyword",               syn_cmd_keyword},
>       {"list",          syn_cmd_list},
>       {"manual",                syn_cmd_manual},
> ***************
> *** 6331,6336 ****
> --- 6425,6431 ----
>         clear_string_option(&curwin->w_s->b_p_spf);
>         clear_string_option(&curwin->w_s->b_p_spl);
>   #endif
> +       clear_string_option(&curwin->w_s->b_syn_isk);
>       }
>
>       /* save value of b:current_syntax */
> *** ../vim-7.4.1141/src/testdir/Make_all.mak    2016-01-19
> 13:07:08.758882600 +0100
> --- src/testdir/Make_all.mak    2016-01-19 21:46:25.843632115 +0100
> ***************
> *** 175,180 ****
> --- 175,181 ----
>             test_increment.res \
>             test_perl.res \
>             test_quickfix.res \
> +           test_syntax.res \
>             test_viminfo.res \
>             test_viml.res \
>             test_alot.res
> *** ../vim-7.4.1141/src/testdir/test_syntax.vim 2016-01-19
> 22:27:23.888588580 +0100
> --- src/testdir/test_syntax.vim 2016-01-19 22:06:19.322511215 +0100
> ***************
> *** 0 ****
> --- 1,67 ----
> + " Test for syntax and syntax iskeyword option
> +
> + if !has("syntax")
> +   finish
> + endif
> +
> + func GetSyntaxItem(pat)
> +   let c = ''
> +   let a = ['a', getreg('a'), getregtype('a')]
> +   0
> +   redraw!
> +   call search(a:pat, 'W')
> +   let synid = synID(line('.'), col('.'), 1)
> +   while synid == synID(line('.'), col('.'), 1)
> +     norm! v"ay
> +     " stop at whitespace
> +     if @a =~# '\s'
> +       break
> +     endif
> +     let c .= @a
> +     norm! l
> +   endw
> +   call call('setreg', a)
> +   0
> +   return c
> + endfunc
> +
> + func Test_syn_iskeyword()
> +   new
> +   call setline(1, [
> +       \ 'CREATE TABLE FOOBAR(',
> +       \ '    DLTD_BY VARCHAR2(100)',
> +       \ ');',
> +       \ ''])
> +
> +   syntax on
> +   set ft=sql
> +   syn match SYN /C\k\+\>/
> +   hi link SYN ErrorMsg
> +   call assert_equal('DLTD_BY', GetSyntaxItem('DLTD'))
> +   /\<D\k\+\>/:norm! ygn
> +   call assert_equal('DLTD_BY', @0)
> +   redir @c
> +   syn iskeyword
> +   redir END
> +   call assert_equal("\nsyntax iskeyword not set", @c)
> +
> +   syn iskeyword @,48-57,_,192-255
> +   redir @c
> +   syn iskeyword
> +   redir END
> +   call assert_equal("\nsyntax iskeyword @,48-57,_,192-255", @c)
> +
> +   setlocal isk-=_
> +   call assert_equal('DLTD_BY', GetSyntaxItem('DLTD'))
> +   /\<D\k\+\>/:norm! ygn
> +   let b2=@0
> +   call assert_equal('DLTD', @0)
> +
> +   syn iskeyword clear
> +   redir @c
> +   syn iskeyword
> +   redir END
> +   call assert_equal("\nsyntax iskeyword not set", @c)
> +
> +   quit!
> + endfunc
> *** ../vim-7.4.1141/src/version.c       2016-01-19 20:52:39.106985972 +0100
> --- src/version.c       2016-01-19 22:17:08.911353422 +0100
> ***************
> *** 743,744 ****
> --- 743,746 ----
>   {   /* Add new patch number below this line */
> + /**/
> +     1142,
>   /**/
>
> --
> hundred-and-one symptoms of being an internet addict:
> 11. You find yourself typing "com" after every period when using a word
>     processor.com
>
>  /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net
>  \\\
> ///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/
> \\\
> \\\  an exciting new programming language -- http://www.Zimbu.org
> ///
>  \\\            help me help AIDS victims -- http://ICCF-Holland.org
> ///
>
> --
> --
> You received this message from the "vim_dev" maillist.
> Do not top-post! Type your reply below the text you are replying to.
> For more information, visit http://www.vim.org/maillist.php
>
> ---
> You received this message because you are subscribed to the Google Groups
> "vim_dev" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui