be5invis
Joined 15 years ago
Karma
491
Submissions
127
Member since
Dec 4
Joined 15 years ago
· Break the text into runs.
· Calculate BiDi at paragraph level.
· Shape every run to get its length and possible line breaking points.
· Arrange the runs (now only have length, height, text isnide it and some breaking properties — glyphs and glyph positions are dropped) into lines.
Such process is called “measuring”. And the real text display is delayed until a line become visible: you fetch out the text runs in the line and do the real display.In most times (like appending text) you do not to do much recalculation.
· Input methods, including...
· Composing IME
· Speech
· Handwriting
· Emoji picker
· Complex text rendering, including...
· Bidi
· Shaping
· Complex-script-aware editing
· Complex-script-aware find, replace, etc.
· Accessibility
And what they can choose to support: · Advanced typography, including...
· About line breaking...
· Hyphenation
· Optimized line break (Knuth-plass, etc.)
· About microtypography
· OpenType features (ligatures, etc.)
· OpenType variations
· Multiple master fonts
· Proper font fallback ← It is not a simple lookup-at-each-character process
· Advanced Middle East features, including...
· Kashida
· Advanced Far East features, including...
· Kinsoku Shori
· Auto space insertion
· Kumimoji
· Warichu
· Ruby
· Proper vertical layout, including...
· Yoko-in-Tate
· Inline objects and paragraph-like objects, including...
· Images
· Hyperlinks
· Math equations ← This is really hard.Link: https://docs.microsoft.com/en-us/windows/desktop/directwrite...
It is really good to see they have RTL support.
-- However they messed up when using composing IMEs :(
OK, could you define this?
data Eq : {a : Type} -> a -> a -> Type where
Refl : Eq x x
sym : {x : a} -> {y : a} -> Eq x y -> Eq y x
sym Refl = Refl
replace : {a : Type} -> {x : a} -> {y : a} -> {f : a -> Type} -> Eq x y -> f x -> f y
replace Refl p = p