Plotted out at a high level how insertion with attribute borrowing should work.
This commit is contained in:
parent
643e2937c4
commit
4f1ba0df84
|
@ -347,8 +347,54 @@ void attrlistInsertCharactersExtendingAttributes(struct attrlist *alist, size_t
|
||||||
from = start - 1;
|
from = start - 1;
|
||||||
if (start == 0)
|
if (start == 0)
|
||||||
from = 0;
|
from = 0;
|
||||||
|
/////////
|
||||||
TODO
|
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
|
||||||
|
if the attribute ends at or after the insertion point
|
||||||
|
advance its end by count
|
||||||
|
continue
|
||||||
|
if the attribute starts at or after the insertion point
|
||||||
|
advance its start and end by count
|
||||||
|
continue
|
||||||
|
/////
|
||||||
|
abcdefghi (012345678 9)
|
||||||
|
red start 0 end 3
|
||||||
|
bold start 2 end 6
|
||||||
|
underline start 5 end 8
|
||||||
|
inserting qwe -> qweabcdefghi (0123456789AB C)
|
||||||
|
012345678 9
|
||||||
|
rrr------
|
||||||
|
--bbbb---
|
||||||
|
-----uuu-
|
||||||
|
before 0, 1, 2 (grow the red part, move everything else down)
|
||||||
|
red -> start 0 (no change) end 3+3=6
|
||||||
|
bold -> start 2+3=5 end 6+3=9
|
||||||
|
underline -> start 5+3=8 end 8+3=B
|
||||||
|
before 3 (grow red and bold, move underline down)
|
||||||
|
red -> start 0 (no change) end 3+3=6
|
||||||
|
bold -> start 2 (no change) end 6+3=9
|
||||||
|
underline -> start 5+3=8 end 8+3=B
|
||||||
|
before 4, 5 (keep red, grow bold, move underline down)
|
||||||
|
red -> start 0 (no change) end 3 (no change)
|
||||||
|
bold -> start 2 (no change) end 6+3=9
|
||||||
|
underline -> start 5+3=8 end 8+3=B
|
||||||
|
before 6 (keep red, grow bold and underline)
|
||||||
|
red -> start 0 (no change) end 3 (no change)
|
||||||
|
bold -> start 2 (no change) end 6+3=9
|
||||||
|
underline -> start 5 (no change) end 8+3=B
|
||||||
|
before 7, 8 (keep red and bold, grow underline)
|
||||||
|
red -> start 0 (no change) end 3 (no change)
|
||||||
|
bold -> start 2 (no change) end 6 (no change)
|
||||||
|
underline -> start 5 (no change) end 8+3=B
|
||||||
|
before 9 (keep all three)
|
||||||
|
red -> start 0 (no change) end 3 (no change)
|
||||||
|
bold -> start 2 (no change) end 6 (no change)
|
||||||
|
underline -> start 5 (no change) end 8 (no change)
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
||||||
|
|
Loading…
Reference in New Issue