MoonBit port of Fontations skrifa (font parsing, metrics, color/bitmap glyph helpers).
{
"import": [
"moonbitlang/core/prelude",
"moonbitlang/core/bytes",
{ "path": "Milky2018/moon_skrifa", "alias": "moon_skrifa" },
{ "path": "Milky2018/moon_skrifa/outline", "alias": "moon_skrifa_outline" }
]
}let font = @moon_skrifa.FontRef::new(font_bytes).unwrap()
let outlines = @moon_skrifa_outline.OutlineGlyphCollection::from_font(font)let axes = font.axes()
let settings : Array[@moon_skrifa.VariationSetting] = Array::from_fixed_array([
@moon_skrifa.Setting::new(@moon_skrifa.Tag::from_str("wght").unwrap(), 700.0),
])
let loc = axes.location(settings.op_as_view()).as_ref()let cmap = font.charmap().unwrap()
let gid = cmap.glyph_id(0x41).unwrap() // 'A'let family = font.localized_strings(@moon_skrifa.STRING_ID_FAMILY_NAME)
match family.english_or_first() {
None => ()
Some(s) => {
let lang = s.language() // Option[String]
let value = s.to_string()
// ...
}
}let fm = font.metrics(@moon_skrifa.Size::new(16.0), @moon_skrifa.LocationRef::default())
let gm = font.glyph_metrics(@moon_skrifa.Size::unscaled(), @moon_skrifa.LocationRef::default())
let aw = gm.advance_width(gid).unwrap()
let lsb = gm.left_side_bearing(gid).unwrap()
let bounds = gm.bounds(gid) // Option[GlyphBounds]let strikes = font.bitmap_strikes()
for i in 0..<strikes.len() {
let strike = strikes.get(i).unwrap()
let bmp = strike.get(gid)
// BitmapGlyph has format/data/ppem/origin/width/height
}let loc = @moon_skrifa.LocationRef::default()
try! font.paint_colr_v1_at(gid, loc, painter) |> ignorelet gid = 1
let settings =
@moon_skrifa_outline.DrawSettings::unhinted(
@moon_skrifa.Size::new(16.0),
@moon_skrifa.LocationRef::default(),
)
let svg = outlines.svg_path(gid, settings).unwrap()
let path = outlines.path(gid, settings).unwrap()let outlines0 = @moon_skrifa_outline.OutlineGlyphCollection::from_font(font)
let hinter =
@moon_skrifa_outline.HintingInstance::new(
outlines0,
@moon_skrifa.Size::new(16.0),
@moon_skrifa.LocationRef::default(),
@moon_skrifa_outline.HintingOptions::default(),
).unwrap()
let settings = @moon_skrifa_outline.DrawSettings::hinted(hinter, false)
let svg = outlines.svg_path(gid, settings).unwrap()type NormalizedCoord = Inttype StringId = UInt16pub(open) trait MetadataProvider {
attributes(Self) -> Attributes
axes(Self) -> AxisCollection
named_instances(Self) -> NamedInstanceCollection
localized_strings(Self, UInt16) -> LocalizedStrings
glyph_names(Self) -> GlyphNames
metrics(Self, Size, LocationRef) -> Metrics
glyph_metrics(Self, Size, LocationRef) -> GlyphMetrics
charmap(Self) -> Charmap
outline_glyphs(Self) -> OutlineGlyphCollection
bitmap_strikes(Self) -> BitmapStrikes
color_glyphs(Self) -> ColorGlyphCollection
color_palettes(Self) -> ColorPalettes
}impl MetadataProvider for FontReflet STRING_ID_COMPATIBLE_FULL_NAME : UInt16let STRING_ID_DARK_BACKGROUND_PALETTE : UInt16let STRING_ID_LAST_ALLOWED_NAME_ID : UInt16let STRING_ID_LAST_RESERVED_NAME_ID : UInt16let STRING_ID_LIGHT_BACKGROUND_PALETTE : UInt16let STRING_ID_POSTSCRIPT_CID_NAME : UInt16let STRING_ID_TYPOGRAPHIC_FAMILY_NAME : UInt16let STRING_ID_TYPOGRAPHIC_SUBFAMILY_NAME : UInt16let STRING_ID_VARIATIONS_POSTSCRIPT_NAME_PREFIX : UInt16MoonBit port of Fontations skrifa (font parsing, metrics, color/bitmap glyph helpers).