(long)text_len
# else
(long)len
-#endif
+# endif
, ML_CHNK_ADDLINE);
#endif
int ret = FAIL;
#ifdef FEAT_PROP_POPUP
char_u *textprop_save = NULL;
- int textprop_save_len = 0;
+ long textprop_len = 0;
#endif
if (lowest_marked && lowest_marked > lnum)
netbeans_removed(buf, lnum, 0, line_size);
#endif
#ifdef FEAT_PROP_POPUP
- // If there are text properties, make a copy, so that we can update
- // properties in preceding and following lines.
- if (buf->b_has_textprop && !(flags & (ML_DEL_UNDO | ML_DEL_NOPROP)))
+ // If there are text properties compute their byte length.
+ // if needed make a copy, so that we can update properties in preceding and
+ // following lines.
+ if (buf->b_has_textprop)
{
size_t textlen = STRLEN((char_u *)dp + line_start) + 1;
- if ((long)textlen < line_size)
- {
- textprop_save_len = line_size - (int)textlen;
+ textprop_len = line_size - (long)textlen;
+ if (!(flags & (ML_DEL_UNDO | ML_DEL_NOPROP)) && textprop_len > 0)
textprop_save = vim_memsave((char_u *)dp + line_start + textlen,
- textprop_save_len);
- }
+ textprop_len);
}
#endif
#ifdef FEAT_BYTEOFF
ml_updatechunk(buf, lnum, line_size
# ifdef FEAT_PROP_POPUP
- - textprop_save_len
+ - textprop_len
# endif
- , ML_CHNK_DELLINE);
+ , ML_CHNK_DELLINE);
#endif
ret = OK;
// Adjust text properties in the line above and below.
if (lnum > 1)
adjust_text_props_for_delete(buf, lnum - 1, textprop_save,
- textprop_save_len, TRUE);
+ (int)textprop_len, TRUE);
if (lnum <= buf->b_ml.ml_line_count)
adjust_text_props_for_delete(buf, lnum, textprop_save,
- textprop_save_len, FALSE);
+ (int)textprop_len, FALSE);
}
vim_free(textprop_save);
#endif
// the text prop info would also be counted. Go over the
// lines.
for (i = end_idx; i < idx; ++i)
- size += (int)STRLEN((char_u *)dp + (dp->db_index[i] & DB_INDEX_MASK)) + 1;
+ size += (int)STRLEN((char_u *)dp
+ + (dp->db_index[i] & DB_INDEX_MASK)) + 1;
}
else
#endif
text_end = dp->db_txt_end;
else
text_end = ((dp->db_index[idx - 1]) & DB_INDEX_MASK);
- size += text_end - ((dp->db_index[end_idx]) & DB_INDEX_MASK);
+ size += text_end
+ - ((dp->db_index[end_idx]) & DB_INDEX_MASK);
}
}
buf->b_ml.ml_chunksize[curix].mlcs_numlines = linecnt;
{
curchnk->mlcs_numlines--;
ml_upd_lastbuf = NULL; // Force recalc of curix & curline
- if (curix < (buf->b_ml.ml_usedchunks - 1)
- && (curchnk->mlcs_numlines + curchnk[1].mlcs_numlines)
- <= MLCS_MINL)
+ if (curix < buf->b_ml.ml_usedchunks - 1
+ && curchnk->mlcs_numlines + curchnk[1].mlcs_numlines
+ <= MLCS_MINL)
{
curix++;
curchnk = buf->b_ml.ml_chunksize + curix;
return;
}
else if (curix == 0 || (curchnk->mlcs_numlines > 10
- && (curchnk->mlcs_numlines + curchnk[-1].mlcs_numlines)
- > MLCS_MINL))
+ && curchnk->mlcs_numlines + curchnk[-1].mlcs_numlines
+ > MLCS_MINL))
{
return;
}
curchnk[-1].mlcs_totalsize += curchnk->mlcs_totalsize;
buf->b_ml.ml_usedchunks--;
if (curix < buf->b_ml.ml_usedchunks)
- {
mch_memmove(buf->b_ml.ml_chunksize + curix,
buf->b_ml.ml_chunksize + curix + 1,
(buf->b_ml.ml_usedchunks - curix) *
sizeof(chunksize_T));
- }
return;
}
ml_upd_lastbuf = buf;
if a:add_props
call prop_type_add('textprop', #{highlight: 'Search'})
endif
+ " Add a text prop to every fourth line and then change every fifth line so
+ " that it causes a data block split a few times.
for nr in range(1, 1000)
call setline(nr, 'some longer text here')
- if a:add_props && nr % 17 == 0
+ if a:add_props && nr % 4 == 0
call prop_add(nr, 13, #{type: 'textprop', length: 4})
endif
endfor
- call assert_equal(21935, line2byte(998))
- for nr in range(1, 1000, 7)
+ let expected = 22 * 997 + 1
+ call assert_equal(expected, line2byte(998))
+
+ for nr in range(1, 1000, 5)
exe nr .. "s/longer/much more/"
+ let expected += 3
+ call assert_equal(expected, line2byte(998), 'line ' .. nr)
endfor
- " FIXME: somehow this fails on MS-Windows
- if !(a:add_props && has('win32'))
- call assert_equal(22364, line2byte(998))
- endif
if a:add_props
call prop_type_delete('textprop')