Struct RubyString

Source
pub struct RubyString { /* private fields */ }
Expand description

A string type that can have ruby glosses attached to parts of it.

§Memory layout

The text content is stored in two String instances, one being the main text and one being a concatenation of all the rubies. Placement of the rubies is stored as a list of indices into both strings. Compared to the trivial structure (where each rubied substring is held as a separate String), this layout reduces memory usage and the number of separate allocations at the expense of slightly more complicated indexing logic.

Implementations§

Source§

impl RubyString

Source

pub fn new() -> RubyString

Creates a new empty RubyString.

Source

pub fn push_str(&mut self, string: &str)

Appends plain text (that does not have a ruby gloss attached to it) to this RubyString.

Source

pub fn push_segment<'a>(&mut self, segment: Segment<'a>)

Appends text to this RubyString and attaches a ruby gloss to it.

Source

pub fn to_plain_text(&self) -> String

Returns the plain text stored in this RubyString. The result has no ruby glosses attached to it anymore.

let mut rs = RubyString::new();
rs.push_str("ここは");
rs.push_segment(Segment::Rubied { text: "東", ruby: "とう" });
rs.push_segment(Segment::Rubied { text: "京", ruby: "きょう" });
rs.push_str("です");
assert_eq!(rs.to_plain_text(), "ここは東京です");
Source

pub fn to_interlinear_encoding(&self) -> String

Returns an encoding of this RubyString as a plain String using interlinear annotation characters.

let mut rs = RubyString::new();
rs.push_str("ここは");
rs.push_segment(Segment::Rubied { text: "東", ruby: "とう" });
rs.push_segment(Segment::Rubied { text: "京", ruby: "きょう" });
rs.push_str("です");
let encoded = rs.to_interlinear_encoding();
assert_eq!(encoded, "ここは\u{FFF9}東\u{FFFA}とう\u{FFFB}\u{FFF9}京\u{FFFA}きょう\u{FFFB}です");
Source

pub fn segments(&self) -> SegmentIterator<'_>

An iterator over the segments in this RubyString.

Trait Implementations§

Source§

impl Clone for RubyString

Source§

fn clone(&self) -> RubyString

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Default for RubyString

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<'a> Extend<Segment<'a>> for RubyString

Source§

fn extend<I: IntoIterator<Item = Segment<'a>>>(&mut self, iter: I)

Extends a collection with the contents of an iterator. Read more
Source§

fn extend_one(&mut self, item: A)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
Source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
Source§

impl<T: Into<String>> From<T> for RubyString

Source§

fn from(val: T) -> RubyString

Converts to this type from the input type.
Source§

impl<'a> FromIterator<Segment<'a>> for RubyString

Source§

fn from_iter<I: IntoIterator<Item = Segment<'a>>>(iter: I) -> RubyString

Creates a value from an iterator. Read more
Source§

impl PartialEq for RubyString

Source§

fn eq(&self, other: &RubyString) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for RubyString

Source§

impl StructuralPartialEq for RubyString

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.