Skip to content

Commit 808f7af

Browse files
committed
Added updated font map with more symbols
1 parent 3050d7b commit 808f7af

File tree

4 files changed

+2226
-1421
lines changed

4 files changed

+2226
-1421
lines changed

libs/graphics/vector_font.c

Lines changed: 221 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
#include "graphics.h"
1717

1818
const uint8_t vfFirstChar = 33;
19-
const uint8_t vfLastChar = 176;
19+
const uint8_t vfLastChar = 231;
2020
#define VF_END_OF_POLY 0xFE
2121
#define VF_END_OF_CHAR 0xFF
2222
#define VF_SCALE 12
@@ -48,7 +48,7 @@ static const uint8_t vfPolys[] IN_FLASH_MEMORY = {
4848
// 38
4949
102,88,57,24,6,38,55,70,VF_END_OF_POLY,
5050
166,164,147,131,116,102,70,84,98,129,145,178,196,198,VF_END_OF_POLY,
51-
198,184,169,107,105,136,166,VF_END_OF_POLY,
51+
198,184,169,107,105,136,151,166,VF_END_OF_POLY,
5252
6,20,51,84,201,203,86,53,38,VF_END_OF_CHAR,
5353
// 39
5454
1,3,67,65,VF_END_OF_CHAR,
@@ -58,14 +58,15 @@ static const uint8_t vfPolys[] IN_FLASH_MEMORY = {
5858
33,67,100,148,179,209,241,227,197,150,102,53,19,1,VF_END_OF_CHAR,
5959
// 42
6060
132,134,6,4,VF_END_OF_POLY,
61-
36,18,49,67,81,114,100,VF_END_OF_POLY,
62-
38,24,57,71,89,120,102,VF_END_OF_CHAR,
61+
120,89,18,49,VF_END_OF_POLY,
62+
114,81,24,57,VF_END_OF_CHAR,
6363
// 43
64-
36,84,81,113,116,164,166,118,121,89,86,38,VF_END_OF_CHAR,
64+
81,89,121,113,VF_END_OF_POLY,
65+
38,166,164,36,VF_END_OF_CHAR,
6566
// 44
6667
225,227,196,164,162,194,VF_END_OF_CHAR,
6768
// 45
68-
81,87,119,113,VF_END_OF_CHAR,
69+
81,86,118,113,VF_END_OF_CHAR,
6970
// 46
7071
161,163,195,193,VF_END_OF_CHAR,
7172
// 47
@@ -84,8 +85,9 @@ static const uint8_t vfPolys[] IN_FLASH_MEMORY = {
8485
18,49,51,36,4,VF_END_OF_POLY,
8586
178,145,147,164,196,VF_END_OF_CHAR,
8687
// 52
87-
6,118,113,145,150,198,200,152,153,121,120,8,VF_END_OF_POLY,
88-
113,115,8,6,VF_END_OF_CHAR,
88+
6,198,200,8,VF_END_OF_POLY,
89+
113,115,8,6,VF_END_OF_POLY,
90+
113,121,153,145,VF_END_OF_CHAR,
8991
// 53
9092
115,113,1,9,41,35,83,100,VF_END_OF_POLY,
9193
82,68,70,88,121,153,184,198,196,164,166,151,119,102,100,VF_END_OF_POLY,
@@ -128,7 +130,7 @@ static const uint8_t vfPolys[] IN_FLASH_MEMORY = {
128130
10,28,62,95,143,174,188,187,156,141,109,76,59,41,VF_END_OF_CHAR,
129131
// 65
130132
195,193,5,7,VF_END_OF_POLY,
131-
7,54,152,201,203,VF_END_OF_POLY,
133+
7,54,201,203,VF_END_OF_POLY,
132134
116,147,153,120,VF_END_OF_CHAR,
133135
// 66
134136
1,193,195,3,VF_END_OF_POLY,
@@ -152,7 +154,7 @@ static const uint8_t vfPolys[] IN_FLASH_MEMORY = {
152154
1,193,195,115,120,88,83,3,VF_END_OF_POLY,
153155
8,10,202,200,VF_END_OF_CHAR,
154156
// 73
155-
2,1,33,34,162,161,193,197,165,164,36,37,5,4,VF_END_OF_CHAR,
157+
1,33,34,162,161,193,197,165,164,36,37,5,VF_END_OF_CHAR,
156158
// 74
157159
199,196,178,145,131,164,147,165,166,VF_END_OF_POLY,
158160
10,154,185,199,166,152,167,136,8,VF_END_OF_CHAR,
@@ -181,8 +183,7 @@ static const uint8_t vfPolys[] IN_FLASH_MEMORY = {
181183
39,38,52,83,115,148,166,167,200,197,179,162,129,65,34,19,5,8,VF_END_OF_CHAR,
182184
// 82
183185
1,193,195,3,VF_END_OF_POLY,
184-
35,38,55,87,102,99,131,134,120,89,57,24,6,3,VF_END_OF_POLY,
185-
117,200,202,119,VF_END_OF_CHAR,
186+
35,38,55,87,102,99,131,134,117,200,202,119,135,120,89,57,24,6,3,VF_END_OF_CHAR,
186187
// 83
187188
4,18,49,65,98,116,118,135,151,166,164,196,198,184,153,137,104,86,84,67,51,36,38,6,VF_END_OF_POLY,
188189
147,164,196,178,145,VF_END_OF_POLY,
@@ -240,8 +241,8 @@ static const uint8_t vfPolys[] IN_FLASH_MEMORY = {
240241
// 102
241242
194,98,97,65,66,50,19,5,6,38,37,52,68,70,102,100,196,VF_END_OF_CHAR,
242243
// 103
243-
213,212,195,193,226,244,245,231,200,56,54,70,85,102,134,149,166,198,VF_END_OF_POLY,
244-
85,84,99,131,148,149,167,181,180,162,129,97,66,52,53,71,VF_END_OF_CHAR,
244+
213,212,194,209,226,244,245,231,200,72,70,86,101,118,150,165,182,198,VF_END_OF_POLY,
245+
101,100,115,147,164,165,183,197,196,178,145,113,82,68,69,87,VF_END_OF_CHAR,
245246
// 104
246247
100,101,118,198,200,120,87,69,68,82,VF_END_OF_POLY,
247248
83,3,1,193,195,115,100,VF_END_OF_CHAR,
@@ -311,9 +312,9 @@ static const uint8_t vfPolys[] IN_FLASH_MEMORY = {
311312
// 127
312313
VF_END_OF_CHAR,
313314
// 128
314-
39,38,52,68,70,86,84,116,118,134,132,148,166,167,200,197,179,162,130,128,112,114,82,80,64,66,34,19,5,8,VF_END_OF_POLY,
315-
167,200,186,171,153,VF_END_OF_POLY,
316-
39,8,26,43,57,VF_END_OF_CHAR,
315+
6,20,35,66,82,81,97,98,114,113,129,130,163,180,198,201,168,167,149,132,137,121,116,100,105,89,84,53,39,40,9,VF_END_OF_POLY,
316+
168,201,187,154,VF_END_OF_POLY,
317+
40,9,27,58,VF_END_OF_CHAR,
317318
// 129
318319
VF_END_OF_CHAR,
319320
// 130
@@ -379,38 +380,197 @@ VF_END_OF_CHAR,
379380
// 160
380381
VF_END_OF_CHAR,
381382
// 161
382-
VF_END_OF_CHAR,
383+
65,67,35,33,VF_END_OF_POLY,
384+
225,227,99,97,VF_END_OF_CHAR,
383385
// 162
384-
VF_END_OF_CHAR,
386+
53,71,104,102,85,VF_END_OF_POLY,
387+
180,162,129,97,66,52,84,99,131,148,VF_END_OF_POLY,
388+
149,134,136,167,181,VF_END_OF_POLY,
389+
36,37,197,196,VF_END_OF_CHAR,
385390
// 163
386-
VF_END_OF_CHAR,
391+
38,55,41,24,6,VF_END_OF_POLY,
392+
130,50,19,5,6,38,37,52,132,163,169,201,193,161,VF_END_OF_POLY,
393+
81,87,119,113,VF_END_OF_CHAR,
387394
// 164
388-
VF_END_OF_CHAR,
395+
97,66,49,34,51,37,70,68,83,115,132,134,165,147,162,145,130,VF_END_OF_POLY,
396+
105,72,57,40,55,37,70,87,119,134,165,151,168,153,136,VF_END_OF_CHAR,
389397
// 165
390-
VF_END_OF_CHAR,
398+
11,119,199,197,117,9,VF_END_OF_POLY,
399+
1,117,119,3,VF_END_OF_POLY,
400+
98,106,122,114,VF_END_OF_POLY,
401+
130,138,154,146,VF_END_OF_CHAR,
391402
// 166
392-
VF_END_OF_CHAR,
403+
145,147,243,241,VF_END_OF_POLY,
404+
1,3,99,97,VF_END_OF_CHAR,
393405
// 167
394406
VF_END_OF_CHAR,
395407
// 168
396-
VF_END_OF_CHAR,
408+
33,1,3,35,VF_END_OF_POLY,
409+
37,5,7,39,VF_END_OF_CHAR,
397410
// 169
398-
VF_END_OF_CHAR,
411+
25,21,35,66,130,163,181,185,201,197,179,162,129,65,34,19,5,9,VF_END_OF_POLY,
412+
25,43,76,140,171,185,201,187,172,141,77,44,27,9,VF_END_OF_POLY,
413+
168,166,148,115,83,52,38,40,72,70,85,117,134,136,VF_END_OF_POLY,
414+
40,58,91,89,72,VF_END_OF_POLY,
415+
136,121,123,154,168,VF_END_OF_CHAR,
399416
// 170
400417
VF_END_OF_CHAR,
401418
// 171
402-
VF_END_OF_CHAR,
419+
68,113,164,149,115,85,VF_END_OF_POLY,
420+
71,116,167,152,118,88,VF_END_OF_CHAR,
403421
// 172
404-
VF_END_OF_CHAR,
422+
81,113,119,167,169,89,VF_END_OF_CHAR,
405423
// 173
406424
VF_END_OF_CHAR,
407425
// 174
408-
VF_END_OF_CHAR,
426+
25,21,35,66,130,163,181,185,201,197,179,162,129,65,34,19,5,9,VF_END_OF_POLY,
427+
25,43,76,140,171,185,201,187,172,141,77,44,27,9,VF_END_OF_POLY,
428+
36,164,166,38,VF_END_OF_POLY,
429+
70,72,104,102,134,136,119,168,170,121,106,74,40,38,VF_END_OF_CHAR,
409430
// 175
410-
VF_END_OF_CHAR,
431+
1,9,41,33,VF_END_OF_CHAR,
411432
// 176
412-
3,5,22,54,69,67,51,53,21,19,VF_END_OF_POLY,
413-
67,50,18,3,VF_END_OF_CHAR,
433+
2,4,21,53,68,66,50,52,20,18,VF_END_OF_POLY,
434+
66,49,17,2,VF_END_OF_CHAR,
435+
// 177
436+
20,68,65,97,100,148,150,102,105,73,70,22,VF_END_OF_POLY,
437+
161,169,201,193,VF_END_OF_CHAR,
438+
// 178
439+
VF_END_OF_CHAR,
440+
// 179
441+
VF_END_OF_CHAR,
442+
// 180
443+
5,3,49,51,VF_END_OF_CHAR,
444+
// 181
445+
165,164,178,196,197,183,VF_END_OF_POLY,
446+
182,198,200,72,70,150,165,VF_END_OF_POLY,
447+
179,243,241,65,67,147,164,VF_END_OF_CHAR,
448+
// 182
449+
VF_END_OF_CHAR,
450+
// 183
451+
113,115,147,145,VF_END_OF_CHAR,
452+
// 184
453+
194,195,212,228,243,241,225,226,211,227,210,VF_END_OF_CHAR,
454+
// 185
455+
VF_END_OF_CHAR,
456+
// 186
457+
VF_END_OF_CHAR,
458+
// 187
459+
69,120,165,148,118,84,VF_END_OF_POLY,
460+
66,117,162,145,115,81,VF_END_OF_CHAR,
461+
// 188
462+
9,11,196,194,VF_END_OF_POLY,
463+
67,66,82,85,69,68,4,3,VF_END_OF_POLY,
464+
18,3,19,34,VF_END_OF_POLY,
465+
167,183,187,171,168,122,121,VF_END_OF_POLY,
466+
121,201,202,122,VF_END_OF_CHAR,
467+
// 189
468+
9,11,196,194,VF_END_OF_POLY,
469+
203,187,185,155,139,122,120,136,138,154,184,200,VF_END_OF_POLY,
470+
67,66,82,85,69,68,4,3,VF_END_OF_POLY,
471+
18,3,19,34,VF_END_OF_CHAR,
472+
// 190
473+
9,11,196,194,VF_END_OF_POLY,
474+
167,183,187,171,168,122,121,VF_END_OF_POLY,
475+
121,201,202,122,VF_END_OF_POLY,
476+
2,18,20,36,35,51,52,68,66,82,84,69,53,36,52,37,21,4,VF_END_OF_CHAR,
477+
// 191
478+
216,185,183,198,230,VF_END_OF_POLY,
479+
230,198,196,179,163,148,149,134,102,100,116,130,161,177,210,228,VF_END_OF_POLY,
480+
70,68,36,38,VF_END_OF_CHAR,
481+
// 192
482+
VF_END_OF_CHAR,
483+
// 193
484+
VF_END_OF_CHAR,
485+
// 194
486+
VF_END_OF_CHAR,
487+
// 195
488+
VF_END_OF_CHAR,
489+
// 196
490+
VF_END_OF_CHAR,
491+
// 197
492+
VF_END_OF_CHAR,
493+
// 198
494+
195,193,6,8,VF_END_OF_POLY,
495+
7,119,116,147,151,199,205,173,169,121,124,92,89,41,45,13,VF_END_OF_CHAR,
496+
// 199
497+
4,18,33,64,128,161,178,196,197,213,230,214,229,228,244,246,231,215,198,199,166,165,147,114,82,51,37,38,7,VF_END_OF_POLY,
498+
166,199,185,170,152,VF_END_OF_POLY,
499+
38,7,25,42,56,VF_END_OF_CHAR,
500+
// 200
501+
VF_END_OF_CHAR,
502+
// 201
503+
VF_END_OF_CHAR,
504+
// 202
505+
VF_END_OF_CHAR,
506+
// 203
507+
VF_END_OF_CHAR,
508+
// 204
509+
VF_END_OF_CHAR,
510+
// 205
511+
VF_END_OF_CHAR,
512+
// 206
513+
VF_END_OF_CHAR,
514+
// 207
515+
VF_END_OF_CHAR,
516+
// 208
517+
36,38,56,89,121,152,166,164,196,199,185,170,139,75,42,25,7,4,VF_END_OF_POLY,
518+
4,2,194,196,VF_END_OF_POLY,
519+
81,86,118,113,VF_END_OF_CHAR,
520+
// 209
521+
VF_END_OF_CHAR,
522+
// 210
523+
VF_END_OF_CHAR,
524+
// 211
525+
VF_END_OF_CHAR,
526+
// 212
527+
VF_END_OF_CHAR,
528+
// 213
529+
VF_END_OF_CHAR,
530+
// 214
531+
VF_END_OF_CHAR,
532+
// 215
533+
49,34,153,168,VF_END_OF_POLY,
534+
40,57,162,145,VF_END_OF_CHAR,
535+
// 216
536+
39,38,52,83,115,148,166,167,200,197,179,162,129,65,34,19,5,8,VF_END_OF_POLY,
537+
39,57,90,122,153,167,200,186,171,140,76,43,26,8,VF_END_OF_POLY,
538+
193,10,12,195,VF_END_OF_CHAR,
539+
// 217
540+
VF_END_OF_CHAR,
541+
// 218
542+
VF_END_OF_CHAR,
543+
// 219
544+
VF_END_OF_CHAR,
545+
// 220
546+
VF_END_OF_CHAR,
547+
// 221
548+
VF_END_OF_CHAR,
549+
// 222
550+
1,3,195,193,VF_END_OF_POLY,
551+
163,166,152,121,89,56,38,35,67,70,87,119,134,131,VF_END_OF_CHAR,
552+
// 223
553+
36,37,54,70,85,101,118,135,151,166,164,196,198,184,169,137,120,103,87,72,56,23,5,4,VF_END_OF_POLY,
554+
18,49,193,195,51,36,4,VF_END_OF_CHAR,
555+
// 224
556+
VF_END_OF_CHAR,
557+
// 225
558+
VF_END_OF_CHAR,
559+
// 226
560+
VF_END_OF_CHAR,
561+
// 227
562+
VF_END_OF_CHAR,
563+
// 228
564+
VF_END_OF_CHAR,
565+
// 229
566+
VF_END_OF_CHAR,
567+
// 230
568+
73,105,106,123,115,145,161,195,197,165,164,147,163,148,157,125,92,74,VF_END_OF_POLY,
569+
68,82,99,101,118,150,165,197,183,201,202,188,171,169,152,120,105,73,87,69,VF_END_OF_CHAR,
570+
// 231
571+
69,87,120,118,101,VF_END_OF_POLY,
572+
68,82,113,145,178,196,212,229,213,228,227,243,245,230,214,197,165,164,147,115,100,101,69,VF_END_OF_POLY,
573+
165,150,152,183,197,VF_END_OF_CHAR,
414574
};
415575

416576
static const uint8_t vfAccentPolys[] IN_FLASH_MEMORY = {
@@ -428,43 +588,45 @@ static const uint8_t vfAccentPolys[] IN_FLASH_MEMORY = {
428588
// 245
429589
69,71,88,120,135,133,117,119,87,85,VF_END_OF_POLY,
430590
133,116,84,69,VF_END_OF_CHAR,
591+
// 246
592+
65,67,195,193,VF_END_OF_CHAR,
431593

432594
};
433-
static const uint8_t vfAccentPolyIndices[] = {0,5,10,17,26,36};
595+
static const uint8_t vfAccentPolyIndices[] = {0,5,10,17,26,36,52};
434596

435597
static const uint8_t *vfGetCharPtr(char sch, const uint8_t **accentPtr, int *accentX, int *accentY) {
436598
unsigned char ch = (unsigned char)sch;
437599
if (ch>=192) {
438-
// 012345 correspond to 0=grave,1=acute,2=circumflex,3=tilde,4=umlaut,5=ring
439-
char *chrMap = "AAAAAAACEEEEIIIIDNOOOOOxOUUUUYIBaaaaaaaceeeeiiiionooooo-ouuuuyly";
440-
char *accMap = "012345E,01240124-301234 /01241o 012345e,01240124+301234:/01241p4";
600+
// 012345 correspond to 0=grave,1=acute,2=circumflex,3=tilde,4=umlaut,5=ring,6=i without dot
601+
char *chrMap = "AAAAAA EEEEIIII NOOOOO UUUUY aaaaaa eeeeiiiionooooo uuuuy y";
602+
char *accMap = "012345 01240124 301234 01241 012345 01240124+301234 01241 4";
441603
if (ch>=192) {
442604
int i = ch-192;
443-
ch = (unsigned char)chrMap[i];
444-
if (accentPtr) {
445-
char acc = accMap[i];
446-
*accentX = 0;
447-
*accentY = 0;
448-
if (acc>='0' && acc<='5') {
449-
*accentPtr = &vfAccentPolys[vfAccentPolyIndices[acc-'0']];
450-
if (ch>='a' && ch<='z') { // lowercase
451-
*accentX = -2;
452-
*accentY = -4;
453-
} else { // uppercase
454-
*accentY = -8;
605+
unsigned char chReplacement = (unsigned char)chrMap[i];
606+
if (chReplacement!=' ') {
607+
ch = chReplacement;
608+
if (accentPtr) {
609+
char acc = accMap[i];
610+
*accentX = 0;
611+
*accentY = 0;
612+
if (acc>='0' && acc<='5') {
613+
*accentPtr = &vfAccentPolys[vfAccentPolyIndices[acc-'0']];
614+
if (ch>='a' && ch<='z') { // lowercase
615+
*accentX = -2;
616+
*accentY = -4;
617+
} else { // uppercase
618+
*accentY = -8;
619+
}
620+
if (ch=='I') *accentX -= 3;
621+
if (ch=='i') {
622+
*accentX -= 2;
623+
return &vfAccentPolys[vfAccentPolyIndices[6]]; // use i without .
624+
}
625+
} else if (acc!=' ') {
626+
*accentPtr = vfGetCharPtr(acc, NULL,NULL,NULL);
627+
if (acc=='+') *accentY = -4;
455628
}
456-
if (ch=='I') *accentX -= 3;
457-
if (ch=='i') *accentX -= 2;
458-
} else if (acc!=' ') {
459-
*accentPtr = vfGetCharPtr(acc, NULL,NULL,NULL);
460-
if (acc=='E') *accentX = 8;
461-
if (acc=='e') *accentX = 4;
462-
if (acc==',') *accentX = 4;
463-
if (acc=='+') *accentY = -4;
464-
if (acc==':') { *accentX = 2;*accentY = -2; }
465-
if (acc=='o') { *accentX = 2;*accentY = -1; }
466629
}
467-
468630
}
469631
}
470632
}
@@ -485,7 +647,7 @@ static const uint8_t *vfGetCharPtr(char sch, const uint8_t **accentPtr, int *acc
485647
unsigned int vfDrawCharPtr(JsGraphics *gfx, int x1, int y1, int size, const uint8_t *charPtr) {
486648
x1 = x1<<4;
487649
y1 = y1<<4;
488-
short poly[60];
650+
short poly[62];
489651
int polyLen = 0;
490652
int w = 0;
491653
while (*charPtr!=VF_END_OF_CHAR) {

0 commit comments

Comments
 (0)