shithub: fnt

Download patch

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