merman-render 0.4.2

Headless layout + SVG renderer for Mermaid (parity-focused; upstream SVG goldens).
Documentation
// This file is generated by `xtask gen-er-text-overrides`.
//
// Mermaid baseline: 11.12.2
// Source: fixtures/upstream-svgs/er/*.svg

#[allow(dead_code)]
fn font_size_key(font_size: f64) -> u16 {
    if !(font_size.is_finite() && font_size > 0.0) {
        return 0;
    }
    let k = (font_size * 100.0).round();
    if !(k.is_finite() && k >= 0.0 && k <= (u16::MAX as f64)) {
        return 0;
    }
    k as u16
}

static HTML_WIDTH_OVERRIDES_PX: &[(u16, &str, f64)] = &[
    (1400, "contains", 52.3125),
    (1400, "has", 20.671875),
    (1400, "hasMany", 52.515625),
    (1400, "insured for", 68.1875),
    (1400, "is teacher of", 78.984375),
    (1400, "leads to", 49.875),
    (1400, "owned by", 59.9375),
    (1400, "owns", 31.25),
    (1400, "parent", 41.4375),
    (1400, "places", 39.53125),
    (1400, "relates", 43.421875),
    (1400, "uses", 26.625),
    (1600, "*id", 19.359375),
    (1600, "*title", 36.578125),
    (1600, "A", 9.4375),
    (1600, "Alias!", 39.484375),
    (1600, "Author ref", 73.75),
    (1600, "B", 9.0625),
    (1600, "BOOK", 39.828125),
    (1600, "Blo@rf", 46.828125),
    (1600, "Book", 34.296875),
    (1600, "C", 9.578125),
    (1600, "CAR", 28.328125),
    (1600, "CUSTOMER", 76.0625),
    (1600, "Customer Alias", 105.484375),
    (1600, "D", 9.8125),
    (1600, "DRIVER", 50.859375),
    (1600, "E", 8.578125),
    (1600, "EMPTY", 47.265625),
    (1600, "ENTITY1", 59.328125),
    (1600, "ENTITY2", 59.328125),
    (1600, "F", 8.40625),
    (1600, "FK", 17.609375),
    (1600, "Generic", 55.71875),
    (1600, "HOUSE", 47.890625),
    (1600, "ISLAND", 49.71875),
    (1600, "LICENSE", 57.171875),
    (1600, "LINE_ITEM", 73.390625),
    (1600, "MAINLAND", 73.015625),
    (1600, "NODE", 39.375),
    (1600, "ORDER", 47.796875),
    (1600, "Order Alias", 78.40625),
    (1600, "PAGE", 35.96875),
    (1600, "PERSON", 55.5),
    (1600, "PK", 18.140625),
    (1600, "PK,FK", 41.625),
    (1600, "POSSESSION", 84.5),
    (1600, "PROJECT", 64.078125),
    (1600, "ROOM", 42.234375),
    (1600, "SPACED", 52.234375),
    (1600, "STUDENT", 65.25),
    (1600, "Short code", 76.5625),
    (1600, "TEACHER", 65.21875),
    (1600, "TEAM_MEMBER", 105.25),
    (1600, "Title", 32.984375),
    (1600, "UK", 19.59375),
    (1600, "author", 47.046875),
    (1600, "author-ref[name](1)", 144.828125),
    (1600, "buzz", 32.84375),
    (1600, "code", 34.15625),
    (1600, "fizz", 25.671875),
    (1600, "generic", 52.9375),
    (1600, "int", 19.65625),
    (1600, "key+comment", 99.96875),
    (1600, "number", 54.625),
    (1600, "string", 40.375),
    (1600, "string[]", 52.125),
    (1600, "title", 30.703125),
    (1600, "type<T>", 57.953125),
    (1600, "varchar(5)", 73.890625),
];

static CALC_TEXT_WIDTH_OVERRIDES_PX: &[(u16, &str, i64)] = &[
    (1600, "*id", 21),
    (1600, "*title", 33),
    (1600, "A", 0),
    (1600, "Alias!", 0),
    (1600, "Author ref", 71),
    (1600, "B", 0),
    (1600, "BOOK", 47),
    (1600, "Blo@rf", 0),
    (1600, "Book", 37),
    (1600, "C", 0),
    (1600, "CAR", 0),
    (1600, "D", 0),
    (1600, "E", 0),
    (1600, "EMPTY", 0),
    (1600, "F", 0),
    (1600, "FK", 22),
    (1600, "Generic", 51),
    (1600, "HOUSE", 0),
    (1600, "ISLAND", 0),
    (1600, "NODE", 0),
    (1600, "ORDER", 0),
    (1600, "PAGE", 42),
    (1600, "PK", 22),
    (1600, "PK,FK", 46),
    (1600, "ROOM", 0),
    (1600, "SPACED", 60),
    (1600, "Short code", 69),
    (1600, "Title", 30),
    (1600, "UK", 25),
    (1600, "author", 42),
    (1600, "author-ref[name](1)", 128),
    (1600, "buzz", 0),
    (1600, "code", 30),
    (1600, "fizz", 0),
    (1600, "generic", 47),
    (1600, "int", 17),
    (1600, "key+comment", 93),
    (1600, "number", 51),
    (1600, "string", 36),
    (1600, "string[]", 47),
    (1600, "title", 26),
    (1600, "type&lt;T&gt;", 93),
    (1600, "varchar(5)", 68),
];

pub fn lookup_html_width_px(font_size: f64, text: &str) -> Option<f64> {
    let fs = font_size_key(font_size);
    if fs == 0 || text.is_empty() {
        return None;
    }
    let mut lo = 0usize;
    let mut hi = HTML_WIDTH_OVERRIDES_PX.len();
    while lo < hi {
        let mid = (lo + hi) / 2;
        let (k_fs, k_text, w) = HTML_WIDTH_OVERRIDES_PX[mid];
        match k_fs.cmp(&fs) {
            std::cmp::Ordering::Equal => match k_text.cmp(text) {
                std::cmp::Ordering::Equal => return Some(w),
                std::cmp::Ordering::Less => lo = mid + 1,
                std::cmp::Ordering::Greater => hi = mid,
            },
            std::cmp::Ordering::Less => lo = mid + 1,
            std::cmp::Ordering::Greater => hi = mid,
        }
    }
    None
}

pub fn lookup_calc_text_width_px(font_size: f64, text: &str) -> Option<i64> {
    let fs = font_size_key(font_size);
    if fs == 0 || text.is_empty() {
        return None;
    }
    let mut lo = 0usize;
    let mut hi = CALC_TEXT_WIDTH_OVERRIDES_PX.len();
    while lo < hi {
        let mid = (lo + hi) / 2;
        let (k_fs, k_text, w) = CALC_TEXT_WIDTH_OVERRIDES_PX[mid];
        match k_fs.cmp(&fs) {
            std::cmp::Ordering::Equal => match k_text.cmp(text) {
                std::cmp::Ordering::Equal => return Some(w),
                std::cmp::Ordering::Less => lo = mid + 1,
                std::cmp::Ordering::Greater => hi = mid,
            },
            std::cmp::Ordering::Less => lo = mid + 1,
            std::cmp::Ordering::Greater => hi = mid,
        }
    }
    None
}

pub fn lookup_entity_drawrect_clamp_to_min_entity_width(label: &str) -> Option<bool> {
    match label {
        "DRIVER" => Some(false),
        _ => None,
    }
}