mirror of
https://github.com/espruino/Espruino.git
synced 2025-12-08 19:06:15 +00:00
491 lines
13 KiB
C
491 lines
13 KiB
C
/*
|
|
* This file is part of Espruino, a JavaScript interpreter for Microcontrollers
|
|
*
|
|
* Copyright (C) 2020 Gordon Williams <gw@pur3.co.uk>
|
|
*
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
*
|
|
* ----------------------------------------------------------------------------
|
|
* Machine generated vector font header (by build_vector_font.sh)
|
|
* ----------------------------------------------------------------------------
|
|
*/
|
|
|
|
#ifndef NO_VECTOR_FONT
|
|
#include "vector_font.h"
|
|
|
|
const uint8_t vfFirstChar = 33;
|
|
const uint8_t vfLastChar = 255;
|
|
#define VF_CHAR_WIDTH 13
|
|
#define VF_SCALE 16
|
|
#define VF_OFFSET_Y (-2)
|
|
#define VF_CHAR_SPACING 1
|
|
static const uint8_t vfPolyVerts[] IN_FLASH_MEMORY = {
|
|
169,171,197,195,
|
|
39,41,145,143,
|
|
39,41,93,91,
|
|
42,44,96,94,
|
|
43,45,199,197,
|
|
47,49,203,201,
|
|
130,141,167,156,
|
|
79,90,116,105,
|
|
29,30,212,211,
|
|
42,43,58,85,83,69,68,80,93,107,108,123,150,163,188,199,198,183,156,158,172,173,161,148,134,133,118,91,78,53,
|
|
46,48,197,195,
|
|
40,42,56,82,94,93,65,80,69,93,68,41,69,54,65,41,66,93,92,78,52,
|
|
149,151,165,191,203,202,174,189,178,202,177,150,178,163,174,150,175,202,201,187,161,
|
|
44,55,80,107,203,205,109,82,70,84,96,118,143,156,183,198,200,189,177,127,125,150,174,172,158,145,133,111,86,59,
|
|
29,31,68,106,158,198,239,237,196,156,104,66,
|
|
26,28,69,109,161,199,236,234,197,159,107,67,
|
|
42,44,148,146,
|
|
53,78,137,112,
|
|
59,86,131,104,
|
|
104,112,138,130,
|
|
68,70,174,172,
|
|
170,172,198,223,221,196,
|
|
104,109,135,130,
|
|
33,35,210,208,
|
|
42,44,59,86,84,70,68,80,78,53,
|
|
156,158,172,174,162,164,189,200,198,183,
|
|
78,80,158,156,
|
|
84,86,164,162,
|
|
42,44,174,177,203,195,169,172,68,91,65,
|
|
84,86,99,124,159,184,171,177,203,195,169,144,109,97,
|
|
84,86,99,124,151,164,162,149,135,133,107,109,97,
|
|
44,46,202,200,83,132,138,164,156,130,
|
|
39,47,73,67,106,130,
|
|
94,96,111,138,164,162,136,122,120,132,130,105,
|
|
39,47,73,199,197,71,65,
|
|
78,80,93,107,109,97,84,86,99,136,110,151,164,162,149,135,133,145,158,156,143,106,132,91,
|
|
78,80,106,120,122,110,84,86,164,162,136,137,148,146,131,104,
|
|
91,93,119,117,
|
|
92,94,120,118,
|
|
73,99,121,151,177,117,
|
|
78,86,112,104,
|
|
130,138,164,156,
|
|
65,91,121,143,169,125,
|
|
84,86,99,124,135,148,146,120,108,109,97,
|
|
172,174,200,198,
|
|
69,73,88,102,129,168,192,191,162,150,136,148,162,177,188,173,146,121,110,125,152,166,165,153,140,113,98,96,107,132,158,185,200,205,218,229,225,210,196,169,117,92,80,
|
|
43,45,205,203,83,164,158,133,137,83,197,195,
|
|
39,44,59,86,99,124,110,125,152,165,190,201,197,171,175,163,150,136,132,106,109,97,84,70,67,197,195,
|
|
43,46,61,75,86,71,70,81,106,132,159,174,175,164,179,191,202,199,184,170,143,91,66,54,
|
|
39,44,59,73,100,152,177,189,200,197,171,173,162,137,111,84,69,67,197,195,
|
|
39,47,73,67,106,110,136,132,171,177,203,195,
|
|
39,47,73,67,106,110,136,132,197,195,
|
|
123,127,179,177,151,149,
|
|
39,41,106,111,46,48,204,202,137,132,197,195,
|
|
39,43,69,68,172,173,199,195,169,170,66,65,
|
|
46,48,165,190,201,198,183,156,145,172,158,173,174,163,175,150,
|
|
39,41,119,46,48,121,204,202,133,145,197,195,
|
|
39,41,171,177,203,195,
|
|
39,41,149,148,48,50,206,204,100,175,174,93,197,195,
|
|
39,41,150,46,48,204,202,93,197,195,
|
|
43,46,61,75,102,154,179,191,202,200,174,175,164,139,113,86,71,70,81,106,132,159,174,200,199,184,170,143,91,66,54,
|
|
39,44,59,86,112,137,148,145,119,122,110,84,70,67,197,195,
|
|
177,188,230,219,
|
|
134,136,204,202,
|
|
78,80,93,107,109,124,151,164,162,149,135,133,118,91,
|
|
39,49,75,71,201,199,69,65,
|
|
39,41,158,156,
|
|
39,41,161,47,49,201,199,
|
|
39,41,200,198,44,46,204,202,49,51,204,202,44,46,200,198,
|
|
39,41,205,203,
|
|
47,49,197,195,
|
|
39,41,109,47,49,136,201,199,134,
|
|
39,47,73,171,177,203,195,169,71,65,
|
|
26,31,57,54,210,213,239,234,
|
|
26,28,217,215,
|
|
26,31,239,234,208,211,55,52,
|
|
43,117,119,82,123,125,
|
|
208,216,242,234,
|
|
39,41,82,80,
|
|
96,98,202,200,
|
|
94,95,110,137,163,188,199,173,161,135,121,120,132,158,172,173,199,198,183,156,130,105,
|
|
39,41,197,195,
|
|
94,95,110,137,135,121,120,132,158,172,173,161,163,188,199,198,183,156,130,105,
|
|
44,46,202,200,
|
|
94,95,110,137,163,158,132,135,121,120,132,158,172,174,188,199,198,183,156,130,105,
|
|
43,44,70,69,81,198,196,79,54,
|
|
91,96,122,117,
|
|
96,98,202,227,238,237,222,208,196,211,212,200,
|
|
94,95,110,137,202,200,135,121,120,132,105,
|
|
91,93,197,195,
|
|
39,41,67,65,
|
|
93,95,199,224,235,234,208,209,197,
|
|
41,43,69,67,
|
|
39,41,145,96,98,147,202,200,159,171,197,195,
|
|
99,100,115,142,207,205,140,126,125,137,110,
|
|
91,93,236,234,
|
|
96,98,241,239,
|
|
94,95,110,124,135,121,120,132,105,
|
|
94,95,110,124,136,121,120,132,119,133,134,149,163,188,199,198,183,169,157,172,173,161,174,160,159,144,130,105,
|
|
40,42,159,173,174,200,199,184,157,
|
|
91,93,158,172,173,161,96,98,202,200,187,188,199,198,183,156,
|
|
91,93,160,97,99,200,198,
|
|
91,93,200,198,96,98,204,202,101,103,204,202,149,200,198,
|
|
91,93,203,201,
|
|
97,99,197,195,
|
|
98,100,200,225,236,235,209,210,198,
|
|
91,93,174,199,
|
|
91,98,124,172,176,202,195,169,121,117,
|
|
31,32,58,57,69,95,120,132,146,173,199,213,214,240,239,224,197,171,144,158,143,117,106,118,93,67,42,
|
|
26,28,236,234,
|
|
26,27,42,69,95,122,108,123,149,160,148,173,199,224,235,234,208,209,197,171,146,134,120,93,67,53,52,
|
|
81,92,117,130,132,119,107,121,148,163,152,127,114,112,125,137,123,96,
|
|
44,47,62,87,72,71,82,107,133,160,175,176,165,192,203,200,185,171,144,92,67,55,
|
|
104,112,125,117,
|
|
130,138,151,143,
|
|
65,67,93,91,
|
|
117,119,223,221,
|
|
81,82,97,124,122,108,107,119,145,159,160,148,150,175,186,185,170,143,117,92,
|
|
68,69,199,198,
|
|
43,44,59,73,84,70,69,81,146,171,177,203,195,169,144,79,54,
|
|
104,110,136,130,
|
|
66,78,92,117,144,156,170,158,173,148,146,132,106,94,96,110,136,148,173,162,176,164,150,125,98,86,72,84,69,80,
|
|
118,126,139,131,
|
|
144,152,165,157,
|
|
143,145,236,234,
|
|
26,28,119,117,
|
|
43,45,71,69,
|
|
43,47,62,76,103,155,180,192,203,190,179,154,102,75,60,56,67,92,144,171,186,190,203,199,184,170,143,91,66,54,
|
|
70,72,87,114,112,98,96,108,134,148,150,138,140,165,176,174,159,132,106,81,
|
|
94,108,132,160,172,130,
|
|
97,111,135,163,175,133,
|
|
104,112,177,175,136,130,
|
|
43,47,60,56,67,92,144,171,186,190,203,199,184,170,143,91,66,54,
|
|
47,60,75,102,154,179,190,203,192,180,155,103,76,62,
|
|
68,72,100,126,138,178,176,136,150,148,122,124,98,96,174,172,
|
|
39,47,73,65,
|
|
55,57,161,159,
|
|
169,177,203,195,
|
|
91,99,125,117,
|
|
41,43,80,78,
|
|
156,184,236,234,
|
|
130,132,158,156,
|
|
196,197,211,224,236,234,221,222,210,223,209,
|
|
95,107,135,159,173,137,
|
|
92,104,132,156,170,134,
|
|
47,49,198,196,
|
|
41,42,94,95,108,105,92,93,54,66,53,
|
|
138,139,204,203,138,139,176,179,192,188,175,
|
|
137,139,153,166,190,192,205,202,189,165,152,150,
|
|
40,42,56,69,81,68,82,95,107,105,92,94,81,80,67,68,55,53,
|
|
120,122,148,160,159,171,184,198,200,188,190,215,226,224,209,182,169,144,133,
|
|
68,70,96,94,
|
|
3,5,32,31,
|
|
5,7,31,30,
|
|
4,6,34,32,18,30,28,
|
|
4,15,28,17,32,21,8,19,
|
|
2,4,30,28,
|
|
6,8,34,32,
|
|
4,6,20,46,58,57,29,44,33,57,32,5,33,18,29,5,30,57,56,42,16,
|
|
44,51,77,73,112,115,141,138,177,181,207,201,162,159,134,136,71,46,197,195,
|
|
200,201,215,228,240,238,225,226,214,227,213,
|
|
2,4,31,30,
|
|
4,6,30,29,
|
|
3,5,33,31,17,29,27,
|
|
1,3,29,27,
|
|
5,7,33,31,
|
|
0,2,29,28,
|
|
2,4,28,27,
|
|
40,44,70,69,173,174,200,196,170,171,67,66,
|
|
2,4,32,30,16,28,26,
|
|
0,2,28,26,
|
|
4,6,32,30,
|
|
40,45,60,74,101,153,178,190,201,198,172,174,163,138,112,85,70,68,198,196,
|
|
4,6,33,32,
|
|
66,78,176,164,
|
|
72,86,170,156,
|
|
48,50,197,195,
|
|
39,41,145,156,
|
|
39,41,67,70,85,112,138,163,174,171,145,148,136,110,96,93,197,195,
|
|
42,43,58,85,98,110,123,151,177,189,200,198,172,174,162,149,121,108,96,83,69,68,80,197,195,78,53,
|
|
41,43,70,69,
|
|
42,44,68,67,
|
|
42,44,72,70,56,68,66,
|
|
42,53,66,55,70,59,46,57,
|
|
40,42,68,66,
|
|
44,46,72,70,
|
|
29,31,45,71,83,82,54,69,58,82,57,30,58,43,54,30,55,82,81,67,41,
|
|
94,95,110,99,100,115,142,168,163,137,140,126,125,137,163,177,179,193,204,203,188,199,197,169,156,132,135,161,159,171,158,172,173,161,135,121,119,105,
|
|
198,199,213,226,238,236,223,224,212,225,211,
|
|
92,94,198,196,
|
|
39,41,68,67,
|
|
40,42,66,65,
|
|
93,95,199,197,
|
|
41,43,71,69,55,67,65,
|
|
41,53,68,95,137,124,84,56,
|
|
44,58,93,79,
|
|
146,148,174,172,
|
|
96,98,197,195,
|
|
43,45,69,68,
|
|
39,41,236,234,
|
|
45,47,73,71
|
|
};
|
|
static const uint8_t vfPolyLengths[] IN_FLASH_MEMORY = {
|
|
4,4,4,4,4,4,4,4,4,30,4,21,21,30,12,12,4,4,4,4,4,6,4,4,10,10,4,4,11,14,13,10,6,12,7,24,16,4,4,6,4,4,6,11,4,43,12,27,24,20,12,10,6,12,12,16,12,6,14,10,31,16,4,4,14,8,4,7,16,4,4,9,10,8,4,8,6,4,4,4,22,4,20,4,21,9,4,12,11,4,4,9,4,12,11,4,4,9,28,9,16,7,15,4,4,9,4,10,27,4,27,18,22,4,4,4,4,20,4,17,4,30,4,4,4,4,4,30,20,6,6,6,18,14,16,4,4,4,4,4,4,4,11,6,6,4,11,11,12,18,19,4,4,4,7,8,4,4,21,20,11,4,4,7,4,4,4,4,12,7,4,4,20,4,4,4,4,4,18,27,4,4,7,8,4,4,21,38,11,4,4,4,4,7,8,4,4,4,4,4,4
|
|
};
|
|
static const uint8_t vfCharPolys[] IN_FLASH_MEMORY = {
|
|
0,1,
|
|
2,3,
|
|
4,5,6,7,
|
|
8,9,
|
|
10,11,12,
|
|
13,
|
|
2,
|
|
14,
|
|
15,
|
|
16,17,18,
|
|
19,20,
|
|
21,
|
|
22,
|
|
0,
|
|
23,
|
|
24,25,26,27,
|
|
28,
|
|
29,24,
|
|
30,24,25,
|
|
31,
|
|
32,25,33,
|
|
33,25,24,26,
|
|
34,
|
|
35,24,25,
|
|
36,25,24,
|
|
37,0,
|
|
21,38,
|
|
39,
|
|
40,41,
|
|
42,
|
|
43,44,24,
|
|
45,
|
|
46,
|
|
47,
|
|
48,
|
|
49,
|
|
50,
|
|
51,
|
|
52,48,
|
|
53,
|
|
54,
|
|
55,
|
|
56,
|
|
57,
|
|
58,
|
|
59,
|
|
60,
|
|
61,
|
|
62,60,
|
|
63,61,
|
|
64,24,25,
|
|
65,
|
|
66,55,
|
|
67,
|
|
68,
|
|
69,70,
|
|
71,
|
|
72,
|
|
73,
|
|
74,
|
|
75,
|
|
76,
|
|
77,
|
|
78,
|
|
79,80,
|
|
80,81,
|
|
82,
|
|
80,83,
|
|
84,
|
|
85,86,
|
|
87,80,
|
|
88,81,
|
|
89,90,
|
|
91,92,
|
|
93,
|
|
81,
|
|
88,89,94,
|
|
88,89,
|
|
80,
|
|
80,95,
|
|
80,96,
|
|
97,89,
|
|
98,
|
|
99,86,
|
|
100,
|
|
101,
|
|
102,
|
|
103,104,
|
|
105,106,
|
|
107,
|
|
108,
|
|
109,
|
|
110,
|
|
111,
|
|
112,113,114,
|
|
115,116,
|
|
117,118,
|
|
119,120,
|
|
121,
|
|
122,123,71,
|
|
124,125,
|
|
90,126,
|
|
127,128,
|
|
129,130,
|
|
131,
|
|
132,133,134,
|
|
135,
|
|
11,
|
|
136,137,138,
|
|
139,
|
|
140,100,
|
|
141,
|
|
142,
|
|
143,144,
|
|
145,146,147,
|
|
145,148,146,
|
|
145,147,149,
|
|
150,151,
|
|
152,46,
|
|
153,46,
|
|
154,46,
|
|
155,46,
|
|
156,157,46,
|
|
158,46,
|
|
159,
|
|
48,160,
|
|
50,161,
|
|
50,162,
|
|
50,163,
|
|
50,164,165,
|
|
54,166,
|
|
54,167,
|
|
168,169,
|
|
168,170,171,
|
|
172,22,
|
|
59,155,
|
|
173,60,
|
|
153,60,
|
|
154,60,
|
|
155,60,
|
|
156,157,60,
|
|
174,175,
|
|
176,60,
|
|
152,177,55,
|
|
162,177,55,
|
|
154,177,55,
|
|
156,157,177,55,
|
|
71,153,
|
|
178,
|
|
179,
|
|
180,79,80,
|
|
181,79,80,
|
|
182,79,80,
|
|
183,79,80,
|
|
184,185,79,80,
|
|
79,80,186,
|
|
187,
|
|
82,188,
|
|
84,180,
|
|
84,181,
|
|
84,182,
|
|
84,184,185,
|
|
189,190,
|
|
89,191,
|
|
192,193,
|
|
192,90,126,
|
|
80,194,195,
|
|
183,88,89,
|
|
80,180,
|
|
80,181,
|
|
80,182,
|
|
80,183,
|
|
80,184,185,
|
|
19,151,196,
|
|
80,197,
|
|
100,180,
|
|
100,181,
|
|
100,182,
|
|
100,184,185,
|
|
105,106,198,
|
|
199,80,
|
|
105,106,92,200
|
|
};
|
|
static const uint8_t vfCharLengths[] IN_FLASH_MEMORY = {
|
|
2,2,4,2,3,1,1,1,1,3,2,1,1,1,1,4,1,2,3,1,3,4,1,3,3,2,2,1,2,1,3,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,2,3,1,2,1,1,2,1,1,1,1,1,1,1,1,2,2,1,2,1,2,2,2,2,2,1,1,3,2,1,2,2,2,1,2,1,1,1,2,2,1,1,1,1,1,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,1,3,2,0,2,2,0,2,1,0,3,1,1,3,0,0,1,2,0,1,1,0,0,2,3,3,3,2,2,2,2,2,3,2,1,2,2,2,2,3,2,2,2,3,2,2,2,2,2,2,3,2,2,3,3,3,4,2,1,1,3,3,3,3,4,3,1,2,2,2,2,3,2,2,2,3,3,3,2,2,2,2,3,3,2,2,2,2,3,3,2,4
|
|
};
|
|
|
|
static const uint8_t *vfGetPolyPtr(unsigned char index, int *polyLen) {
|
|
if (index >= sizeof(vfPolyLengths)) return NULL;
|
|
|
|
*polyLen = vfPolyLengths[index];
|
|
const uint8_t *ptr = vfPolyVerts;
|
|
for (unsigned char i=0; i < index; ++i) {
|
|
ptr += vfPolyLengths[i];
|
|
}
|
|
return ptr;
|
|
}
|
|
|
|
static const uint8_t *vfGetCharPtr(char sch, int *charLen) {
|
|
unsigned char ch = (unsigned char)sch;
|
|
if (ch<vfFirstChar || ch>vfLastChar) return NULL;
|
|
ch = (unsigned char)(ch - vfFirstChar);
|
|
|
|
const uint8_t *ptr = vfCharPolys;
|
|
for (unsigned char i=0; i < ch; ++i) {
|
|
ptr += vfCharLengths[i];
|
|
}
|
|
*charLen = vfCharLengths[ch];
|
|
return ptr;
|
|
}
|
|
|
|
// prints character, returns width
|
|
unsigned int vfGetCharFromPtr(graphicsPolyCallback callback, void *callbackData, int x1, int y1, int sizex, int sizey, const uint8_t *charPtr, int charLen) {
|
|
x1 = (x1<<4) - 8;
|
|
y1 = (y1<<4) - 8;
|
|
int w = 0;
|
|
for (int i = 0; i < charLen; ++i) {
|
|
short poly[86];
|
|
int polyLen;
|
|
const uint8_t *p = vfGetPolyPtr(charPtr[i], &polyLen);
|
|
for (int j = 0; j < polyLen; ++j) {
|
|
uint8_t vertex = p[j];
|
|
int vx = vertex % VF_CHAR_WIDTH;
|
|
int vy = vertex / VF_CHAR_WIDTH;
|
|
if (vx>w) w=vx;
|
|
poly[j*2 ] = (short)(x1 + vx*sizex*16/VF_SCALE);
|
|
poly[j*2+1] = (short)(y1 + (vy+VF_OFFSET_Y)*sizey*16/VF_SCALE);
|
|
}
|
|
callback(callbackData, polyLen, poly);
|
|
}
|
|
return (unsigned int)(((w+1+VF_CHAR_SPACING)*sizex*16/VF_SCALE+7)>>4);
|
|
}
|
|
|
|
// returns the width of a character
|
|
unsigned int graphicsVectorCharWidth(unsigned int sizex, char ch) {
|
|
int charLen;
|
|
const uint8_t *charPtr = vfGetCharPtr(ch, &charLen);
|
|
if (!charPtr) return (unsigned int)(sizex/2); // space
|
|
int w = 0;
|
|
for (int i = 0; i < charLen; ++i) {
|
|
int polyLen;
|
|
const uint8_t *p = vfGetPolyPtr(charPtr[i], &polyLen);
|
|
for (int j = 0; j < polyLen; ++j) {
|
|
uint8_t vertex = p[j];
|
|
int vx = vertex % VF_CHAR_WIDTH;
|
|
if (vx>w) w=vx;
|
|
}
|
|
}
|
|
return ((unsigned int)(w+1+VF_CHAR_SPACING)*sizex*16/VF_SCALE+7)>>4;
|
|
}
|
|
|
|
// prints character, returns width
|
|
unsigned int graphicsGetVectorChar(graphicsPolyCallback callback, void *callbackData, int x1, int y1, int sizex, int sizey, char ch) {
|
|
int charLen;
|
|
const uint8_t *charPtr = vfGetCharPtr(ch, &charLen);
|
|
if (!charPtr) return (unsigned int)(sizex/2); // space
|
|
return vfGetCharFromPtr(callback, callbackData, x1, y1, sizex, sizey, charPtr, charLen);
|
|
}
|
|
|
|
#endif
|