pub enum ReplaceFormatPolicy {
InheritPreceding,
PreserveIfFullyCovered,
KeepDominantRun,
PreserveNothing,
}Expand description
What the replacement text wears when it overwrites formatted text.
Before this existed the behaviour was emergent, not chosen: a replace was a
delete followed by an insert, and shift_runs_for_insert hardcodes “the inserted
text inherits whatever run ends at the insertion point”. That silently destroys
formatting — renaming a character whose name reads Auré**lien** dropped the bold
entirely, and not one test in the repo covered it.
The old behaviour is still the default (and is byte-for-byte identical); it is now simply one option among four, and the caller has to look at it.
Variants§
InheritPreceding
The replacement inherits the format of the run that straddles the start of the
replaced range or ends exactly on it (precisely: byte_start < start && byte_end >= start); otherwise it is unformatted. A run beginning exactly at
the start never contributes.
This is the Qt / ProseMirror insertion convention, and it is what
delete-then-insert has always produced — byte for byte, which
inherit_preceding_matches_the_historical_delete_then_insert pins differentially
(it runs the historical primitives and compares, rather than trusting a
transcription of them).
PreserveIfFullyCovered
If a single run covers the whole replaced range, the replacement keeps that
run’s format; otherwise fall back to Self::InheritPreceding. “Rename a name
that was entirely bold and it stays bold” — without guessing when the range is
formatted unevenly.
KeepDominantRun
The replacement takes the format that covered the most bytes of the replaced range. Unformatted gaps count as a candidate, so a mostly-plain range stays plain; ties go to the formatted run, because a tie means the writer’s formatting covered at least as much as its absence and dropping it is the destructive answer.
PreserveNothing
The replacement carries no formatting at all.
Trait Implementations§
Source§impl Clone for ReplaceFormatPolicy
impl Clone for ReplaceFormatPolicy
Source§fn clone(&self) -> ReplaceFormatPolicy
fn clone(&self) -> ReplaceFormatPolicy
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more