Clone in a terminal:
Commit ee4da43
Johan Mattsson - 2012-09-02T20:23:48+00:00
ee4da43f9dc3b039d9f65c714a855360fa85ac25johan.mattsson.m@gmail.com

output directory option for birdfont-export

Changed files (11)

Diff

diff --git a/src/BirdfontExport.vala b/src/BirdfontExport.valaindex 40b7420..161ec10 100644--- a/src/BirdfontExport.vala+++ b/src/BirdfontExport.vala@@ -20,24 +20,64 @@ namespace Supplement { /** Stand alone command line utility for exporting fonts. */ class BirdfontExport { 	+	static string folder;+	 	public BirdfontExport () { 	} 	 	static void print_help (string[] arg) { 		stdout.printf ("Usage: "); 		stdout.printf (arg[0]);-		stdout.printf (" [INPUT FILE]\n");+		stdout.printf (" [OPTION ...] FILE\n");+		stdout.printf ("-h, --help                      print this message\n");+		stdout.printf ("-o, --output [DIRECTORY]        write files to this directory\n");+		stdout.printf ("\n"); 	} 	-	public static int main(string[] arg) {-		ExportTool export;-+	public static int main (string[] arg) {+		OptionContext opt;+		 		LogLevelFlags levels = LogLevelFlags.LEVEL_ERROR | LogLevelFlags.LEVEL_CRITICAL | LogLevelFlags.LEVEL_WARNING; 		Log.set_handler (null, levels, Supplement.fatal_warning);-				-		if (arg.length != 2) {+		+		string output_directory = ".";+		string file_name = "";+		+		File directory;+		+		if (arg.length < 2) { 			print_help (arg);-			return 1;+		}+		+		for (int i = 1; i < arg.length; i++) {+			if (arg[i] == "-h" || arg[i] == "--help") {+				print_help (arg);+				return 0;+				continue;+			}+			+			if (arg[i] == "-o" || arg[i] == "--output" && i + 1 < arg.length) {+				output_directory = arg[i + 1];+				i++;+				continue;+			}+			+			if (arg[i].has_prefix ("-")) {+				print_help (arg);+				return 1;+				continue;				+			}+			+			if (!arg[i].has_prefix ("-")) {+				file_name = arg[i];+				+				if (i != arg.length - 1) {+					print_help (arg);+					return 1;+				}+				+				break;+			} 		}  		Preferences preferences = new Preferences ();@@ -46,19 +86,30 @@ class BirdfontExport { 		Supplement.args = new Argument (""); 		Supplement.current_font = new Font (); -		// TODO: refactor and remove all gtk stuff from this program+		// TODO: refactor and remove all the gtk stuff from this program 		Gtk.init (ref arg); 		MainWindow window = new MainWindow ("Birdfont"); 		window.show_all (); 		-		if (!Supplement.get_current_font ().load (arg[1])) {-			stderr.printf (@"Failed to load font $(arg[1]).\n");+		if (!Supplement.get_current_font ().load (file_name, false)) {+			stderr.printf (@"Failed to load font $file_name.\n");+			+			if (!file_name.has_suffix (".ffi")) {+				stderr.printf (@"Is it a .ffi file?\n");+			}+			+			return 1; 		} -		ExportTool.export_svg_font_path (File.new_for_path ("."));-		ExportTool.export_ttf_font_path (File.new_for_path ("."), false);+		directory = File.new_for_path (output_directory); 		-		print ("Done\n");+		if (!directory.query_exists ()) {+			stderr.printf ("Can't find output directory $directory\n");+			return 1;+		}++		ExportTool.export_svg_font_path (File.new_for_path (output_directory));+		ExportTool.export_ttf_font_path (File.new_for_path (output_directory), false); 						 		return 0; 	}diff --git a/src/ExportTool.vala b/src/ExportTool.valaindex 245783a..5b6515e 100644--- a/src/ExportTool.vala+++ b/src/ExportTool.vala@@ -20,6 +20,7 @@ namespace Supplement { class ExportTool : Tool {  	private static string? prefered_browser = null;+	private static ExportThread export_thread;  	public ExportTool (string n) { 		base (n, "Export glyph to svg file", 'e', CTRL);@@ -350,8 +351,7 @@ os.put_string (""" 		string path; 		OpenFontFormatWriter fo; 		Font temp_font = new Font ();-		ExportThread th;-		unowned Thread<void*> export_thread;+		unowned Thread<void*> th; 		File file; 		string temp_file; 		@@ -367,17 +367,17 @@ os.put_string ("""  			path = (!) file.get_path (); -			th = new ExportThread (temp_file, path);+			export_thread = new ExportThread (temp_file, path); 			 			if (async) { 				try {-					export_thread = Thread.create<void*> (th.run, true);+					th = Thread.create<void*> (export_thread.run, true); 				} catch (ThreadError e) { 					stderr.printf ("%s\n", e.message); 					return false; 				} 			} else {-				th.run ();+				export_thread.run (); 			} 				 		} catch (Error e) {@@ -436,8 +436,11 @@ os.put_string (""" 			OpenFontFormatWriter fo = new OpenFontFormatWriter (); 			Font f = new Font (); 			+			assert (!is_null (from));+			assert (!is_null (to));+			 			try {-				if (!f.load (from)) {+				if (!f.load (from, false)) { 					warning (@"Can't read $from"); 					return null; 				}diff --git a/src/Font.vala b/src/Font.valaindex 1ece030..dc9ba90 100644--- a/src/Font.vala+++ b/src/Font.vala@@ -706,7 +706,7 @@ class Font : GLib.Object { 		return (glyph_names.length () == 0); 	} -	public bool load (string path) {+	public bool load (string path, bool recent = true) { 		bool loaded = false;  		otf_font = false;@@ -730,6 +730,11 @@ class Font : GLib.Object { 			} 		} 		+		if (recent) {+			add_thumbnail ();+			Preferences.add_recent_files (get_path ());+		}+		 		return loaded; 	} @@ -776,12 +781,6 @@ class Font : GLib.Object { 		img_scale.write_to_png ((!) f.get_path ()); 	} -	/** Callbackt function for finishing parsing of font file. */ -	public void loading_finished_callback () {-		add_thumbnail ();-		Preferences.add_recent_files (get_path ());-	}- 	/** Callback function for loading glyph in a separate thread. */ 	public void add_glyph_callback (Glyph g) { 		GlyphCollection? gcl;@@ -814,7 +813,7 @@ class Font : GLib.Object { 		// xheight_position = estimate_xheight (); 	} -	public bool parse_otf_file (string path) {+	public bool parse_otf_file (string path) throws GLib.Error { 		otf = new OpenFontFormatReader (); 		otf_font = true; 		@@ -827,7 +826,7 @@ class Font : GLib.Object { 		return true; 	} 	-	public bool parse_file (string path) {+	public bool parse_file (string path) throws GLib.Error { 		Parser.init (); 		 		Xml.Doc* doc = Parser.parse_file (path);@@ -894,7 +893,6 @@ class Font : GLib.Object { 		delete doc; 		Parser.cleanup (); -		loading_finished_callback (); 		return true; 	} 	diff --git a/src/GlyphTable.vala b/src/GlyphTable.valaindex d34daa8..cf14426 100644--- a/src/GlyphTable.vala+++ b/src/GlyphTable.vala@@ -75,7 +75,7 @@ class GlyphTable : GLib.Object { 		return data.length (); 	} -	public GlyphCollection? @get (string name) {+	public new GlyphCollection? @get (string name) { 		unowned List<Item>? d = find_index (name); 		 		if (d == null) {diff --git a/src/IntersectionList.vala b/src/IntersectionList.valaindex f83a4e9..09e3e3e 100644--- a/src/IntersectionList.vala+++ b/src/IntersectionList.vala@@ -141,14 +141,11 @@ class IntersectionList { 	}  	public static IntersectionList create_intersection_list (Path p1, Path p2) {-		Path new_path = new Path (); 		IntersectionList il = new IntersectionList (); 		 		unowned List<EditPoint> a_start, a_stop; 		unowned List<EditPoint> b_start, b_stop; 		-		EditPoint e;-		 		if (p1 == p2) { 			return il; 		}diff --git a/src/MenuTab.vala b/src/MenuTab.valaindex b420b94..53620c1 100644--- a/src/MenuTab.vala+++ b/src/MenuTab.vala@@ -24,16 +24,6 @@ class MenuTab : FontDisplay { 	 	List<Font> recent_fonts = new List<Font> (); -	Tool new_file_tool;-	Tool open_tool;-	Tool save_tool;-	Tool browser_tool;-	Tool export_preferences;-	ExportTool export_tool;-	Tool kerning_context_tool;-	Tool add_new_grid_tool;-	Tool delete_grid_tool;-		 	public MenuTab () { 		// html callbacks: 		add_html_callback ("export_svg", (val) => {@@ -233,7 +223,6 @@ c.append (""" 			 		SaveDialog save = new SaveDialog (); 		save.finished.connect (() => {-			string? fnn; 			Font f; 			bool loaded; 			diff --git a/src/OpenFontFormatReader.vala b/src/OpenFontFormatReader.valaindex 5fea974..86e7c37 100644--- a/src/OpenFontFormatReader.vala+++ b/src/OpenFontFormatReader.vala@@ -57,7 +57,13 @@ class OpenFontFormatReader : Object { 	} 	 	public Glyph? read_glyph (string name) {-		return directory_table.glyf_table.read_glyph (name);+		try {+			return directory_table.glyf_table.read_glyph (name);+		} catch (GLib.Error e) {+			warning (e.message);+		}+		+		return null; 	} 	 	public void parse_index (string file_name) throws Error {@@ -69,19 +75,6 @@ class OpenFontFormatReader : Object { 		dis = new OtfInputStream (file.read ()); 		 		parse_index_tables ();-		done ();-	}-	-	void done () {-		IdleSource idle = new IdleSource ();--		idle.set_callback (() => {-			Font f = Supplement.get_current_font ();-			f.loading_finished_callback ();-			return false;-		});--		idle.attach (null);		 	} 	 	void parse_index_tables () throws Error {diff --git a/src/OpenFontFormatWriter.vala b/src/OpenFontFormatWriter.valaindex 2945897..b0bbb83 100644--- a/src/OpenFontFormatWriter.vala+++ b/src/OpenFontFormatWriter.vala@@ -50,11 +50,7 @@ class OpenFontFormatWriter : Object  { 	public void write_ttf_font (Font font) throws Error {
 		long dl;
 		uint8* data;
-		uint i = 0;
-		long written = 0;
-		Glyph? g;
 		unowned List<Table> tables;
-		unichar indice = 0;
 		FontData fd;
 		uint l;
 		
@@ -479,7 +475,7 @@ class Table : Object { 		return length > 0;
 	}
 
-	public virtual void parse (FontData dis) {
+	public virtual void parse (FontData dis) throws GLib.Error {
 		warning (@"Parse is not implemented for $(id).");
 	}
 
@@ -589,7 +585,7 @@ class LocaTable : Table { 		return glyph_offsets[i] == glyph_offsets[i + 1];
 	}
 	
-	public void parse (FontData dis, HeadTable head_table, MaxpTable maxp_table) {
+	public new void parse (FontData dis, HeadTable head_table, MaxpTable maxp_table) throws GLib.Error {
 		size = maxp_table.num_glyphs;
 		glyph_offsets = new uint32[size + 1];
 		
@@ -807,7 +803,7 @@ class GlyfTable : Table { 		return (uint16)g.unichar_code; 
 	}
 	
-	public Glyph? read_glyph (string name) {
+	public Glyph? read_glyph (string name) throws GLib.Error {
 		Glyph? glyph;
 		Glyph g;
 		int i;
@@ -839,7 +835,7 @@ class GlyfTable : Table { 		return glyph;
 	}
 	
-	public void parse (FontData dis, CmapTable cmap_table, LocaTable loca, HmtxTable hmtx_table, HeadTable head_table, PostTable post_table, KernTable kern_table) throws GLib.Error {
+	public new void parse (FontData dis, CmapTable cmap_table, LocaTable loca, HmtxTable hmtx_table, HeadTable head_table, PostTable post_table, KernTable kern_table) throws GLib.Error {
 		printd (@"loca.size: $(loca.size)\n");
 			
 		Glyph glyph;
@@ -859,7 +855,6 @@ class GlyfTable : Table { 	}
 	
 	Glyph parse_index (int index, FontData dis, LocaTable loca, HmtxTable hmtx_table, HeadTable head_table, PostTable post_table) throws GLib.Error {
-		uint32 glyph_offset;
 		Glyph glyph = new Glyph ("");
 		double xmin, xmax;
 		double units_per_em = head_table.get_units_per_em ();
@@ -924,7 +919,6 @@ class GlyfTable : Table { 		uint16 num_instructions;
 
 		Glyph glyph, linked_glyph;
-		string link_name;
 		List<int> x = new List<int> ();
 		List<int> y = new List<int> ();
 		List<int> gid = new List<int> ();
@@ -1199,8 +1193,7 @@ class GlyfTable : Table { 		int first_point;
 		int last_point = 0;
 		Glyph glyph;
-		double startx, starty;
-		double x, y, rx, ry, lx, ly, nx, ny;
+		double x, y;
 
 		glyph = new Glyph (name.str, character);
 		
@@ -1342,7 +1335,7 @@ class GlyfTable : Table { 		return glyph;
 	}
 
-	public void process_glyph (Glyph g, FontData fd) {
+	public void process_glyph (Glyph g, FontData fd) throws GLib.Error {
 		int16 txmin, tymin, txmax, tymax;
 
 		int16 end_point;
@@ -1630,11 +1623,10 @@ class GlyfTable : Table { 		
 	}
 
-	public void process () {
+	public void process () throws GLib.Error {
 		FontData fd = new FontData ();
 		
 		create_glyph_table ();
-		int i = 0;
 		uint last_len = 0;
 		foreach (Glyph g in glyphs) {
 			// set values for loca table
@@ -1722,7 +1714,7 @@ class CmapSubtableWindowsUnicode : CmapSubtable { 		return (unichar) c;
 	}
 	
-	public override void parse (FontData dis) {
+	public override void parse (FontData dis) throws GLib.Error {
 		dis.seek (offset);
 		
 		format = dis.read_ushort ();
@@ -1738,7 +1730,7 @@ class CmapSubtableWindowsUnicode : CmapSubtable { 		}
 	}
 		
-	public void parse_format4 (FontData dis) {
+	public void parse_format4 (FontData dis) throws GLib.Error {
 		uint16 lang;
 		uint16 seg_count_x2;
 		uint16 seg_count;
@@ -1859,13 +1851,10 @@ class CmapSubtableWindowsUnicode : CmapSubtable { 		print (@"New range $(s.str) - $(e.str) delta: $delta_offset, range: $range_offset\n");
 	}
 	
-	public void process (FontData fd, GlyfTable glyf_table) {
+	public void process (FontData fd, GlyfTable glyf_table) throws GLib.Error {
 		GlyphRange glyph_range = new GlyphRange ();
 		unowned List<UniRange> ranges;
-			
-		unichar i = 0;
-		Glyph? gl;
-		
+
 		uint16 seg_count_2;
 		uint16 seg_count;
 		uint16 search_range;
@@ -2030,9 +2019,7 @@ class CmapTable : Table { 		return "cmap";
 	}
 	
-	public override void parse (FontData dis) 
-		requires (offset > 0 && length > 0) {
-			
+	public override void parse (FontData dis) throws GLib.Error {
 		uint16 version;
 		uint16 nsubtables;
 		
@@ -2041,6 +2028,8 @@ class CmapTable : Table { 		uint32 sub_offset;
 		
 		CmapSubtable subtable;
+
+		return_if_fail (offset > 0 && length > 0);
 		
 		dis.seek (offset);
 		
@@ -2086,7 +2075,7 @@ class CmapTable : Table { 	}
 	
 	/** Character to glyph mapping */
-	public void process (GlyfTable glyf_table) {
+	public void process (GlyfTable glyf_table) throws GLib.Error {
 		FontData fd = new FontData ();
 		CmapSubtableWindowsUnicode cmap = new CmapSubtableWindowsUnicode ();
 		uint16 n_encoding_tables;
@@ -2157,8 +2146,8 @@ class HeadTable : Table { 		return units_per_em * 10; // Fixa: we can refactor this number
 	}
 	
-	public override void parse (FontData dis) 
-		requires (offset > 0 && length > 0) {
+	public override void parse (FontData dis) throws GLib.Error {
+		return_if_fail (offset > 0 && length > 0);
 
 		dis.seek (offset);
 		
@@ -2245,7 +2234,7 @@ class HeadTable : Table { 		return 8;
 	}
 	
-	public void process () {
+	public void process () throws GLib.Error {
 		FontData font_data = new FontData ();
 		Fixed version = 1 << 16;
 		Fixed font_revision = 1 << 16;
@@ -2331,7 +2320,7 @@ class HheaTable : Table { 		return descender * 1000 / head_table.get_units_per_em ();
 	}
 	
-	public void parse (FontData dis) throws Error {
+	public override void parse (FontData dis) throws GLib.Error {
 		dis.seek (offset);
 		
 		version = dis.read_fixed ();
@@ -2361,7 +2350,7 @@ class HheaTable : Table { 		num_horizontal_metrics = dis.read_short ();
 	}
 	
-	public void process () {
+	public void process () throws GLib.Error {
 		Font font = OpenFontFormatWriter.get_current_font ();
 		FontData fd = new FontData ();
 		Fixed version = 1 << 16;
@@ -2468,7 +2457,7 @@ class HmtxTable : Table { 
 	}
 			
-	public void parse (FontData dis, HheaTable hhea_table, LocaTable loca_table) {
+	public new void parse (FontData dis, HheaTable hhea_table, LocaTable loca_table) throws GLib.Error {
 		nmetrics = hhea_table.num_horizontal_metrics;
 		nmonospaced = loca_table.size - nmetrics;
 		
@@ -2580,8 +2569,7 @@ class MaxpTable : Table { 	
 	public void process () {
 		FontData fd = new FontData();
-		uint16 max_points, max_contours;
-				
+
 		// Version 0.5 for fonts with cff data and 1.0 for ttf
 		fd.add_u32 (0x00010000);
 		
@@ -2624,7 +2612,7 @@ class OffsetTable : Table { 		directory_table = t;
 	}
 		
-	public void parse (FontData dis) throws Error {
+	public override void parse (FontData dis) throws Error {
 		Fixed version;
 		
 		dis.seek (offset);
@@ -2639,7 +2627,7 @@ class OffsetTable : Table { 		printd (@"Number of tables $num_tables\n");		
 	}
 	
-	public void process () {
+	public void process () throws GLib.Error {
 		FontData fd = new FontData ();
 		Fixed version = 0x00010000; // sfnt version 1.0 for TTF CFF else use OTTO
 
@@ -2689,7 +2677,7 @@ class NameTable : Table { 		}
 	}
 
-	public void parse (FontData dis) throws Error {
+	public override void parse (FontData dis) throws Error {
 		uint16 format;
 
 		dis.seek (offset);
@@ -2771,7 +2759,7 @@ class NameTable : Table { 		}
 	}
 	
-	public void process () {
+	public void process () throws GLib.Error {
 		FontData fd = new FontData ();
 		Font font = OpenFontFormatWriter.get_current_font ();
 		uint16 len = 0;
@@ -2823,7 +2811,7 @@ class NameTable : Table { 		for (int i = 0; i < num_records; i++) {
 			t = (!) text.nth (i).data;
 			p = (!) type.nth (i).data;
-			l = (uint16) t.len ();
+			l = (uint16) t.length;
 			
 			fd.add_ushort (1); // platform
 			fd.add_ushort (0); // encoding id
@@ -2870,7 +2858,7 @@ class Os2Table : Table { 		id = "OS/2";
 	}
 	
-	public void parse (FontData dis) throws Error {
+	public override void parse (FontData dis) throws Error {
 		
 	}
 	
@@ -3019,7 +3007,7 @@ class PostTable : Table { 		return (!) names.nth (k).data;
 	}
 	
-	public void parse (FontData dis) throws Error {
+	public override void parse (FontData dis) throws Error {
 		dis.seek (offset);
 		
 		Fixed format = dis.read_fixed ();
@@ -3372,1030 +3360,774 @@ class PostTable : Table { 			
 			case '\0':
 				return 1;
-				break;
 
 			case '\r':
 				return 2;
-				break;
 
 			case ' ': // space
 				return 3;
-				break;
 
 			case '!':
 				return 4;
-				break;
 
 			case '"':
 				return 5;
-				break;
 
 			case '#':
 				return 6;
-				break;
 
 			case '$':
 				return 7;
-				break;
 
 			case '%':
 				return 8;
-				break;
 
 			case '&':
 				return 9;
-				break;
 
 			case '\'':
 				return 10;
-				break;
 
 			case '(':
 				return 11;
-				break;
 
 			case ')':
 				return 12;
-				break;
 
 			case '*':
 				return 13;
-				break;
 
 			case '+':
 				return 14;
-				break;
 
 			case ',':
 				return 15;
-				break;
 
 			case '-':
 				return 16;
-				break;
 
 			case '.':
 				return 17;
-				break;
 
 			case '/':
 				return 18;
-				break;
 
 			case '0':
 				return 19;
-				break;
 
 			case '1':
 				return 20;
-				break;
 
 			case '2':
 				return 21;
-				break;
 
 			case '3':
 				return 22;
-				break;
 
 			case '4':
 				return 23;
-				break;
 
 			case '5':
 				return 24;
-				break;
 
 			case '6':
 				return 25;
-				break;
 
 			case '7':
 				return 26;
-				break;
 
 			case '8':
 				return 27;
-				break;
 
 			case '9':
 				return 28;
-				break;
 
 			case ':':
 				return 29;
-				break;
 
 			case ';':
 				return 30;
-				break;
 
 			case '<':
 				return 31;
-				break;
 
 			case '=':
 				return 32;
-				break;
 
 			case '>':
 				return 33;
-				break;
 
 			case '?':
 				return 34;
-				break;
 
 			case '@':
 				return 35;
-				break;
 
 			case 'A':
 				return 36;
-				break;
 
 			case 'B':
 				return 37;
-				break;
 
 			case 'C':
 				return 38;
-				break;
 
 			case 'D':
 				return 39;
-				break;
 
 			case 'E':
 				return 40;
-				break;
 
 			case 'F':
 				return 41;
-				break;
 
 			case 'G':
 				return 42;
-				break;
 
 			case 'H':
 				return 43;
-				break;
 
 			case 'I':
 				return 44;
-				break;
 
 			case 'J':
 				return 45;
-				break;
 
 			case 'K':
 				return 46;
-				break;
 
 			case 'L':
 				return 47;
-				break;
 
 			case 'M':
 				return 48;
-				break;
 
 			case 'N':
 				return 49;
-				break;
 
 			case 'O':
 				return 50;
-				break;
 
 			case 'P':
 				return 51;
-				break;
 
 			case 'Q':
 				return 52;
-				break;
 
 			case 'R':
 				return 53;
-				break;
 
 			case 'S':
 				return 54;
-				break;
 
 			case 'T':
 				return 55;
-				break;
 
 			case 'U':
 				return 56;
-				break;
 
 			case 'V':
 				return 57;
-				break;
 
 			case 'W':
 				return 58;
-				break;
 
 			case 'X':
 				return 59;
-				break;
 
 			case 'Y':
 				return 60;
-				break;
 
 			case 'Z':
 				return 61;
-				break;
 
 			case '[':
 				return 62;
-				break;
 
 			case '\\':
 				return 63;
-				break;
 
 			case ']':
 				return 64;
-				break;
 
 			case '^':
 				return 65;
-				break;
 
 			case '_':
 				return 66;
-				break;
 
 			case '`':
 				return 67;
-				break;
 
 			case 'a':
 				return 68;
-				break;
 
 			case 'b':
 				return 69;
-				break;
 
 			case 'c':
 				return 70;
-				break;
 
 			case 'd':
 				return 71;
-				break;
 
 			case 'e':
 				return 72;
-				break;
 
 			case 'f':
 				return 73;
-				break;
 
 			case 'g':
 				return 74;
-				break;
 
 			case 'h':
 				return 75;
-				break;
 
 			case 'i':
 				return 76;
-				break;
 
 			case 'j':
 				return 77;
-				break;
 
 			case 'k':
 				return 78;
-				break;
 
 			case 'l':
 				return 79;
-				break;
 
 			case 'm':
 				return 80;
-				break;
 
 			case 'n':
 				return 81;
-				break;
 
 			case 'o':
 				return 82;
-				break;
 
 			case 'p':
 				return 83;
-				break;
 
 			case 'q':
 				return 84;
-				break;
 
 			case 'r':
 				return 85;
-				break;
 
 			case 's':
 				return 86;
-				break;
 
 			case 't':
 				return 87;
-				break;
 
 			case 'u':
 				return 88;
-				break;
 
 			case 'v':
 				return 89;
-				break;
 
 			case 'w':
 				return 90;
-				break;
 
 			case 'x':
 				return 91;
-				break;
 
 			case 'y':
 				return 92;
-				break;
 
 			case 'z':
 				return 93;
-				break;
 
 			case '{':
 				return 94;
-				break;
 
 			case '|':
 				return 95;
-				break;
 
 			case '}':
 				return 96;
-				break;
 
 			case '~':
 				return 97;
-				break;
 
 			case 'Ä':
 				return 98;
-				break;
 
 			case 'Å':
 				return 99;
-				break;
 
 			case 'Ç':
 				return 100;
-				break;
 
 			case 'É':
 				return 101;
-				break;
 
 			case 'Ñ':
 				return 102;
-				break;
 
 			case 'Ö':
 				return 103;
-				break;
 
 			case 'Ü':
 				return 104;
-				break;
 
 			case 'á':
 				return 105;
-				break;
 
 			case 'à':
 				return 106;
-				break;
 
 			case 'â':
 				return 107;
-				break;
 
 			case 'ä':
 				return 108;
-				break;
 
 			case 'ã':
 				return 109;
-				break;
 
 			case 'å':
 				return 110;
-				break;
 
 			case 'ç':
 				return 111;
-				break;
 
 			case 'é':
 				return 112;
-				break;
 
 			case 'è':
 				return 113;
-				break;
 
 			case 'ê':
 				return 114;
-				break;
 
 			case 'ë':
 				return 115;
-				break;
 
 			case 'í':
 				return 116;
-				break;
 
 			case 'ì':
 				return 117;
-				break;
 
 			case 'î':
 				return 118;
-				break;
 
 			case 'ï':
 				return 119;
-				break;
 
 			case 'ñ':
 				return 120;
-				break;
 
 			case 'ó':
 				return 121;
-				break;
 
 			case 'ò':
 				return 122;
-				break;
 
 			case 'ô':
 				return 123;
-				break;
 
 			case 'ö':
 				return 124;
-				break;
 
 			case 'õ':
 				return 125;
-				break;
 
 			case 'ú':
 				return 126;
-				break;
 
 			case 'ù':
 				return 127;
-				break;
 
 			case 'û':
 				return 128;
-				break;
 
 			case 'ü':
 				return 129;
-				break;
 
 			case '†':
 				return 130;
-				break;
 
 			case '°':
 				return 131;
-				break;
 
 			case '¢':
 				return 132;
-				break;
 
 			case '£':
 				return 133;
-				break;
 
 			case '§':
 				return 134;
-				break;
 
 			case '•':
 				return 135;
-				break;
 
 			case '¶':
 				return 136;
-				break;
 
 			case 'ß':
 				return 137;
-				break;
 
 			case '®':
 				return 138;
-				break;
 
 			case '©':
 				return 139;
-				break;
 
 			case '™':
 				return 140;
-				break;
 
 			case '´':
 				return 141;
-				break;
 
 			case '¨':
 				return 142;
-				break;
 
 			case '≠':
 				return 143;
-				break;
 
 			case 'Æ':
 				return 144;
-				break;
 
 			case 'Ø':
 				return 145;
-				break;
 
 			case '∞':
 				return 146;
-				break;
 
 			case '±':
 				return 147;
-				break;
 
 			case '≤':
 				return 148;
-				break;
 
 			case '≥':
 				return 149;
-				break;
 
 			case '¥':
 				return 150;
-				break;
 
 			case 'µ':
 				return 151;
-				break;
 
 			case '∂':
 				return 152;
-				break;
 
 			case '∑':
 				return 153;
-				break;
 
 			case '∏':
 				return 154;
-				break;
 
 			case 'π':
 				return 155;
-				break;
 
 			case '∫':
 				return 156;
-				break;
 
 			case 'ª':
 				return 157;
-				break;
 
 			case 'º':
 				return 158;
-				break;
 
 			case 'Ω':
 				return 159;
-				break;
 
 			case 'æ':
 				return 160;
-				break;
 
 			case 'ø':
 				return 161;
-				break;
 
 			case '¿':
 				return 162;
-				break;
 
 			case '¡':
 				return 163;
-				break;
 
 			case '¬':
 				return 164;
-				break;
 
 			case '√':
 				return 165;
-				break;
 
 			case 'ƒ':
 				return 166;
-				break;
 
 			case '≈':
 				return 167;
-				break;
 
 			case '∆':
 				return 168;
-				break;
 
 			case '«':
 				return 169;
-				break;
 
 			case '»':
 				return 170;
-				break;
 
 			case '…':
 				return 171;
-				break;
 
 			case ' ': // non breaking space
 				return 172;
-				break;
 							
 			case 'À':
 				return 173;
-				break;
 
 			case 'Ã':
 				return 174;
-				break;
 
 			case 'Õ':
 				return 175;
-				break;
 
 			case 'Œ':
 				return 176;
-				break;
 
 			case 'œ':
 				return 177;
-				break;
 
 			case '–':
 				return 178;
-				break;
 
 			case '—':
 				return 179;
-				break;
 
 			case '“':
 				return 180;
-				break;
 
 			case '”':
 				return 181;
-				break;
 
 			case '‘':
 				return 182;
-				break;
 
 			case '’':
 				return 183;
-				break;
 
 			case '÷':
 				return 184;
-				break;
 
 			case '◊':
 				return 185;
-				break;
 
 			case 'ÿ':
 				return 186;
-				break;
 
 			case 'Ÿ':
 				return 187;
-				break;
 
 			case '⁄':
 				return 188;
-				break;
 
 			case '¤':
 				return 189;
-				break;
 
 			case '‹':
 				return 190;
-				break;
 
 			case '›':
 				return 191;
-				break;
 
 			case 'fi':
 				return 192;
-				break;
 
 			case 'fl':
 				return 193;
-				break;
 
 			case '‡':
 				return 194;
-				break;
 
 			case '·':
 				return 195;
-				break;
 
 			case '‚':
 				return 196;
-				break;
 
 			case '„':
 				return 197;
-				break;
 
 			case '‰':
 				return 198;
-				break;
 
 			case 'Â':
 				return 199;
-				break;
 
 			case 'Ê':
 				return 200;
-				break;
 
 			case 'Á':
 				return 201;
-				break;
 
 			case 'Ë':
 				return 202;
-				break;
 
 			case 'È':
 				return 203;
-				break;
 
 			case 'Í':
 				return 204;
-				break;
 
 			case 'Î':
 				return 205;
-				break;
 
 			case 'Ï':
 				return 206;
-				break;
 
 			case 'Ì':
 				return 207;
-				break;
 
 			case 'Ó':
 				return 208;
-				break;
 
 			case 'Ô':
 				return 209;
-				break;
 				
 			// Machintosh apple goes here
 			// return 210;
 
 			case 'Ò':
 				return 211;
-				break;
 
 			case 'Ú':
 				return 212;
-				break;
 
 			case 'Û':
 				return 213;
-				break;
 
 			case 'Ù':
 				return 214;
-				break;
 
 			case 'ı':
 				return 215;
-				break;
 
 			case 'ˆ':
 				return 216;
-				break;
 
 			case '˜':
 				return 217;
-				break;
 
 			case '¯':
 				return 218;
-				break;
 
 			case '˘':
 				return 219;
-				break;
 
 			case '˙':
 				return 220;
-				break;
 
 			case '˚':
 				return 221;
-				break;
 
 			case '¸':
 				return 222;
-				break;
 
 			case '˝':
 				return 223;
-				break;
 
 			case '˛':
 				return 224;
-				break;
 
 			case 'ˇ':
 				return 225;
-				break;
 
 			case 'Ł':
 				return 226;
-				break;
 
 			case 'ł':
 				return 227;
-				break;
 
 			case 'Š':
 				return 228;
-				break;
 
 			case 'š':
 				return 229;
-				break;
 
 			case 'Ž':
 				return 230;
-				break;
 
 			case 'ž':
 				return 231;
-				break;
 
 			case '¦':
 				return 232;
-				break;
 
 			case 'Ð':
 				return 233;
-				break;
 
 			case 'ð':
 				return 234;
-				break;
 
 			case 'Ý':
 				return 235;
-				break;
 
 			case 'ý':
 				return 236;
-				break;
 
 			case 'Þ':
 				return 237;
-				break;
 
 			case 'þ':
 				return 238;
-				break;
 
 			case '−':
 				return 239;
-				break;
 
 			case '×':
 				return 240;
-				break;
 
 			case '¹':
 				return 241;
-				break;
 				
 			case '²':
 				return 242;
-				break;
 
 			case '³':
 				return 243;
-				break;
 
 			case '½':
 				return 244;
-				break;
 
 			case '¼':
 				return 245;
-				break;
 
 			case '¾':
 				return 246;
-				break;
 
 			case '₣':
 				return 247;
-				break;
 
 			case 'Ğ':
 				return 248;
-				break;
 
 			case 'ğ':
 				return 249;
-				break;
 
 			case 'İ':
 				return 250;
-				break;
 
 			case 'Ş':
 				return 251;
-				break;
 
 			case 'ş':
 				return 252;
-				break;
 
 			case 'Ć':
 				return 253;
-				break;
 
 			case 'ć':
 				return 254;
-				break;
 
 			case 'Č':
 				return 255;
-				break;
 
 			case 'č':
 				return 256;
-				break;
 
 			case 'đ':
 				return 257;
-				break;
 		}
 		
 		return 0;
@@ -4452,11 +4184,11 @@ class PostTable : Table { 		for (int i = 258; i < names.length (); i++) {
 			n = (!) names.nth (i).data;
 			
-			if (n.len () > 0xFF) {
+			if (n.length > 0xFF) {
 				warning ("too long name for glyph $n");
 			}
 						
-			fd.add ((uint8) n.len ()); // length of string
+			fd.add ((uint8) n.length); // length of string
 			fd.add_str (n);
 		}		
 
@@ -4473,10 +4205,10 @@ class GaspTable : Table { 		id = "gasp";
 	}
 	
-	public void parse (FontData dis) throws Error {
+	public override void parse (FontData dis) throws Error {
 	}
 	
-	public void process () {
+	public void process () throws GLib.Error {
 		FontData fd = new FontData ();
 
 		fd.add_ushort (0);
@@ -4495,10 +4227,10 @@ class GdefTable : Table { 		id = "GDEF";
 	}
 	
-	public void parse (FontData dis) throws Error {
+	public override void parse (FontData dis) throws Error {
 	}
 	
-	public void process () {
+	public void process () throws GLib.Error {
 		FontData fd = new FontData ();
 
 		fd.add_ulong (0x00010002);
@@ -4522,10 +4254,10 @@ class CvtTable : Table { 		id = "cvt ";
 	}
 	
-	public void parse (FontData dis) throws Error {
+	public override void parse (FontData dis) throws Error {
 	}
 	
-	public void process () {
+	public void process () throws GLib.Error {
 		FontData fd = new FontData ();
 		
 		fd.add_ushort (0);
@@ -4587,7 +4319,7 @@ class KernTable : Table { 		return kl;
 	}
 	
-	public override void parse (FontData dis) {
+	public override void parse (FontData dis) throws GLib.Error {
 		uint16 version;
 		uint16 sub_tables;
 		
@@ -4638,7 +4370,7 @@ class KernTable : Table { 		}		
 	}
 	
-	public void process () {
+	public void process () throws GLib.Error {
 		FontData fd = new FontData ();
 		uint16 n_pairs = 0;
 		
@@ -4742,7 +4474,7 @@ class DirectoryTable : Table { 		id = "Directory table";
 	}
 
-	public void process () {
+	public void process () throws GLib.Error {
 		// generate font data
 		glyf_table.process ();
 		gasp_table.process ();
@@ -4795,7 +4527,7 @@ class DirectoryTable : Table { 		offset_table = ot;
 	}
 	
-	public void parse (FontData dis, File file, OpenFontFormatReader reader_callback) throws Error {
+	public new void parse (FontData dis, File file, OpenFontFormatReader reader_callback) throws Error {
 		StringBuilder tag = new StringBuilder ();
 		uint32 checksum;
 		uint32 offset;
@@ -4995,7 +4727,7 @@ class DirectoryTable : Table { 		return valid;
 	}
 	
-	bool validate_checksum_for_entire_font (FontData dis, File f) {
+	bool validate_checksum_for_entire_font (FontData dis, File f) throws GLib.Error {
 		uint p = head_table.offset + head_table.get_checksum_position ();
 		uint32 checksum_font, checksum_head;
 
@@ -5019,7 +4751,7 @@ class DirectoryTable : Table { 		return true;
 	}
 	
-	public string get_id () {
+	public new string get_id () {
 		warning ("Don't write id for table directory.");		
 		return "Directory table"; // Table id should be ignored for directory table, none the less it has one declared here.
 	}
@@ -5038,7 +4770,7 @@ class DirectoryTable : Table { 		return length;
 	}
 	
-	public void process_directory () {
+	public void process_directory () throws GLib.Error {
 		create_directory (); // create directory without offsets to calculate length of offset table and checksum for entre file
 		create_directory (); // generate a valid directory
 	}
@@ -5052,7 +4784,7 @@ class DirectoryTable : Table { 		return check_sum;
 	}
 
-	public void create_directory () {
+	public void create_directory () throws GLib.Error {
 		FontData fd;
 	
 		uint32 table_offset = 0;
diff --git a/src/TestCases.vala b/src/TestCases.valaindex 30cca6d..d94f54c 100644--- a/src/TestCases.vala+++ b/src/TestCases.vala@@ -247,33 +247,37 @@ class TestCases { 	public static void test_data_reader () { 		FontData fd = new FontData (); 		uint len;-		-		fd.add (7);-		fd.add_ulong (0x5F0F3CF5);-		fd.add_ulong (9);-		-		warn_if_fail (fd.table_data[0] == 7);-		warn_if_fail (fd.read () == 7);-		warn_if_fail (fd.read_ulong () == 0x5F0F3CF5);-		warn_if_fail (fd.read_ulong () == 9);-		-		fd = new FontData ();-		for (int16 i = 0; i < 2048; i++) {-			fd.add_short (i);++		try {+			fd.add (7);+			fd.add_ulong (0x5F0F3CF5);+			fd.add_ulong (9);+			+			warn_if_fail (fd.table_data[0] == 7);+			warn_if_fail (fd.read () == 7);+			warn_if_fail (fd.read_ulong () == 0x5F0F3CF5);+			warn_if_fail (fd.read_ulong () == 9);+			+			fd = new FontData ();+			for (int16 i = 0; i < 2048; i++) {+				fd.add_short (i);+			}+			+			fd.seek (2 * 80);+			warn_if_fail (fd.read_short () == 80);+			+			fd.seek (100);+			fd.add_short (7);+			fd.seek (100);+			warn_if_fail (fd.read_short () == 7);+			+			fd.seek_end ();+			len = fd.length ();+			fd.add (0);+			warn_if_fail (len + 1 == fd.length ());+		} catch (GLib.Error e) {+			warning (e.message); 		}-		-		fd.seek (2 * 80);-		warn_if_fail (fd.read_short () == 80);-		-		fd.seek (100);-		fd.add_short (7);-		fd.seek (100);-		warn_if_fail (fd.read_short () == 7);-		-		fd.seek_end ();-		len = fd.length ();-		fd.add (0);-		warn_if_fail (len + 1 == fd.length ()); 	}  	public static void test_argument () {diff --git a/src/Tool.vala b/src/Tool.valaindex eb1e949..6bee5f4 100644--- a/src/Tool.vala+++ b/src/Tool.vala@@ -268,7 +268,6 @@ class Tool : GLib.Object {  	public static void test_open_next_glyph () { 		Tool.yield ();-		Glyph g; 		OverView o = MainWindow.get_overview (); 		 		MainWindow.get_tab_bar ().select_overview ();diff --git a/src/wscript b/src/wscriptindex ac73a0d..11484d5 100644--- a/src/wscript+++ b/src/wscript@@ -73,6 +73,7 @@ PARAM = [ 	'--enable-experimental',
 	'--enable-experimental-non-null',
 	'--vapidir=../../'
+	'--Xcc="-lm"'
 ]
 
 def build (bld):

Contact

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