Clone in a terminal:
Commit 2c336b6
Johan Mattsson - 2015-04-13T21:48:22+00:00
2c336b69def42b35e718e513efd8301942e93fc7johan.mattsson.m@gmail.com

Export kerning pairs from kerning classes Fixes bug 79

Changed files (2)

Diff

diff --git a/libbirdfont/KerningClasses.vala b/libbirdfont/KerningClasses.valaindex f355149..726a1ed 100644--- a/libbirdfont/KerningClasses.vala+++ b/libbirdfont/KerningClasses.vala@@ -230,32 +230,37 @@ public class KerningClasses : GLib.Object { 		string f = ""; 		string n = "";		 		GlyphRange gf, gn;-+		GlyphRange gr;+		GlyphRange gl;+		int len;+		 		foreach (string l in get_spacing_class (first)) { 			foreach (string r in get_spacing_class (next)) {-				f = GlyphRange.serialize (l);+				f = GlyphRange.serialize (f); 				n = GlyphRange.serialize (r);	 				if (single_kerning.has_key (@"$f - $n")) { 					return true; 				} 			} 		}-			-		gf = new GlyphRange ();-		gn = new GlyphRange (); 		-		try {-			gf.parse_ranges (f);-			gn.parse_ranges (n);-		} catch (MarkupError e) {-			warning (e.message);-		}+		len = (int) classes_first.size; 		-		if (!(gf.is_class () || gn.is_class ())) {-			return false;+		return_val_if_fail (len == classes_last.size, false);+		return_val_if_fail (len == classes_kerning.size, false);+		+		for (int i = len - 1; i >= 0; i--) {+			gl = classes_first.get (i);+			gr = classes_last.get (i);+			+			if (gl.has_character (first)+				&& gr.has_character (next)) {++				return true;+			} 		} 		-		return get_kerning_item_index (gf, gn) != -1;+		return false; 	}  	public double get_kerning_for_range (GlyphRange range_first, GlyphRange range_last) {@@ -272,7 +277,7 @@ public class KerningClasses : GLib.Object { 			return 0; 		} 		-		for (int i = len - 1; i >= 0; i--) {+		for (int i = len - 1; i >= 0; i--) { // last class is applied first 			l = classes_first.get (i); 			r = classes_last.get (i); 	@@ -422,12 +427,20 @@ public class KerningClasses : GLib.Object { 			warning ("Map is protected."); 			return; 		}+		 		foreach (string key in single_kerning.keys) { 			print (key); 			print ("\t\t"); 			print (@"$((!) single_kerning.get (key))\n"); 		}+		 		set_protect_map (false);+		+		print ("\n");+		print ("Generated table:\n");+		all_pairs ((k) => {+			k.print ();+		}); 	}  	public void get_classes (KerningClassIterator kerningIterator) {@@ -522,6 +535,8 @@ public class KerningClasses : GLib.Object { 					for (unichar c = u.start; c <= u.stop; c++) { 						right = (!)c.to_string (); 						+						print (@"has? $(character.get_name ())  $right   $( has_kerning (character.get_name (), right))\n");+						 						if (font.has_glyph (right) && has_kerning (character.get_name (), right)) { 							kerning = get_kerning (character.get_name (), right); 							kl.add_unique ((!) font.get_glyph (right), kerning);@@ -540,6 +555,7 @@ public class KerningClasses : GLib.Object { 			// TODO: The get_kerning () function is still slow. Optimize it. 			foreach (string right_glyph_name in single_kerning_letters_right) { 				Glyph? gl = font.get_glyph (right_glyph_name);+				print (@"has? $(character.get_name ())  $right_glyph_name   $( has_kerning (character.get_name (), right_glyph_name))\n"); 				if (gl != null && has_kerning (character.get_name (), right_glyph_name)) { 					kerning = get_kerning (character.get_name (), right_glyph_name); 					kl.add_unique ((!) gl , kerning);@@ -553,20 +569,20 @@ public class KerningClasses : GLib.Object { 			if (kl.kerning.size == 0) { 				warning (@"No kerning pairs for character: $((kl.character.get_name ()))"); 			}-			-						+					 			kl.sort (); 		} 		 		// obtain the kerning value 		foreach (KerningPair p in pairs) {+			p.print (); 			kerningIterator (p); 		} 	}  	private bool set_protect_map (bool p) { 		if (unlikely (p && protect_map)) {-			warning ("Map is already protected, this is a criticl error.");+			warning ("Map is already protected."); 			return false; 		} 		diff --git a/libbirdfont/OpenFontFormat/KerningPair.vala b/libbirdfont/OpenFontFormat/KerningPair.valaindex 740521b..fd73f3a 100644--- a/libbirdfont/OpenFontFormat/KerningPair.vala+++ b/libbirdfont/OpenFontFormat/KerningPair.vala@@ -45,6 +45,18 @@ public class KerningPair : GLib.Object { 			return strcmp (((!)first.glyph).get_unichar_string (), ((!)next.glyph).get_unichar_string ()); 		});		 	}+	+	public void print () {+		if (kerning.size == 0) {+			warning ("No pairs.");+		}+		+		foreach (Kerning k in kerning) {+			if (k.glyph != null) {+				stdout.printf (@"$(character.get_name ()) <-> $(((!) k.glyph).get_name ()): $(k.val)\n");+			}+		}+	} } 	 }

Contact

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