Clone in a terminal:
Commit a583abe
Johan Mattsson - 2017-07-05T10:47:06+00:00
a583abe51c48cb6ad71be63d394d7e8cda5d8874johan.mattsson.m@gmail.com

Ignore kerning for missing glyphs

Changed files (2)

Diff

diff --git a/libbirdfont/OpenFontFormat/GlyfTable.vala b/libbirdfont/OpenFontFormat/GlyfTable.valaindex d93b0b7..2c908d0 100644--- a/libbirdfont/OpenFontFormat/GlyfTable.vala+++ b/libbirdfont/OpenFontFormat/GlyfTable.vala@@ -35,7 +35,7 @@ public class GlyfTable : OtfTable { 	public HeadTable head_table; 	public HmtxTable hmtx_table; 	public LocaTable loca_table;-	public CmapTable cmap_table; // cmap and post is null when inistialized and set in parse method+	public CmapTable cmap_table; // cmap and post is tables are null when initialized and set in parse method 	public PostTable post_table; 	public KernTable kern_table; 	diff --git a/libbirdfont/OpenFontFormat/KernList.vala b/libbirdfont/OpenFontFormat/KernList.valaindex 94aae80..1b9fd6a 100644--- a/libbirdfont/OpenFontFormat/KernList.vala+++ b/libbirdfont/OpenFontFormat/KernList.vala@@ -51,20 +51,36 @@ public class KernList : GLib.Object { 				warning ("No name for glyph"); 			} 			+			+			string glyph_name = kerning_pair.character.get_name (); 			current_pairs = new PairFormat1 ();-			gid_left = (uint16) glyf_table.get_gid (kerning_pair.character.get_name ());+			gid_left = (uint16) glyf_table.get_gid (glyph_name);++			if (unlikely (gid_left == -1)) {+				warning("Ignoring kerning for missing character: $(glyph_name)");			+				return;+			}		+			 			current_pairs.left = gid_left; 			pairs.add (current_pairs); 			 			if (unlikely (kerning_pair.kerning.size == 0)) {-				warning (@"No kerning pairs for character: $((kerning_pair.character.get_name ()))");+				warning (@"No kerning pairs for character (left): $(glyph_name)"); 			} 			 			i = 0; 			num_pairs += kerning_pair.kerning.size; 			foreach (Kerning k in kerning_pair.kerning) {-				gid_right = (uint16) glyf_table.get_gid (k.get_glyph ().get_name ());-				current_pairs.pairs.add (new Kern (gid_left, gid_right, (int16) Math.rint (k.val * HeadTable.UNITS)));+				string right_name = k.get_glyph ().get_name ();+				gid_right = (uint16) glyf_table.get_gid (right_name);++				if (unlikely (gid_right == -1)) {+					warning("Ignoring kerning for missing character (right): $(right_name)");+				} else {+					int16 kerning_value = (int16) Math.rint (k.val * HeadTable.UNITS);+					Kern kern = new Kern (gid_left, gid_right, kerning_value);+					current_pairs.pairs.add (kern);+				}							 			} 			 			current_pairs.pairs.sort ((a, b) => {

Contact

Email: johan.mattsson.m@gmail.com
Mastodon: typo.social/@birdfont
GitHub: johanmattssonm
LinkedIn: johan-mattsson-2ab324112