Mercurial > vim
changeset 2392:0371401d9d33 vim73
Give each syntax item a sequence number, so that we know when it starts and
can show the 'cchar' for each of them.
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Sat, 24 Jul 2010 17:29:03 +0200 |
parents | f1d95a986dfb |
children | 210a5605e126 |
files | runtime/doc/todo.txt src/proto/syntax.pro src/screen.c src/syntax.c |
diffstat | 4 files changed, 19 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/runtime/doc/todo.txt +++ b/runtime/doc/todo.txt @@ -42,9 +42,6 @@ 6 In the quickfix window statusline ad Check position in wrapped line with 'concealcursor' set. -Trick with syntax ID works, but it's not nice. Can we give a sequence nr to -syntax item matches? At least the ones with a replacement char. - 'undoreload' option: when fewer lines than these consider a reload as a change action and save the text before the reload, don't clear undo info.
--- a/src/proto/syntax.pro +++ b/src/proto/syntax.pro @@ -15,7 +15,7 @@ void set_context_in_echohl_cmd __ARGS((e 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 get_syntax_info __ARGS((int *idp)); +int get_syntax_info __ARGS((int *seqnrp)); int syn_get_sub_char __ARGS((void)); int syn_get_stack_item __ARGS((int i)); int syn_get_foldlevel __ARGS((win_T *wp, long lnum));
--- a/src/screen.c +++ b/src/screen.c @@ -2816,7 +2816,7 @@ win_line(wp, lnum, startrow, endrow, noc #ifdef FEAT_CONCEAL int syntax_flags = 0; - int syntax_id = 0; + int syntax_seqnr = 0; int prev_syntax_id = 0; int conceal_attr = hl_attr(HLF_CONCEAL); int is_concealing = FALSE; @@ -4099,7 +4099,7 @@ win_line(wp, lnum, startrow, endrow, noc if (c == NUL) syntax_flags = 0; else - syntax_flags = get_syntax_info(&syntax_id); + syntax_flags = get_syntax_info(&syntax_seqnr); # endif } #endif @@ -4430,7 +4430,7 @@ win_line(wp, lnum, startrow, endrow, noc && !lnum_in_visual_area) { char_attr = conceal_attr; - if (prev_syntax_id != syntax_id + if (prev_syntax_id != syntax_seqnr && (syn_get_sub_char() != NUL || wp->w_p_cole == 1) && wp->w_p_cole != 3) { @@ -4443,7 +4443,7 @@ win_line(wp, lnum, startrow, endrow, noc else c = ' '; - prev_syntax_id = syntax_id; + prev_syntax_id = syntax_seqnr; if (n_extra > 0) vcol_off += n_extra;
--- a/src/syntax.c +++ b/src/syntax.c @@ -196,6 +196,7 @@ static int current_id = 0; /* ID of static int current_trans_id = 0; /* idem, transparency removed */ #endif #ifdef FEAT_CONCEAL +static int current_seqnr = 0; static int current_flags = 0; static int current_sub_char = 0; #endif @@ -287,6 +288,7 @@ typedef struct state_item * HL_SKIP* for si_next_list */ #ifdef FEAT_CONCEAL int si_char; /* substitution character for conceal */ + int si_seqnr; /* sequence number */ #endif short *si_cont_list; /* list of contained groups */ short *si_next_list; /* nextgroup IDs after this item ends */ @@ -298,6 +300,10 @@ typedef struct state_item #define ID_LIST_ALL (short *)-1 /* valid of si_cont_list for containing all but contained groups */ +#ifdef FEAT_CONCEAL +static int next_seqnr = 0; /* value to use for si_seqnr */ +#endif + /* * Struct to reduce the number of arguments to get_syn_options(), it's used * very often. @@ -1949,6 +1955,7 @@ syn_current_attr(syncing, displaying, ca cur_si->si_end_idx = 0; cur_si->si_flags = flags; #ifdef FEAT_CONCEAL + cur_si->si_seqnr = next_seqnr++; cur_si->si_char = cchar; if (current_state.ga_len > 1) cur_si->si_flags |= @@ -2280,6 +2287,7 @@ syn_current_attr(syncing, displaying, ca #ifdef FEAT_CONCEAL current_flags = sip->si_flags; current_sub_char = sip->si_char; + current_seqnr = sip->si_seqnr; #endif break; } @@ -2433,6 +2441,7 @@ push_next_match(cur_si) cur_si->si_m_lnum = current_lnum; cur_si->si_flags = spp->sp_flags; #ifdef FEAT_CONCEAL + cur_si->si_seqnr = next_seqnr++; cur_si->si_char = spp->sp_char; if (current_state.ga_len > 1) cur_si->si_flags |= @@ -6336,14 +6345,14 @@ syn_get_id(wp, lnum, col, trans, spellp, /* * Get extra information about the syntax item. Must be called right after * get_syntax_attr(). - * Stores the current item ID in "*idp". + * Stores the current item sequence nr in "*seqnrp". * Returns the current flags. */ int -get_syntax_info(idp) - int *idp; -{ - *idp = current_id; +get_syntax_info(seqnrp) + int *seqnrp; +{ + *seqnrp = current_seqnr; return current_flags; }