Skip to main content

KeyVals

Struct KeyVals 

Source
pub struct KeyVals { /* private fields */ }

Implementations§

Source§

impl KeyVals

Source

pub fn new(options: KeyvalsConfig) -> Self

§====================================================================== The KeyVals constructor

This defines the KeyVals data object that can appear in the datastream along with tokens, boxes, etc. Thus it has to be digestible, however we may not want to digest it more than once.


Source

pub fn get_value(&self, key: &str) -> Option<&ArgWrap>

return the value of a given key. If multiple values are given, return the last one.

Source

pub fn get_value_digested(&self, key: &str) -> Option<&Digested>

return the digested value of a given key. If multiple values are given, return the last one. This call does not digest the value, and will return None if called pre-digestion

Source

pub fn get_values(&self, key: &str) -> Option<&Vec<ArgWrap>>

return a list of values for a given key

Source

pub fn get_pairs(&self) -> Iter<'_, (String, ArgWrap)>

return the set of key-value pairs

Source

pub fn as_flat_hash(self) -> HashMap<String, ArgWrap>

consume KeyVals and return a flat HashMap

Source

pub fn as_hash(self) -> HashMap<String, Vec<ArgWrap>>

consume KeyVals and return the cached HashMap of input values

Source

pub fn as_hash_digested(self) -> HashMap<String, Vec<Digested>>

consume KeyVals and return the cached HashMap of digested values

Source

pub fn get_hash(&self) -> HashMap<String, String>

returns a key => ToString(value)

Source

pub fn get_hash_digested(&self) -> HashMap<String, String>

returns a key => ToString(value)

Source

pub fn get_keyvals(&self) -> &HashMap<String, Vec<ArgWrap>>

Source

pub fn has_key(&self, key: &str) -> bool

Source

pub fn set_keys_expansion(&self) -> Tokens

Source

pub fn revert(&self) -> Result<Tokens>

Source

pub fn add_value( &mut self, key: &str, value_arg: ArgWrap, use_default: bool, no_rebuild: bool, ) -> Result<()>

Source

pub fn set_value( &mut self, key: &str, value: ArgWrap, use_default: bool, ) -> Result<()>

Source

pub fn read_from(&mut self, until: Token, silence_missing: bool) -> Result<()>

Source

pub fn into_tokens(self) -> Result<Tokens>

TODO: This is an improvised method for switching KeyVals into Tokens, but losing all collected metadata. The long-term solution ought to be via a type system extension, where the arguments to our before-digest closures are a vector of a new type ReadValue ::= [Token, KeyVals, RegisterValue] potentially? On the other hand, we can also put the extra effort of postponing the build of KV metadata until digestion, this way not losing any time reserializing metadata

Trait Implementations§

Source§

impl BoxOps for KeyVals

Source§

fn with_properties<R, FnR>(&self, caller: FnR) -> R
where FnR: FnOnce(&SymHashMap<Stored>) -> R,

execute a function using this object’s named properties
Source§

fn get_string(&self) -> Result<Cow<'_, str>>

build a string representation of the underlying digested data
Source§

fn set_property<T: Into<Stored>>(&mut self, _key: &str, _value: T)

set a named property (allows all Stored types for values)
Source§

fn be_absorbed(&self, _document: &mut Document) -> Result<Vec<Node>>

absorb the current object into the Document XML - returning the corresponding nodes
Source§

fn get_font(&self) -> Result<Option<Rc<Font>>>

gets the associated font, if any
Source§

fn compute_size( &self, _options: SymHashMap<Stored>, ) -> Result<(Dimension, Dimension, Dimension)>

computes and returns the size of a box-like object
Source§

fn unlist(&self) -> Vec<Digested>

If composite, unwrap into the contained digested objects (or return self)
Source§

fn unlist_ref(&self) -> Vec<Cow<'_, Digested>>

Source§

fn be_absorbed_mut(&mut self, _document: &mut Document) -> Result<Vec<Node>>

be_absorbed but with allowed side-effects on the carrier (for Alignment only)
Source§

fn get_tokens(&self) -> Option<&Tokens>

get the underlying tokens (preceding digestion)
Source§

fn get_properties(&self) -> &HashMap<Stored>

deprecated: get the map of named properties. This can not be usable as long as we have any data behind a RefCell wrapper. Use with_properties instead.
Source§

fn get_properties_mut(&mut self) -> &mut HashMap<Stored>

get a mutable reference to the map of named properties
Source§

fn get_property(&self, key: &str) -> Option<Cow<'_, Stored>>

get a single named property (with special “isSpace” check)
Source§

fn get_property_string(&self, key: &str) -> String

