Even more trying to reason about the algorithm.

This commit is contained in:
Pietro Gagliardi 2016-12-20 14:47:11 -05:00
parent 4f1ba0df84
commit 28ca02673b
1 changed files with 16 additions and 13 deletions

View File

@ -348,20 +348,13 @@ void attrlistInsertCharactersExtendingAttributes(struct attrlist *alist, size_t
if (start == 0) if (start == 0)
from = 0; from = 0;
///////// /////////
if start == 0
for every attribute
if it doesn't start at 0
move start up by count
move end up by count
return
for every attribute for every attribute
if the attribute ends at or after the insertion point if TODO
advance its end by count adjust start by count
continue adjust end by count
if the attribute starts at or after the insertion point else if TODO
advance its start and end by count adjust end by count
continue /////////
/////
abcdefghi (012345678 9) abcdefghi (012345678 9)
red start 0 end 3 red start 0 end 3
bold start 2 end 6 bold start 2 end 6
@ -395,6 +388,16 @@ before 9 (keep all three)
red -> start 0 (no change) end 3 (no change) red -> start 0 (no change) end 3 (no change)
bold -> start 2 (no change) end 6 (no change) bold -> start 2 (no change) end 6 (no change)
underline -> start 5 (no change) end 8 (no change) underline -> start 5 (no change) end 8 (no change)
result:
0 1 2 3 4 5 6 7 8 9
red E E E e n n n n n n
bold s s S E E E e n n n
underline s s s s s S E E e n
N = none
E = end only
S = start and end
uppercase = in original range, lowercase = not
*/
} }
void attrlistRemoveAttribute(struct attrlist *alist, uiAttribute type, size_t start, size_t end) void attrlistRemoveAttribute(struct attrlist *alist, uiAttribute type, size_t start, size_t end)