Struct skrifa::Tag

source ·
pub struct Tag(/* private fields */);
Expand description

An OpenType tag.

Per the spec, a tag is a 4-byte array where each byte is in the printable ASCII range (0x20..=0x7E).

We do not strictly enforce this constraint as it is possible to encounter invalid tags in existing fonts, and these need to be representable.

When creating new tags we encourage ensuring that the tag is valid, either by using Tag::new_checked or by calling Tag::validate on an existing tag.

Implementations§

source§

impl Tag

source

pub const fn new(src: &[u8; 4]) -> Tag

Construct a Tag from raw bytes.

This does not perform any validation; use Tag::new_checked for a constructor that validates input.

source

pub const fn new_checked(src: &[u8]) -> Result<Tag, InvalidTag>

Attempt to create a Tag from raw bytes.

The slice must contain between 1 and 4 bytes, each in the printable ascii range (0x20..=0x7E).

If the input has fewer than four bytes, it will be padded with spaces.

This method returns an InvalidTag error if the tag does conform to the spec.

source

pub const fn from_u32(src: u32) -> Tag

Construct a new Tag from a big-endian u32, without performing validation.

This is provided as a convenience method for interop with code that stores tags as big-endian u32s.

source

pub const fn from_be_bytes(bytes: [u8; 4]) -> Tag

Create a tag from raw big-endian bytes.

Prefer to use Tag::new (in const contexts) or Tag::new_checked when creating a Tag.

This does not check the input, and is only intended to be used during parsing, where invalid inputs are accepted.

source

pub const fn to_be_bytes(self) -> [u8; 4]

Return the memory representation of this tag.

source

pub fn into_bytes(self) -> [u8; 4]

Return the raw byte array representing this tag.

source

pub fn validate(self) -> Result<(), InvalidTag>

Check that the tag conforms with the spec.

This is intended for use during things like santization or lint passes on existing fonts; if you are creating a new tag, you should prefer Tag::new_checked.

Specifically, this checks the following conditions

  • the tag is not empty
  • the tag contains only characters in the printable ascii range (0x20..=0x1F)
  • the tag does not begin with a space
  • the tag does not contain any non-space characters after the first space

Trait Implementations§

source§

impl AsRef<[u8]> for Tag

source§

fn as_ref(&self) -> &[u8]

Converts this type into a shared reference of the (usually inferred) input type.
source§

impl Borrow<[u8; 4]> for Tag

source§

fn borrow(&self) -> &[u8; 4]

Immutably borrows from an owned value. Read more
source§

impl Clone for Tag

source§

fn clone(&self) -> Tag

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 Debug for Tag

source§

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

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

impl Default for Tag

source§

fn default() -> Tag

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

impl Display for Tag

source§

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

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

impl Domain for Tag

source§

fn to_u32(&self) -> u32

Converts this value of T to a value in u32. Read more
source§

fn from_u32(member: InDomain) -> Tag

Converts a mapped u32 value back to T. Read more
source§

fn is_continuous() -> bool

Returns true if all u32 values between the mapped u32 min and mapped u32 max value of T are used.
source§

fn ordered_values() -> impl DoubleEndedIterator

Returns an iterator which iterates over all values in the domain of T Read more
source§

fn ordered_values_range(range: RangeInclusive<Tag>) -> impl DoubleEndedIterator

Return an iterator which iterates over all values of T in the given range. Read more
source§

fn count() -> u64

Returns the number of members in the domain.
source§

impl FromStr for Tag

source§

type Err = InvalidTag

The associated error which can be returned from parsing.
source§

fn from_str(src: &str) -> Result<Tag, <Tag as FromStr>::Err>

Parses a string s to return a value of this type. Read more
source§

impl Hash for Tag

source§

fn hash<__H>(&self, state: &mut __H)
where __H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Ord for Tag

source§

fn cmp(&self, other: &Tag) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq<&[u8]> for Tag

source§

fn eq(&self, other: &&[u8]) -> 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 PartialEq<&str> for Tag

source§

fn eq(&self, other: &&str) -> 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 PartialEq<[u8; 4]> for Tag

source§

fn eq(&self, other: &[u8; 4]) -> 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 PartialEq<str> for Tag

source§

fn eq(&self, other: &str) -> 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 PartialEq for Tag

source§

fn eq(&self, other: &Tag) -> 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 PartialOrd for Tag

source§

fn partial_cmp(&self, other: &Tag) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

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

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

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

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

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

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

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

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
source§

impl Scalar for Tag

source§

type Raw = [u8; 4]

The raw byte representation of this type.
source§

fn to_raw(self) -> <Tag as Scalar>::Raw

Encode this type as raw big-endian bytes
source§

fn from_raw(raw: <Tag as Scalar>::Raw) -> Tag

Create an instance of this type from raw big-endian bytes
source§

fn read(slice: &[u8]) -> Option<Self>

Attempt to read a scalar from a slice. Read more
source§

impl Zeroable for Tag

source§

fn zeroed() -> Self

source§

impl AnyBitPattern for Tag

source§

impl Copy for Tag

source§

impl Eq for Tag

source§

impl StructuralPartialEq for Tag

Auto Trait Implementations§

§

impl Freeze for Tag

§

impl RefUnwindSafe for Tag

§

impl Send for Tag

§

impl Sync for Tag

§

impl Unpin for Tag

§

impl UnwindSafe for Tag

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> CheckedBitPattern for T
where T: AnyBitPattern,

source§

type Bits = T

Self must have the same layout as the specified Bits except for the possible invalid bit patterns being checked during is_valid_bit_pattern.
source§

fn is_valid_bit_pattern(_bits: &T) -> bool

If this function returns true, then it must be valid to reinterpret bits as &Self.
source§

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

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

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

impl<T> FixedSize for T
where T: Scalar,

source§

const RAW_BYTE_LEN: usize = _

The raw size of this type, in bytes. 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> ToString for T
where T: Display + ?Sized,

source§

default 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.