Files
afilmory/scripts/svg-text-renderer.ts
Innei 0fb4cd4c8e feat: enhance font glyph extraction and SVG text rendering
- Added additional characters ('\', '~', '`', "'", '{', '}') to the CHARACTERS array in extract-font-glyphs.ts.
- Updated the font path in extract-font-glyphs.ts to use SF-Pro-Display-Medium.ttf.
- Made adjustments to the character paths and dimensions in svg-text-renderer.ts for improved rendering accuracy.

Signed-off-by: Innei <tukon479@gmail.com>
2025-06-05 18:11:06 +08:00

677 lines
44 KiB
TypeScript

// SVG 文本渲染器 - 基于真实 Helvetica 字体提取的字形
// 自动生成,请勿手动编辑
interface CharacterPath {
path: string
width: number
height: number
advanceWidth: number
}
const HELVETICA_CHARACTERS: Record<string, CharacterPath> = {
'0': {
path: 'M 31.2 101.2 L 31.2 101.2 Q 18.6 101.2 11.5 91.4 Q 4.3 81.6 4.3 64.8 L 4.3 64.8 L 4.3 64.7 Q 4.3 47.9 11.5 38.1 Q 18.6 28.4 31.2 28.4 L 31.2 28.4 Q 43.8 28.4 50.9 38.1 Q 58.1 47.9 58.1 64.7 L 58.1 64.7 L 58.1 64.8 Q 58.1 81.6 50.9 91.4 Q 43.8 101.2 31.2 101.2 Z M 31.2 92.0 L 31.2 92.0 Q 38.7 92.0 42.9 84.8 Q 47.1 77.5 47.1 64.8 L 47.1 64.8 L 47.1 64.7 Q 47.1 52.0 42.9 44.8 Q 38.7 37.5 31.2 37.5 L 31.2 37.5 Q 23.7 37.5 19.5 44.8 Q 15.3 52.0 15.3 64.7 L 15.3 64.7 L 15.3 64.8 Q 15.3 77.5 19.5 84.8 Q 23.7 92.0 31.2 92.0 Z',
width: 62.4,
height: 100,
advanceWidth: 62.4,
},
'1': {
path: 'M 34.0 100.0 L 23.3 100.0 L 23.3 40.4 L 23.0 40.4 L 4.6 53.1 L 4.6 42.7 L 23.2 29.5 L 34.0 29.5 L 34.0 100.0 Z',
width: 45.7,
height: 100,
advanceWidth: 45.7,
},
'2': {
path: 'M 53.7 100.0 L 5.5 100.0 L 5.5 92.5 L 30.3 67.5 Q 37.2 60.6 39.5 56.9 Q 41.7 53.1 41.7 49.0 L 41.7 49.0 L 41.7 48.9 Q 41.7 43.8 38.3 40.6 Q 34.8 37.4 29.5 37.4 L 29.5 37.4 Q 23.3 37.4 19.3 41.0 Q 15.3 44.7 15.2 50.1 L 15.2 50.1 L 15.2 50.4 L 4.9 50.4 L 4.9 50.1 Q 4.9 40.7 11.9 34.5 Q 18.9 28.4 29.3 28.4 L 29.3 28.4 Q 39.5 28.4 46.0 34.0 Q 52.5 39.6 52.5 48.2 L 52.5 48.2 L 52.5 48.3 Q 52.5 54.3 49.1 59.7 Q 45.7 65.1 36.1 74.6 L 36.1 74.6 L 20.1 90.3 L 20.1 90.8 L 53.7 90.8 L 53.7 100.0 Z',
width: 57.9,
height: 100,
advanceWidth: 57.9,
},
'3': {
path: 'M 30.1 101.2 L 30.1 101.2 Q 18.9 101.2 12.0 95.7 Q 5.0 90.2 4.2 81.5 L 4.2 81.5 L 4.2 80.9 L 14.7 80.9 L 14.7 81.4 Q 15.3 86.1 19.4 89.1 Q 23.6 92.0 30.1 92.0 L 30.1 92.0 Q 36.5 92.0 40.5 88.8 Q 44.5 85.5 44.5 80.4 L 44.5 80.4 L 44.5 80.3 Q 44.5 74.4 40.5 71.2 Q 36.4 67.9 29.3 67.9 L 29.3 67.9 L 20.8 67.9 L 20.8 59.4 L 29.0 59.4 Q 35.0 59.4 38.8 56.3 Q 42.5 53.1 42.5 48.1 L 42.5 48.1 L 42.5 48.0 Q 42.5 43.0 39.2 40.1 Q 35.9 37.3 30.0 37.3 L 30.0 37.3 Q 24.1 37.3 20.3 40.2 Q 16.5 43.1 16.0 47.9 L 16.0 47.9 L 16.0 48.4 L 5.7 48.4 L 5.8 47.9 Q 6.6 39.0 13.1 33.7 Q 19.7 28.4 30.0 28.4 L 30.0 28.4 Q 40.4 28.4 46.8 33.4 Q 53.2 38.5 53.2 46.6 L 53.2 46.6 L 53.2 46.7 Q 53.2 53.1 49.1 57.4 Q 45.0 61.7 38.3 63.1 L 38.3 63.1 L 38.3 63.4 Q 46.2 64.1 50.9 68.6 Q 55.6 73.1 55.6 80.4 L 55.6 80.4 L 55.6 80.5 Q 55.6 89.6 48.4 95.4 Q 41.3 101.2 30.1 101.2 Z',
width: 60.5,
height: 100,
advanceWidth: 60.5,
},
'4': {
path: 'M 49.5 100.0 L 39.0 100.0 L 39.0 86.0 L 3.7 86.0 L 3.7 76.5 L 33.6 29.5 L 49.5 29.5 L 49.5 76.8 L 59.2 76.8 L 59.2 86.0 L 49.5 86.0 L 49.5 100.0 Z M 13.9 76.7 L 13.9 77.0 L 39.1 77.0 L 39.1 38.2 L 38.8 38.2 L 13.9 76.7 Z',
width: 62,
height: 100,
advanceWidth: 62,
},
'5': {
path: 'M 30.7 101.2 L 30.7 101.2 Q 20.2 101.2 13.4 95.5 Q 6.5 89.8 5.8 81.0 L 5.8 81.0 L 5.7 80.4 L 16.2 80.4 L 16.2 80.8 Q 16.9 85.6 20.9 88.8 Q 25.0 92.0 30.8 92.0 L 30.8 92.0 Q 37.4 92.0 41.6 87.9 Q 45.8 83.7 45.8 77.1 L 45.8 77.1 L 45.8 77.1 Q 45.8 70.6 41.6 66.4 Q 37.4 62.3 30.9 62.3 L 30.9 62.3 Q 24.2 62.3 19.9 66.1 L 19.9 66.1 Q 18.0 67.8 16.6 70.2 L 16.6 70.2 L 7.0 70.2 L 10.4 29.5 L 52.4 29.5 L 52.4 38.8 L 19.3 38.8 L 17.1 61.1 L 17.4 61.1 Q 19.8 57.5 24.0 55.6 Q 28.1 53.7 33.3 53.7 L 33.3 53.7 Q 43.5 53.7 50.0 60.2 Q 56.5 66.7 56.5 76.9 L 56.5 76.9 L 56.5 77.0 Q 56.5 87.6 49.3 94.4 Q 42.1 101.2 30.7 101.2 Z',
width: 60,
height: 100,
advanceWidth: 60,
},
'6': {
path: 'M 32.0 101.2 L 32.0 101.2 Q 27.5 101.2 23.6 100.0 Q 19.6 98.7 16.0 96.0 Q 12.5 93.3 9.9 89.2 Q 7.3 85.2 5.8 79.2 Q 4.3 73.2 4.3 65.8 L 4.3 65.8 L 4.3 65.7 Q 4.3 48.1 11.7 38.3 Q 19.2 28.4 32.4 28.4 L 32.4 28.4 Q 41.7 28.4 48.3 33.2 Q 54.9 38.1 56.6 46.0 L 56.6 46.0 L 56.8 46.6 L 45.8 46.6 L 45.7 46.1 Q 44.1 42.1 40.7 39.8 Q 37.3 37.5 32.3 37.5 L 32.3 37.5 Q 27.9 37.5 24.6 39.6 Q 21.2 41.6 19.2 45.1 Q 17.1 48.7 16.1 53.2 Q 15.0 57.8 14.8 63.2 L 14.8 63.2 Q 14.8 63.8 14.8 65.1 L 14.8 65.1 L 15.0 65.1 Q 17.2 60.1 22.4 56.9 Q 27.6 53.8 34.5 53.8 L 34.5 53.8 Q 44.6 53.8 51.2 60.3 Q 57.7 66.9 57.7 76.9 L 57.7 76.9 L 57.7 77.0 Q 57.7 87.5 50.4 94.4 Q 43.1 101.2 32.0 101.2 Z M 16.9 77.0 L 16.9 77.1 Q 16.9 83.3 21.3 87.6 Q 25.6 92.0 31.8 92.0 Q 38.1 92.0 42.5 87.7 Q 46.8 83.4 46.8 77.3 L 46.8 77.3 L 46.8 77.2 Q 46.8 70.8 42.6 66.7 Q 38.4 62.6 32.0 62.6 Q 25.5 62.6 21.2 66.7 Q 16.9 70.8 16.9 77.0 L 16.9 77.0 Z',
width: 63,
height: 100,
advanceWidth: 63,
},
'7': {
path: 'M 20.8 100.0 L 9.4 100.0 L 40.7 39.0 L 40.7 38.8 L 3.5 38.8 L 3.5 29.5 L 51.5 29.5 L 51.5 39.0 L 20.8 100.0 Z',
width: 55.6,
height: 100,
advanceWidth: 55.6,
},
'8': {
path: 'M 50.0 95.5 Q 42.6 101.2 30.9 101.2 Q 19.1 101.2 11.7 95.5 Q 4.2 89.8 4.2 80.9 L 4.2 80.9 L 4.2 80.8 Q 4.2 74.2 8.6 69.3 Q 12.9 64.4 19.8 62.9 L 19.8 62.9 L 19.8 62.6 Q 13.9 60.9 10.4 56.8 Q 6.8 52.6 6.8 47.1 L 6.8 47.1 L 6.8 47.0 Q 6.8 38.9 13.6 33.6 Q 20.4 28.4 30.9 28.4 Q 41.4 28.4 48.1 33.6 Q 54.9 38.9 54.9 47.0 L 54.9 47.0 L 54.9 47.1 Q 54.9 52.6 51.4 56.8 Q 47.9 60.9 41.9 62.6 L 41.9 62.6 L 41.9 62.9 Q 48.9 64.4 53.2 69.3 Q 57.5 74.2 57.5 80.8 L 57.5 80.8 L 57.5 80.9 Q 57.5 89.8 50.0 95.5 Z M 21.3 55.9 Q 25.0 59.0 30.9 59.0 Q 36.7 59.0 40.4 55.9 Q 44.1 52.9 44.1 48.0 L 44.1 48.0 L 44.1 47.9 Q 44.1 43.1 40.4 40.1 Q 36.7 37.0 30.9 37.0 Q 25.0 37.0 21.3 40.1 Q 17.7 43.1 17.7 47.9 L 17.7 47.9 L 17.7 48.0 Q 17.7 52.9 21.3 55.9 Z M 19.8 89.0 Q 24.1 92.4 30.9 92.4 Q 37.6 92.4 41.9 89.0 Q 46.2 85.5 46.2 80.2 L 46.2 80.2 L 46.2 80.1 Q 46.2 74.7 41.9 71.2 Q 37.6 67.7 30.9 67.7 Q 24.1 67.7 19.8 71.2 Q 15.5 74.7 15.5 80.1 L 15.5 80.1 L 15.5 80.2 Q 15.5 85.5 19.8 89.0 Z',
width: 61.7,
height: 100,
advanceWidth: 61.7,
},
'9': {
path: 'M 31.0 28.4 L 31.0 28.4 Q 35.4 28.4 39.4 29.6 Q 43.4 30.8 47.0 33.5 Q 50.5 36.3 53.1 40.3 Q 55.7 44.3 57.2 50.3 Q 58.7 56.3 58.7 63.7 L 58.7 63.7 L 58.7 63.8 Q 58.7 81.4 51.2 91.3 Q 43.8 101.2 30.6 101.2 L 30.6 101.2 Q 21.2 101.2 14.6 96.3 Q 8.1 91.5 6.3 83.5 L 6.3 83.5 L 6.2 82.9 L 17.1 82.9 L 17.3 83.4 Q 18.8 87.5 22.3 89.7 Q 25.7 92.0 30.7 92.0 L 30.7 92.0 Q 35.1 92.0 38.4 90.0 Q 41.7 88.0 43.8 84.4 Q 45.8 80.8 46.9 76.3 Q 48.0 71.8 48.1 66.4 L 48.1 66.4 Q 48.2 65.7 48.2 64.5 L 48.2 64.5 L 47.9 64.5 Q 45.8 69.4 40.6 72.6 Q 35.4 75.8 28.5 75.8 L 28.5 75.8 Q 18.4 75.8 11.8 69.2 Q 5.2 62.6 5.2 52.6 L 5.2 52.6 L 5.2 52.5 Q 5.2 42.0 12.5 35.2 Q 19.8 28.4 31.0 28.4 Z M 31.0 66.9 L 31.0 66.9 Q 37.5 66.9 41.7 62.8 Q 46.0 58.8 46.0 52.5 L 46.0 52.5 L 46.0 52.5 Q 46.0 46.2 41.7 41.9 Q 37.4 37.5 31.1 37.5 L 31.1 37.5 Q 24.9 37.5 20.5 41.8 Q 16.1 46.1 16.1 52.2 L 16.1 52.2 L 16.1 52.3 Q 16.1 58.7 20.3 62.8 Q 24.5 66.9 31.0 66.9 Z',
width: 63,
height: 100,
advanceWidth: 63,
},
A: {
path: 'M 12.7 100.0 L 1.3 100.0 L 26.9 29.5 L 38.7 29.5 L 64.3 100.0 L 52.8 100.0 L 46.4 81.0 L 19.2 81.0 L 12.7 100.0 Z M 32.9 41.2 L 32.7 41.2 L 22.2 72.2 L 43.4 72.2 L 32.9 41.2 Z',
width: 65.6,
height: 100,
advanceWidth: 65.6,
},
B: {
path: 'M 34.8 100.0 L 6.5 100.0 L 6.5 29.5 L 34.6 29.5 Q 44.0 29.5 49.7 34.4 Q 55.3 39.2 55.3 47.2 L 55.3 47.2 L 55.3 47.3 Q 55.3 52.9 51.6 57.4 Q 47.8 61.9 42.3 62.6 L 42.3 62.6 L 42.3 62.8 Q 49.8 63.6 54.3 68.3 Q 58.8 73.0 58.8 80.0 L 58.8 80.0 L 58.8 80.1 Q 58.8 89.4 52.4 94.7 Q 46.0 100.0 34.8 100.0 L 34.8 100.0 Z M 32.0 38.5 L 32.0 38.5 L 17.4 38.5 L 17.4 59.6 L 29.5 59.6 Q 36.8 59.6 40.6 56.7 Q 44.4 53.9 44.4 48.6 L 44.4 48.6 L 44.4 48.5 Q 44.4 43.7 41.2 41.1 Q 37.9 38.5 32.0 38.5 Z M 31.8 68.0 L 31.8 68.0 L 17.4 68.0 L 17.4 91.1 L 32.5 91.1 Q 39.9 91.1 43.8 88.1 Q 47.6 85.2 47.6 79.6 L 47.6 79.6 L 47.6 79.5 Q 47.6 68.0 31.8 68.0 Z',
width: 61.7,
height: 100,
advanceWidth: 61.7,
},
C: {
path: 'M 36.6 101.2 L 36.6 101.2 Q 21.6 101.2 12.8 91.3 Q 4.0 81.5 4.0 64.7 L 4.0 64.7 L 4.0 64.7 Q 4.0 47.9 12.8 38.2 Q 21.6 28.4 36.6 28.4 L 36.6 28.4 Q 48.2 28.4 56.3 34.9 Q 64.4 41.4 66.0 51.9 L 66.0 51.9 L 66.1 52.3 L 55.3 52.3 L 55.0 51.3 Q 53.2 45.1 48.4 41.6 Q 43.7 38.0 36.6 38.0 L 36.6 38.0 Q 26.8 38.0 21.0 45.3 Q 15.1 52.5 15.1 64.7 L 15.1 64.7 L 15.1 64.7 Q 15.1 77.0 21.0 84.2 Q 26.9 91.5 36.6 91.5 L 36.6 91.5 Q 43.7 91.5 48.4 87.9 Q 53.1 84.4 55.1 77.7 L 55.1 77.7 L 55.3 77.2 L 66.1 77.2 L 66.1 77.7 Q 64.4 88.3 56.3 94.7 Q 48.3 101.2 36.6 101.2 Z',
width: 69.5,
height: 100,
advanceWidth: 69.5,
},
D: {
path: 'M 31.3 100.0 L 6.5 100.0 L 6.5 29.5 L 31.3 29.5 Q 47.1 29.5 55.9 38.7 Q 64.7 47.9 64.7 64.6 L 64.7 64.6 L 64.7 64.6 Q 64.7 81.3 55.9 90.7 Q 47.1 100.0 31.3 100.0 L 31.3 100.0 Z M 17.4 39.0 L 17.4 90.5 L 30.3 90.5 Q 41.6 90.5 47.5 83.9 Q 53.5 77.2 53.5 64.7 L 53.5 64.7 L 53.5 64.6 Q 53.5 52.2 47.5 45.6 Q 41.5 39.0 30.3 39.0 L 30.3 39.0 L 17.4 39.0 Z',
width: 68.7,
height: 100,
advanceWidth: 68.7,
},
E: {
path: 'M 51.2 100.0 L 6.5 100.0 L 6.5 29.5 L 51.2 29.5 L 51.2 39.0 L 17.4 39.0 L 17.4 59.5 L 49.4 59.5 L 49.4 68.7 L 17.4 68.7 L 17.4 90.6 L 51.2 90.6 L 51.2 100.0 Z',
width: 56,
height: 100,
advanceWidth: 56,
},
F: {
path: 'M 17.4 100.0 L 6.5 100.0 L 6.5 29.5 L 50.5 29.5 L 50.5 39.0 L 17.4 39.0 L 17.4 61.3 L 47.7 61.3 L 47.7 70.5 L 17.4 70.5 L 17.4 100.0 Z',
width: 53.5,
height: 100,
advanceWidth: 53.5,
},
G: {
path: 'M 36.8 101.2 L 36.8 101.2 Q 21.7 101.2 12.8 91.3 Q 4.0 81.4 4.0 64.5 L 4.0 64.5 L 4.0 64.4 Q 4.0 47.8 12.8 38.1 Q 21.6 28.4 36.7 28.4 L 36.7 28.4 Q 48.6 28.4 56.4 34.5 Q 64.2 40.7 66.5 50.6 L 66.5 50.6 L 66.7 51.5 L 55.4 51.5 L 55.3 50.9 Q 53.0 44.7 48.3 41.4 Q 43.5 38.0 36.7 38.0 L 36.7 38.0 Q 26.6 38.0 20.8 45.0 Q 15.1 52.0 15.1 64.4 L 15.1 64.4 L 15.1 64.4 Q 15.1 77.0 20.9 84.3 Q 26.8 91.5 36.9 91.5 L 36.9 91.5 Q 45.5 91.5 50.9 86.5 Q 56.3 81.6 56.4 73.6 L 56.4 73.6 L 56.4 72.4 L 37.9 72.4 L 37.9 63.5 L 67.2 63.5 L 67.2 70.7 Q 67.2 85.0 59.2 93.1 Q 51.1 101.2 36.8 101.2 Z',
width: 71.4,
height: 100,
advanceWidth: 71.4,
},
H: {
path: 'M 17.4 100.0 L 6.5 100.0 L 6.5 29.5 L 17.4 29.5 L 17.4 59.3 L 53.6 59.3 L 53.6 29.5 L 64.6 29.5 L 64.6 100.0 L 53.6 100.0 L 53.6 68.8 L 17.4 68.8 L 17.4 100.0 Z',
width: 71,
height: 100,
advanceWidth: 71,
},
I: {
path: 'M 17.4 100.0 L 6.5 100.0 L 6.5 29.5 L 17.4 29.5 L 17.4 100.0 Z',
width: 23.9,
height: 100,
advanceWidth: 23.9,
},
J: {
path: 'M 23.1 101.2 L 23.1 101.2 Q 13.6 101.2 8.0 95.9 Q 2.3 90.6 1.9 82.0 L 1.9 82.0 L 1.9 81.4 L 12.6 81.4 L 12.7 81.8 Q 13.0 86.1 15.7 88.7 Q 18.4 91.4 23.0 91.4 L 23.0 91.4 Q 28.5 91.4 31.3 88.3 Q 34.2 85.1 34.2 79.1 L 34.2 79.1 L 34.2 29.5 L 45.1 29.5 L 45.1 79.2 Q 45.1 89.6 39.3 95.4 Q 33.5 101.2 23.1 101.2 Z',
width: 51.8,
height: 100,
advanceWidth: 51.8,
},
K: {
path: 'M 17.4 100.0 L 6.5 100.0 L 6.5 29.5 L 17.4 29.5 L 17.4 63.3 L 17.7 63.3 L 46.1 29.5 L 59.1 29.5 L 32.4 60.7 L 61.4 100.0 L 47.9 100.0 L 24.6 68.2 L 17.4 76.5 L 17.4 100.0 Z',
width: 62,
height: 100,
advanceWidth: 62,
},
L: {
path: 'M 50.2 100.0 L 6.5 100.0 L 6.5 29.5 L 17.4 29.5 L 17.4 90.6 L 50.2 90.6 L 50.2 100.0 Z',
width: 53.1,
height: 100,
advanceWidth: 53.1,
},
M: {
path: 'M 16.5 100.0 L 6.5 100.0 L 6.5 29.5 L 19.1 29.5 L 41.9 85.8 L 42.2 85.8 L 65.1 29.5 L 77.7 29.5 L 77.7 100.0 L 67.7 100.0 L 67.7 48.0 L 67.4 48.0 L 46.1 100.0 L 38.0 100.0 L 16.8 48.0 L 16.5 48.0 L 16.5 100.0 Z',
width: 84.2,
height: 100,
advanceWidth: 84.2,
},
N: {
path: 'M 17.3 100.0 L 6.5 100.0 L 6.5 29.5 L 16.6 29.5 L 52.8 81.6 L 53.1 81.6 L 53.1 29.5 L 64.0 29.5 L 64.0 100.0 L 53.9 100.0 L 17.6 47.8 L 17.3 47.8 L 17.3 100.0 Z',
width: 70.5,
height: 100,
advanceWidth: 70.5,
},
O: {
path: 'M 61.1 91.4 Q 52.2 101.2 37.0 101.2 Q 21.7 101.2 12.8 91.4 Q 4.0 81.6 4.0 64.8 L 4.0 64.8 L 4.0 64.7 Q 4.0 47.9 12.9 38.2 Q 21.8 28.4 37.0 28.4 L 37.0 28.4 Q 52.2 28.4 61.1 38.2 Q 70.0 47.9 70.0 64.7 L 70.0 64.7 L 70.0 64.8 Q 70.0 81.6 61.1 91.4 Z M 37.0 91.5 L 37.0 91.5 Q 47.1 91.5 52.9 84.3 Q 58.8 77.1 58.8 64.8 L 58.8 64.8 L 58.8 64.7 Q 58.8 52.4 52.9 45.2 Q 47.0 38.0 37.0 38.0 L 37.0 38.0 Q 27.0 38.0 21.0 45.2 Q 15.1 52.4 15.1 64.7 L 15.1 64.7 L 15.1 64.8 Q 15.1 77.1 21.0 84.3 Q 26.9 91.5 37.0 91.5 Z',
width: 73.9,
height: 100,
advanceWidth: 73.9,
},
P: {
path: 'M 17.4 100.0 L 6.5 100.0 L 6.5 29.5 L 32.7 29.5 Q 43.1 29.5 49.6 35.9 Q 56.1 42.3 56.1 52.6 L 56.1 52.6 L 56.1 52.7 Q 56.1 63.0 49.6 69.5 Q 43.1 75.9 32.7 75.9 L 32.7 75.9 L 17.4 75.9 L 17.4 100.0 Z M 30.0 38.8 L 30.0 38.8 L 17.4 38.8 L 17.4 66.7 L 30.0 66.7 Q 37.1 66.7 41.0 63.1 Q 45.0 59.4 45.0 52.8 L 45.0 52.8 L 45.0 52.7 Q 45.0 46.1 41.0 42.4 Q 37.1 38.8 30.0 38.8 Z',
width: 59.2,
height: 100,
advanceWidth: 59.2,
},
Q: {
path: 'M 37.0 101.2 L 37.0 101.2 Q 21.7 101.2 12.8 91.4 Q 4.0 81.6 4.0 64.8 L 4.0 64.8 L 4.0 64.7 Q 4.0 47.9 12.9 38.2 Q 21.8 28.4 37.0 28.4 L 37.0 28.4 Q 52.2 28.4 61.1 38.2 Q 70.0 47.9 70.0 64.7 L 70.0 64.7 L 70.0 64.8 Q 70.0 74.7 66.8 82.3 Q 63.6 89.9 57.6 94.6 L 57.6 94.6 L 66.9 107.5 L 55.5 107.5 L 49.5 99.1 Q 43.8 101.2 37.0 101.2 Z M 37.0 91.5 L 37.0 91.5 Q 40.4 91.5 43.4 90.6 L 43.4 90.6 L 34.6 78.4 L 45.9 78.4 L 51.4 85.9 Q 58.7 78.7 58.7 64.8 L 58.7 64.8 L 58.7 64.7 Q 58.7 52.4 52.9 45.2 Q 47.0 38.0 37.0 38.0 Q 27.0 38.0 21.0 45.2 Q 15.1 52.4 15.1 64.7 L 15.1 64.7 L 15.1 64.8 Q 15.1 77.1 21.0 84.3 Q 26.9 91.5 37.0 91.5 Z',
width: 73.9,
height: 100,
advanceWidth: 73.9,
},
R: {
path: 'M 17.4 100.0 L 6.5 100.0 L 6.5 29.5 L 33.8 29.5 Q 44.6 29.5 51.0 35.4 Q 57.3 41.2 57.3 51.1 L 57.3 51.1 L 57.3 51.2 Q 57.3 58.4 53.7 63.8 Q 50.0 69.1 43.7 71.3 L 43.7 71.3 L 59.4 100.0 L 46.8 100.0 L 32.5 72.9 L 17.4 72.9 L 17.4 100.0 Z M 17.4 38.7 L 17.4 64.0 L 32.8 64.0 Q 39.1 64.0 42.6 60.6 Q 46.0 57.3 46.0 51.3 L 46.0 51.3 L 46.0 51.2 Q 46.0 45.4 42.4 42.0 Q 38.8 38.7 32.5 38.7 L 32.5 38.7 L 17.4 38.7 Z',
width: 61.4,
height: 100,
advanceWidth: 61.4,
},
S: {
path: 'M 30.5 101.2 L 30.5 101.2 Q 18.6 101.2 11.3 95.8 Q 4.0 90.5 3.4 81.3 L 3.4 81.3 L 3.3 80.5 L 14.0 80.5 L 14.1 81.2 Q 14.8 86.0 19.3 88.9 Q 23.9 91.7 31.0 91.7 L 31.0 91.7 Q 38.0 91.7 42.2 88.7 Q 46.3 85.8 46.3 80.9 L 46.3 80.9 L 46.3 80.8 Q 46.3 76.6 43.3 74.1 Q 40.2 71.6 33.2 70.0 L 33.2 70.0 L 25.5 68.4 Q 15.1 66.2 10.0 61.4 Q 5.0 56.5 5.0 48.7 L 5.0 48.7 L 5.0 48.6 Q 5.0 39.6 12.2 34.0 Q 19.3 28.4 30.5 28.4 L 30.5 28.4 Q 41.5 28.4 48.5 33.8 Q 55.5 39.3 56.0 48.2 L 56.0 48.2 L 56.1 49.0 L 45.4 49.0 L 45.4 48.3 Q 44.6 43.5 40.6 40.6 Q 36.6 37.8 30.4 37.8 L 30.4 37.8 Q 23.8 37.9 19.9 40.7 Q 16.1 43.6 16.1 48.2 L 16.1 48.2 L 16.1 48.2 Q 16.1 52.2 19.2 54.7 Q 22.3 57.2 28.9 58.6 L 28.9 58.6 L 36.6 60.3 Q 47.5 62.5 52.4 67.3 Q 57.4 72.0 57.4 80.1 L 57.4 80.1 L 57.4 80.2 Q 57.4 89.8 50.2 95.5 Q 43.0 101.2 30.5 101.2 Z',
width: 60.7,
height: 100,
advanceWidth: 60.7,
},
T: {
path: 'M 34.9 100.0 L 24.0 100.0 L 24.0 39.0 L 2.4 39.0 L 2.4 29.5 L 56.4 29.5 L 56.4 39.0 L 34.9 39.0 L 34.9 100.0 Z',
width: 58.8,
height: 100,
advanceWidth: 58.8,
},
U: {
path: 'M 55.9 94.1 Q 48.2 101.2 35.1 101.2 Q 21.9 101.2 14.2 94.0 Q 6.5 86.9 6.5 75.2 L 6.5 75.2 L 6.5 29.5 L 17.4 29.5 L 17.4 74.4 Q 17.4 82.2 22.1 86.8 Q 26.8 91.5 35.1 91.5 Q 43.4 91.5 48.0 86.8 Q 52.6 82.2 52.6 74.4 L 52.6 74.4 L 52.6 29.5 L 63.5 29.5 L 63.5 75.2 Q 63.5 87.0 55.9 94.1 Z',
width: 70,
height: 100,
advanceWidth: 70,
},
V: {
path: 'M 38.4 100.0 L 26.4 100.0 L 1.3 29.5 L 13.0 29.5 L 32.3 87.8 L 32.5 87.8 L 51.8 29.5 L 63.5 29.5 L 38.4 100.0 Z',
width: 64.8,
height: 100,
advanceWidth: 64.8,
},
W: {
path: 'M 31.6 100.0 L 21.1 100.0 L 2.1 29.5 L 13.5 29.5 L 26.7 84.8 L 26.9 84.8 L 41.7 29.5 L 52.1 29.5 L 67.0 84.8 L 67.2 84.8 L 80.4 29.5 L 91.7 29.5 L 72.7 100.0 L 62.2 100.0 L 47.1 46.9 L 46.8 46.9 L 31.6 100.0 Z',
width: 93.9,
height: 100,
advanceWidth: 93.9,
},
X: {
path: 'M 14.3 100.0 L 2.1 100.0 L 25.6 64.6 L 25.6 64.4 L 2.4 29.5 L 15.4 29.5 L 32.9 56.8 L 33.3 56.8 L 50.8 29.5 L 63.1 29.5 L 39.3 64.7 L 39.3 64.9 L 62.7 100.0 L 49.9 100.0 L 32.3 73.1 L 31.9 73.1 L 14.3 100.0 Z',
width: 65.3,
height: 100,
advanceWidth: 65.3,
},
Y: {
path: 'M 37.0 100.0 L 26.1 100.0 L 26.1 71.1 L 1.3 29.5 L 13.4 29.5 L 31.4 60.6 L 31.7 60.6 L 49.7 29.5 L 61.9 29.5 L 37.0 71.1 L 37.0 100.0 Z',
width: 63.1,
height: 100,
advanceWidth: 63.1,
},
Z: {
path: 'M 57.6 100.0 L 4.6 100.0 L 4.6 92.5 L 43.3 39.2 L 43.3 39.0 L 5.8 39.0 L 5.8 29.5 L 56.6 29.5 L 56.6 37.0 L 18.2 90.3 L 18.2 90.6 L 57.6 90.6 L 57.6 100.0 Z',
width: 62.2,
height: 100,
advanceWidth: 62.2,
},
a: {
path: 'M 20.3 100.9 L 20.3 100.9 Q 12.6 100.9 7.9 96.6 Q 3.2 92.3 3.2 85.4 L 3.2 85.4 L 3.2 85.3 Q 3.2 78.6 8.2 74.7 Q 13.1 70.7 22.3 70.2 L 22.3 70.2 L 36.2 69.3 L 36.2 65.5 Q 36.2 61.2 33.6 58.8 Q 30.9 56.4 26.0 56.4 L 26.0 56.4 Q 21.6 56.4 18.8 58.3 Q 16.0 60.2 15.3 63.4 L 15.3 63.4 L 15.2 63.8 L 5.2 63.8 L 5.3 63.3 Q 5.9 56.4 11.5 52.1 Q 17.1 47.7 26.3 47.7 L 26.3 47.7 Q 35.7 47.7 41.3 52.3 Q 46.8 56.9 46.8 64.6 L 46.8 64.6 L 46.8 100.0 L 36.2 100.0 L 36.2 91.9 L 36.0 91.9 Q 33.8 96.0 29.6 98.5 Q 25.4 100.9 20.3 100.9 Z M 13.8 85.1 L 13.8 85.2 Q 13.8 88.5 16.4 90.5 Q 18.9 92.5 23.2 92.5 L 23.2 92.5 Q 28.8 92.5 32.5 89.1 Q 36.2 85.8 36.2 80.8 L 36.2 80.8 L 36.2 76.8 L 23.7 77.5 Q 18.9 77.8 16.4 79.8 Q 13.8 81.8 13.8 85.1 L 13.8 85.1 Z',
width: 51.8,
height: 100,
advanceWidth: 51.8,
},
b: {
path: 'M 32.5 101.0 L 32.5 101.0 Q 27.1 101.0 22.9 98.5 Q 18.7 95.9 16.4 91.3 L 16.4 91.3 L 16.2 91.3 L 16.2 100.0 L 5.6 100.0 L 5.6 29.5 L 16.2 29.5 L 16.2 57.4 L 16.4 57.4 Q 18.8 52.8 23.0 50.2 Q 27.2 47.7 32.6 47.7 L 32.6 47.7 Q 42.3 47.7 48.2 54.9 Q 54.0 62.1 54.0 74.3 L 54.0 74.3 L 54.0 74.3 Q 54.0 86.6 48.2 93.8 Q 42.3 101.0 32.5 101.0 Z M 29.7 91.9 L 29.7 91.9 Q 36.0 91.9 39.6 87.2 Q 43.2 82.5 43.2 74.3 L 43.2 74.3 L 43.2 74.3 Q 43.2 66.2 39.6 61.4 Q 36.0 56.7 29.7 56.7 L 29.7 56.7 Q 23.7 56.7 19.9 61.5 Q 16.1 66.4 16.1 74.3 L 16.1 74.3 L 16.1 74.3 Q 16.1 82.3 19.9 87.1 Q 23.7 91.9 29.7 91.9 Z',
width: 56.9,
height: 100,
advanceWidth: 56.9,
},
c: {
path: 'M 27.3 101.0 L 27.3 101.0 Q 16.1 101.0 9.5 93.8 Q 2.9 86.6 2.9 74.3 L 2.9 74.3 L 2.9 74.2 Q 2.9 62.1 9.5 54.9 Q 16.1 47.7 27.1 47.7 L 27.1 47.7 Q 36.7 47.7 42.6 52.9 Q 48.6 58.2 49.3 65.8 L 49.3 65.8 L 49.3 66.2 L 39.3 66.2 L 39.2 65.8 Q 38.2 61.7 35.2 59.1 Q 32.1 56.5 27.2 56.5 L 27.2 56.5 Q 21.1 56.5 17.4 61.3 Q 13.7 66.1 13.7 74.3 L 13.7 74.3 L 13.7 74.4 Q 13.7 82.7 17.4 87.5 Q 21.1 92.2 27.3 92.2 L 27.3 92.2 Q 32.0 92.2 35.1 89.7 Q 38.2 87.2 39.2 82.9 L 39.2 82.9 L 39.3 82.5 L 49.4 82.5 L 49.4 82.8 Q 48.5 90.7 42.4 95.9 Q 36.4 101.0 27.3 101.0 Z',
width: 51.7,
height: 100,
advanceWidth: 51.7,
},
d: {
path: 'M 24.4 101.0 L 24.4 101.0 Q 14.6 101.0 8.8 93.8 Q 2.9 86.6 2.9 74.3 L 2.9 74.3 L 2.9 74.3 Q 2.9 62.1 8.8 54.9 Q 14.6 47.7 24.3 47.7 L 24.3 47.7 Q 29.7 47.7 34.0 50.2 Q 38.2 52.8 40.5 57.4 L 40.5 57.4 L 40.7 57.4 L 40.7 29.5 L 51.3 29.5 L 51.3 100.0 L 40.7 100.0 L 40.7 91.3 L 40.5 91.3 Q 38.2 95.9 34.0 98.5 Q 29.8 101.0 24.4 101.0 Z M 27.2 91.9 L 27.2 91.9 Q 33.2 91.9 37.0 87.1 Q 40.8 82.3 40.8 74.3 L 40.8 74.3 L 40.8 74.3 Q 40.8 66.4 37.0 61.5 Q 33.2 56.7 27.2 56.7 L 27.2 56.7 Q 20.9 56.7 17.3 61.4 Q 13.7 66.2 13.7 74.3 L 13.7 74.3 L 13.7 74.3 Q 13.7 82.5 17.3 87.2 Q 20.9 91.9 27.2 91.9 Z',
width: 56.9,
height: 100,
advanceWidth: 56.9,
},
e: {
path: 'M 27.1 101.0 L 27.1 101.0 Q 15.9 101.0 9.4 93.9 Q 2.9 86.7 2.9 74.5 L 2.9 74.5 L 2.9 74.5 Q 2.9 62.4 9.4 55.0 Q 15.9 47.7 26.6 47.7 L 26.6 47.7 Q 37.3 47.7 43.6 54.7 Q 49.9 61.8 49.9 73.4 L 49.9 73.4 L 49.9 77.0 L 13.5 77.0 Q 13.6 84.2 17.3 88.3 Q 21.0 92.4 27.4 92.4 L 27.4 92.4 Q 31.9 92.4 35.0 90.4 Q 38.1 88.4 39.1 85.3 L 39.1 85.3 L 39.3 84.9 L 49.3 84.9 L 49.2 85.4 Q 47.9 91.9 41.9 96.5 Q 36.0 101.0 27.1 101.0 Z M 26.7 56.3 L 26.7 56.3 Q 21.4 56.3 17.8 59.8 Q 14.3 63.2 13.6 69.5 L 13.6 69.5 L 39.4 69.5 Q 38.8 63.0 35.4 59.7 Q 32.0 56.3 26.7 56.3 Z',
width: 52.8,
height: 100,
advanceWidth: 52.8,
},
f: {
path: 'M 18.9 100.0 L 8.3 100.0 L 8.3 57.0 L 1.2 57.0 L 1.2 48.6 L 8.3 48.6 L 8.3 43.2 Q 8.3 35.6 12.0 32.1 Q 15.6 28.5 23.4 28.5 L 23.4 28.5 Q 26.8 28.5 29.3 29.0 L 29.3 29.0 L 29.3 36.8 Q 27.6 36.5 25.7 36.5 L 25.7 36.5 Q 18.7 36.5 18.7 43.4 L 18.7 43.4 L 18.7 48.6 L 29.2 48.6 L 29.2 57.0 L 18.9 57.0 L 18.9 100.0 Z',
width: 32.2,
height: 100,
advanceWidth: 32.2,
},
g: {
path: 'M 27.7 118.1 L 27.7 118.1 Q 18.2 118.1 12.0 114.2 Q 5.9 110.3 4.6 104.2 L 4.6 104.2 L 4.6 103.7 L 15.0 103.7 L 15.2 104.1 Q 16.3 106.6 19.6 108.1 Q 22.9 109.6 27.7 109.6 L 27.7 109.6 Q 33.9 109.6 37.3 106.5 Q 40.7 103.4 40.7 97.9 L 40.7 97.9 L 40.7 90.9 L 40.5 90.9 Q 38.2 95.2 34.0 97.6 Q 29.8 100.0 24.3 100.0 L 24.3 100.0 Q 14.6 100.0 8.8 93.0 Q 2.9 85.9 2.9 73.9 L 2.9 73.9 L 2.9 73.9 Q 2.9 61.9 8.8 54.8 Q 14.7 47.7 24.6 47.7 L 24.6 47.7 Q 29.8 47.7 34.0 50.3 Q 38.1 52.9 40.5 57.4 L 40.5 57.4 L 40.7 57.4 L 40.7 48.6 L 51.3 48.6 L 51.3 98.6 Q 51.3 107.4 44.9 112.8 Q 38.5 118.1 27.7 118.1 Z M 27.3 91.5 L 27.3 91.5 Q 33.3 91.5 37.0 86.7 Q 40.7 82.0 40.7 74.1 L 40.7 74.1 L 40.7 74.0 Q 40.7 66.2 37.0 61.4 Q 33.3 56.7 27.3 56.7 L 27.3 56.7 Q 21.0 56.7 17.4 61.4 Q 13.7 66.1 13.7 74.0 L 13.7 74.0 L 13.7 74.1 Q 13.7 82.1 17.4 86.8 Q 21.0 91.5 27.3 91.5 Z',
width: 56.5,
height: 100,
advanceWidth: 56.5,
},
h: {
path: 'M 16.2 100.0 L 5.6 100.0 L 5.6 29.5 L 16.2 29.5 L 16.2 57.1 L 16.4 57.1 Q 18.5 52.5 22.6 50.1 Q 26.7 47.7 32.3 47.7 L 32.3 47.7 Q 40.6 47.7 45.6 53.3 Q 50.5 58.9 50.5 68.3 L 50.5 68.3 L 50.5 100.0 L 40.0 100.0 L 40.0 70.3 Q 40.0 63.9 36.9 60.3 Q 33.8 56.7 28.3 56.7 L 28.3 56.7 Q 22.9 56.7 19.5 60.4 Q 16.2 64.2 16.2 70.3 L 16.2 70.3 L 16.2 100.0 Z',
width: 55.5,
height: 100,
advanceWidth: 55.5,
},
i: {
path: 'M 10.9 40.7 L 10.9 40.7 Q 8.4 40.7 6.6 38.9 Q 4.8 37.2 4.8 34.7 L 4.8 34.7 Q 4.8 32.1 6.6 30.3 Q 8.4 28.6 10.9 28.6 L 10.9 28.6 Q 13.5 28.6 15.3 30.3 Q 17.1 32.1 17.1 34.7 L 17.1 34.7 Q 17.1 37.2 15.3 38.9 Q 13.5 40.7 10.9 40.7 Z M 16.2 100.0 L 5.7 100.0 L 5.7 48.6 L 16.2 48.6 L 16.2 100.0 Z',
width: 21.9,
height: 100,
advanceWidth: 21.9,
},
j: {
path: 'M 10.8 40.7 L 10.8 40.7 Q 8.3 40.7 6.5 38.9 Q 4.7 37.2 4.7 34.7 L 4.7 34.7 Q 4.7 32.1 6.5 30.3 Q 8.3 28.6 10.8 28.6 L 10.8 28.6 Q 13.4 28.6 15.2 30.3 Q 17.0 32.1 17.0 34.7 L 17.0 34.7 Q 17.0 37.2 15.2 38.9 Q 13.4 40.7 10.8 40.7 Z M -0.7 117.2 L -0.7 117.2 Q -1.8 117.2 -3.1 117.1 L -3.1 117.1 L -3.1 108.4 Q -2.9 108.4 -2.4 108.5 Q -1.9 108.5 -1.6 108.5 L -1.6 108.5 Q 2.3 108.5 4.0 107.0 Q 5.6 105.5 5.6 101.7 L 5.6 101.7 L 5.6 48.6 L 16.1 48.6 L 16.1 101.8 Q 16.1 109.6 12.0 113.4 Q 7.9 117.2 -0.7 117.2 Z',
width: 21.8,
height: 100,
advanceWidth: 21.8,
},
k: {
path: 'M 16.4 100.0 L 5.8 100.0 L 5.8 29.5 L 16.4 29.5 L 16.4 70.6 L 16.6 70.6 L 37.2 48.6 L 49.6 48.6 L 28.5 70.8 L 50.4 100.0 L 38.2 100.0 L 20.8 77.1 L 16.4 81.5 L 16.4 100.0 Z',
width: 50.4,
height: 100,
advanceWidth: 50.4,
},
l: {
path: 'M 16.2 100.0 L 5.6 100.0 L 5.6 29.5 L 16.2 29.5 L 16.2 100.0 Z',
width: 21.8,
height: 100,
advanceWidth: 21.8,
},
m: {
path: 'M 15.8 100.0 L 5.2 100.0 L 5.2 48.6 L 15.8 48.6 L 15.8 56.6 L 16.0 56.6 Q 17.7 52.5 21.4 50.1 Q 25.2 47.7 30.2 47.7 L 30.2 47.7 Q 35.5 47.7 39.2 50.3 Q 42.9 52.9 44.5 57.8 L 44.5 57.8 L 44.7 57.8 Q 46.7 53.1 51.0 50.4 Q 55.3 47.7 60.7 47.7 L 60.7 47.7 Q 68.4 47.7 72.9 52.3 Q 77.5 57.0 77.5 64.7 L 77.5 64.7 L 77.5 100.0 L 66.9 100.0 L 66.9 67.2 Q 66.9 62.2 64.4 59.4 Q 61.8 56.7 57.1 56.7 Q 52.4 56.7 49.5 59.8 Q 46.5 63.0 46.5 67.9 L 46.5 67.9 L 46.5 100.0 L 36.2 100.0 L 36.2 66.5 Q 36.2 62.0 33.5 59.3 Q 30.9 56.7 26.5 56.7 L 26.5 56.7 Q 21.8 56.7 18.8 60.0 Q 15.8 63.3 15.8 68.3 L 15.8 68.3 L 15.8 100.0 Z',
width: 82.5,
height: 100,
advanceWidth: 82.5,
},
n: {
path: 'M 15.8 100.0 L 5.2 100.0 L 5.2 48.6 L 15.8 48.6 L 15.8 56.4 L 16.0 56.4 Q 18.1 52.3 22.1 50.0 Q 26.1 47.7 31.7 47.7 L 31.7 47.7 Q 40.1 47.7 44.8 52.7 Q 49.5 57.8 49.5 66.7 L 49.5 66.7 L 49.5 100.0 L 38.9 100.0 L 38.9 68.8 Q 38.9 62.9 36.2 59.8 Q 33.4 56.7 28.0 56.7 L 28.0 56.7 Q 22.4 56.7 19.1 60.4 Q 15.8 64.1 15.8 70.1 L 15.8 70.1 L 15.8 100.0 Z',
width: 54.4,
height: 100,
advanceWidth: 54.4,
},
o: {
path: 'M 27.3 101.0 L 27.3 101.0 Q 16.2 101.0 9.5 93.8 Q 2.9 86.6 2.9 74.3 L 2.9 74.3 L 2.9 74.2 Q 2.9 62.0 9.6 54.8 Q 16.2 47.7 27.2 47.7 L 27.2 47.7 Q 38.3 47.7 45.0 54.8 Q 51.7 62.0 51.7 74.2 L 51.7 74.2 L 51.7 74.3 Q 51.7 86.7 45.0 93.8 Q 38.4 101.0 27.3 101.0 Z M 17.4 87.5 Q 21.1 92.2 27.3 92.2 Q 33.6 92.2 37.2 87.5 Q 40.9 82.7 40.9 74.3 L 40.9 74.3 L 40.9 74.2 Q 40.9 65.9 37.2 61.2 Q 33.5 56.5 27.2 56.5 L 27.2 56.5 Q 21.1 56.5 17.4 61.2 Q 13.7 65.9 13.7 74.2 L 13.7 74.2 L 13.7 74.3 Q 13.7 82.8 17.4 87.5 Z',
width: 54.6,
height: 100,
advanceWidth: 54.6,
},
p: {
path: 'M 15.8 117.1 L 5.2 117.1 L 5.2 48.6 L 15.8 48.6 L 15.8 57.5 L 16.0 57.5 Q 18.4 52.8 22.5 50.2 Q 26.7 47.7 32.1 47.7 L 32.1 47.7 Q 41.9 47.7 47.7 54.9 Q 53.6 62.1 53.6 74.3 L 53.6 74.3 L 53.6 74.4 Q 53.6 86.6 47.8 93.8 Q 41.9 101.0 32.2 101.0 L 32.2 101.0 Q 26.8 101.0 22.6 98.5 Q 18.3 95.9 16.0 91.4 L 16.0 91.4 L 15.8 91.4 L 15.8 117.1 Z M 29.3 91.9 L 29.3 91.9 Q 35.6 91.9 39.2 87.2 Q 42.8 82.5 42.8 74.4 L 42.8 74.4 L 42.8 74.3 Q 42.8 66.2 39.2 61.4 Q 35.5 56.7 29.3 56.7 L 29.3 56.7 Q 23.3 56.7 19.5 61.5 Q 15.7 66.4 15.7 74.3 L 15.7 74.3 L 15.7 74.4 Q 15.7 82.3 19.5 87.1 Q 23.3 91.9 29.3 91.9 Z',
width: 56.5,
height: 100,
advanceWidth: 56.5,
},
q: {
path: 'M 51.3 117.1 L 40.7 117.1 L 40.7 91.6 L 40.5 91.6 Q 38.2 95.9 34.0 98.4 Q 29.8 100.9 24.3 100.9 L 24.3 100.9 Q 14.6 100.9 8.8 93.7 Q 2.9 86.5 2.9 74.3 L 2.9 74.3 L 2.9 74.2 Q 2.9 62.1 8.8 54.9 Q 14.7 47.7 24.6 47.7 L 24.6 47.7 Q 29.8 47.7 34.0 50.3 Q 38.1 53.0 40.5 57.5 L 40.5 57.5 L 40.7 57.5 L 40.7 48.6 L 51.3 48.6 L 51.3 117.1 Z M 27.3 91.8 L 27.3 91.8 Q 33.3 91.8 37.0 87.1 Q 40.7 82.3 40.7 74.3 L 40.7 74.3 L 40.7 74.3 Q 40.7 66.3 37.0 61.5 Q 33.3 56.8 27.3 56.8 L 27.3 56.8 Q 21.0 56.8 17.4 61.5 Q 13.7 66.2 13.7 74.2 L 13.7 74.2 L 13.7 74.3 Q 13.7 82.4 17.4 87.1 Q 21.0 91.8 27.3 91.8 Z',
width: 56.4,
height: 100,
advanceWidth: 56.4,
},
r: {
path: 'M 15.8 100.0 L 5.2 100.0 L 5.2 48.6 L 15.8 48.6 L 15.8 57.4 L 16.0 57.4 Q 17.3 52.9 20.4 50.3 Q 23.5 47.7 27.8 47.7 L 27.8 47.7 Q 29.3 47.7 31.5 48.0 L 31.5 48.0 L 31.5 57.9 Q 30.1 57.3 26.8 57.3 L 26.8 57.3 Q 21.6 57.3 18.7 60.5 Q 15.8 63.7 15.8 69.4 L 15.8 69.4 L 15.8 100.0 Z',
width: 32.8,
height: 100,
advanceWidth: 32.8,
},
s: {
path: 'M 24.5 101.0 L 24.5 101.0 Q 15.0 101.0 9.4 96.8 Q 3.9 92.5 3.0 85.3 L 3.0 85.3 L 3.0 84.9 L 13.4 84.9 L 13.5 85.4 Q 15.1 92.9 24.5 92.9 L 24.5 92.9 Q 29.2 92.9 32.0 91.0 Q 34.7 89.2 34.7 86.1 L 34.7 86.1 L 34.7 86.0 Q 34.7 83.5 33.0 82.0 Q 31.3 80.5 27.3 79.5 L 27.3 79.5 L 18.9 77.6 Q 4.3 74.2 4.3 63.2 L 4.3 63.2 L 4.3 63.1 Q 4.3 56.3 9.8 52.0 Q 15.3 47.7 24.1 47.7 L 24.1 47.7 Q 33.0 47.7 38.4 52.0 Q 43.7 56.4 44.1 63.2 L 44.1 63.2 L 44.2 63.8 L 34.3 63.8 L 34.2 63.4 Q 33.7 60.0 31.1 57.9 Q 28.5 55.8 24.1 55.8 L 24.1 55.8 Q 19.9 55.8 17.4 57.7 Q 14.9 59.5 14.9 62.6 L 14.9 62.6 L 14.9 62.6 Q 14.9 65.1 16.7 66.7 Q 18.5 68.3 22.5 69.3 L 22.5 69.3 L 30.9 71.2 Q 38.7 73.0 42.0 76.3 Q 45.4 79.6 45.4 85.2 L 45.4 85.2 L 45.4 85.2 Q 45.4 92.2 39.5 96.6 Q 33.6 101.0 24.5 101.0 Z',
width: 48.3,
height: 100,
advanceWidth: 48.3,
},
t: {
path: 'M 23.2 101.0 L 23.2 101.0 Q 15.5 101.0 11.9 97.6 Q 8.2 94.1 8.2 86.5 L 8.2 86.5 L 8.2 57.0 L 0.8 57.0 L 0.8 48.6 L 8.2 48.6 L 8.2 35.3 L 19.0 35.3 L 19.0 48.6 L 28.6 48.6 L 28.6 57.0 L 19.0 57.0 L 19.0 85.8 Q 19.0 89.6 20.6 91.1 Q 22.3 92.6 25.8 92.6 L 25.8 92.6 Q 27.1 92.6 28.6 92.4 L 28.6 92.4 L 28.6 100.6 Q 25.9 101.0 23.2 101.0 Z',
width: 32.1,
height: 100,
advanceWidth: 32.1,
},
u: {
path: 'M 22.7 101.0 L 22.7 101.0 Q 14.3 101.0 9.6 95.9 Q 5.0 90.9 5.0 81.9 L 5.0 81.9 L 5.0 48.6 L 15.5 48.6 L 15.5 79.9 Q 15.5 85.7 18.3 88.8 Q 21.0 91.9 26.5 91.9 L 26.5 91.9 Q 32.0 91.9 35.4 88.3 Q 38.7 84.6 38.7 78.6 L 38.7 78.6 L 38.7 48.6 L 49.3 48.6 L 49.3 100.0 L 38.7 100.0 L 38.7 92.3 L 38.4 92.3 Q 36.3 96.3 32.3 98.7 Q 28.4 101.0 22.7 101.0 Z',
width: 54.4,
height: 100,
advanceWidth: 54.4,
},
v: {
path: 'M 30.7 100.0 L 19.3 100.0 L 0.8 48.6 L 12.1 48.6 L 25.0 89.7 L 25.2 89.7 L 38.1 48.6 L 49.1 48.6 L 30.7 100.0 Z',
width: 49.9,
height: 100,
advanceWidth: 49.9,
},
w: {
path: 'M 26.2 100.0 L 15.3 100.0 L 1.2 48.6 L 11.8 48.6 L 21.1 89.1 L 21.3 89.1 L 32.0 48.6 L 42.2 48.6 L 52.9 89.1 L 53.2 89.1 L 62.5 48.6 L 73.0 48.6 L 58.9 100.0 L 47.9 100.0 L 37.2 61.5 L 36.9 61.5 L 26.2 100.0 Z',
width: 74.2,
height: 100,
advanceWidth: 74.2,
},
x: {
path: 'M 12.8 100.0 L 1.4 100.0 L 18.4 74.4 L 1.6 48.6 L 13.5 48.6 L 24.7 67.2 L 24.9 67.2 L 35.9 48.6 L 47.6 48.6 L 30.7 74.0 L 47.4 100.0 L 35.8 100.0 L 24.4 81.1 L 24.2 81.1 L 12.8 100.0 Z',
width: 49,
height: 100,
advanceWidth: 49,
},
y: {
path: 'M 11.3 117.1 L 11.3 117.1 Q 8.3 117.1 5.8 116.7 L 5.8 116.7 L 5.8 108.4 Q 7.4 108.8 9.2 108.8 L 9.2 108.8 Q 13.1 108.8 15.3 107.4 Q 17.4 106.1 18.7 102.5 L 18.7 102.5 L 19.6 100.0 L 0.9 48.6 L 12.3 48.6 L 25.2 90.4 L 25.6 90.4 L 38.5 48.6 L 49.7 48.6 L 30.5 102.4 Q 27.7 110.4 23.3 113.7 Q 18.8 117.1 11.3 117.1 Z',
width: 50.5,
height: 100,
advanceWidth: 50.5,
},
z: {
path: 'M 43.9 100.0 L 4.2 100.0 L 4.2 93.2 L 31.6 57.2 L 31.6 57.0 L 4.3 57.0 L 4.3 48.6 L 43.7 48.6 L 43.7 55.9 L 16.9 91.5 L 16.9 91.7 L 43.9 91.7 L 43.9 100.0 Z',
width: 48.1,
height: 100,
advanceWidth: 48.1,
},
' ': {
path: '',
width: 20.3,
height: 100,
advanceWidth: 20.3,
},
'.': {
path: 'M 15.8 98.9 Q 13.9 100.7 11.2 100.7 Q 8.5 100.7 6.7 98.9 Q 4.8 97.0 4.8 94.3 Q 4.8 91.7 6.6 89.8 Q 8.5 87.9 11.2 87.9 L 11.2 87.9 Q 13.9 87.9 15.8 89.8 Q 17.6 91.7 17.6 94.3 Q 17.6 97.0 15.8 98.9 Z',
width: 22.4,
height: 100,
advanceWidth: 22.4,
},
',': {
path: 'M 9.5 114.2 L 2.1 114.2 L 6.1 89.2 L 16.6 89.2 L 9.5 114.2 Z',
width: 22.4,
height: 100,
advanceWidth: 22.4,
},
'!': {
path: 'M 18.9 76.5 L 9.6 76.5 L 8.8 29.5 L 19.7 29.5 L 18.9 76.5 Z M 14.2 100.5 L 14.2 100.5 Q 11.5 100.5 9.7 98.7 Q 7.8 96.9 7.8 94.2 Q 7.8 91.5 9.7 89.7 Q 11.5 87.9 14.2 87.9 L 14.2 87.9 Q 16.9 87.9 18.8 89.7 Q 20.7 91.5 20.7 94.2 Q 20.7 96.9 18.8 98.7 Q 16.9 100.5 14.2 100.5 Z',
width: 28.5,
height: 100,
advanceWidth: 28.5,
},
'?': {
path: 'M 28.1 77.9 L 18.0 77.9 L 17.9 74.0 Q 17.8 69.0 20.0 65.5 Q 22.3 62.0 27.3 58.9 L 27.3 58.9 Q 31.8 56.3 33.6 53.8 Q 35.4 51.3 35.4 47.6 L 35.4 47.6 L 35.4 47.5 Q 35.4 43.3 32.3 40.6 Q 29.2 37.9 24.3 37.9 L 24.3 37.9 Q 19.3 37.9 16.3 40.7 Q 13.2 43.5 12.8 48.0 L 12.8 48.0 L 12.8 48.4 L 2.7 48.4 L 2.7 47.9 Q 3.0 43.8 4.5 40.5 Q 6.0 37.1 8.7 34.5 Q 11.4 31.9 15.5 30.4 Q 19.7 29.0 24.9 29.0 L 24.9 29.0 Q 34.4 29.0 40.4 34.1 Q 46.4 39.2 46.4 47.1 L 46.4 47.1 L 46.4 47.1 Q 46.4 57.7 36.2 63.8 L 36.2 63.8 Q 31.5 66.6 29.8 69.0 Q 28.1 71.4 28.1 75.1 L 28.1 75.1 L 28.1 77.9 Z M 23.1 100.5 L 23.1 100.5 Q 20.4 100.5 18.6 98.7 Q 16.7 96.9 16.7 94.2 Q 16.7 91.5 18.6 89.7 Q 20.4 87.9 23.1 87.9 L 23.1 87.9 Q 25.8 87.9 27.7 89.7 Q 29.5 91.5 29.5 94.2 Q 29.5 96.9 27.7 98.7 Q 25.8 100.5 23.1 100.5 Z',
width: 50.5,
height: 100,
advanceWidth: 50.5,
},
':': {
path: 'M 11.2 64.1 L 11.2 64.1 Q 8.5 64.1 6.6 62.2 Q 4.8 60.4 4.8 57.6 L 4.8 57.6 Q 4.8 54.9 6.7 53.1 Q 8.5 51.2 11.2 51.2 Q 13.9 51.2 15.8 53.1 Q 17.6 54.9 17.6 57.6 Q 17.6 60.3 15.8 62.2 Q 13.9 64.1 11.2 64.1 Z M 15.8 98.9 Q 13.9 100.7 11.2 100.7 Q 8.5 100.7 6.7 98.9 Q 4.8 97.0 4.8 94.3 Q 4.8 91.7 6.6 89.8 Q 8.5 87.9 11.2 87.9 L 11.2 87.9 Q 13.9 87.9 15.8 89.8 Q 17.6 91.7 17.6 94.3 Q 17.6 97.0 15.8 98.9 Z',
width: 22.4,
height: 100,
advanceWidth: 22.4,
},
';': {
path: 'M 11.2 64.1 L 11.2 64.1 Q 8.5 64.1 6.6 62.2 Q 4.8 60.4 4.8 57.6 L 4.8 57.6 Q 4.8 54.9 6.7 53.1 Q 8.5 51.2 11.2 51.2 Q 13.9 51.2 15.8 53.1 Q 17.6 54.9 17.6 57.6 Q 17.6 60.3 15.8 62.2 Q 13.9 64.1 11.2 64.1 Z M 9.5 114.2 L 2.1 114.2 L 6.1 89.2 L 16.6 89.2 L 9.5 114.2 Z',
width: 22.4,
height: 100,
advanceWidth: 22.4,
},
'-': {
path: 'M 37.4 76.2 L 6.0 76.2 L 6.0 66.7 L 37.4 66.7 L 37.4 76.2 Z',
width: 43.3,
height: 100,
advanceWidth: 43.3,
},
'(': {
path: 'M 32.5 117.1 L 23.2 117.1 Q 9.1 99.6 9.1 73.3 L 9.1 73.3 Q 9.1 47.1 23.2 29.5 L 23.2 29.5 L 32.5 29.5 Q 27.2 35.7 23.6 48.3 Q 20.0 60.9 20.0 73.3 Q 20.0 85.6 23.6 98.3 Q 27.2 110.9 32.5 117.1 L 32.5 117.1 Z',
width: 34.4,
height: 100,
advanceWidth: 34.4,
},
')': {
path: 'M 11.1 117.1 L 11.1 117.1 L 1.9 117.1 Q 7.2 110.9 10.8 98.3 Q 14.4 85.6 14.4 73.3 Q 14.4 60.9 10.8 48.3 Q 7.2 35.7 1.9 29.5 L 1.9 29.5 L 11.1 29.5 Q 25.2 47.1 25.2 73.3 L 25.2 73.3 Q 25.2 99.5 11.1 117.1 Z',
width: 34.4,
height: 100,
advanceWidth: 34.4,
},
'[': {
path: 'M 33.3 117.1 L 10.0 117.1 L 10.0 29.5 L 33.3 29.5 L 33.3 37.5 L 20.2 37.5 L 20.2 109.1 L 33.3 109.1 L 33.3 117.1 Z',
width: 34.4,
height: 100,
advanceWidth: 34.4,
},
']': {
path: 'M 24.4 29.5 L 24.4 117.1 L 1.1 117.1 L 1.1 109.1 L 14.2 109.1 L 14.2 37.5 L 1.1 37.5 L 1.1 29.5 L 24.4 29.5 Z',
width: 34.4,
height: 100,
advanceWidth: 34.4,
},
'/': {
path: 'M 19.1 29.5 L 28.8 29.5 L 9.8 117.1 L 0.0 117.1 L 19.1 29.5 Z',
width: 28.8,
height: 100,
advanceWidth: 28.8,
},
'&': {
path: 'M 27.7 101.2 L 27.7 101.2 Q 17.0 101.2 10.4 95.7 Q 3.8 90.2 3.8 81.4 L 3.8 81.4 L 3.8 81.3 Q 3.8 69.3 17.5 62.0 L 17.5 62.0 L 20.1 60.6 Q 15.4 55.3 13.4 51.7 Q 11.5 48.1 11.4 44.4 L 11.4 44.4 L 11.4 44.4 Q 11.4 37.5 16.7 33.0 Q 22.0 28.5 30.0 28.5 L 30.0 28.5 Q 38.1 28.5 43.3 32.9 Q 48.4 37.4 48.4 44.3 L 48.4 44.3 L 48.4 44.3 Q 48.4 49.6 45.0 53.9 Q 41.6 58.2 33.6 62.5 L 33.6 62.5 L 49.6 79.4 Q 52.7 72.6 52.7 62.4 L 52.7 62.4 L 52.7 60.3 L 62.2 60.3 L 62.2 62.6 Q 62.2 76.9 56.2 86.5 L 56.2 86.5 L 68.7 99.7 L 68.7 100.0 L 56.1 100.0 L 50.2 93.5 Q 41.4 101.2 27.7 101.2 Z M 21.1 44.9 L 21.1 44.9 Q 21.1 47.5 22.7 50.0 Q 24.3 52.5 28.4 56.9 L 28.4 56.9 Q 34.1 53.8 36.5 51.0 Q 38.9 48.3 38.9 44.8 L 38.9 44.8 L 38.9 44.8 Q 38.9 41.0 36.5 38.6 Q 34.0 36.3 30.0 36.3 L 30.0 36.3 Q 26.2 36.3 23.7 38.7 Q 21.1 41.1 21.1 44.9 L 21.1 44.9 Z M 14.1 80.5 L 14.1 80.6 Q 14.1 86.0 18.2 89.4 Q 22.2 92.8 28.8 92.8 L 28.8 92.8 Q 38.1 92.8 44.3 87.0 L 44.3 87.0 L 25.6 66.7 L 23.6 67.8 Q 18.6 70.7 16.3 73.7 Q 14.1 76.8 14.1 80.5 L 14.1 80.5 Z',
width: 68.1,
height: 100,
advanceWidth: 68.1,
},
'@': {
path: 'M 46.3 111.6 L 46.3 111.6 Q 37.2 111.6 29.5 108.9 Q 21.8 106.1 16.3 101.0 Q 10.7 95.8 7.6 88.1 Q 4.5 80.3 4.5 70.7 L 4.5 70.7 L 4.5 70.6 Q 4.5 58.6 9.6 49.3 Q 14.8 40.0 24.1 34.9 Q 33.4 29.7 45.3 29.7 L 45.3 29.7 Q 53.8 29.7 61.1 32.4 Q 68.4 35.0 73.5 39.8 Q 78.7 44.6 81.6 51.6 Q 84.6 58.7 84.6 67.1 L 84.6 67.1 L 84.6 67.2 Q 84.6 78.9 80.0 85.4 Q 75.4 91.8 68.2 91.8 L 68.2 91.8 Q 63.7 91.8 60.6 89.5 Q 57.4 87.2 56.1 83.3 L 56.1 83.3 L 55.8 82.8 L 55.4 82.8 Q 53.7 87.1 50.1 89.3 Q 46.6 91.6 41.8 91.6 L 41.8 91.6 Q 34.3 91.6 29.6 85.8 Q 24.9 80.1 24.9 70.8 L 24.9 70.8 L 24.9 70.7 Q 24.9 61.7 29.6 56.1 Q 34.4 50.4 41.8 50.4 L 41.8 50.4 Q 45.8 50.4 49.0 52.3 Q 52.3 54.2 53.7 57.4 L 53.7 57.4 L 54.1 57.4 L 54.1 51.4 L 62.4 51.4 L 62.4 74.8 Q 62.4 79.5 64.0 82.0 Q 65.6 84.5 68.5 84.5 L 68.5 84.5 Q 72.2 84.5 74.4 80.0 Q 76.6 75.5 76.6 67.3 L 76.6 67.3 L 76.6 67.3 Q 76.6 53.4 67.8 45.1 Q 59.1 36.9 44.7 36.9 L 44.7 36.9 Q 35.4 36.9 28.1 41.1 Q 20.8 45.4 16.7 53.1 Q 12.5 60.8 12.5 70.7 L 12.5 70.7 L 12.5 70.8 Q 12.5 81.3 17.0 89.0 Q 21.4 96.7 29.0 100.6 Q 36.7 104.4 46.6 104.4 L 46.6 104.4 Q 57.2 104.4 63.0 102.0 L 63.0 102.0 L 63.0 109.1 Q 56.0 111.6 46.3 111.6 Z M 43.5 83.9 L 43.5 83.9 Q 48.1 83.9 50.9 80.4 Q 53.7 76.9 53.7 70.9 L 53.7 70.9 L 53.7 70.8 Q 53.7 64.9 50.9 61.4 Q 48.2 57.9 43.6 57.9 Q 39.0 57.9 36.5 61.3 Q 33.9 64.7 33.9 70.8 L 33.9 70.8 L 33.9 70.8 Q 33.9 77.0 36.5 80.4 Q 39.0 83.9 43.5 83.9 Z',
width: 87.9,
height: 100,
advanceWidth: 87.9,
},
'#': {
path: 'M 19.7 81.4 L 16.3 100.0 L 7.8 100.0 L 11.3 81.4 L 0.0 81.4 L 1.6 73.0 L 12.8 73.0 L 16.1 55.7 L 4.4 55.7 L 6.1 47.4 L 17.7 47.4 L 21.0 29.5 L 29.5 29.5 L 26.2 47.4 L 41.3 47.4 L 44.7 29.5 L 53.2 29.5 L 49.8 47.4 L 61.7 47.4 L 60.1 55.7 L 48.2 55.7 L 45.0 73.0 L 57.2 73.0 L 55.5 81.4 L 43.4 81.4 L 39.8 100.0 L 31.4 100.0 L 34.8 81.4 L 19.7 81.4 Z M 24.3 55.4 L 20.9 73.4 L 36.7 73.4 L 40.1 55.4 L 24.3 55.4 Z',
width: 61.7,
height: 100,
advanceWidth: 61.7,
},
$: {
path: 'M 33.7 107.1 L 28.2 107.1 L 28.2 98.9 Q 18.7 98.1 12.5 93.1 Q 6.3 88.0 5.7 79.9 L 5.7 79.9 L 5.6 79.2 L 15.7 79.2 L 15.8 79.7 Q 17.4 88.9 28.2 90.0 L 28.2 90.0 L 28.2 68.7 L 26.2 68.2 Q 16.6 66.0 11.8 61.5 Q 7.1 57.1 7.1 49.8 L 7.1 49.8 L 7.1 49.7 Q 7.1 41.7 12.9 36.5 Q 18.8 31.3 28.2 30.7 L 28.2 30.7 L 28.2 22.5 L 33.7 22.5 L 33.7 30.7 Q 42.8 31.3 48.7 36.4 Q 54.5 41.4 55.1 49.3 L 55.1 49.3 L 55.1 50.1 L 45.0 50.1 L 44.9 49.7 Q 44.4 45.5 41.5 42.8 Q 38.5 40.1 33.7 39.6 L 33.7 39.6 L 33.7 60.0 L 36.0 60.5 Q 46.1 62.8 51.0 67.2 Q 55.9 71.6 55.9 79.2 L 55.9 79.2 L 55.9 79.2 Q 55.9 87.9 49.7 93.1 Q 43.5 98.2 33.7 98.9 L 33.7 98.9 L 33.7 107.1 Z M 17.4 49.0 L 17.4 49.1 Q 17.4 52.6 19.9 55.0 Q 22.5 57.3 28.2 58.7 L 28.2 58.7 L 28.2 39.6 Q 23.1 40.2 20.3 42.8 Q 17.4 45.5 17.4 49.0 L 17.4 49.0 Z M 33.8 70.0 L 33.8 70.0 L 33.7 69.9 L 33.7 90.1 Q 39.7 89.6 42.7 86.9 Q 45.6 84.2 45.6 80.1 L 45.6 80.1 L 45.6 80.0 Q 45.6 76.2 43.0 73.9 Q 40.4 71.5 33.8 70.0 Z',
width: 62,
height: 100,
advanceWidth: 62,
},
'%': {
path: 'M 30.3 60.0 Q 26.3 64.8 19.3 64.8 Q 12.4 64.8 8.3 60.0 Q 4.3 55.2 4.3 46.9 L 4.3 46.9 L 4.3 46.8 Q 4.3 38.6 8.3 33.8 Q 12.4 29.0 19.3 29.0 Q 26.3 29.0 30.3 33.8 Q 34.3 38.6 34.3 46.8 L 34.3 46.8 L 34.3 46.9 Q 34.3 55.2 30.3 60.0 Z M 68.9 29.5 L 24.0 100.0 L 14.9 100.0 L 59.9 29.5 L 68.9 29.5 Z M 14.2 55.2 Q 16.0 58.2 19.3 58.2 Q 22.7 58.2 24.5 55.2 Q 26.3 52.3 26.3 46.9 L 26.3 46.9 L 26.3 46.9 Q 26.3 41.5 24.5 38.5 Q 22.7 35.6 19.3 35.6 Q 16.0 35.6 14.2 38.5 Q 12.4 41.5 12.4 46.9 L 12.4 46.9 L 12.4 46.9 Q 12.4 52.3 14.2 55.2 Z M 75.4 95.8 Q 71.4 100.6 64.5 100.6 Q 57.5 100.6 53.5 95.8 Q 49.5 91.0 49.5 82.7 L 49.5 82.7 L 49.5 82.6 Q 49.5 74.3 53.5 69.5 Q 57.5 64.7 64.5 64.7 Q 71.4 64.7 75.4 69.5 Q 79.4 74.3 79.4 82.6 L 79.4 82.6 L 79.4 82.7 Q 79.4 91.0 75.4 95.8 Z M 59.3 91.0 Q 61.1 93.9 64.5 93.9 Q 67.8 93.9 69.6 91.0 Q 71.4 88.0 71.4 82.7 L 71.4 82.7 L 71.4 82.6 Q 71.4 77.2 69.6 74.3 Q 67.8 71.4 64.5 71.4 Q 61.1 71.4 59.3 74.3 Q 57.5 77.2 57.5 82.6 L 57.5 82.6 L 57.5 82.7 Q 57.5 88.0 59.3 91.0 Z',
width: 83.7,
height: 100,
advanceWidth: 83.7,
},
'*': {
path: 'M 24.5 62.6 L 17.3 62.6 L 17.8 51.6 L 8.8 57.4 L 5.2 51.9 L 15.3 46.4 L 5.2 41.1 L 8.8 35.5 L 17.8 41.3 L 17.3 30.2 L 24.5 30.2 L 23.9 41.4 L 33.0 35.5 L 36.6 41.1 L 26.5 46.4 L 36.6 51.8 L 33.0 57.4 L 23.9 51.5 L 24.5 62.6 Z',
width: 41.8,
height: 100,
advanceWidth: 41.8,
},
'+': {
path: 'M 26.2 76.2 L 5.6 76.2 L 5.6 66.7 L 26.2 66.7 L 26.2 46.9 L 35.7 46.9 L 35.7 66.7 L 56.4 66.7 L 56.4 76.2 L 35.7 76.2 L 35.7 95.9 L 26.2 95.9 L 26.2 76.2 Z',
width: 62,
height: 100,
advanceWidth: 62,
},
'=': {
path: 'M 55.8 63.9 L 6.2 63.9 L 6.2 54.4 L 55.8 54.4 L 55.8 63.9 Z M 55.8 88.4 L 6.2 88.4 L 6.2 78.9 L 55.8 78.9 L 55.8 88.4 Z',
width: 62,
height: 100,
advanceWidth: 62,
},
'<': {
path: 'M 55.8 95.2 L 6.2 76.9 L 6.2 65.9 L 55.8 47.6 L 55.8 56.9 L 15.1 71.3 L 55.8 85.7 L 55.8 95.2 Z',
width: 62,
height: 100,
advanceWidth: 62,
},
'>': {
path: 'M 6.2 47.6 L 55.8 65.9 L 55.8 76.9 L 6.2 95.2 L 6.2 85.9 L 46.8 71.5 L 6.2 57.1 L 6.2 47.6 Z',
width: 62,
height: 100,
advanceWidth: 62,
},
'|': {
path: 'M 16.0 117.1 L 6.5 117.1 L 6.5 29.5 L 16.0 29.5 L 16.0 117.1 Z',
width: 22.5,
height: 100,
advanceWidth: 22.5,
},
'\\': {
path: 'M 0.0 29.5 L 9.8 29.5 L 28.8 117.1 L 19.1 117.1 L 0.0 29.5 Z',
width: 28.8,
height: 100,
advanceWidth: 28.8,
},
'~': {
path: 'M 43.5 79.0 L 43.5 79.0 Q 40.6 79.0 37.0 78.1 Q 33.4 77.2 30.6 76.1 Q 27.8 75.1 24.3 74.2 Q 20.8 73.3 18.2 73.3 L 18.2 73.3 Q 10.8 73.3 6.2 78.1 L 6.2 78.1 L 6.2 68.8 Q 11.2 63.9 18.5 63.9 L 18.5 63.9 Q 22.2 63.9 26.8 65.3 Q 31.4 66.7 36.0 68.1 Q 40.5 69.5 43.8 69.5 L 43.8 69.5 Q 51.1 69.5 55.8 64.7 L 55.8 64.7 L 55.8 74.1 Q 50.8 79.0 43.5 79.0 Z',
width: 62,
height: 100,
advanceWidth: 62,
},
'`': {
path: 'M 34.4 42.8 L 26.8 42.8 L 15.6 27.4 L 25.9 27.4 L 34.4 42.8 Z',
width: 50,
height: 100,
advanceWidth: 50,
},
"'": {
path: 'M 16.7 55.3 L 9.2 55.3 L 8.1 29.5 L 17.9 29.5 L 16.7 55.3 Z',
width: 26,
height: 100,
advanceWidth: 26,
},
'{': {
path: 'M 33.3 117.1 L 30.3 117.1 Q 20.8 117.1 16.4 112.9 Q 12.0 108.6 12.0 99.7 L 12.0 99.7 L 12.0 88.9 Q 12.0 83.3 9.6 81.0 Q 7.2 78.7 1.1 78.7 L 1.1 78.7 L 1.1 67.9 Q 7.2 67.9 9.6 65.6 Q 12.0 63.3 12.0 57.6 L 12.0 57.6 L 12.0 46.8 Q 12.0 37.9 16.4 33.7 Q 20.8 29.5 30.3 29.5 L 30.3 29.5 L 33.3 29.5 L 33.3 37.7 L 31.3 37.7 Q 26.3 37.7 24.2 40.1 Q 22.0 42.5 22.0 48.1 L 22.0 48.1 L 22.0 60.9 Q 22.0 71.4 10.6 72.6 L 10.6 72.6 L 10.6 73.9 Q 22.0 75.2 22.0 85.6 L 22.0 85.6 L 22.0 98.5 Q 22.0 104.1 24.2 106.5 Q 26.3 108.9 31.3 108.9 L 31.3 108.9 L 33.3 108.9 L 33.3 117.1 Z',
width: 34.4,
height: 100,
advanceWidth: 34.4,
},
'}': {
path: 'M 4.1 117.1 L 4.1 117.1 L 1.1 117.1 L 1.1 108.9 L 3.1 108.9 Q 8.1 108.9 10.2 106.5 Q 12.4 104.1 12.4 98.5 L 12.4 98.5 L 12.4 85.6 Q 12.4 75.2 23.8 73.9 L 23.8 73.9 L 23.8 72.6 Q 12.4 71.4 12.4 60.9 L 12.4 60.9 L 12.4 48.1 Q 12.4 42.5 10.2 40.1 Q 8.1 37.7 3.1 37.7 L 3.1 37.7 L 1.1 37.7 L 1.1 29.5 L 4.1 29.5 Q 13.6 29.5 18.0 33.7 Q 22.4 37.9 22.4 46.8 L 22.4 46.8 L 22.4 57.6 Q 22.4 63.3 24.8 65.6 Q 27.2 67.9 33.3 67.9 L 33.3 67.9 L 33.3 78.7 Q 27.2 78.7 24.8 81.0 Q 22.4 83.3 22.4 88.9 L 22.4 88.9 L 22.4 99.7 Q 22.4 108.6 17.9 112.9 Q 13.5 117.1 4.1 117.1 Z',
width: 34.4,
height: 100,
advanceWidth: 34.4,
},
}
interface SVGTextOptions {
fontSize?: number
fontWeight?: 'normal' | 'bold'
color?: string
letterSpacing?: number
lineHeight?: number
}
export function renderSVGText(
text: string,
x: number,
y: number,
options: SVGTextOptions = {},
): string {
const {
fontSize = 48,
fontWeight = 'normal',
color = 'white',
letterSpacing = 0,
lineHeight = 1.2,
} = options
const scale = fontSize / 100
const lines = text.split('\n')
let svgPaths = ''
lines.forEach((line, lineIndex) => {
let currentX = x
const currentY = y + lineIndex * fontSize * lineHeight
for (const char of line) {
const charData = HELVETICA_CHARACTERS[char] || HELVETICA_CHARACTERS[' ']
if (charData.path) {
const scaledPath = charData.path.replaceAll(/([\d.-]+)/g, (match) => {
const num = Number.parseFloat(match)
return (num * scale).toFixed(1)
})
svgPaths += `<g transform="translate(${currentX}, ${currentY})">`
svgPaths += `<path d="${scaledPath}" fill="${color}"`
if (fontWeight === 'bold') {
svgPaths += ` stroke="${color}" stroke-width="${1.5 * scale}"`
}
svgPaths += ' stroke-linejoin="round" />'
svgPaths += '</g>'
}
currentX += charData.advanceWidth * scale + letterSpacing
}
})
return svgPaths
}
export function measureSVGText(
text: string,
options: SVGTextOptions = {},
): { width: number; height: number } {
const { fontSize = 48, letterSpacing = 0, lineHeight = 1.2 } = options
const scale = fontSize / 100
const lines = text.split('\n')
let maxWidth = 0
const height = lines.length * fontSize * lineHeight
lines.forEach((line) => {
let lineWidth = 0
for (const char of line) {
const charData = HELVETICA_CHARACTERS[char] || HELVETICA_CHARACTERS[' ']
lineWidth += charData.advanceWidth * scale + letterSpacing
}
maxWidth = Math.max(maxWidth, lineWidth - letterSpacing)
})
return { width: maxWidth, height }
}
export function wrapSVGText(
text: string,
maxWidth: number,
options: SVGTextOptions = {},
): string {
const words = text.split(' ')
const lines: string[] = []
let currentLine = ''
for (const word of words) {
const testLine = currentLine ? `${currentLine} ${word}` : word
const { width } = measureSVGText(testLine, options)
if (width <= maxWidth) {
currentLine = testLine
} else {
if (currentLine) {
lines.push(currentLine)
currentLine = word
} else {
lines.push(word)
}
}
}
if (currentLine) {
lines.push(currentLine)
}
return lines.join('\n')
}