pub const TEXT_MEASUREMENT_PROTOCOL_VERSION: u32 = 1;
#[repr(i32)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum TextMeasurementResultKind {
Metrics = 0,
Length = 1,
HorizontalExtents = 2,
WrappedWithRawWidth = 3,
}
impl TextMeasurementResultKind {
pub const ALL: [Self; 4] = [
Self::Metrics,
Self::Length,
Self::HorizontalExtents,
Self::WrappedWithRawWidth,
];
pub const fn external_code(self) -> i32 {
self as i32
}
pub const fn external_name(self) -> &'static str {
TEXT_MEASUREMENT_RESULT_KIND_NAMES[self as usize]
}
pub const fn from_external_code(code: i32) -> Option<Self> {
if code >= 0 && (code as usize) < Self::ALL.len() {
Some(Self::ALL[code as usize])
} else {
None
}
}
pub fn from_external_name(name: &str) -> Option<Self> {
Self::ALL.into_iter().find(|kind| kind.external_name() == name)
}
pub const fn expected_for_operation(operation: TextMeasurementOperation) -> Self {
operation.required_result_kind()
}
}
const TEXT_MEASUREMENT_RESULT_KIND_NAMES: [&str; 4] = [
"metrics",
"length",
"horizontal-extents",
"wrapped-with-raw-width",
];
#[repr(i32)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum TextMeasurementOperation {
Measure = 0,
ComputedLength = 1,
BBoxX = 2,
BBoxXWithAsciiOverhang = 3,
TitleBBoxX = 4,
SimpleBBoxWidth = 5,
RawBBoxWidth = 6,
TspanBBoxWidth = 7,
TspanBBoxHeight = 8,
WrapProbeBBoxWidth = 9,
SimpleBBoxHeight = 10,
Wrapped = 11,
WrappedWithRawWidth = 12,
BoundingClientRectWidth = 13,
CreateTextBBoxYOffset = 14,
MermaidCalculateTextDimensions = 15,
CanvasMeasureTextWidth = 16,
CreateTextMiddleBBoxYOffset = 17,
RawBBoxHeight = 18,
}
impl TextMeasurementOperation {
pub const ALL: [Self; 19] = [
Self::Measure,
Self::ComputedLength,
Self::BBoxX,
Self::BBoxXWithAsciiOverhang,
Self::TitleBBoxX,
Self::SimpleBBoxWidth,
Self::RawBBoxWidth,
Self::TspanBBoxWidth,
Self::TspanBBoxHeight,
Self::WrapProbeBBoxWidth,
Self::SimpleBBoxHeight,
Self::Wrapped,
Self::WrappedWithRawWidth,
Self::BoundingClientRectWidth,
Self::CreateTextBBoxYOffset,
Self::MermaidCalculateTextDimensions,
Self::CanvasMeasureTextWidth,
Self::CreateTextMiddleBBoxYOffset,
Self::RawBBoxHeight,
];
pub(crate) const fn index(self) -> usize {
self as usize
}
pub const fn external_code(self) -> i32 {
self as i32
}
pub const fn external_name(self) -> &'static str {
TEXT_MEASUREMENT_OPERATION_DESCRIPTORS[self as usize].external_name
}
pub const fn required_result_kind(self) -> TextMeasurementResultKind {
TEXT_MEASUREMENT_OPERATION_DESCRIPTORS[self as usize].result_kind
}
pub const fn accepts_signed_length(self) -> bool {
TEXT_MEASUREMENT_OPERATION_DESCRIPTORS[self as usize].accepts_signed_length
}
pub const fn from_external_code(code: i32) -> Option<Self> {
if code >= 0 && (code as usize) < Self::ALL.len() {
Some(Self::ALL[code as usize])
} else {
None
}
}
pub fn from_external_name(name: &str) -> Option<Self> {
Self::ALL.into_iter().find(|operation| operation.external_name() == name)
}
}
struct TextMeasurementOperationDescriptor {
external_name: &'static str,
result_kind: TextMeasurementResultKind,
accepts_signed_length: bool,
}
const TEXT_MEASUREMENT_OPERATION_DESCRIPTORS: [TextMeasurementOperationDescriptor; 19] = [
TextMeasurementOperationDescriptor { external_name: "measure", result_kind: TextMeasurementResultKind::Metrics, accepts_signed_length: false },
TextMeasurementOperationDescriptor { external_name: "computed-length", result_kind: TextMeasurementResultKind::Length, accepts_signed_length: false },
TextMeasurementOperationDescriptor { external_name: "bbox-x", result_kind: TextMeasurementResultKind::HorizontalExtents, accepts_signed_length: false },
TextMeasurementOperationDescriptor { external_name: "bbox-x-with-ascii-overhang", result_kind: TextMeasurementResultKind::HorizontalExtents, accepts_signed_length: false },
TextMeasurementOperationDescriptor { external_name: "title-bbox-x", result_kind: TextMeasurementResultKind::HorizontalExtents, accepts_signed_length: false },
TextMeasurementOperationDescriptor { external_name: "simple-bbox-width", result_kind: TextMeasurementResultKind::Length, accepts_signed_length: false },
TextMeasurementOperationDescriptor { external_name: "raw-bbox-width", result_kind: TextMeasurementResultKind::Length, accepts_signed_length: false },
TextMeasurementOperationDescriptor { external_name: "tspan-bbox-width", result_kind: TextMeasurementResultKind::Length, accepts_signed_length: false },
TextMeasurementOperationDescriptor { external_name: "tspan-bbox-height", result_kind: TextMeasurementResultKind::Length, accepts_signed_length: false },
TextMeasurementOperationDescriptor { external_name: "wrap-probe-bbox-width", result_kind: TextMeasurementResultKind::Length, accepts_signed_length: false },
TextMeasurementOperationDescriptor { external_name: "simple-bbox-height", result_kind: TextMeasurementResultKind::Length, accepts_signed_length: false },
TextMeasurementOperationDescriptor { external_name: "wrapped", result_kind: TextMeasurementResultKind::Metrics, accepts_signed_length: false },
TextMeasurementOperationDescriptor { external_name: "wrapped-with-raw-width", result_kind: TextMeasurementResultKind::WrappedWithRawWidth, accepts_signed_length: false },
TextMeasurementOperationDescriptor { external_name: "bounding-client-rect-width", result_kind: TextMeasurementResultKind::Length, accepts_signed_length: false },
TextMeasurementOperationDescriptor { external_name: "create-text-bbox-y-offset", result_kind: TextMeasurementResultKind::Length, accepts_signed_length: true },
TextMeasurementOperationDescriptor { external_name: "mermaid-calculate-text-dimensions", result_kind: TextMeasurementResultKind::Metrics, accepts_signed_length: false },
TextMeasurementOperationDescriptor { external_name: "canvas-measure-text-width", result_kind: TextMeasurementResultKind::Length, accepts_signed_length: false },
TextMeasurementOperationDescriptor { external_name: "create-text-middle-bbox-y-offset", result_kind: TextMeasurementResultKind::Length, accepts_signed_length: true },
TextMeasurementOperationDescriptor { external_name: "raw-bbox-height", result_kind: TextMeasurementResultKind::Length, accepts_signed_length: false },
];