merman-render 0.8.0

Headless layout + SVG renderer for Mermaid (parity-focused; upstream SVG goldens).
Documentation
// This file is @generated by `cargo run -p xtask -- gen-text-measurement-protocol`.
// Do not edit it directly; edit `contracts/abi/text-measurement-v1.json` instead.

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 },
];