* feat: add Ellipsize enum
* chore: API changes needed for ellipsize
Decided not to change "layout()" function for now to avoid breaking the
interface. For now.
* chore: shape ellipsis
* feat: Ellipsize::Start
Since it can only have 1 line, it's easier to implement.
* DROPME: temporarily change rich-text for testing
* test(ellipsize): Testing Ellipsize::Start
Long text in small buffer should produce ellipsis glyphs
* fix: do not need font_system anymore
We moved ellipsis shaping elsewhere so no need to pass font_system to
layout function (which also was recreating a new one in the tests every
time making them take forever).
* feat: Ellipsize::End
* improv(ellipsize): use a single ellipsis shape
* improv: Ellipsie::End && Wrap::None
There is no need to layout the whole line if it's not going to fit.
* fix: mixed bidi text when Ellipsize::End && Wrap::None
* chore: clean up and simplify when line.RTL==span.RTL
* fix(ellipsize): last word is not (word_count -1) if iter().rev()
* refactor(layout): extract the layout algorithm to make it more readable
* improv(ellipsize): Ellipsize::Start && Wrap::None
we iterate in reverse and only layout what's going to be visible
* Revert: delete the previous approach of post processing ellipsis
* doc: explain the interaction between Ellipsize and Wrap
* chore: lower the scope
* feat: Ellipsize the last line of a paragraph
For now only the number of lines is supported
* fix: clear ellipsized field on visual lines
This was causing ellipsis to show on random lines
* chore: remove old tests
will add better tests soon
* chore: clean up changes from previous attempt
* fix: consider the ellipsis width when doing alignment
* feat(ellipsize): add `Height` limit to `Ellipsize`
* fix: ellipsize the start of the last line correctly
* fix: ellipsize at the start of mixed bidi lines
* feat: Ellipsize::Middle
* fix: consider ellipsize::middle when calculating alignment correction
* refactor: improve readability
* refactor: deduplicate "fit_glyphs"
* refactor: combine backward and forward layout into one (wip)
* fix: Backward works in the unified layout_spans
* chore: clean up
* fix: Ellipsize::Middle
* fix: handle large words in bidi boundaries
* chore: clean up and some refactoring
* fix: ellipsis is now the same level as the surrounding text
* fix: try to fit more when ellipsizing::middle
* improv: ellipsis now have the same level as the neighbors
This makes ellipsized RTL text inside a LTR line more readable.
before:
Hello سلام...خوبی؟
Hello خولی؟...سلام
* fix: some extra words were being rendered in Ellipsize::Middle
This was causing the last word (if it's not the same level as the rest)
to be rendered outside the buffer.
* test: a few test cases for ellipsize
* fix: assign the correct byte range to ellipsis
this should fix the panic when selecting or clicking on or near the
ellipsis in the editor.
- Scroll is identified by line index and layout index, instead of just
layout index
- Shaping has the option to prune, where caches outside of the scroll
view are cleared
- Syntax editor no longer requires layout of all lines, only of lines
inside scroll
- BufferLine has a metadata field that can be used by other abstractions
to know when text was changed
Add tests that will match rendered words/paragraphs against reference
images.
Use env var `GENERATE_IMAGES` to write the initial reference images to
the repository.