Source§

fn get_property_mut(&mut self, key: &str) -> Option<&mut Stored>

get a mutable reference to a single named property (does NOT have the “isSpace” check)
Source§

fn has_property(&self, key: &str) -> bool

checks if a property key has been set
Source§

fn get_property_bool(&self, key: &str) -> bool

obtains a boolean property value (false unless Stored::Bool)
Source§

fn get_body(&self) -> Result<Option<Digested>>

obtains the “body” of a digested object which captured it
Source§

fn set_font(&mut self, _font: Rc<Font>)

sets an associated font
Source§

fn set_width<T: Into<Stored>>(&mut self, width: T)

sets a “width” property, for sizing
Source§

fn get_width( &self, options: Option<HashMap<Stored>>, ) -> Result<Option<RegisterValue>>

gets the “width” property value, if any
Source§

fn set_height<T: Into<Stored>>(&mut self, width: T)

sets a “height” property value, for sizing
Source§

fn get_height(&self) -> Option<RegisterValue>

gets the “height” property value, if any. Checks “height”, then “cached_height”, then computes from font if needed.
Source§

fn set_depth<T: Into<Stored>>(&mut self, width: T)

sets a “depth” property value, for sizing
Source§

fn get_depth(&self) -> Option<RegisterValue>

gets the “depth” property value, if any. Checks “depth”, then “cached_depth”, then computes from font if needed.
Source§

fn get_size( &mut self, options: Option<HashMap<Stored>>, ) -> Result<(Dimension, Dimension, Dimension, Dimension, Dimension, Dimension)>

gets the box size as a triple of (width, height, depth) the generic implementation is immutable and will recompute the size on each call see Digested::get_size for a variant with interior mutability which caches the box size
Source§

fn compute_size_and_cache( &mut self, options: HashMap<Stored>, ) -> Result<(Dimension, Dimension, Dimension)>

computes and caches (via named properties) the size of a box-like object. Perl #2798 (S5, padding slice): after computing the size, add any requested pad{top,bottom,left,right} to the computed dimensions. This is the SAFE part of computeSizeStore — additive and inert until the app layer sets a pad* property (display math \abovedisplayskip/\belowdisplayskip, \overline/\underline 2pt, items/equations). The riskier requested-vs- computed merge + full-spec bypass + isEmpty are deliberately NOT included here — a mechanical port of those regressed (Rust boxes don’t use width/height/depth uniformly as “requested box size”); see SYNC_STATUS U2.
Source§

impl Clone for KeyVals

Source§

fn clone(&self) -> KeyVals

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for KeyVals

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for KeyVals

Source§

fn default() -> Self

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

impl Display for KeyVals

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl From<KeyVals> for Stored

Source§

fn from(kvs: KeyVals) -> Stored

Converts to this type from the input type.
Source§

impl From<KeyVals> for ArgWrap

Source§

fn from(kv: KeyVals) -> Self

Converts to this type from the input type.
Source§

impl From<KeyVals> for Digested

Source§

fn from(value: KeyVals) -> Digested

Converts to this type from the input type.
Source§

impl From<KeyVals> for Result<Option<Digested>>

Source§

fn from(value: KeyVals) -> Result<Option<Digested>>

Converts to this type from the input type.
Source§

impl IntoDigestedOptionResult<Result<Option<Digested>, Error>> for KeyVals

Source§

impl Object for KeyVals

Source§

fn stringify(&self) -> String

Source§

fn be_digested(self) -> Result<Digested>

Source§

fn isa_box(&self) -> bool

Source§

fn is_expandable(&self) -> bool

Source§

fn is_definition(&self) -> bool

Source§

fn is_comment(&self) -> bool

Source§

fn get_locator(&self) -> Option<Locator>

The object’s stored source locator, if it has one. None is the honest “no recorded source position” (replacing the old Locator::default() file!()/line!() sentinel). For “where the parser is now” (error reporting, box creation), use the free fn gullet::get_locator().
Source§

fn revert(&self) -> Result<Tokens>

each concrete object needs to provide its own path back to tokens
Source§

impl PartialEq for KeyVals

Source§

fn eq(&self, _other: &KeyVals) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

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

Inequality operator !=. Read more
Source§

impl TryFrom<ArgWrap> for KeyVals

Source§

type Error = Error

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

fn try_from(aw: ArgWrap) -> Result<KeyVals>

Performs the conversion.

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> IntoResultArgWrap<Result<ArgWrap, Error>> for T
where T: Into<ArgWrap>,

Source§

fn into_result_argwrap(self) -> Result<ArgWrap, Error>

performs the conversion
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> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. 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.