| To: vim-dev@vim.org |
| Subject: Patch 7.1.219 |
| Fcc: outbox |
| From: Bram Moolenaar <Bram@moolenaar.net> |
| Mime-Version: 1.0 |
| Content-Type: text/plain; charset=ISO-8859-1 |
| Content-Transfer-Encoding: 8bit |
| |
| |
| Patch 7.1.219 (after 7.1.215) |
| Problem: synstack() returns situation after the current character, can't |
| see the state for a one-character region. |
| Solution: Don't update ending states in the requested column. |
| Files: runtime/doc/eval.txt, src/eval.c, src/hardcopy.c, |
| src/proto/syntax.pro, src/screen.c, src/spell.c, src/syntax.c |
| |
| |
| |
| |
| |
| *** 1,4 **** |
| ! *eval.txt* For Vim version 7.1. Last change: 2008 Jan 10 |
| |
| |
| VIM REFERENCE MANUAL by Bram Moolenaar |
| --- 1,4 ---- |
| ! *eval.txt* For Vim version 7.1. Last change: 2008 Jan 11 |
| |
| |
| VIM REFERENCE MANUAL by Bram Moolenaar |
| |
| *** 4967,4976 **** |
| Return a |List|, which is the stack of syntax items at the |
| position {lnum} and {col} in the current window. Each item in |
| the List is an ID like what |synID()| returns. |
| - The stack is the situation in between the character at "col" |
| - and the next character. Note that a region of only one |
| - character will not show up, it only exists inside that |
| - character, not in between characters. |
| The first item in the List is the outer region, following are |
| items contained in that one. The last one is what |synID()| |
| returns, unless not the whole item is highlighted or it is a |
| --- 4970,4975 ---- |
| |
| |
| |
| *** 15725,15731 **** |
| |
| if (!transerr && lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count |
| && col >= 0 && col < (long)STRLEN(ml_get(lnum))) |
| ! id = syn_get_id(curwin, lnum, (colnr_T)col, trans, NULL); |
| #endif |
| |
| rettv->vval.v_number = id; |
| --- 15725,15731 ---- |
| |
| if (!transerr && lnum >= 1 && lnum <= curbuf->b_ml.ml_line_count |
| && col >= 0 && col < (long)STRLEN(ml_get(lnum))) |
| ! id = syn_get_id(curwin, lnum, (colnr_T)col, trans, NULL, FALSE); |
| #endif |
| |
| rettv->vval.v_number = id; |
| |
| *** 15874,15880 **** |
| && col >= 0 && col < (long)STRLEN(ml_get(lnum)) |
| && rettv_list_alloc(rettv) != FAIL) |
| { |
| ! (void)syn_get_id(curwin, lnum, (colnr_T)col, FALSE, NULL); |
| for (i = 0; ; ++i) |
| { |
| id = syn_get_stack_item(i); |
| --- 15874,15880 ---- |
| && col >= 0 && col < (long)STRLEN(ml_get(lnum)) |
| && rettv_list_alloc(rettv) != FAIL) |
| { |
| ! (void)syn_get_id(curwin, lnum, (colnr_T)col, FALSE, NULL, TRUE); |
| for (i = 0; ; ++i) |
| { |
| id = syn_get_stack_item(i); |
| |
| |
| |
| *** 876,882 **** |
| */ |
| if (psettings->do_syntax) |
| { |
| ! id = syn_get_id(curwin, ppos->file_line, col, 1, NULL); |
| if (id > 0) |
| id = syn_get_final_id(id); |
| else |
| --- 876,882 ---- |
| */ |
| if (psettings->do_syntax) |
| { |
| ! id = syn_get_id(curwin, ppos->file_line, col, 1, NULL, FALSE); |
| if (id > 0) |
| id = syn_get_final_id(id); |
| else |
| |
| |
| |
| *** 4,10 **** |
| void syn_stack_apply_changes __ARGS((buf_T *buf)); |
| void syntax_end_parsing __ARGS((linenr_T lnum)); |
| int syntax_check_changed __ARGS((linenr_T lnum)); |
| ! int get_syntax_attr __ARGS((colnr_T col, int *can_spell)); |
| void syntax_clear __ARGS((buf_T *buf)); |
| void ex_syntax __ARGS((exarg_T *eap)); |
| int syntax_present __ARGS((buf_T *buf)); |
| --- 4,10 ---- |
| void syn_stack_apply_changes __ARGS((buf_T *buf)); |
| void syntax_end_parsing __ARGS((linenr_T lnum)); |
| int syntax_check_changed __ARGS((linenr_T lnum)); |
| ! int get_syntax_attr __ARGS((colnr_T col, int *can_spell, int keep_state)); |
| void syntax_clear __ARGS((buf_T *buf)); |
| void ex_syntax __ARGS((exarg_T *eap)); |
| int syntax_present __ARGS((buf_T *buf)); |
| |
| *** 12,18 **** |
| void set_context_in_echohl_cmd __ARGS((expand_T *xp, char_u *arg)); |
| void set_context_in_syntax_cmd __ARGS((expand_T *xp, char_u *arg)); |
| char_u *get_syntax_name __ARGS((expand_T *xp, int idx)); |
| ! int syn_get_id __ARGS((win_T *wp, long lnum, colnr_T col, int trans, int *spellp)); |
| int syn_get_stack_item __ARGS((int i)); |
| int syn_get_foldlevel __ARGS((win_T *wp, long lnum)); |
| void init_highlight __ARGS((int both, int reset)); |
| --- 12,18 ---- |
| void set_context_in_echohl_cmd __ARGS((expand_T *xp, char_u *arg)); |
| void set_context_in_syntax_cmd __ARGS((expand_T *xp, char_u *arg)); |
| char_u *get_syntax_name __ARGS((expand_T *xp, int idx)); |
| ! int syn_get_id __ARGS((win_T *wp, long lnum, colnr_T col, int trans, int *spellp, int keep_state)); |
| int syn_get_stack_item __ARGS((int i)); |
| int syn_get_foldlevel __ARGS((win_T *wp, long lnum)); |
| void init_highlight __ARGS((int both, int reset)); |
| |
| |
| |
| *** 3885,3891 **** |
| # ifdef FEAT_SPELL |
| has_spell ? &can_spell : |
| # endif |
| ! NULL); |
| |
| if (did_emsg) |
| { |
| --- 3885,3891 ---- |
| # ifdef FEAT_SPELL |
| has_spell ? &can_spell : |
| # endif |
| ! NULL, FALSE); |
| |
| if (did_emsg) |
| { |
| |
| |
| |
| *** 2146,2152 **** |
| { |
| col = (int)(p - buf); |
| (void)syn_get_id(wp, lnum, (colnr_T)col, |
| ! FALSE, &can_spell); |
| if (!can_spell) |
| attr = HLF_COUNT; |
| } |
| --- 2146,2152 ---- |
| { |
| col = (int)(p - buf); |
| (void)syn_get_id(wp, lnum, (colnr_T)col, |
| ! FALSE, &can_spell, FALSE); |
| if (!can_spell) |
| attr = HLF_COUNT; |
| } |
| |
| |
| |
| *** 378,384 **** |
| static int syn_stack_equal __ARGS((synstate_T *sp)); |
| static void validate_current_state __ARGS((void)); |
| static int syn_finish_line __ARGS((int syncing)); |
| ! static int syn_current_attr __ARGS((int syncing, int displaying, int *can_spell)); |
| static int did_match_already __ARGS((int idx, garray_T *gap)); |
| static stateitem_T *push_next_match __ARGS((stateitem_T *cur_si)); |
| static void check_state_ends __ARGS((void)); |
| --- 378,384 ---- |
| static int syn_stack_equal __ARGS((synstate_T *sp)); |
| static void validate_current_state __ARGS((void)); |
| static int syn_finish_line __ARGS((int syncing)); |
| ! static int syn_current_attr __ARGS((int syncing, int displaying, int *can_spell, int keep_state)); |
| static int did_match_already __ARGS((int idx, garray_T *gap)); |
| static stateitem_T *push_next_match __ARGS((stateitem_T *cur_si)); |
| static void check_state_ends __ARGS((void)); |
| |
| *** 1691,1697 **** |
| { |
| while (!current_finished) |
| { |
| ! (void)syn_current_attr(syncing, FALSE, NULL); |
| /* |
| * When syncing, and found some item, need to check the item. |
| */ |
| --- 1690,1696 ---- |
| { |
| while (!current_finished) |
| { |
| ! (void)syn_current_attr(syncing, FALSE, NULL, FALSE); |
| /* |
| * When syncing, and found some item, need to check the item. |
| */ |
| |
| *** 1731,1739 **** |
| * done. |
| */ |
| int |
| ! get_syntax_attr(col, can_spell) |
| colnr_T col; |
| int *can_spell; |
| { |
| int attr = 0; |
| |
| --- 1730,1739 ---- |
| * done. |
| */ |
| int |
| ! get_syntax_attr(col, can_spell, keep_state) |
| colnr_T col; |
| int *can_spell; |
| + int keep_state; /* keep state of char at "col" */ |
| { |
| int attr = 0; |
| |
| |
| *** 1768,1774 **** |
| */ |
| while (current_col <= col) |
| { |
| ! attr = syn_current_attr(FALSE, TRUE, can_spell); |
| ++current_col; |
| } |
| |
| --- 1768,1775 ---- |
| */ |
| while (current_col <= col) |
| { |
| ! attr = syn_current_attr(FALSE, TRUE, can_spell, |
| ! current_col == col ? keep_state : FALSE); |
| ++current_col; |
| } |
| |
| |
| *** 1779,1788 **** |
| * Get syntax attributes for current_lnum, current_col. |
| */ |
| static int |
| ! syn_current_attr(syncing, displaying, can_spell) |
| int syncing; /* When 1: called for syncing */ |
| int displaying; /* result will be displayed */ |
| int *can_spell; /* return: do spell checking */ |
| { |
| int syn_id; |
| lpos_T endpos; /* was: char_u *endp; */ |
| --- 1780,1790 ---- |
| * Get syntax attributes for current_lnum, current_col. |
| */ |
| static int |
| ! syn_current_attr(syncing, displaying, can_spell, keep_state) |
| int syncing; /* When 1: called for syncing */ |
| int displaying; /* result will be displayed */ |
| int *can_spell; /* return: do spell checking */ |
| + int keep_state; /* keep syntax stack afterwards */ |
| { |
| int syn_id; |
| lpos_T endpos; /* was: char_u *endp; */ |
| |
| *** 2298,2304 **** |
| * may be for an empty match and a containing item might end in the |
| * current column. |
| */ |
| ! if (!syncing) |
| { |
| check_state_ends(); |
| if (current_state.ga_len > 0 |
| --- 2300,2306 ---- |
| * may be for an empty match and a containing item might end in the |
| * current column. |
| */ |
| ! if (!syncing && !keep_state) |
| { |
| check_state_ends(); |
| if (current_state.ga_len > 0 |
| |
| *** 6086,6097 **** |
| * Function called for expression evaluation: get syntax ID at file position. |
| */ |
| int |
| ! syn_get_id(wp, lnum, col, trans, spellp) |
| win_T *wp; |
| long lnum; |
| colnr_T col; |
| ! int trans; /* remove transparancy */ |
| ! int *spellp; /* return: can do spell checking */ |
| { |
| /* When the position is not after the current position and in the same |
| * line of the same buffer, need to restart parsing. */ |
| --- 6088,6100 ---- |
| * Function called for expression evaluation: get syntax ID at file position. |
| */ |
| int |
| ! syn_get_id(wp, lnum, col, trans, spellp, keep_state) |
| win_T *wp; |
| long lnum; |
| colnr_T col; |
| ! int trans; /* remove transparancy */ |
| ! int *spellp; /* return: can do spell checking */ |
| ! int keep_state; /* keep state of char at "col" */ |
| { |
| /* When the position is not after the current position and in the same |
| * line of the same buffer, need to restart parsing. */ |
| |
| *** 6100,6106 **** |
| || col < current_col) |
| syntax_start(wp, lnum); |
| |
| ! (void)get_syntax_attr(col, spellp); |
| |
| return (trans ? current_trans_id : current_id); |
| } |
| --- 6103,6109 ---- |
| || col < current_col) |
| syntax_start(wp, lnum); |
| |
| ! (void)get_syntax_attr(col, spellp, keep_state); |
| |
| return (trans ? current_trans_id : current_id); |
| } |
| |
| *** 6115,6122 **** |
| syn_get_stack_item(i) |
| int i; |
| { |
| ! if (i >= current_state.ga_len ) |
| return -1; |
| return CUR_STATE(i).si_id; |
| } |
| #endif |
| --- 6118,6131 ---- |
| syn_get_stack_item(i) |
| int i; |
| { |
| ! if (i >= current_state.ga_len) |
| ! { |
| ! /* Need to invalidate the state, because we didn't properly finish it |
| ! * for the last character, "keep_state" was TRUE. */ |
| ! invalidate_current_state(); |
| ! current_col = MAXCOL; |
| return -1; |
| + } |
| return CUR_STATE(i).si_id; |
| } |
| #endif |
| |
| |
| |
| *** 668,669 **** |
| --- 668,671 ---- |
| { /* Add new patch number below this line */ |
| + /**/ |
| + 219, |
| /**/ |
| |
| -- |
| ARTHUR: Go on, Bors, chop its head off. |
| BORS: Right. Silly little bleeder. One rabbit stew coming up. |
| "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD |
| |
| /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ |
| /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ |
| \\\ download, build and distribute -- http://www.A-A-P.org /// |
| \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |