From d3fbcdfa9c9cc5e8fb8eb04daed7c603c6233b25 Mon Sep 17 00:00:00 2001 From: multipleof4 Date: Sun, 9 Nov 2025 09:11:55 -0800 Subject: [PATCH] Feat: Add Candara-inspired R/r --- src/glyphs/R.js | 57 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/glyphs/R.js diff --git a/src/glyphs/R.js b/src/glyphs/R.js new file mode 100644 index 0000000..55a0715 --- /dev/null +++ b/src/glyphs/R.js @@ -0,0 +1,57 @@ +const makeGlyph = (opentype, name, unicode, cmds, adv) => + new opentype.Glyph({ + name, + unicode, + advanceWidth: adv, + path: cmds(new opentype.Path()) + }); + +export const glyphR = (opentype, adv) => + makeGlyph( + opentype, + "R", + "R".codePointAt(0), + (p) => { + p.moveTo(100, 0); + p.lineTo(100, 700); + p.lineTo(340, 700); + p.curveTo(470, 700, 560, 630, 560, 520); + p.curveTo(560, 430, 500, 370, 410, 350); + p.lineTo(560, 0); + p.lineTo(490, 0); + p.lineTo(350, 340); + p.lineTo(160, 340); + p.lineTo(160, 0); + p.close(); + p.moveTo(160, 400); + p.lineTo(340, 400); + p.curveTo(440, 400, 500, 450, 500, 520); + p.curveTo(500, 590, 440, 640, 340, 640); + p.lineTo(160, 640); + p.close(); + return p; + }, + adv + ); + +export const glyphr = (opentype, adv) => + makeGlyph( + opentype, + "r", + "r".codePointAt(0), + (p) => { + p.moveTo(100, 0); + p.lineTo(100, 480); + p.lineTo(160, 480); + p.lineTo(160, 420); + p.curveTo(190, 460, 240, 490, 300, 490); + p.curveTo(340, 490, 370, 480, 400, 460); + p.lineTo(380, 400); + p.curveTo(360, 410, 340, 420, 310, 420); + p.curveTo(230, 420, 160, 370, 160, 280); + p.lineTo(160, 0); + p.close(); + return p; + }, + adv + );