mirror of
https://github.com/neovim/neovim.git
synced 2025-12-14 02:22:49 +00:00
vim-patch:8.1.0636: line2byte() gives wrong values with text properties
Problem: line2byte() gives wrong values with text properties. (Bjorn Linse)
Solution: Compute byte offsets differently when text properties were added.
(closes vim/vim#3718)
b413d2e6a8
Co-authored-by: Bram Moolenaar <Bram@vim.org>
(cherry picked from commit 36fc266e86)
This commit is contained in:
committed by
github-actions[bot]
parent
4cc060bf44
commit
c2a3838ab2
@@ -3792,6 +3792,7 @@ static void ml_updatechunk(buf_T *buf, linenr_T line, int len, int updtype)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (buf->b_ml.ml_chunksize[curix].mlcs_numlines >= MLCS_MAXL) {
|
if (buf->b_ml.ml_chunksize[curix].mlcs_numlines >= MLCS_MAXL) {
|
||||||
|
int end_idx;
|
||||||
int text_end;
|
int text_end;
|
||||||
|
|
||||||
memmove(buf->b_ml.ml_chunksize + curix + 1,
|
memmove(buf->b_ml.ml_chunksize + curix + 1,
|
||||||
@@ -3811,21 +3812,21 @@ static void ml_updatechunk(buf_T *buf, linenr_T line, int len, int updtype)
|
|||||||
= buf->b_ml.ml_locked_high - buf->b_ml.ml_locked_low + 1; // number of entries in block
|
= buf->b_ml.ml_locked_high - buf->b_ml.ml_locked_low + 1; // number of entries in block
|
||||||
int idx = curline - buf->b_ml.ml_locked_low;
|
int idx = curline - buf->b_ml.ml_locked_low;
|
||||||
curline = buf->b_ml.ml_locked_high + 1;
|
curline = buf->b_ml.ml_locked_high + 1;
|
||||||
if (idx == 0) { // first line in block, text at the end
|
// compute index of last line to use in this MEMLINE
|
||||||
|
rest = count - idx;
|
||||||
|
if (linecnt + rest > MLCS_MINL) {
|
||||||
|
end_idx = idx + MLCS_MINL - linecnt - 1;
|
||||||
|
linecnt = MLCS_MINL;
|
||||||
|
} else {
|
||||||
|
end_idx = count - 1;
|
||||||
|
linecnt += rest;
|
||||||
|
}
|
||||||
|
if (idx == 0) { // first line in block, text at the end
|
||||||
text_end = (int)dp->db_txt_end;
|
text_end = (int)dp->db_txt_end;
|
||||||
} else {
|
} else {
|
||||||
text_end = ((dp->db_index[idx - 1]) & DB_INDEX_MASK);
|
text_end = ((dp->db_index[idx - 1]) & DB_INDEX_MASK);
|
||||||
}
|
}
|
||||||
// Compute index of last line to use in this MEMLINE
|
size += text_end - (int)((dp->db_index[end_idx]) & DB_INDEX_MASK);
|
||||||
rest = count - idx;
|
|
||||||
if (linecnt + rest > MLCS_MINL) {
|
|
||||||
idx += MLCS_MINL - linecnt - 1;
|
|
||||||
linecnt = MLCS_MINL;
|
|
||||||
} else {
|
|
||||||
idx = count - 1;
|
|
||||||
linecnt += rest;
|
|
||||||
}
|
|
||||||
size += text_end - (int)((dp->db_index[idx]) & DB_INDEX_MASK);
|
|
||||||
}
|
}
|
||||||
buf->b_ml.ml_chunksize[curix].mlcs_numlines = linecnt;
|
buf->b_ml.ml_chunksize[curix].mlcs_numlines = linecnt;
|
||||||
buf->b_ml.ml_chunksize[curix + 1].mlcs_numlines -= linecnt;
|
buf->b_ml.ml_chunksize[curix + 1].mlcs_numlines -= linecnt;
|
||||||
|
|||||||
Reference in New Issue
Block a user