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 moreimpl Copy for ReplaceFormatPolicy
Source§impl Debug for ReplaceFormatPolicy
impl Debug for ReplaceFormatPolicy
Source§impl Default for ReplaceFormatPolicy
impl Default for ReplaceFormatPolicy
Source§fn default() -> ReplaceFormatPolicy
fn default() -> ReplaceFormatPolicy
Source§impl<'de> Deserialize<'de> for ReplaceFormatPolicy
impl<'de> Deserialize<'de> for ReplaceFormatPolicy
Source§fn deserialize<__D>(
__deserializer: __D,
) -> Result<ReplaceFormatPolicy, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
__deserializer: __D,
) -> Result<ReplaceFormatPolicy, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
impl Eq for ReplaceFormatPolicy
Source§impl PartialEq for ReplaceFormatPolicy
impl PartialEq for ReplaceFormatPolicy
Source§impl Serialize for ReplaceFormatPolicy
impl Serialize for ReplaceFormatPolicy
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
impl StructuralPartialEq for ReplaceFormatPolicy
Auto Trait Implementations§
impl Freeze for ReplaceFormatPolicy
impl RefUnwindSafe for ReplaceFormatPolicy
impl Send for ReplaceFormatPolicy
impl Sync for ReplaceFormatPolicy
impl Unpin for ReplaceFormatPolicy
impl UnsafeUnpin for ReplaceFormatPolicy
impl UnwindSafe for ReplaceFormatPolicy
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.