Registry / RepositoryTypeScriptRustPython
Rollpie
ReadmeFiles
Versions
Info
Download
0.2.0579.9 KB2026-09-150.1.1576.6 KB2026-09-12
Version
0.1.1
Copyright
Rollpie, Irohabook
Publisher
math
Published
2026-09-12
Size
576.6 KB
Downloads
4
Checksum
8e0181e42f4abdc9f91c1ff48b058761bf1940be8d2d4747e5e74bd3014f4322
Dependencies
None

wide.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
//! 横に伸びる字形が、どこまで伸びられるかを見る

use suki::font;

fn main() {
    let loaded = font::load(std::fs::read("font/latinmodern-math.otf").unwrap()).unwrap();
    let units = font::units_per_em(&loaded);

    for (name, character) in [
        ("\u{20d7} 右矢印の印", '\u{20d7}'),
        ("\u{23de} 上の波括弧", '\u{23de}'),
        ("\u{302} ハット", '\u{302}'),
        ("\u{303} チルダ", '\u{303}'),
        ("\u{27f6} 長い右矢印", '\u{27f6}'),
        ("\u{2192} 右矢印", '\u{2192}'),
    ] {
        let Some(glyph) = font::glyph_of(&loaded, character) else {
            println!("{name}: 持っていない");
            continue;
        };

        print!("{name} 字形 {glyph} 送り {:.3}", font::advance(&loaded, glyph));

        match font::horizontal_growth(&loaded, glyph) {
            Some(growth) => {
                println!(" 変種 {} 個 部品 {} 個", growth.variant.len(), growth.part.len());

                for variant in &growth.variant {
                    println!("    変種 {} 長さ {:.3}", variant.glyph, variant.measure);
                }

                for part in &growth.part {
                    println!(
                        "    部品 {} 全長 {:.3} 端 {:.3}/{:.3} 伸ばせる {}",
                        part.glyph, part.full_advance, part.start_connector,
                        part.end_connector, part.extender
                    );
                }
            }
            None => println!(" 横に伸ばせない"),
        }
    }

    for text in ["AB", "xyz", "abc"] {
        let width: f64 = text
            .chars()
            .filter_map(suki::symbol::italic)
            .filter_map(|c| font::glyph_of(&loaded, c))
            .map(|g| font::advance(&loaded, g))
            .sum();
        println!("{text} の幅 {width:.3}  (1em = {units})");
    }
}