ref: 18b2e53f5039cd7da7541ad622c0923c7d4e2872
parent: 6f19daadfe93ffa9dadce1224dad58b2cb7951ee
author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
date: Wed Jul 24 22:51:00 EDT 2024
support fonts containing both outlines and bitmaps; use the latter as fallback
--- a/otf.c.in
+++ b/otf.c.in
@@ -775,18 +775,11 @@
int off, len, i;
Glyf *g;
- if((g = calloc(1, sizeof(*g))) == nil){
- werrstr("no memory");
- goto err;
- }
if(index < 0 || index >= o->numGlyphs){
werrstr("index out of range");
- goto err;
+ return nil;
}
- g->index = index;
- if(o->td.eblc != nil && o->td.ebdt != nil)
- return bitglyf(o, g, ppemX, ppemY);
-
+ g = nil;
if(o->td.head == nil){
werrstr("no head table");
goto err;
@@ -795,6 +788,11 @@
werrstr("no loca table");
goto err;
}
+ if((g = calloc(1, sizeof(*g))) == nil){
+ werrstr("no memory");
+ return nil;
+ }
+ g->index = index;
if(o->glyf == nil){
for(i = 0; i < o->td.numTables; i++){
TableRecord *rec = o->td.tableRecords+i;
@@ -832,8 +830,19 @@
return g;
err:
free(g);
+ g = nil;
otfpopranges(o);
- return nil;
+
+ if(o->td.eblc != nil && o->td.ebdt != nil){
+ if((g = calloc(1, sizeof(*g))) == nil){
+ werrstr("no memory");
+ goto err;
+ }
+ g->index = index;
+ g = bitglyf(o, g, ppemX, ppemY);
+ }
+
+ return g;
}
int
--- a/plan9/otf.c
+++ b/plan9/otf.c
@@ -776,18 +776,11 @@
int off, len, i;
Glyf *g;
- if((g = calloc(1, sizeof(*g))) == nil){
- werrstr("no memory");
- goto err;
- }
if(index < 0 || index >= o->numGlyphs){
werrstr("index out of range");
- goto err;
+ return nil;
}
- g->index = index;
- if(o->td.eblc != nil && o->td.ebdt != nil)
- return bitglyf(o, g, ppemX, ppemY);
-
+ g = nil;
if(o->td.head == nil){
werrstr("no head table");
goto err;
@@ -796,6 +789,11 @@
werrstr("no loca table");
goto err;
}
+ if((g = calloc(1, sizeof(*g))) == nil){
+ werrstr("no memory");
+ return nil;
+ }
+ g->index = index;
if(o->glyf == nil){
for(i = 0; i < o->td.numTables; i++){
TableRecord *rec = o->td.tableRecords+i;
@@ -833,8 +831,19 @@
return g;
err:
free(g);
+ g = nil;
otfpopranges(o);
- return nil;
+
+ if(o->td.eblc != nil && o->td.ebdt != nil){
+ if((g = calloc(1, sizeof(*g))) == nil){
+ werrstr("no memory");
+ goto err;
+ }
+ g->index = index;
+ g = bitglyf(o, g, ppemX, ppemY);
+ }
+
+ return g;
}
int