Clone in a terminal:
Commit 6425854
Johan Mattsson - 2016-01-20T21:48:19+00:00
642585441f419855e2a03843709413675401c91cjohan.mattsson.m@gmail.com

Merge branch 'master' of github.com:johanmattssonm/birdfont

Changed files (154)

Diff

diff --git a/README.md b/README.mdindex 1ea4570..7e813c7 100644--- a/README.md+++ b/README.md@@ -27,7 +27,6 @@ packages with a -dev or -devel affix:     libwebkitgtk-3.0-dev      libnotify-dev     libsqlite3-dev-    librsvg2-dev     libxmlbird-dev  XML Bird is available from [birdfont.org][xmlbird].diff --git a/birdfont/GtkWindow.vala b/birdfont/GtkWindow.valaindex 6282e99..d5851cb 100644--- a/birdfont/GtkWindow.vala+++ b/birdfont/GtkWindow.vala@@ -1,5 +1,5 @@ /*-	Copyright (C) 2012s 2013 2014 Johan Mattsson+	Copyright (C) 2012 2013 2014 2015 Johan Mattsson  	This program is free software: you can redistribute it and/or modify 	it under the terms of the GNU General Public License as published by@@ -52,8 +52,6 @@ public class GtkWindow : Gtk.Window, NativeWindow { 	Box text_box; 	Gtk.Button submit_text_button; 	-	Gtk.Window tooltip_window = new Gtk.Window ();-	 	ToolboxCanvas toolbox; 	 	Task background_task = new Task(idle);@@ -112,12 +110,7 @@ public class GtkWindow : Gtk.Window, NativeWindow { 				uri = Preview.get_uri (); 				html = Preview.get_html_with_absolute_paths (); 										-				try {	-					html_canvas.load_html_string (html, uri);-				} catch (Error e) {-					warning (e.message);-					warning ("Failed to load html into canvas.");-				}+				html_canvas.load_html_string (html, uri); 				 				// show the webview when loading has finished  				html_box.set_visible (true); @@ -488,8 +481,8 @@ public class GtkWindow : Gtk.Window, NativeWindow { 		} catch (GLib.Error e) { 			warning (e.message); 		}-	}-+	} +	 	public void run_non_blocking_background_thread (Task t) { 		unowned Thread<void*> bg; 		diff --git a/birdfont/Main.vala b/birdfont/Main.valaindex 09bc331..be3dd94 100644--- a/birdfont/Main.vala+++ b/birdfont/Main.vala@@ -32,7 +32,7 @@ public static int main (string[] arg) { 	window.set_native (native_window); 	native_window.init (); -	birdfont.load_font_from_command_line ();+	BirdFont.BirdFont.load_font_from_command_line (); 	 	Gtk.main (); 	return 0;diff --git a/birdui/BoxLayout.vala b/birdui/BoxLayout.valanew file mode 100644index 0000000..df7ee8d--- /dev/null+++ b/birdui/BoxLayout.vala@@ -0,0 +1,215 @@+/*+	Copyright (C) 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using Gee;+using SvgBird;+using B;+using Cairo;++namespace Bird {++public enum BoxOrientation {+	HORIZONTAL,+	VERTICAL+}++class BoxLayout : Component {++	public BoxOrientation orientation { get; private set; }+	+	public BoxLayout (XmlElement layout_tag, BoxOrientation orientation, Defs defs) {+		base (layout_tag, defs);+		this.orientation = orientation;+	}++	public override void draw (Context cairo) {+		cairo.save ();+		cairo.translate (padded_x, padded_y);+		clip (cairo);+		+		foreach (Component component in components) {+			component.draw (cairo);+		}++		cairo.restore ();+	}+			+	bool is_width_remainder (Component component) {+		return component.style.property_equals ("width", "remainder");+	}++	bool is_height_remainder (Component component) {+		return component.style.property_equals ("height", "remainder");+	}++	/** The smallest size this layout can be. */+	public override void get_min_size (out double min_width, out double min_height) {+		min_width = 0;+		min_height = 0;+		+		if (orientation == BoxOrientation.HORIZONTAL) {+			foreach (Component component in components) {+				double w, h;+				+				component.get_min_size (out w, out h);+				min_width += w;+				+				if (h > min_height) {+					min_height = h;+				}+			}	+		} else {+			foreach (Component component in components) {+				double w, h;+				+				component.get_min_size (out w, out h);	+				min_height += h;+				+				if (w > min_width) {+					min_width = w;+				}+			}+		}+		+		min_width += get_padding_left ();+		min_width += get_padding_right ();+		min_height += get_padding_top ();+		min_height += get_padding_bottom ();+		+		limit_size (ref min_width, ref min_height);+	}++	public override void layout (double parent_width, double parent_height) {+		double w, h;+		+		get_min_size (out w, out h);+		int remainders = count_remainders ();+		+		if (!is_width_remainder (this)) {+			width = w;+		}+		+		if (!is_height_remainder (this)) {+			height = h;+		}+		+		if (remainders > 0) {+			double remainder_size;+			+			if (orientation == BoxOrientation.HORIZONTAL) {+				remainder_size = (parent_width - w) / remainders;+				layout_variable_size (remainder_size, parent_height);+			} else {+				remainder_size = (parent_height - h) / remainders;+				layout_variable_size (remainder_size, parent_width);+			}+		}+		+		if (orientation == BoxOrientation.HORIZONTAL) {+			foreach (Component component in components) {+				component.layout (parent_width, h);+			}+		} else {+			foreach (Component component in components) {+				component.layout (w, parent_height);+			}+		}+		+		layout_positions ();+	}+	+	int count_remainders () {+		int remainders = 0;+		+		if (orientation == BoxOrientation.HORIZONTAL) {+			foreach (Component component in components) {+				if (is_width_remainder (component)) {+					remainders++;+				}+			}+		} else {+			foreach (Component component in components) {+				if (is_height_remainder (component)) {+					remainders++;+				}+			}+		}+		+		return remainders;+	}+	+	void layout_variable_size (double remainder_size, double fixed_size) {+		double w, h;+		+		w = 0;+		h = 0;+		foreach (Component component in components) {+			bool width_remainder = is_width_remainder (component);+			bool height_remainder = is_height_remainder (component);+			+			if (width_remainder && orientation == BoxOrientation.HORIZONTAL) {+				w = remainder_size;+				w -= component.get_padding_left ();+				w -= component.get_padding_right ();+				h = fixed_size;+			}+			+			if (height_remainder && orientation == BoxOrientation.VERTICAL) {+				w = fixed_size;+				h = remainder_size;+				h -= component.get_padding_top ();+				h -= component.get_padding_bottom ();+			}+			+			if (width_remainder || height_remainder) {+				double min_width, min_height;+				component.get_min_size (out min_width, out min_height);+				+				if (w < min_width) {+					w = min_width;+				}+				+				if (h < min_height) {+					h = min_height;+				}+				+				component.limit_size (ref w, ref h);+				component.width = w;+				component.height = h;+			}+		}+	}++	void layout_positions () {+		double child_x = 0;+		double child_y = 0;++		foreach (Component component in components) {+			component.x = child_x + component.get_padding_left ();+			component.y = child_y + component.get_padding_top ();++			if (orientation == BoxOrientation.HORIZONTAL) {+				child_x = component.x + component.padded_width + get_padding_right ();+			} else {+				child_y = component.y + component.padded_height  + get_padding_bottom ();+			}+		}+	}++	public override string to_string () {+		return "BoxLayout";+	}+}++}diff --git a/birdui/Component.vala b/birdui/Component.valanew file mode 100644index 0000000..f410e59--- /dev/null+++ b/birdui/Component.vala@@ -0,0 +1,409 @@+/*+	Copyright (C) 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using B;+using SvgBird;+using Gee;+using Cairo;++namespace Bird {++public abstract class Component : GLib.Object {+	public double width { get; protected set; }+	public double height { get; protected set; }+	+	public double padded_width {+		get {+			return width + get_padding_top () + get_padding_bottom ();+		}+	}+	+	public double padded_height { +		get {+			return height + get_padding_left () + get_padding_right ();+		}+	}++	public double padded_x {+		get {+			return x + get_padding_top ();+		}+	}+	+	public double padded_y { +		get {+			return y + get_padding_left ();+		}+	}+	+	/** Vertical placement for this component relative to the parent container. */+	public double x { get; protected set; }+	+	/** Horizontal placement for this component relative to the parent container. */+	public double y { get; protected set; }++	/** The parts this component is made of. */+	protected ArrayList<Component> components = new ArrayList<Component> ();++	XmlElement component_tag;+	+	/** Style sheet and other SVG definitions. */+	Defs defs = new Defs ();+	protected SvgStyle style = new SvgStyle ();++	string? css_class = null;+	string? id = null;++	Overflow overflow = Overflow.VISIBLE;++	public Component.load (string file_name, double width, double height) {+		this.width = width;+		this.height = height;+		load_file (file_name, null);+		layout (width, height);+	}++	/** Parse component ui file but don't do layout. */+	internal Component.load_component (string file_name, Component parent) {+		load_file (file_name, parent);+	}+	+	public Component (XmlElement component_tag, Defs defs) {+		this.defs = defs;+		this.component_tag = component_tag;+		set_identification ();+		parse (component_tag);+	}++	public Component.embedded (XmlElement component_tag, Defs defs) {+		this.defs = defs;+		this.component_tag = component_tag;+		set_identification ();+	}++	void set_identification () {+		foreach (Attribute attribute in component_tag.get_attributes ()) {+			string attribute_name = attribute.get_name ();+			+			if (attribute_name == "id") {+				id = attribute.get_content ();+			} else if (attribute_name == "class") {+				css_class = attribute.get_content ();+			}+		}+	}++	private void inherit_styles_sheet (Defs defs) {+		this.defs = defs;+	}++	protected void parse_style (XmlElement style_tag) {+		defs = defs.shallow_copy ();+		StyleSheet style_sheet = StyleSheet.parse (defs, style_tag);+		defs.style_sheet.merge (style_sheet);+	}+	+	protected void parse_svg (XmlElement svg_tag) {+		foreach (Attribute attribute in svg_tag.get_attributes ()) {+			string attribute_name = attribute.get_name ();+			+			if (attribute_name == "file") {+				string file_name = attribute.get_content ();+				SvgComponent svg = new SvgComponent (svg_tag, defs, file_name);+				add_component (svg);	+			}+		}+	}++	protected void add_component (Component component) {+		components.add (component);+		component.set_style_properties (this);+	}++	protected void set_style_properties (Component parent) {+		inherit_styles_sheet (parent.defs);+		style = SvgStyle.parse (parent.defs, parent.style, component_tag);		+		set_overflow_property_from_css ();+		set_identification ();+	}+	+	protected void set_overflow_property_from_css () {+		string? css_overflow = style.get_css_property ("overflow");+		+		if (css_overflow != null) {+			string overflow_property = (!) css_overflow;+			+			if (overflow_property == "hidden") {+				overflow = Overflow.HIDDEN;+			} else if (overflow_property == "visible") {+				overflow = Overflow.VISIBLE;+			}+		}+	}++	protected void parse_layout (XmlElement layout_tag) {+		string type = "";+		+		foreach (Attribute attribute in layout_tag.get_attributes ()) {+			string attribute_name = attribute.get_name ();+			+			if (attribute_name == "type") {+				type = attribute.get_content ();				+			}+		}+		+		if (type == "hbox") {+			HBox hbox = new HBox (layout_tag, defs);+			add_component (hbox);+		} else if (type == "vbox") {+			VBox vbox = new VBox (layout_tag, defs);+			add_component (vbox);+		} else {+			warning (type + " layout of type is supported in this verison.");+		}+	}+	+	protected void parse_component (XmlElement component_tag) {+		foreach (Attribute attribute in component_tag.get_attributes ()) {+			string attribute_name = attribute.get_name ();+			+			if (attribute_name == "file") {+				string file_name = attribute.get_content ();+				UI ui = new UI.load_component (file_name, this);+				+				foreach (Component component in ui.components) {+					add_component (component);+					+					SvgStyle copied_style;+					copied_style = SvgStyle.parse (defs, style, component_tag);		+					copied_style.apply (component.style);+					component.style = copied_style;+				}+			}+		}+	}+	+	protected void parse (XmlElement component_tag) {+		foreach (XmlElement tag in component_tag) {+			string tag_name = tag.get_name ();+			+			if (tag_name == "ui") {+				parse (tag);+			} else if (tag_name == "layout") {+				parse_layout (tag);+			} else if (tag_name == "component") {+				parse_component (tag);+			} else if (tag_name == "svg") {+				parse_svg (tag);+			} else if (tag_name == "style") {+				parse_style (tag);+			} else {+				unused_tag (tag_name);+			}+		}+	}++	internal void unused_attribute (string attribute) {+		warning ("The attribute " + attribute + " is not known in this version.");+	}+	+	internal void unused_tag (string tag_name) {+		warning ("The tag " + tag_name + " is not known in this version.");+	}++	public void load_file (string file_name, Component? parent) {+		if (file_name.has_suffix (".ui")) {+			load_layout (file_name, parent);+		} else if (file_name.has_suffix (".svg")) {+			SvgComponent svg = new SvgComponent.for_file (file_name);+			add_component (svg);	+		} else {+			warning (file_name + " is not a ui file or svg file.");+		}+	}++	public void load_layout (string file_name, Component? parent) {+		string? path = find_file (file_name);+		+		if (path == null) {+			warning (file_name + " not found.");+			return;+		}+		+		string xml_data;+		File layout_file = File.new_for_path ((!) path); +		+		try {+			FileUtils.get_contents((!) layout_file.get_path (), out xml_data);+		} catch (GLib.Error error) {+			warning (error.message);+			return;+		}++		XmlTree xml_parser = new XmlTree (xml_data);		+		XmlElement tag = xml_parser.get_root ();+		+		if (parent == null) {+			component_tag = tag;+			defs = new Defs ();+		} else {+			Component p = (!) parent;+			component_tag = p.component_tag;+			defs = p.defs;+		}+		+		parse (tag);+	}+	+	public static string find_file (string file_name) {+		File file = File.new_for_path ("birdui/" + file_name);+		+		if (file.query_exists ()) {+			return (!) file.get_path ();+		}+		+		return file_name;+	}+	+	public virtual void get_min_size (out double min_width, out double min_height) {+		min_width = width;+		min_height = height;+		+		if (unlikely (components.size > 1)) {+			warning ("A component has several parts but no layout has been set.");+		}+		+		foreach (Component component in components) {+			component.get_min_size (out min_width, out min_height);+		}++		min_width += get_padding_left ();+		min_width += get_padding_right ();+		min_height += get_padding_top ();+		min_height += get_padding_bottom ();+	}+	+	public virtual void layout (double parent_width, double parent_height) {+		warning ("A component without a layout was added to the view.");++		double w, h;+		get_min_size (out w, out h);++		width = w;+		height = h;+		+		foreach (Component component in components) {+			component.layout (parent_width, parent_height);+		}+	}+	+	public void clip (Context cairo) {+		if (overflow == Overflow.HIDDEN) {+			cairo.rectangle (0, 0, width, height);+			cairo.clip ();+		}+	}+	+	public abstract void draw (Context cairo);+	+	public virtual void motion_notify_event (double x, double y) {	+	}+	+	public virtual void button_press_event (uint button, double x, double y) {	+	}+	+	public virtual string to_string () {+		return @"$(component_tag.get_name ())";+	}+	+	public void print_tree () {+		print_tree_level (0);+	}++	protected void print_tree_level (int indent) {+		for (int i = 0; i < indent; i++) {+			print ("\t");+		}+		+		print (@"$(to_string ()) width: $padded_width, height: $padded_height x $x y $y $(style)\n");+		+		foreach (Component component in components) {+			component.print_tree_level (indent + 1);+		}+	}+	+	protected double get_padding_bottom () {+		return SvgFile.parse_number (style.get_css_property ("padding-bottom"));+	}++	protected double get_padding_top () {+		return SvgFile.parse_number (style.get_css_property ("padding-top"));+	}++	protected double get_padding_left () {+		return SvgFile.parse_number (style.get_css_property ("padding-left"));+	}++	protected double get_padding_right () {+		return SvgFile.parse_number (style.get_css_property ("padding-right"));+	}++	protected void limit_size (ref double width, ref double height) {+		string? min_width = style.get_css_property ("min-width");+		if (min_width != null) {+			double w = SvgFile.parse_number (min_width);+			if (width < w) {+				width = w;+			}+		}++		string? min_height = style.get_css_property ("min-height");+		if (min_height != null) {+			double h = SvgFile.parse_number (min_height);+			+			if (height < h) {+				height = h;+			}+		}+		+		string? max_width = style.get_css_property ("max-width");+		if (max_width != null) {+			double w = SvgFile.parse_number (max_width);+			+			if (width > w) {+				width = w;+			}+		}++		string? max_height = style.get_css_property ("max-height");+		if (max_height != null) {+			double h = SvgFile.parse_number (max_height);+			+			if (height > h) {+				height = h;+			}+		}+		+		if (width < 0) {+			width = 0;+		}++		if (height < 0) {+			height = 0;+		}+	}+}++}+diff --git a/birdui/GtkWidget.vala b/birdui/GtkWidget.valanew file mode 100644index 0000000..c31e14d--- /dev/null+++ b/birdui/GtkWidget.vala@@ -0,0 +1,59 @@+/*+	Copyright (C) 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using Gtk;+using Gdk;+using Cairo;+using Math;++namespace Bird {++public class Widget : DrawingArea {+	+	UI component;+	+	public Widget (UI main_component) {		+		component = main_component;++		add_events (EventMask.BUTTON_PRESS_MASK +			| EventMask.POINTER_MOTION_MASK+			| EventMask.LEAVE_NOTIFY_MASK);+			  +		motion_notify_event.connect ((event)=> {+			component.motion_notify_event (event.x, event.y);+			return true;+		});	+				+		button_press_event.connect ((event)=> {+			component.button_press_event (event.button, event.x, event.y);+			return true;+		});++		draw.connect ((event) => {+			Context cairo_context = cairo_create (get_window ());+			component.draw (cairo_context);+			return true;+		});+		+		int width = (int) rint (component.padded_width);+		int height = (int) rint (component.padded_height);+		set_size_request (width, height);++		size_allocate.connect((allocation) => {+			component.resize (allocation.width, allocation.height);+		});+	}+}++}diff --git a/birdui/GtkWindow.vala b/birdui/GtkWindow.valanew file mode 100644index 0000000..b27b127--- /dev/null+++ b/birdui/GtkWindow.vala@@ -0,0 +1,39 @@+/*+	Copyright (C) 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using Bird;+using Gtk;++int main (string[] args) {+	Gtk.init (ref args);+	+	Window window = new Window ();+	window.set_title ("UI Bird");+	window.destroy.connect (Gtk.main_quit);+	+	UI layout = new UI ("test.ui", 700, 200);+	+	layout.print_tree ();+	+	Bird.Widget primary_layout = new Bird.Widget (layout);++	Box vbox = new Box (Orientation.VERTICAL, 0);+	vbox.pack_start(primary_layout, true, true, 0);+	window.add (vbox);+	+	window.show_all ();+	+	Gtk.main ();+	return 0;+}diff --git a/birdui/HBox.vala b/birdui/HBox.valanew file mode 100644index 0000000..d7af576--- /dev/null+++ b/birdui/HBox.vala@@ -0,0 +1,31 @@+/*+	Copyright (C) 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using Gee;+using B;+using SvgBird;++namespace Bird {++class HBox : BoxLayout {+	public HBox (XmlElement layout, Defs defs) {+		base (layout, BoxOrientation.HORIZONTAL, defs);+	}+	+	public override string to_string () {+		return "HBox";+	}+}++}diff --git a/birdui/Overflow.vala b/birdui/Overflow.valanew file mode 100644index 0000000..3a0ed04--- /dev/null+++ b/birdui/Overflow.vala@@ -0,0 +1,22 @@+/*+	Copyright (C) 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++namespace Bird {++public enum Overflow {+	HIDDEN,+	VISIBLE+}++}diff --git a/birdui/Style.vala b/birdui/Style.valanew file mode 100644index 0000000..d1e3d2c--- /dev/null+++ b/birdui/Style.vala@@ -0,0 +1,34 @@+/*+	Copyright (C) 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using B;+using SvgBird;+using Gee;+using Cairo;++namespace Bird {++public class Style : GLib.Object {+	public SvgStyle svg_style;+	+	public Style () {+		svg_style = new SvgStyle ();+	}+	+	public Style.for_svg (SvgStyle svg_style) {+		this.svg_style = svg_style;+	}+}++}diff --git a/birdui/SvgComponent.vala b/birdui/SvgComponent.valanew file mode 100644index 0000000..416cc28--- /dev/null+++ b/birdui/SvgComponent.vala@@ -0,0 +1,102 @@+/*+	Copyright (C) 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using B;+using SvgBird;+using Gee;+using Cairo;++namespace Bird {++class SvgComponent : Component {+	string? path = null;+	string file_name = "";+	SvgDrawing? drawing = null;+	+	public SvgComponent (XmlElement svg_component_tag, Defs defs, string svg_file) {+		base.embedded (svg_component_tag, defs);+		load_svg (svg_file);+	}++	public SvgComponent.for_file (string svg_file) {+		base.embedded (new XmlElement.empty (), new Defs ());+		load_svg (svg_file);+	}++	public override void get_min_size (out double min_width, out double min_height) {+		min_width = 0;+		min_height = 0;+		+		if (drawing != null) {+			SvgDrawing svg = (!) drawing;+			min_width = svg.width + get_padding_left () + get_padding_right ();+			min_height = svg.height + get_padding_bottom () + get_padding_top ();+		}+	}+	+	public override void layout (double parent_width, double parent_height) {+		if (unlikely (components.size > 0)) {+			warning ("SVG files can not have subviews.");+		}+		+		if (drawing != null) {+			SvgDrawing svg = (!) drawing;+			width = svg.width;+			height = svg.height;+		}+	}+			+	public override string to_string () {+		return "Svg: " + file_name;+	}++	private void load_svg (string file_name) {+		this.file_name = file_name;+		path = find_file (file_name);+		+		if (path == null) {+			warning (file_name + " not found.");+			return;+		}+				+		string xml_data;+		File svg_file = File.new_for_path ((!) path); +		try {+			FileUtils.get_contents((!) svg_file.get_path (), out xml_data);+		} catch (GLib.Error error) {+			warning (error.message);+			return;+		}+		+		SvgFile svg_parser = new SvgFile ();+		drawing = svg_parser.parse_svg_data (xml_data);+	}++	public override void draw (Context cairo) {+		cairo.save ();+		cairo.translate (padded_x, padded_y);+		clip (cairo);+		+		if (drawing != null) {+			SvgDrawing svg = (!) drawing;+			svg.draw (cairo);+		}+		+		cairo.restore ();+	}++}++}+diff --git a/birdui/VBox.vala b/birdui/VBox.valanew file mode 100644index 0000000..d3d81cb--- /dev/null+++ b/birdui/VBox.vala@@ -0,0 +1,32 @@+/*+	Copyright (C) 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using Gee;+using B;+using SvgBird;++namespace Bird {+	+class VBox : BoxLayout {+	public VBox (XmlElement layout, Defs defs) {+		base (layout, BoxOrientation.VERTICAL, defs);+	}+	+	public override string to_string () {+		return "VBox";+	}++}++}diff --git a/build.py b/build.pyindex 265deeb..a71e729 100755--- a/build.py+++ b/build.py@@ -10,19 +10,25 @@ from scripts import version  if platform == 'msys': 	process_tasks(dodo.make_libbirdgems('libbirdgems.dll', []))-	process_tasks(dodo.make_libbirdfont('libbirdfont.dll', ['libbirdgems.dll']))-	process_tasks(dodo.make_libbirdfont('libbirdfont.dll', ['libbirdgems.dll']))-	process_tasks(dodo.make_birdfont_test('birdfont-test.exe', ['libbirdgems.so', 'libbirdfont.so']))+	process_tasks(dodo.make_libbirdgems('libsvgbird.dll', []))+	process_tasks(dodo.make_libbirdfont('libbirdfont.dll', ['libbirdgems.dll', 'libsvgbird.dll']))+	process_tasks(dodo.make_libbirdfont('libbirdfont.dll', ['libbirdgems.dll', 'libsvgbird.dll']))+	process_tasks(dodo.make_birdfont_test('birdfont-test.exe', +		['libbirdgems.dll', 'libbirdfont.dll', 'libsvgbird.dll'])) elif platform == 'darwin': 	gems = "libbirdgems." + str(version.LIBBIRDGEMS_SO_VERSION) + '.dylib' 	bird = "libbirdfont." + str(version.SO_VERSION) + '.dylib';+	svg = "libsvgbird." + str(version.LIBSVGBIRD_SO_VERSION) + '.dylib';+	process_tasks(dodo.make_libsvgbird(svg, [])) 	process_tasks(dodo.make_libbirdgems(gems, [])) 	process_tasks(dodo.make_libbirdfont(bird, [gems])) 	process_tasks(dodo.task_man()) else:+	process_tasks(dodo.task_libsvgbird()) 	process_tasks(dodo.task_libbirdgems()) 	process_tasks(dodo.task_libbirdfont())-	process_tasks(dodo.make_birdfont_test('birdfont-test', ['libbirdgems.so', 'libbirdfont.so']))+	process_tasks(dodo.make_birdfont_test('birdfont-test', +		['libsvgbird.so', 'libbirdgems.so', 'libbirdfont.so']))  if config.GTK: 	process_tasks(dodo.task_birdfont())diff --git a/configure b/configureindex 8383c79..b0a9277 100755--- a/configure+++ b/configure@@ -11,7 +11,8 @@ import re from scripts.run import run  TARGETS = ['libbirdfont', -           'libbirdgems', +           'libbirdgems',+           'libsvgbird',            'birdfont',             'birdfont-autotrace',            'birdfont-export',@@ -49,12 +50,34 @@ def test_program_version (program, a, b, c): 	version = [int(n) for n in v.split ('.')] 	return [a,b,c] <= version	 -def test_library_version (lib):+def test_library_version (lib, required=True, version=None): 	print ('Looking for library: ' + lib + '\t\t') 	process = subprocess.Popen ('pkg-config --modversion ' + lib, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)+	v = process.stdout.readline().decode('utf-8') 	process.communicate()[0]-	return process.returncode == 0-+	+	if not process.returncode == 0:+		if required:+			print (FAIL + lib + ' not found' + ENDC)+			exit (1)+		else:+			return False+	+	if version == None:+		return True+	+	installed_version = v.split ('.');+	library_version = version.split ('.');+	+	if installed_version < library_version:+		if required:+			print (FAIL + lib + ' version >= ' + version + ' not found.' + ENDC)+			exit (1)+		else:+			return False+		+	return True+	 def has_posixvala (): 	posixvala = test_library_version ('posixvala') 	if not posixvala:@@ -82,7 +105,6 @@ def configure(gtk, libbgee): 				'libsoup-2.4', 				'libnotify', 				'sqlite3',-				'xmlbird' 				] 	else: 		libs = [@@ -90,25 +112,23 @@ def configure(gtk, libbgee): 				'glib-2.0',  				'sqlite3', 				'fontconfig',-				'xmlbird' 				] +	test_library_version ('xmlbird', True, '1.2.0')+ 	for lib in libs:-		if not test_library_version (lib):-			print (FAIL + 'Can not find ' + lib + ENDC)-			exit (1)+		test_library_version (lib)  	if libbgee == 'Any':-		if test_library_version ('gee-0.8'):+		if test_library_version ('gee-0.8', False): 			gee = 'gee-0.8'-		elif test_library_version ('gee-1.0'):+		elif test_library_version ('gee-1.0', False): 			gee = 'gee-1.0' 		else: 			print (FAIL + 'Can not find libgee (version 0.8 or version 1.0).' + ENDC) 			exit (1) 	else: 		if not test_library_version (libbgee):-			print (FAIL + 'Can not find lib gee.' + ENDC) 			exit (1) 		gee = libbgee; @@ -187,12 +207,12 @@ configure(options.gtk, options.gee)  configfile.write_config(options.prefix) configfile.write_compile_parameters(options.prefix,-									 options.dest,-									 options.cc,-									 gee,-									 options.valac,-									 options.nonnull,-									 valacflags,-									 cflags,-									 ldflags,-									 options.gtk)+									options.dest,+									options.cc,+									gee,+									options.valac,+									options.nonnull,+									valacflags,+									cflags,+									ldflags,+									options.gtk)diff --git a/dodo.py b/dodo.pyindex 327be3e..13bac8e 100644--- a/dodo.py+++ b/dodo.py@@ -1,5 +1,5 @@ """-Copyright (C) 2012 2013 2014 2015 Eduardo Naufel Schettino and Johan Mattsson+Copyright (C) 2012 - 2016 Eduardo Naufel Schettino and Johan Mattsson  This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by@@ -48,6 +48,13 @@ else:     LIBBIRDGEMS_SO_VERSION=version.LIBBIRDGEMS_SO_VERSION  if "kfreebsd" in sys.platform:+    LIBSVGBIRD_SO_VERSION=version.LIBSVGBIRD_SO_VERSION+elif "openbsd" in sys.platform:+    LIBSVGBIRD_SO_VERSION='${LIBbirdgems_VERSION}'+else:+    LIBSVGBIRD_SO_VERSION=version.LIBSVGBIRD_SO_VERSION++if "kfreebsd" in sys.platform:     SO_VERSION=version.SO_VERSION elif "openbsd" in sys.platform:     SO_VERSION='${LIBbirdfont_VERSION}'@@ -78,14 +85,15 @@ def make_birdfont(target_binary, deps): 		--pkg webkitgtk-3.0 \ 		--pkg libnotify \ 		--pkg xmlbird \-		--pkg librsvg-2.0 \-		--pkg libbirdfont+		--pkg libbirdfont \+		--pkg libsvgbird \         """              cc_command = config.CC + " " + config.CFLAGS.get("birdfont", "") + """ \         -c C_SOURCE \ 		-D 'GETTEXT_PACKAGE="birdfont"' \         -I./build/libbirdfont \+        -I./build/libsvgbird \ 		$(pkg-config --cflags sqlite3) \ 		$(pkg-config --cflags """ + config.GEE + """) \ 		$(pkg-config --cflags gio-2.0) \@@ -94,7 +102,6 @@ def make_birdfont(target_binary, deps): 		$(pkg-config --cflags gdk-pixbuf-2.0) \ 		$(pkg-config --cflags webkitgtk-3.0) \ 		$(pkg-config --cflags libnotify) \-		$(pkg-config --cflags librsvg-2.0) \         -o OBJECT_FILE"""              linker_command = config.CC + " " + config.LDFLAGS.get("birdfont", "") + """ \@@ -109,8 +116,7 @@ def make_birdfont(target_binary, deps): 		$(pkg-config --libs webkitgtk-3.0) \ 		$(pkg-config --libs xmlbird) \ 		$(pkg-config --libs libnotify) \-        $(pkg-config --libs librsvg-2.0) \-		-L./build -L./build/bin -l birdgems\+		-L./build -L./build/bin -l birdgems -l svgbird \         -o build/bin/""" + target_binary      birdfont = Builder('birdfont',@@ -124,7 +130,7 @@ def make_birdfont(target_binary, deps):     yield birdfont.build()  def task_birdfont():-    yield make_birdfont('birdfont', ['libbirdgems.so', 'libbirdfont.so'])+    yield make_birdfont('birdfont', ['libbirdgems.so', 'libbirdfont.so', 'libsvgbird.so'])  def make_birdfont_export(target_binary, deps):     valac_command = config.VALAC + """ \@@ -139,13 +145,16 @@ def make_birdfont_export(target_binary, deps): 		--pkg gio-2.0  \ 		--pkg cairo \ 		--pkg xmlbird \-		--pkg libbirdfont+		--pkg libsvgbird \+		--pkg libbirdfont \+		--pkg libsvgbird \         """      cc_command = config.CC + " " + config.CFLAGS.get("birdfont-export", "") + """ \         -c C_SOURCE \ 		-D 'GETTEXT_PACKAGE="birdfont"' \         -I./build/libbirdfont \+        -I./build/libsvgbird \ 		$(pkg-config --cflags sqlite3) \ 		$(pkg-config --cflags """ + config.GEE + """) \ 		$(pkg-config --cflags gio-2.0) \@@ -163,8 +172,7 @@ def make_birdfont_export(target_binary, deps): 		$(pkg-config --libs cairo) \ 		$(pkg-config --libs glib-2.0) \ 		$(pkg-config --libs xmlbird) \-        $(pkg-config --libs librsvg-2.0) \-		-L./build -L./build/bin -l birdgems\+		-L./build -L./build/bin -l birdgems -l svgbird \ 		-o ./build/bin/""" + target_binary      birdfont_export = Builder('birdfont-export',@@ -178,7 +186,7 @@ def make_birdfont_export(target_binary, deps):     yield birdfont_export.build()  def task_birdfont_export():-    yield make_birdfont_export('birdfont-export', ['libbirdgems.so', 'libbirdfont.so'])+    yield make_birdfont_export('birdfont-export', ['libbirdgems.so', 'libbirdfont.so', 'libsvgbird.so'])  def make_birdfont_import(target_binary, deps):     valac_command = config.VALAC + """\@@ -194,12 +202,14 @@ def make_birdfont_import(target_binary, deps): 		--pkg cairo \ 		--pkg xmlbird \ 		--pkg libbirdfont \+		--pkg libsvgbird \         """              cc_command = config.CC + " " + config.CFLAGS.get("birdfont-import", "") + """ \         -c C_SOURCE \ 		-D 'GETTEXT_PACKAGE="birdfont"' \         -I./build/libbirdfont \+        -I./build/libsvgbird \ 		$(pkg-config --cflags sqlite3) \ 		$(pkg-config --cflags """ + config.GEE + """) \ 		$(pkg-config --cflags gio-2.0) \@@ -217,8 +227,7 @@ def make_birdfont_import(target_binary, deps): 		$(pkg-config --libs cairo) \ 		$(pkg-config --libs glib-2.0) \ 		$(pkg-config --libs xmlbird) \-        $(pkg-config --libs librsvg-2.0) \-		-L./build -L./build/bin -l birdgems\+		-L./build -L./build/bin -l birdgems -l svgbird \ 		-o ./build/bin/""" + target_binary      birdfont_import = Builder('birdfont-import',@@ -232,7 +241,7 @@ def make_birdfont_import(target_binary, deps):     yield birdfont_import.build()  def task_birdfont_import():-    yield make_birdfont_import('birdfont-import', ['libbirdgems.so', 'libbirdfont.so'])+    yield make_birdfont_import('birdfont-import', ['libbirdgems.so', 'libbirdfont.so', 'libsvgbird.so']) 	 def make_birdfont_autotrace(target_binary, deps):     valac_command = config.VALAC + """\@@ -248,12 +257,14 @@ def make_birdfont_autotrace(target_binary, deps): 		--pkg cairo \ 		--pkg xmlbird \ 		--pkg libbirdfont \+		--pkg libsvgbird \         """              cc_command = config.CC + " " + config.CFLAGS.get("birdfont-autotrace", "") + """ \         -c C_SOURCE \ 		-D 'GETTEXT_PACKAGE="birdfont"' \         -I./build/libbirdfont \+        -I./build/libsvgbird \ 		$(pkg-config --cflags sqlite3) \ 		$(pkg-config --cflags """ + config.GEE + """) \ 		$(pkg-config --cflags gio-2.0) \@@ -264,6 +275,7 @@ def make_birdfont_autotrace(target_binary, deps):     linker_command = config.CC + " " + config.LDFLAGS.get("birdfont-autotrace", "") + """ \ 		build/birdfont-autotrace/*.o \         -I./build/libbirdfont \+        -I./build/libsvgbird \ 		-Lbuild/bin/ -lbirdfont \ 		-lm \ 		$(pkg-config --libs sqlite3) \@@ -272,8 +284,7 @@ def make_birdfont_autotrace(target_binary, deps): 		$(pkg-config --libs cairo) \ 		$(pkg-config --libs glib-2.0) \ 		$(pkg-config --libs xmlbird) \-        $(pkg-config --libs librsvg-2.0) \-		-L./build -L./build/bin -l birdgems\+		-L./build -L./build/bin -l birdgems -l svgbird\ 		-o ./build/bin/""" + target_binary      birdfont_autotrace = Builder('birdfont-autotrace',@@ -287,7 +298,7 @@ def make_birdfont_autotrace(target_binary, deps):     yield birdfont_autotrace.build()  def task_birdfont_autotrace():-    yield make_birdfont_autotrace('birdfont-autotrace', ['libbirdgems.so', 'libbirdfont.so'])+    yield make_birdfont_autotrace('birdfont-autotrace', ['libbirdgems.so', 'libbirdfont.so', 'libsvgbird.so'])      def make_libbirdfont(target_binary, deps):     valac_command = config.VALAC + """\@@ -301,15 +312,16 @@ def make_libbirdfont(target_binary, deps):         -H build/libbirdfont/birdfont.h \         libbirdfont/*.vala \         libbirdfont/OpenFontFormat/*.vala \-        libbirdfont/Renderer/*.vala \+        libbirdfont/TextRendering/*.vala \+        --pkg posix \         --pkg """ + config.GEE + """ \         --pkg gio-2.0 \         --pkg cairo \         --pkg xmlbird \         --pkg libbirdgems \+        --pkg libsvgbird \         --pkg sqlite3 \         --pkg gdk-pixbuf-2.0 \-        --pkg librsvg-2.0 \         """      cc_command = config.CC + " " + config.CFLAGS.get("libbirdfont", "") + """ \@@ -318,6 +330,7 @@ def make_libbirdfont(target_binary, deps):             -D 'GETTEXT_PACKAGE="birdfont"' \             -I ./build/libbirdfont \             -I ./build/libbirdgems \+            -I ./build/libsvgbird \             $(pkg-config --cflags sqlite3) \             $(pkg-config --cflags fontconfig) \             $(pkg-config --cflags """ + config.GEE + """) \@@ -325,7 +338,6 @@ def make_libbirdfont(target_binary, deps):             $(pkg-config --cflags cairo) \             $(pkg-config --cflags glib-2.0) \             $(pkg-config --cflags xmlbird) \-            $(pkg-config --cflags librsvg-2.0) \             -o OBJECT_FILE"""      linker_command = config.CC + " " + config.LDFLAGS.get("libbirdfont", "") + """ \@@ -340,7 +352,7 @@ def make_libbirdfont(target_binary, deps):             $(pkg-config --libs cairo) \             $(pkg-config --libs glib-2.0) \             $(pkg-config --libs xmlbird) \-            -L./build -L./build/bin -l birdgems\+            -L./build -L./build/bin -l birdgems -l svgbird \             -o ./build/bin/""" + target_binary      libbirdfont = Builder('libbirdfont',@@ -354,7 +366,64 @@ def make_libbirdfont(target_binary, deps):     yield libbirdfont.build()  def task_libbirdfont():-    yield make_libbirdfont('libbirdfont.so.' + SO_VERSION, ['libbirdgems.so'])+    yield make_libbirdfont('libbirdfont.so.' + SO_VERSION, ['libbirdgems.so', 'libsvgbird.so'])++def make_libsvgbird(target_binary, deps):+    valac_command = config.VALAC + """\+        -C \+        --vapidir=./ \+        --basedir build/libsvgbird/ \+        """ + config.NON_NULL + """ \+        """ + config.VALACFLAGS.get("libsvgbird", "") + """ \+        --enable-experimental \+        --library libsvgbird \+        -H build/libsvgbird/svgbird.h \+        libsvgbird/*.vala \+        --pkg posix \+        --pkg """ + config.GEE + """ \+        --pkg gio-2.0 \+        --pkg cairo \+        --pkg xmlbird \+        """++    cc_command = config.CC + " " + config.CFLAGS.get("libsvgbird", "") + """ \+            -c C_SOURCE \+            -fPIC \+            -I ./build/libsvgbird \+            $(pkg-config --cflags """ + config.GEE + """) \+            $(pkg-config --cflags gio-2.0) \+            $(pkg-config --cflags cairo) \+            $(pkg-config --cflags glib-2.0) \+            $(pkg-config --cflags xmlbird) \+            -o OBJECT_FILE"""++    linker_command = config.CC + " " + config.LDFLAGS.get("libsvgbird", "") + """ \+            -shared \+            """ + soname(target_binary) + """ \+            build/libsvgbird/*.o \+            $(pkg-config --libs """ + config.GEE + """) \+            $(pkg-config --libs gio-2.0) \+            $(pkg-config --libs cairo) \+            $(pkg-config --libs glib-2.0) \+            $(pkg-config --libs xmlbird) \+            -L./build -L./build/bin \+            -o ./build/bin/""" + target_binary++    link_name = 'libsvgbird.so'+    source_directory = 'libsvgbird'+    +    libsvgbird = Builder(source_directory,+                         valac_command, +                         cc_command,+                         linker_command,+                         target_binary,+                         link_name,+                         deps)+			+    yield libsvgbird.build()++def task_libsvgbird():+    yield make_libsvgbird('libsvgbird.so.' + LIBSVGBIRD_SO_VERSION, [])      def make_libbirdgems(target_binary, deps):     valac_command = config.VALAC + """\@@ -450,12 +519,14 @@ def make_birdfont_test(target_binary, deps): 		--pkg cairo \ 		--pkg xmlbird \ 		--pkg libbirdfont \+		--pkg libsvgbird \         """      cc_command = config.CC + " " + config.CFLAGS.get("birdfont-test", "") + """ \         -c C_SOURCE \ 		-D 'GETTEXT_PACKAGE="birdfont"' \         -I./build/libbirdfont \+        -I./build/libsvgbird \ 		$(pkg-config --cflags sqlite3) \ 		$(pkg-config --cflags """ + config.GEE + """) \ 		$(pkg-config --cflags gio-2.0) \@@ -472,8 +543,7 @@ def make_birdfont_test(target_binary, deps): 		$(pkg-config --libs cairo) \ 		$(pkg-config --libs glib-2.0) \ 		$(pkg-config --libs xmlbird) \-        $(pkg-config --libs librsvg-2.0) \-		-L./build -L./build/bin -l birdgems\+		-L./build -L./build/bin -l birdgems -l svgbird\         -o build/bin/""" + target_binary      test = Builder('birdfont-test',@@ -489,4 +559,55 @@ def make_birdfont_test(target_binary, deps): def task_birdfont_test():     yield make_birdfont_test('birdfont-test', ['libbirdgems.so', 'libbirdfont.so']) +def make_birdui(target_binary, deps):+    valac_command = config.VALAC + """\+		-C \+		--pkg posix \+		--pkg """ + config.GEE + """ \+		--pkg gtk+-3.0 \+		--pkg libsvgbird \+		--pkg xmlbird \+		--vapidir=./ \+		--basedir=build/birdui/ \+		""" + config.NON_NULL + """ \+		--enable-experimental \+		birdui/*.vala \+        """++    cc_command = config.CC + """ \+			-fPIC \+			$(pkg-config --cflags gtk+-3.0) \+			$(pkg-config --cflags glib-2.0) \+			$(pkg-config --cflags xmlbird) \+			$(pkg-config --cflags """ + config.GEE + """) \+			-g \+			-I ./build/libsvgbird \+			-c C_SOURCE \+            -o OBJECT_FILE \+			"""++    linker_command = config.CC + """ \+			""" + soname(target_binary) + """ \+			-fPIC \+			-g \+			build/birdui/*.o \+			$(pkg-config --libs gtk+-3.0) \+			$(pkg-config --libs glib-2.0) \+			$(pkg-config --libs gobject-2.0) \+			$(pkg-config --libs xmlbird) \+			$(pkg-config --libs """ + config.GEE + """) \+			-L ./build/bin -l m -l svgbird \+			-o build/bin/""" + target_binary++    libbirdgems = Builder('birdui',+                          valac_command, +                          cc_command,+                          linker_command,+                          target_binary,+						  None,+                          deps)+			+    yield libbirdgems.build() +def task_birdui():+    yield make_birdui('birdui', []) diff --git a/install.py b/install.pyindex c3660fd..e3e5bc3 100755--- a/install.py+++ b/install.py@@ -130,7 +130,7 @@ elif not options.libdir: 	if platform.dist()[0] == 'Ubuntu' or platform.dist()[0] == 'Debian': 		process = subprocess.Popen(['dpkg-architecture', '-qDEB_HOST_MULTIARCH'], stdout=subprocess.PIPE) 		out, err = process.communicate()-		libdir = '/lib/' + out.rstrip ('\n')+		libdir = '/lib/' + out.decode('UTF-8').rstrip ('\n') 	else: 		p = platform.machine() 		if p == 'i386' or p == 's390' or p == 'ppc' or p == 'armv7hl':diff --git a/libbirdfont/BackgroundTab.vala b/libbirdfont/BackgroundTab.valaindex c154e23..976cfb9 100644--- a/libbirdfont/BackgroundTab.vala+++ b/libbirdfont/BackgroundTab.vala@@ -14,6 +14,7 @@  using Math; using Cairo;+using SvgBird;  namespace BirdFont { diff --git a/libbirdfont/BezierPoints.vala b/libbirdfont/BezierPoints.valadeleted file mode 100644index 609f075..0000000--- a/libbirdfont/BezierPoints.vala+++ /dev/null@@ -1,33 +0,0 @@-/*-	Copyright (C) 2014 Johan Mattsson--	This library is free software; you can redistribute it and/or modify -	it under the terms of the GNU Lesser General Public License as -	published by the Free Software Foundation; either version 3 of the -	License, or (at your option) any later version.--	This library is distributed in the hope that it will be useful, but -	WITHOUT ANY WARRANTY; without even the implied warranty of -	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -	Lesser General Public License for more details.-*/--namespace BirdFont {--/** Bezier point container for the SVG parser. */-public class BezierPoints {-	public unichar type = '\0';-	public unichar svg_type = '\0';-	public double x0  = 0;-	public double y0 = 0;-	public double x1 = 0;-	public double y1 = 0;-	public double x2 = 0;-	public double y2 = 0;-	-	public string to_string () {-		return @"$((!)type.to_string ()) $x0,$y0 $x1,$y1 $x2,$y2 SVG:$((!)svg_type.to_string ())";-	}-}--}diff --git a/libbirdfont/BirdFont.vala b/libbirdfont/BirdFont.valaindex 522994c..478bb92 100644--- a/libbirdfont/BirdFont.vala+++ b/libbirdfont/BirdFont.vala@@ -90,7 +90,6 @@ public class BirdFont {  	public static Font current_font; 	public static GlyphCollection current_glyph_collection;- 	public static Drawing? drawing = null;  	public static string? settings_subdirectory = null;@@ -166,6 +165,8 @@ public class BirdFont { 			Process.exit (0); 		} #endif+		+		CanvasSettings.init (); 		Preferences.load ();  		// always load default theme when names in theme does changediff --git a/libbirdfont/BirdFontFile.vala b/libbirdfont/BirdFontFile.valaindex fb4b870..30140ea 100644--- a/libbirdfont/BirdFontFile.vala+++ b/libbirdfont/BirdFontFile.vala@@ -1,5 +1,5 @@ /*-	Copyright (C) 2013 2014 2015 Johan Mattsson+	Copyright (C) 2013 2014 2015 2016 Johan Mattsson  	This library is free software; you can redistribute it and/or modify  	it under the terms of the GNU Lesser General Public License as @@ -11,7 +11,9 @@ 	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU  	Lesser General Public License for more details. */+ using B;+using SvgBird;  namespace BirdFont { @@ -432,52 +434,47 @@ class BirdFontFile : GLib.Object { 	public void write_glyph (Glyph g, DataOutputStream os) throws GLib.Error { 		os.put_string (@"\t<glyph id=\"$(g.version_id)\" left=\"$(double_to_string (g.left_limit))\" right=\"$(double_to_string (g.right_limit))\">\n"); 		-		foreach (Layer layer in g.layers.subgroups) {+		foreach (Layer layer in g.layers.get_sublayers ()) { 			write_layer (layer, os); 		} -		write_embedded_svg (g, os);- 		write_glyph_background (g, os); 		os.put_string ("\t</glyph>\n"); 	} -	void write_embedded_svg (Glyph g, DataOutputStream os) throws GLib.Error {+	void write_embedded_svg (EmbeddedSvg svg, DataOutputStream os) throws GLib.Error {+		XmlParser xml = new XmlParser ((!) svg.svg_data); 		-		if (g.color_svg_data != null) {-			XmlParser xml = new XmlParser ((!) g.color_svg_data);+		if (xml.validate ()) {+			os.put_string (@"<embedded ");+			os.put_string (@"type=\"svg\" ");+			os.put_string (@"x=\"$(round (svg.x))\"");+			os.put_string (@"y=\"$(round (svg.y))\"");+			os.put_string (@">\n"); 			-			if (xml.validate ()) {-				os.put_string (@"<embedded ");-				os.put_string (@"type=\"svg\" ");-				os.put_string (@"x=\"$(round (g.svg_x))\"");-				os.put_string (@"y=\"$(round (g.svg_y))\"");-				os.put_string (@">\n");-				-				Tag tag = xml.get_root_tag ();-				-				os.put_string ("<");-				os.put_string (tag.get_name ());-				-				os.put_string (" ");-				write_tag_attributes (os, tag);-				-				string content = tag.get_content ();-				-				if (content == "") {-					os.put_string (" /");-				}-				-				os.put_string (">");-		-				os.put_string (content);-				-				os.put_string ("</");-				os.put_string (tag.get_name ());-				os.put_string (">\n");-				-				os.put_string ("</embedded>");+			Tag tag = xml.get_root_tag ();+			+			os.put_string ("<");+			os.put_string (tag.get_name ());+			+			os.put_string (" ");+			write_tag_attributes (os, tag);+			+			string content = tag.get_content ();+			+			if (content == "") {+				os.put_string (" /"); 			}+			+			os.put_string (">");+	+			os.put_string (content);+			+			os.put_string ("</");+			os.put_string (tag.get_name ());+			os.put_string (">\n");+			+			os.put_string ("</embedded>\n"); 		} 	} @@ -507,39 +504,50 @@ class BirdFontFile : GLib.Object { 	}  	void write_layer (Layer layer, DataOutputStream os) throws GLib.Error {-		string data;-		-		// FIXME: name etc. 		os.put_string (@"\t\t<layer name= \"$(layer.name)\" visible=\"$(layer.visible)\">\n"); 		-		foreach (Path p in layer.get_all_paths ().paths) {-			data = get_point_data (p);-			if (data != "") {-				os.put_string (@"\t\t\t<path ");-				-				if (p.stroke != 0) {-					os.put_string (@"stroke=\"$(double_to_string (p.stroke))\" ");-				}-				-				if (p.line_cap != LineCap.BUTT) {-					if (p.line_cap == LineCap.ROUND) {-						os.put_string (@"cap=\"round\" ");-					} else if (p.line_cap == LineCap.SQUARE) {-						os.put_string (@"cap=\"square\" ");-					}-				}-				-				if (p.skew != 0) {-					os.put_string (@"skew=\"$(double_to_string (p.skew))\" ");-				}-				-				os.put_string (@"data=\"$(data)\" />\n");+		foreach (SvgBird.Object o in layer.objects.objects) {+			+			if (o is EmbeddedSvg) {+				write_embedded_svg ((EmbeddedSvg) o, os); 			}+			+			if (o is PathObject) {+				Path p = ((PathObject) o).get_path ();+				write_path_object (p, os);+			}			 		} 		 		os.put_string ("\t\t</layer>\n");	 	} +	void write_path_object (Path p, DataOutputStream os) throws GLib.Error {+		string data;+			+		data = get_point_data (p);+		if (data != "") {+			os.put_string (@"\t\t\t<path ");+			+			if (p.stroke != 0) {+				os.put_string (@"stroke=\"$(double_to_string (p.stroke))\" ");+			}+			+			if (p.line_cap != LineCap.BUTT) {+				if (p.line_cap == LineCap.ROUND) {+					os.put_string (@"cap=\"round\" ");+				} else if (p.line_cap == LineCap.SQUARE) {+					os.put_string (@"cap=\"square\" ");+				}+			}+			+			if (p.skew != 0) {+				os.put_string (@"skew=\"$(double_to_string (p.skew))\" ");+			}+			+			os.put_string (@"data=\"$(data)\" />\n");+		}+	}+ 	public static string double_to_string (double n) { 		string d = @"$n"; 		return d.replace (",", ".");@@ -1447,11 +1455,7 @@ class BirdFontFile : GLib.Object { 		foreach (Tag t in tag) { 			if (t.get_name () == "background") { 				parse_background_scale (glyph, t);-			}-		-			if (t.get_name () == "embedded") {-				parse_embedded_svg (glyph, t);-			}+			}		 		}  		foreach (Path p in glyph.get_all_paths ()) {@@ -1464,7 +1468,7 @@ class BirdFontFile : GLib.Object { 		master.insert_glyph (glyph, selected || selected_id == id); 	} -	void parse_embedded_svg (Glyph glyph, Tag tag) {+	void parse_embedded_svg (Layer layer, Tag tag) { 		string type = ""; 		double x = 0; 		double y = 0;@@ -1484,9 +1488,10 @@ class BirdFontFile : GLib.Object { 		} 		 		if (type == "svg") {-			glyph.svg_x = x;-			glyph.svg_y = y;-			glyph.color_svg_data = tag.get_content ();+			EmbeddedSvg svg = SvgParser.parse_embedded_svg_data (tag.get_content ());+			svg.x = x;+			svg.y = y;+			layer.add_object (svg); 		} 	} @@ -1507,7 +1512,11 @@ class BirdFontFile : GLib.Object { 		foreach (Tag t in tag) { 			if (t.get_name () == "path") { 				path = parse_path (t);-				layer.add_path (path);+				LayerUtils.add_path (layer, path);+			}+			+			if (t.get_name () == "embedded") {+				parse_embedded_svg (layer, t); 			} 		} 		@@ -1542,7 +1551,7 @@ class BirdFontFile : GLib.Object { 			} 		} 		-		return path;	+		return path; 	} 	 	private static void line (Path path, string px, string py) {@@ -1948,6 +1957,7 @@ class BirdFontFile : GLib.Object { 		ligatures = font.get_ligatures (); 		ligatures.add_ligature (sequence, ligature); 	}+ }  }diff --git a/libbirdfont/CanvasSettings.vala b/libbirdfont/CanvasSettings.valanew file mode 100644index 0000000..ffa0a6d--- /dev/null+++ b/libbirdfont/CanvasSettings.vala@@ -0,0 +1,92 @@+/*+	Copyright (C) 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using B;+using Cairo;++namespace BirdFont {++public class CanvasSettings  {++	public static double stroke_width {+		get {+			settings_mutex.lock ();+			double r = stroke_width_setting;+			+			if (unlikely (stroke_width_setting < 1)) {+				string width = Preferences.get ("stroke_width");+				if (width != "") {+					stroke_width_setting = double.parse (width);+				}+			}+			+			if (stroke_width_setting < 1) {+				stroke_width_setting = 1;+			}+		+			settings_mutex.unlock ();+			return r;+		}+		+		set {+			settings_mutex.lock ();+			stroke_width_setting = value;+			settings_mutex.unlock ();+		}+	}+	+	public static bool show_all_line_handles {+		get {+			settings_mutex.lock ();+			bool r = show_all_line_handles_setting;+			settings_mutex.unlock ();+			return r;+		}+		+		set {+			settings_mutex.lock ();+			show_all_line_handles_setting = value;+			settings_mutex.unlock ();+		}+	}+	+	public static bool fill_open_path {+		get {	+			settings_mutex.lock ();+			bool r = fill_open_path_setting;+			settings_mutex.unlock ();+			return r;+		}+		+		set {+			settings_mutex.lock ();+			fill_open_path_setting = value;+			settings_mutex.unlock ();+		}+	}+	+	static Mutex settings_mutex;++	/** The stroke of an outline when the path is not filled. */+	static double stroke_width_setting = 0;+	static bool show_all_line_handles_setting = true;+	static bool fill_open_path_setting = false;++	public static void init () {+		settings_mutex = new Mutex ();+	}++}++}diff --git a/libbirdfont/ClipTool.vala b/libbirdfont/ClipTool.valaindex a2b425d..5f9ab14 100644--- a/libbirdfont/ClipTool.vala+++ b/libbirdfont/ClipTool.vala@@ -12,6 +12,8 @@ 	Lesser General Public License for more details. */ +using SvgBird;+ namespace BirdFont {  public class ClipTool : Tool {@@ -95,7 +97,7 @@ public class ClipTool : Tool { 			dx = g.motion_x - x - w / 2.0; 			dy = g.motion_y - y + h / 2.0; 			-			foreach (Path path in g.active_paths) {+			foreach (SvgBird.Object path in g.active_paths) { 				path.move (dx, dy); 			} 		} else if (fd is KerningDisplay) {@@ -260,7 +262,7 @@ public class ClipTool : Tool { 					} 				} 			} else if (glyph.get_visible_paths ().size > 0) {-				foreach (Path path in glyph.active_paths) {+				foreach (Path path in glyph.get_active_paths ()) { // FIXME: other objects 					s.append ("BF path: "); 					s.append (BirdFontFile.get_point_data (path)); 					s.append ("\n");@@ -405,9 +407,9 @@ public class ClipTool : Tool { 				string cap = p.replace ("cap: ", ""); 				 				if (cap == "round") {-					path.line_cap = LineCap.ROUND;+					path.line_cap = SvgBird.LineCap.ROUND; 				} else if (cap == "square") {-					path.line_cap = LineCap.SQUARE;+					path.line_cap = SvgBird.LineCap.SQUARE; 				} 			} 		}@@ -447,13 +449,13 @@ public class ClipTool : Tool { 		if (path.points.size > 0) { 			PenTool.clear_directions (); 			glyph.add_path (path);-			glyph.active_paths.add (path);+			glyph.add_active_path (null, path); 			path.update_region_boundaries (); 		} 		 		PenTool.remove_all_selected_points (); 		-		foreach (Path p in glyph.active_paths) {+		foreach (Path p in glyph.get_active_paths ()) { 			if (p.is_open ()) { 				foreach (EditPoint e in p.points) { 					e.set_selected (true);diff --git a/libbirdfont/Color.vala b/libbirdfont/Color.valaindex 0924b59..f930aa1 100644--- a/libbirdfont/Color.vala+++ b/libbirdfont/Color.vala@@ -22,24 +22,19 @@  namespace BirdFont { -public class Color {-	public double r;-	public double g;-	public double b;-	public double a;-	+public class Color : SvgBird.Color { 	public Color (double r, double g, double b, double a) {-		this.r = r;-		this.g = g;-		this.b = b;-		this.a = a;+		base (r, g, b, a); 	} +	public Color.create_copy (SvgBird.Color color) {+		base (color.r, color.g, color.b, color.a);+	}+	 	public Color.hsba (double h, double s, double v, double a) { 		double hue, saturation, value; 		double f, p, q, t;--		this.a = a;+		double r, g, b;  		if (s == 0.0) { 			r = v;@@ -100,6 +95,8 @@ public class Color { 				assert_not_reached (); 			} 		}+		+		base (r, g, b, a); 	}  	public void to_hsva (out double h, out double s, out double v, out double a) {@@ -204,22 +201,10 @@ public class Color { 	public static Color magenta () { 		return new Color (103.0 / 255, 33.0 / 255, 120.0 / 255, 1); 	}-	-	public string to_string () {-		return @"r: $r, g: $g, b: $b, a: $a";-	}-	-	public Color copy () {+		+	public new Color copy () { 		return new Color (r, g, b, a); 	}--	public string to_rgb_hex () {-		string s = "#";-		s += Font.to_hex_code ((unichar) Math.rint (r  * 254));-		s += Font.to_hex_code ((unichar) Math.rint (g  * 254));-		s += Font.to_hex_code ((unichar) Math.rint (b  * 254));-		return s;-	} }  }diff --git a/libbirdfont/ColorPicker.vala b/libbirdfont/ColorPicker.valaindex e99493e..31188cf 100644--- a/libbirdfont/ColorPicker.vala+++ b/libbirdfont/ColorPicker.vala@@ -13,6 +13,7 @@ */  using Cairo;+using SvgBird;  namespace BirdFont { @@ -119,7 +120,7 @@ public class ColorPicker : Tool { 				int g = (int) ((tx / Toolbox.allocation_width) * gradient.stops.size); 				return_if_fail (0 <= g < gradient.stops.size); 				current_stop = gradient.stops.get (g);-				set_color (current_stop.color);+				set_color (new Color.create_copy (current_stop.color)); 			} 		} 		@@ -236,7 +237,7 @@ public class ColorPicker : Tool { 			int stop_size = (int) ((double) Toolbox.allocation_width / gradient.stops.size); 			for (int i = 0; i < gradient.stops.size; i++) { 				Stop s = gradient.stops.get (i);-				c = s.color;+				c = new Color.create_copy (s.color); 				cr.save (); 				cr.set_source_rgba (c.r, c.g, c.b, c.a); 				cr.rectangle (i * stop_size, y + 4 * bar_height, stop_size, bar_height);diff --git a/libbirdfont/DrawingTools.vala b/libbirdfont/DrawingTools.valaindex 771f81c..0ea8a04 100644--- a/libbirdfont/DrawingTools.vala+++ b/libbirdfont/DrawingTools.vala@@ -14,6 +14,7 @@  using Cairo; using Math;+using SvgBird;  namespace BirdFont { @@ -191,7 +192,9 @@ public class DrawingTools : ToolCollection  { 		});	 		draw_tools.add_tool (move_background); -		move_canvas = new Tool ("move_canvas", t_("Move canvas"));+		move_canvas = new Tool ("move_canvas",+			t_("Move canvas"),+			t_("Press space and click to move the canvas.")); 		move_canvas.select_action.connect ((self) => { 			update_drawing_and_background_tools (self); 		});	@@ -238,7 +241,10 @@ public class DrawingTools : ToolCollection  { 		key_tools.add_tool (insert_point_on_path_tool);		 		 		// quadratic Bézier points-		quadratic_points = new Tool ("quadratic_points", t_("Create quadratic Bézier curves"));+		quadratic_points = new Tool ("quadratic_points", +			t_("Create quadratic Bézier curves"),+			t_("All control points will be converted to quadratic points in the TTF format."));+			 		quadratic_points.select_action.connect ((self) => { 			point_type = PointType.QUADRATIC; 			Preferences.set ("point_type", "quadratic_points");@@ -292,7 +298,7 @@ public class DrawingTools : ToolCollection  { 			glyph.selection_boundaries (out x, out y, out w, out h); 			delta = x_coordinate.get_value () - x + glyph.left_limit; 			-			foreach (Path path in glyph.active_paths) {+			foreach (SvgBird.Object path in glyph.active_paths) { 				path.move (delta, 0); 			} 			@@ -335,7 +341,7 @@ public class DrawingTools : ToolCollection  { 			 			glyph.selection_boundaries (out x, out y, out w, out h); 			-			foreach (Path path in glyph.active_paths) {+			foreach (Path path in glyph.get_active_paths ()) { 				path.move (0, y_coordinate.get_value () - (y - h) - font.base_line); 			} 			@@ -375,7 +381,7 @@ public class DrawingTools : ToolCollection  { 			double x, y, w, h; 			Glyph glyph = MainWindow.get_current_glyph (); 			double angle = (self.get_value () / 360) * 2 * PI;-			Path last_path;+			SvgBird.Object last_path; 			glyph.selection_boundaries (out x, out y, out w, out h); 			 			x += w / 2;@@ -480,7 +486,7 @@ public class DrawingTools : ToolCollection  { 				tie = !p.tie_handles; 				 				// don't tie end points-				foreach (Path path in MainWindow.get_current_glyph ().active_paths) {+				foreach (Path path in MainWindow.get_current_glyph ().get_active_paths ()) { 					if (path.is_open ()) { 						if (p == path.get_first_point () || p == path.get_last_point ()) { 							tie = false;@@ -598,9 +604,9 @@ public class DrawingTools : ToolCollection  { 			Glyph g = MainWindow.get_current_glyph (); 			Layer layer = g.get_current_layer (); 			-			foreach (Path p in g.active_paths) {-				layer.paths.remove (p);-				layer.paths.paths.insert (0, p);+			foreach (SvgBird.Object p in g.active_paths) {+				layer.remove (p);+				layer.objects.objects.insert (0, p); 			} 			 			GlyphCanvas.redraw ();@@ -798,12 +804,12 @@ public class DrawingTools : ToolCollection  { 			g.store_undo_state (); 		 			if (StrokeTool.add_stroke) {-				foreach (Path p in g.active_paths) {+				foreach (SvgBird.Object p in g.active_paths) { 					p.stroke = StrokeTool.stroke_width; 					p.line_cap = StrokeTool.line_cap; 				} 			} else {-				foreach (Path p in g.active_paths) {+				foreach (SvgBird.Object p in g.active_paths) { 					p.stroke = 0; 				}	 			}@@ -838,9 +844,13 @@ public class DrawingTools : ToolCollection  { 			StrokeTool.stroke_width = object_stroke.get_value (); 					 			if (tool && StrokeTool.add_stroke) {-				foreach (Path p in g.active_paths) {+				foreach (SvgBird.Object p in g.active_paths) { 					p.stroke = StrokeTool.stroke_width;-					p.reset_stroke ();+					+					if (p is PathObject) {+						Path path = ((PathObject) p).get_path ();+						path.reset_stroke ();+					} 				} 			} 			@@ -876,12 +886,15 @@ public class DrawingTools : ToolCollection  { 			g = MainWindow.get_current_glyph (); 			g.store_undo_state (); 			-			foreach (Path p in g.active_paths) {-				p.line_cap = LineCap.BUTT;-				p.reset_stroke ();+			foreach (SvgBird.Object p in g.active_paths) {+				p.line_cap = SvgBird.LineCap.BUTT;+				+				if (p is PathObject) {+					((PathObject) p).get_path ().reset_stroke ();+				} 			} 			-			StrokeTool.line_cap = LineCap.BUTT;+			StrokeTool.line_cap = SvgBird.LineCap.BUTT; 			Font f = BirdFont.get_current_font (); 			f.settings.set_setting ("line_cap", @"butt"); @@ -900,12 +913,15 @@ public class DrawingTools : ToolCollection  { 			g = MainWindow.get_current_glyph (); 			g.store_undo_state (); 			-			foreach (Path p in g.active_paths) {-				p.line_cap = LineCap.ROUND;-				p.reset_stroke ();+			foreach (SvgBird.Object p in g.active_paths) {+				p.line_cap = SvgBird.LineCap.ROUND;+				+				if (p is PathObject) {+					((PathObject) p).get_path ().reset_stroke ();+				} 			} 			-			StrokeTool.line_cap = LineCap.ROUND;+			StrokeTool.line_cap = SvgBird.LineCap.ROUND;  			Font f = BirdFont.get_current_font (); 			f.settings.set_setting ("line_cap", @"round");@@ -925,12 +941,15 @@ public class DrawingTools : ToolCollection  { 			g = MainWindow.get_current_glyph (); 			g.store_undo_state (); 			-			foreach (Path p in g.active_paths) {-				p.line_cap = LineCap.SQUARE;-				p.reset_stroke ();+			foreach (SvgBird.Object p in g.active_paths) {+				p.line_cap = SvgBird.LineCap.SQUARE;++				if (p is PathObject) {+					((PathObject) p).get_path ().reset_stroke ();+				} 			} 			-			StrokeTool.line_cap = LineCap.SQUARE;+			StrokeTool.line_cap = SvgBird.LineCap.SQUARE;  			Font f = BirdFont.get_current_font (); 			f.settings.set_setting ("line_cap", @"square");@@ -1249,7 +1268,7 @@ public class DrawingTools : ToolCollection  { 		bool stroke = false; 		Glyph g = MainWindow.get_current_glyph (); 		-		foreach (Path p in g.active_paths) {+		foreach (SvgBird.Object p in g.active_paths) { 			if (p.stroke > 0) { 				stroke = true; 			}@@ -1607,7 +1626,7 @@ public class DrawingTools : ToolCollection  { 		int i = 0; 		 		layer_tools.tool.clear ();-		foreach (Layer layer in g.layers.subgroups) { +		foreach (Layer layer in g.layers.get_sublayers ()) {  			LayerLabel label = new LayerLabel (layer); 			layer_tools.add_tool (label, 0); 			diff --git a/libbirdfont/EmbeddedSvg.vala b/libbirdfont/EmbeddedSvg.valanew file mode 100644index 0000000..70b91ec--- /dev/null+++ b/libbirdfont/EmbeddedSvg.vala@@ -0,0 +1,114 @@+/*+	Copyright (C) 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using B;+using Math;+using Cairo;+using SvgBird;++namespace BirdFont {++public class EmbeddedSvg : SvgBird.Object {+	public string svg_data = "";+	public SvgDrawing drawing = new SvgDrawing ();+	+	public double x { get; set; }+	public double y { get; set; }++	public override double xmin {+		get {+			return x;+		}+		+		set {+		}+	}++	public override double xmax {+		get {+			return x + drawing.width;+		}++		set {+		}+	}+	++	public override double ymin {+		get {+			return y - drawing.height;+		}++		set {+		}+	}++	public override double ymax {+		get {+			return y;+		}++		set {+		}+	}+			+	public EmbeddedSvg (SvgDrawing drawing) {+		this.drawing = drawing;+	}++	public override void update_region_boundaries () {+		drawing.update_region_boundaries ();+	}++	public override bool is_over (double x, double y) {+		return (this.x <= x <= this.x + drawing.width) +			&& (this.y - drawing.height <= y <= this.y);+	}+	+	public void draw_embedded_svg (Context cr) {+		cr.save ();+		cr.translate (Glyph.xc () + x, Glyph.yc () - y);+		drawing.draw (cr);+		cr.restore ();+	}+	+	public override void draw_outline (Context cr) {+	}+	+	public override SvgBird.Object copy () {+		EmbeddedSvg svg = new EmbeddedSvg (drawing);+		svg.svg_data = svg_data;+		return svg;+	}+	+	public override void move (double dx, double dy) {+		x += dx;+		y += dy;+	}+	+	public override void rotate (double theta, double xc, double yc) {+		drawing.rotate (theta, xc, yc);+	}+	+	public override bool is_empty () {+		return drawing.is_empty ();+	}+	+	public override void resize (double ratio_x, double ratio_y) {+		drawing.resize (ratio_x, ratio_y);+	}++}++}diff --git a/libbirdfont/Expander.vala b/libbirdfont/Expander.valaindex e28e8bc..de72aba 100644--- a/libbirdfont/Expander.vala+++ b/libbirdfont/Expander.vala@@ -61,6 +61,10 @@ public class Expander : GLib.Object {  	public void clear_cache () { 		cached = null;+		+		foreach (Tool t in tool) {+			t.clear_cache ();+		} 	}  	public void set_headline (Text h) {diff --git a/libbirdfont/ExportTool.vala b/libbirdfont/ExportTool.valaindex 4280792..00b5d14 100644--- a/libbirdfont/ExportTool.vala+++ b/libbirdfont/ExportTool.vala@@ -13,6 +13,7 @@ */  using B;+using SvgBird;  namespace BirdFont { @@ -95,37 +96,50 @@ public class ExportTool : GLib.Object { 		 		name = glyph.get_name (); 		-		Gee.ArrayList<Path> pl;+		Gee.ArrayList<SvgBird.Object> pl; 		 		s = new StringBuilder (); 		glyph_svg = ""; -		pl = only_selected_paths ? glyph.active_paths : glyph.get_visible_paths ();-		foreach (Path p in pl) {-			if (p.stroke > 0) {-				s.append (@"<path ");-				s.append (@"style=\"");-				s.append (@"fill:none;");-				s.append (@"stroke:#000000;");-				s.append (@"stroke-width:$(p.stroke)px;");-				-				if (p.line_cap == LineCap.ROUND) {-					s.append (@"stroke-linecap:round;");-				} else if (p.line_cap == LineCap.SQUARE) {-					s.append (@"stroke-linecap:square;");+		pl = only_selected_paths ? glyph.active_paths : glyph.get_visible_objects ();+		+		foreach (SvgBird.Object o in pl) {+			+			if (o is PathObject) {+				Path p = ((PathObject) o).get_path ();++				if (p.stroke > 0) {+					s.append (@"<path ");+					s.append (@"style=\"");+					s.append (@"fill:none;");+					s.append (@"stroke:#000000;");+					s.append (@"stroke-width:$(p.stroke)px;");+					+					if (p.line_cap == LineCap.ROUND) {+						s.append (@"stroke-linecap:round;");+					} else if (p.line_cap == LineCap.SQUARE) {+						s.append (@"stroke-linecap:square;");+					}+					+					s.append (@"\" ");+					+					s.append (@"d=\"$(Svg.to_svg_path (p, glyph))\" id=\"path_$(name)_$(id)\" />\n");+					id++; 				}-				-				s.append (@"\" ");-				-				s.append (@"d=\"$(Svg.to_svg_path (p, glyph))\" id=\"path_$(name)_$(id)\" />\n");-				id++;+			} else {+				warning ("Copy and paste for other objects not implemented."); 			} 		} 		 		if (only_selected_paths) {-			foreach (Path p in glyph.active_paths) {-				if (p.stroke == 0) {-					glyph_svg += Svg.to_svg_path (p, glyph);+			foreach (SvgBird.Object p in glyph.active_paths) {+				if (p is PathObject) {+					Path path = ((PathObject) p).get_path ();+					if (path.stroke == 0) {+						glyph_svg += Svg.to_svg_path (path, glyph);+					}+				} else {+					warning ("Not implemented"); 				} 			}	 		} else {diff --git a/libbirdfont/Glyph.vala b/libbirdfont/Glyph.valaindex 5f1d2e3..c801013 100644--- a/libbirdfont/Glyph.vala+++ b/libbirdfont/Glyph.vala@@ -16,6 +16,7 @@ using Cairo; using Math; using Gee; using B;+using SvgBird;  namespace BirdFont { @@ -132,8 +133,7 @@ public class Glyph : FontDisplay {  	public Layer layers = new Layer (); 	public int current_layer = 0;-	public Gee.ArrayList<Path> active_paths = new Gee.ArrayList<Path> ();-	public Gee.ArrayList<Layer> selected_groups = new Gee.ArrayList<Layer> ();+	public Gee.ArrayList<SvgBird.Object> active_paths = new Gee.ArrayList<SvgBird.Object> ();  	// used if this glyph originates from a fallback font 	public double top_limit = 0;@@ -141,41 +141,12 @@ public class Glyph : FontDisplay { 	public double bottom_limit = 0;  	public Surface? overview_thumbnail = null;-	-	public double svg_x = 0;-	public double svg_y = 0;-	private Rsvg.Handle? svg_drawing = null;--	public string? color_svg_data {-		get {-			return _color_svg_data;-		}-		-		set {-			try {-				if (value != null) {-					XmlParser xml = new XmlParser ((!) value);-		 -					if (!xml.validate ()) {-						warning("Invalid SVG data, skipping import.");-						return;-					}-					-					uint8[] svg_array = ((!) value).data;-					svg_drawing = new Rsvg.Handle.from_data (svg_array);-				} else {-					svg_drawing = null;-				}-				-				_color_svg_data = value;				-			} catch (GLib.Error e) {-				warning (e.message);-			}-		}-	}--	private string? _color_svg_data = null; +	public double selection_box_width = 0;+	public double selection_box_height = 0;+	public double selection_box_x = 0;+	public double selection_box_y = 0;+	 	public Glyph (string name, unichar unichar_code = 0) { 		this.name = name; 		this.unichar_code = unichar_code;@@ -191,18 +162,18 @@ public class Glyph : FontDisplay { 		this.unichar_code = unichar_code; 	} -	public Gee.ArrayList<Path> get_active_paths () {-		return active_paths;-	}- 	public Layer get_current_layer () {-		return_val_if_fail (0 <= current_layer < layers.subgroups.size, new Layer ());-		return layers.subgroups.get (current_layer);+		if (unlikely (!(0 <= current_layer < layers.objects.size))) {+			warning ("Layer index out of bounds.");+			return new Layer ();+		}+		+		return layers.get_sublayers ().get (current_layer); 	}  	public void set_current_layer (Layer layer) { 		int i = 0;-		foreach (Layer l in layers.subgroups) {+		foreach (Layer l in layers.get_sublayers ()) { 			if (likely (l == layer)) { 				current_layer = i; 				return;@@ -213,27 +184,40 @@ public class Glyph : FontDisplay { 		warning ("Layer is not added to glyph."); 	} +	public Gee.ArrayList<SvgBird.Object> get_visible_objects () {+		return LayerUtils.get_visible_objects (layers);+	}+ 	public Gee.ArrayList<Path> get_visible_paths () {-		return layers.get_visible_paths ().paths;+		return LayerUtils.get_visible_paths (layers).paths; 	}  	public PathList get_visible_path_list () {-		return layers.get_visible_paths ();+		return LayerUtils.get_visible_paths (layers);+	}++	public Gee.ArrayList<SvgBird.Object> get_objects_in_current_layer () {+		return get_current_layer ().objects.objects; 	}  	public Gee.ArrayList<Path> get_paths_in_current_layer () {-		return get_current_layer ().get_all_paths ().paths;+		return LayerUtils.get_all_paths (get_current_layer ()).paths; 	}  	public Gee.ArrayList<Path> get_all_paths () {-		return layers.get_all_paths ().paths;+		return LayerUtils.get_all_paths (layers).paths; 	}  	public void add_new_layer () { 		layers.add_layer (new Layer ());-		current_layer = layers.subgroups.size - 1;+		current_layer = layers.objects.size - 1; 	} +	public void add_layer (Layer layer) {+		layers.add_layer (layer);+		current_layer = layers.objects.size - 1;+	}+	 	public int get_layer_index (Layer layer) { 		return layers.index_of (layer); 	}@@ -273,6 +257,10 @@ public class Glyph : FontDisplay { 	public override void close () { 		undo_list.clear (); 		redo_list.clear ();+		+		foreach (Path path in get_all_paths ()) {+			path.set_editable (false);+		} 	}  	public void set_empty_ttf (bool e) {@@ -284,48 +272,71 @@ public class Glyph : FontDisplay { 	}  	public void clear_active_paths () {-		selected_groups.clear (); 		active_paths.clear (); 	}  	public void add_active_path (Layer? group, Path? p) {-		Path path;-		Layer g;- 		if (p != null) {-			path = (!) p;+			PathObject path = new PathObject.for_path ((!) p);+			add_active_object (group, path);+		} else {+			add_active_object (group, null);+		}+	}+	+	// FIXME: delete group+	public void add_active_object (Layer? group, SvgBird.Object? o) {+		SvgBird.Object object; -			if (Toolbox.get_move_tool ().is_selected ()) {-				if (path.stroke > 0) {-					Toolbox.set_object_stroke (path.stroke);-				}-			}+		if (o != null) {+			object = (!) o; -			if (!active_paths.contains (path)) {-				active_paths.add (path);+			if (!active_paths_contains (object)) {+				active_paths.add (object);+			}+			+			if (object is PathObject) {+				PathObject path = (PathObject) object;+				if (Toolbox.get_move_tool ().is_selected ()) {+					if (path.get_path ().stroke > 0) {+						Toolbox.set_object_stroke (path.get_path ().stroke);+					}+				}+				+				PenTool.active_path = path.get_path (); 			}-			PenTool.active_path = path; 		}+	} -		if (group != null) {-			g = (!) group;-			if (!selected_groups.contains (g)) {-				selected_groups.add (g);+	public bool active_paths_contains (SvgBird.Object object) {+		Glyph glyph = MainWindow.get_current_glyph ();++		if (glyph.active_paths.contains (object)) {+			return true;+		}+		+		if (object is PathObject) {+			PathObject path = (PathObject) object;+			+			foreach (SvgBird.Object active in glyph.active_paths) {+				if (active is PathObject) {+					PathObject path_active = (PathObject) active;+					if (path_active.get_path () == path.get_path ()) {+						return true;+					}+				} 			} 		}+		+		return false; 	}-+	 	public void delete_background () { 		store_undo_state (); 		background_image = null; 		GlyphCanvas.redraw (); 	} -	public Path? get_active_path () {-		return_val_if_fail (active_paths.size > 0, null);-		return active_paths.get (active_paths.size - 1);-	}- 	public bool boundaries (out double x1, out double y1, out double x2, out double y2) { 		var paths = get_all_paths (); @@ -375,7 +386,7 @@ public class Glyph : FontDisplay { 		px2 = -10000; 		py2 = -10000; -		foreach (Path p in active_paths) {+		foreach (SvgBird.Object p in active_paths) { 			if (p.xmin < px) { 				px = p.xmin; 			}@@ -480,11 +491,19 @@ public class Glyph : FontDisplay { 	}  	public virtual void add_path (Path p) {-		if (layers.subgroups.size == 0) {+		if (layers.objects.size == 0) {+			layers.add_layer (new Layer ());+		}++		LayerUtils.add_path (get_current_layer (), p);+	}++	public void add_object (SvgBird.Object object) {+		if (layers.objects.size == 0) { 			layers.add_layer (new Layer ()); 		} -		get_current_layer ().add_path (p);+		get_current_layer ().add_object (object);		 	}  	public override void selected_canvas () {@@ -520,7 +539,7 @@ public class Glyph : FontDisplay { 		if (index != "") { 			int i = int.parse (index); 			-			if (0 <= i < layers.subgroups.size) {+			if (0 <= i < layers.objects.size) { 				current_layer = i; 			} 		}@@ -775,8 +794,12 @@ public class Glyph : FontDisplay { 		} 	} +	public void delete_object (SvgBird.Object o) {+		layers.remove (o);+	}+ 	public void delete_path (Path p) {-		layers.remove_path(p);+		LayerUtils.remove_path(layers, p); 	}  	public string get_svg_data () {@@ -926,8 +949,9 @@ public class Glyph : FontDisplay { 			add_path (path); 			path.reopen (); 			path.create_list ();--			add_active_path (null, path);+			+			PathObject object = new PathObject.for_path (path);+			add_active_object (null, object); 		}  		if (remaining_points.paths.size > 0) {@@ -1040,7 +1064,7 @@ public class Glyph : FontDisplay { 	public void set_active_path (Path p) { 		p.reopen (); 		clear_active_paths ();-		add_active_path (null, p);+		add_active_object (null, new PathObject.for_path (p)); 	}  	/** Move view port centrum to this coordinate. */@@ -1184,61 +1208,17 @@ public class Glyph : FontDisplay { 		return -y; 	} -	public Layer? get_path_at (double x, double y) {-		Layer? group = null;-		bool found = false;--		foreach (Layer layer in get_current_layer ().subgroups) {-			foreach (Path pt in layer.paths.paths) {-				if (pt.is_over (x, y)) {-					found = true;-					group = layer;-				}-			}-		}--		if (!found) {-			foreach (Path pt in get_paths_in_current_layer ()) {-				if (pt.is_over (x, y)) {-					Layer layer = new Layer ();-					layer.is_counter = true;-					layer.single_path = true;-					layer.add_path (pt);-					group = layer;-				}-			}-		}--		return group;-	}--	public bool select_path (double x, double y) {-		Path? p = null;-		bool found = false;--		foreach (Path pt in get_paths_in_current_layer ()) {-			if (pt.is_over (x, y)) {-				p = pt;-				found = true;-			}-		}--		if (!KeyBindings.has_shift ()) {-			clear_active_paths ();-		}--		add_active_path (null, p);--		return found;-	}--	public bool is_over_selected_path (double x, double y) {-		foreach (Path pt in active_paths) {-			if (pt.is_over (x, y)) {-				return true;+	public SvgBird.Object? get_object_at (double x, double y) {+		Layer layer = get_current_layer ();+		for (int i = layer.objects.size - 1; i >= 0; i--) {+			SvgBird.Object o = layer.objects.get_object (i);+			+			if (o.is_over (x, y)) {+				return o; 			} 		}-		return false;+		+		return null; 	}  	public void queue_redraw_path (Path path) {@@ -1257,48 +1237,6 @@ public class Glyph : FontDisplay { 		redraw_area ((int)xtb - 10, (int)yta - 10, (int)(xtb - xta) + 10, (int) (yta - ytb) + 10); 	} -	public Path get_closeset_path (double x, double y) {-		double d;-		EditPoint ep = new EditPoint ();--		Path min_point = new Path ();-		double min_distance = double.MAX;--		double xt = path_coordinate_x (x);-		double yt = path_coordinate_y (y);-		var paths = get_visible_paths ();--		foreach (Path p in paths) {-			if (p.is_over (xt, yt)) {-				return p;-			}-		}--		foreach (Path p in paths) {-			if (p.points.size == 0) continue;--			p.get_closest_point_on_path (ep, xt, yt);-			d = Math.pow (ep.x - xt, 2) + Math.pow (ep.y - yt, 2);--			if (d < min_distance) {-				min_distance = d;-				min_point = p;-			}--		}--		// a path without any editpoints-		if (paths.size > 0) {-			return paths.get (0);-		}--		if (unlikely (min_distance == double.MAX)) {-			warning (@"No path found in path_list.");-		}--		return min_point;-	}- 	public void move_selected_edit_point_coordinates (EditPoint selected_point, double xt, double yt) { 		double x, y; @@ -1349,8 +1287,9 @@ public class Glyph : FontDisplay { 			return; 		} -		foreach (Path path in active_paths) {+		foreach (SvgBird.Object object in active_paths) { 			EditPoint p;+			Path path = ((PathObject) object).get_path (); 			EditPoint pl = path.get_last_point ();  			if (pl.prev != null) {@@ -1364,7 +1303,6 @@ public class Glyph : FontDisplay {  				if (px > x) px -= tw + 60; 				if (py > y) py -= th + 60;- 			} else { 				px = x - 60; 				py = y - 60;@@ -1405,7 +1343,7 @@ public class Glyph : FontDisplay { 	}  	public void open_path () {-		foreach (Path p in get_visible_paths ()) {+		foreach (Path p in get_all_paths ()) { 			p.set_editable (true); 			p.recalculate_linear_handles (); @@ -1650,160 +1588,94 @@ public class Glyph : FontDisplay { 		cr.stroke (); 	} -	/** Draw filled paths. */-	public void draw_paths (Context cr, Color? c = null) {-		PathList stroke;-		Color color;-		bool open;-		-		cr.save ();-		cr.new_path ();-		foreach (Path p in get_visible_paths ()) {-			if (c != null) {-				color = (!) c;-			} else if (p.color != null) {-				color = (!) p.color;-			} else {-				color = Color.black ();+	public void draw_layers (Context cr) {+		foreach (SvgBird.Object object in layers.objects) {+			if (object is Layer) {+				draw_layer (cr, (Layer) object); 			}+		}+		+		draw_bird_font_paths (cr);+	} -			if (p.stroke > 0) {-				stroke = p.get_stroke_fast ();-				draw_path_list (stroke, cr, color);-			} else {-				open = p.is_open ();-				-				if (open) {-					p.close ();-					p.recalculate_linear_handles ();-				}-				-				p.draw_path (cr, this, color);-				-				if (open) {-					p.reopen ();-				}+	public void draw_layer (Context cr, Layer sublayers) {+		foreach (SvgBird.Object object in sublayers.objects) {+			if (object is EmbeddedSvg) {+				EmbeddedSvg svg = (EmbeddedSvg) object;+				svg.draw_embedded_svg (cr); 			} 		}-		cr.fill ();-		cr.restore (); 	}+		+	public void draw_bird_font_paths (Context cr) {+		Tool selected_tool = MainWindow.get_toolbox ().get_current_tool ();+		+		bool draw_control_points = (selected_tool is PenTool)+			|| (selected_tool is PointTool)+			|| (selected_tool is TrackTool)+			|| (selected_tool is BezierTool); -	public void draw_path (Context cr) {-		PathList stroke;-		Color color;--		cr.save ();-		cr.new_path ();-		foreach (Path p in get_visible_paths ()) {-			if (p.stroke > 0) {-				stroke = p.get_stroke_fast ();--				if (p.is_editable ()) {-					color = Theme.get_color ("Filled Stroke");-					color.a = 0.8;-				} else {-					color = Color.black ();+		bool has_path = false;+		+		if (!draw_control_points) {+			foreach (SvgBird.Object object in get_visible_objects ()) {+				if (object is PathObject+					&& object.stroke > 0) {+						+					has_path = true;+					PathObject object_path = (PathObject) object;				+					object_path.draw_path (cr); 				}--				draw_path_list (stroke, cr, color); 			}-		}-		cr.fill ();-		cr.restore (); -		if (!(MainWindow.get_toolbox ().get_current_tool () is PenTool)-			&& !(MainWindow.get_toolbox ().get_current_tool () is PointTool)-			&& !(MainWindow.get_toolbox ().get_current_tool () is TrackTool)-			&& !(MainWindow.get_toolbox ().get_current_tool () is BezierTool)) {-			cr.save ();-			cr.new_path ();-			foreach (Path p in active_paths) {-				if (p.stroke > 0) {-					stroke = p.get_stroke_fast ();-					color = Theme.get_color ("Selected Objects");-					draw_path_list (stroke, cr, color);-				}+			if (has_path) {+				cr.set_fill_rule (FillRule.WINDING);+				cr.set_source_rgba (0, 0, 0, 1);+				cr.fill (); 			}-			cr.fill ();-			cr.restore (); 		}--		if (is_open () && Path.fill_open_path) {-			cr.save ();-			cr.new_path ();-			foreach (Path p in get_visible_paths ()) {-				if (p.stroke == 0) {-					color = p.color == null ? get_path_fill_color () : (!) p.color;-					p.draw_path (cr, this, color);+		+		has_path = false;+		+		if (!draw_control_points) {+			foreach (SvgBird.Object object in get_visible_objects ()) {+				if (object is PathObject+					&& object.stroke == 0) {+						+					has_path = true;+					PathObject object_path = (PathObject) object;				+					object_path.draw_path (cr); 				} 			}-			cr.fill ();-			cr.restore ();-		} -		if (is_open ()) {-			cr.save ();-			cr.new_path ();-			foreach (Path p in get_visible_paths ()) {-				p.draw_outline (cr);-				p.draw_edit_points (cr);+			if (has_path) {+				cr.set_fill_rule (FillRule.EVEN_ODD);+				Theme.color (cr, "Objects");+				cr.fill (); 			}-			cr.restore (); 		}--		if (!is_open ()) {-			// This was good for testing but it is way too slow:-			// Svg.draw_svg_path (cr, get_svg_data (), Glyph.xc () + left, Glyph.yc () - baseline);--			cr.save ();-			cr.new_path ();-			foreach (Path p in get_visible_paths ()) {-				if (p.stroke == 0) {-					color = p.color == null ? Color.black () : (!) p.color;-					p.draw_path (cr, this, color);+		+		if (draw_control_points) {+			foreach (SvgBird.Object object in get_visible_objects ()) {+				if (object is PathObject) {+					PathObject object_path = (PathObject) object;+					Glyph g = MainWindow.get_current_glyph ();+					cr.set_line_width (CanvasSettings.stroke_width / g.view_zoom);+					object_path.path.draw_path (cr);+					object_path.path.draw_control_points (cr); 				} 			}-			cr.close_path ();-			cr.fill ();-			cr.restore ();--			foreach (Path p in active_paths) {-				cr.save ();-				cr.new_path ();-				if (p.stroke == 0) {-					p.draw_path (cr, this);-				}-				cr.close_path ();-				cr.fill ();-				cr.restore ();-			} 		}  		if (show_orientation_arrow) { 			foreach (Path p in get_visible_paths ()) {-				if (p.stroke > 0) {-					stroke = p.get_stroke_fast ();-					foreach (Path ps in stroke.paths) {-						ps.draw_orientation_arrow (cr, orientation_arrow_opacity);-					}-				} else {+				if (p.stroke == 0) { 					p.draw_orientation_arrow (cr, orientation_arrow_opacity); 				} 			} 		} 	} -	private Color get_path_fill_color () {-		return Theme.get_color ("Fill Color");-	}--	public void draw_path_list (PathList pl, Context cr, Color? c = null) {-		foreach (Path p in pl.paths) {-			p.draw_path (cr, this, c);-		}-	}- 	public void draw_background_color (Context cr, double opacity) { 		if (opacity > 0) { 			cr.save ();@@ -1840,16 +1712,13 @@ public class Glyph : FontDisplay { 		}  		if (unlikely (Preferences.draw_boundaries)) {-			foreach (Path p in get_visible_paths ()) {-				p.draw_boundaries (cmp);+			foreach (SvgBird.Object o in get_visible_objects ()) {+				draw_boundaries (o, cmp); 			} 		}  		draw_background_glyph (allocation, cmp);-		-		if (svg_drawing != null) {-			juxtapose (allocation, cmp);-		}+		juxtapose (allocation, cmp);  		if (BirdFont.show_coordinates) { 			draw_coordinate (cmp);@@ -1861,38 +1730,29 @@ public class Glyph : FontDisplay { 			cmp.restore (); 		} -		if (svg_drawing != null) {-			cmp.save ();-			cmp.scale (view_zoom, view_zoom);-			cmp.translate (-view_offset_x, -view_offset_y);-			draw_svg (cmp);-			cmp.restore ();-		} else {-			cmp.save ();-			cmp.scale (view_zoom, view_zoom);-			cmp.translate (-view_offset_x, -view_offset_y);-			draw_path (cmp);		-			cmp.restore ();	+		cmp.save ();+		cmp.scale (view_zoom, view_zoom);+		cmp.translate (-view_offset_x, -view_offset_y);+		draw_layers (cmp);+		cmp.restore ();	+		+		Tool selected_tool = MainWindow.get_toolbox ().get_current_tool ();+		bool draw_selection = active_paths.size > 0+			&& (selected_tool is MoveTool || selected_tool is ResizeTool);+		+		if (draw_selection) {+			update_selection_boundaries ();+			draw_selection_box (cmp); 		}-				+		 		cmp.save (); 		tool = MainWindow.get_toolbox ().get_current_tool (); 		tool.draw_action (tool, cmp, this); 		cmp.restore (); 	} -	public void draw_svg (Context cr) {-		if (svg_drawing != null) {-			cr.save ();-			cr.translate (xc () + svg_x, yc () - svg_y);-			Rsvg.Handle svg_handle = (!) svg_drawing;-			svg_handle.render_cairo (cr);-			cr.restore ();-		}-	}-	-	private void zoom_in_at_point (double x, double y, double amount = 15) {-		int n = (int) (-amount);+	private void zoom_in_at_point (double x, double y, double zoom = 15) {+		int n = (int) (-zoom); 		zoom_at_point (x, y, n); 	} @@ -1959,10 +1819,10 @@ public class Glyph : FontDisplay { 			g.add_line (line.copy ()); 		} -		g.layers = layers.copy ();+		g.layers = (Layer) layers.copy (); -		foreach (Path p in active_paths) {-			g.active_paths.add (p);+		foreach (SvgBird.Object o in active_paths) {+			g.active_paths.add (o); 		}  		if (background_image != null) {@@ -2032,7 +1892,7 @@ public class Glyph : FontDisplay {  	void set_glyph_data (Glyph g) { 		current_layer = g.current_layer;-		layers = g.layers.copy ();+		layers = (Layer) g.layers.copy ();  		left_limit = g.left_limit; 		right_limit = g.right_limit;@@ -2049,8 +1909,8 @@ public class Glyph : FontDisplay { 		}  		clear_active_paths ();-		foreach (Path p in g.active_paths) {-			add_active_path (null, p);+		foreach (SvgBird.Object p in g.active_paths) {+			add_active_object (null, p); 		}  		redraw_area (0, 0, allocation.width, allocation.height);@@ -2450,12 +2310,12 @@ public class Glyph : FontDisplay { 	public void move_layer_up () { 		Layer layer = get_current_layer (); -		if (current_layer + 2 <= layers.subgroups.size) {-			return_if_fail (0 <= current_layer + 2 <= layers.subgroups.size);-			layers.subgroups.insert (current_layer + 2, layer);+		if (current_layer + 2 <= layers.objects.size) {+			return_if_fail (0 <= current_layer + 2 <= layers.objects.size);+			layers.objects.objects.insert (current_layer + 2, layer); -			return_if_fail (0 <= current_layer + 1 < layers.subgroups.size);-			layers.subgroups.remove_at (current_layer);+			return_if_fail (0 <= current_layer + 1 < layers.objects.size);+			layers.objects.objects.remove_at (current_layer);  			set_current_layer (layer); 		}@@ -2465,11 +2325,11 @@ public class Glyph : FontDisplay { 		Layer layer = get_current_layer ();  		if (current_layer >= 1) {-			return_if_fail (0 <= current_layer - 1 < layers.subgroups.size);-			layers.subgroups.insert (current_layer - 1, layer);+			return_if_fail (0 <= current_layer - 1 < layers.objects.size);+			layers.objects.objects.insert (current_layer - 1, layer); -			return_if_fail (0 <= current_layer + 1 < layers.subgroups.size);-			layers.subgroups.remove_at (current_layer + 1);+			return_if_fail (0 <= current_layer + 1 < layers.objects.size);+			layers.objects.objects.remove_at (current_layer + 1);  			set_current_layer (layer); 		}@@ -2543,6 +2403,138 @@ public class Glyph : FontDisplay { 		 		return g2; 	}+	+	// FIXME: convert everything to the new SvgBird.Object code+	public Gee.ArrayList<Path> get_active_paths () {+		Gee.ArrayList<Path> paths = new Gee.ArrayList<Path> ();+		+		foreach (SvgBird.Object object in active_paths) {+			if (object is PathObject) {+				paths.add (((PathObject) object).get_path ());+			}+		}+		+		return paths;+	}+	+	public void draw_boundaries  (SvgBird.Object object, Context cr) {+		double x = Glyph.reverse_path_coordinate_x (object.xmin); +		double y = Glyph.reverse_path_coordinate_y (object.ymin);+		double x2 = Glyph.reverse_path_coordinate_x (object.xmax);+		double y2 = Glyph.reverse_path_coordinate_y (object.ymax);+		+		cr.save ();+		+		Theme.color (cr, "Default Background");+		cr.set_line_width (2);+		cr.rectangle (x, y, x2 - x, y2 - y);+		cr.stroke ();+		+		cr.restore ();+	}+	+	void draw_selection_box (Context cr) {+		double x, y, w, h;+		double hook_width;+		+		x = reverse_path_coordinate_x (selection_box_x);+		y = reverse_path_coordinate_y (selection_box_y);+		w = selection_box_width / ivz ();+		h = selection_box_height / ivz ();+		+		hook_width = w > 20 ? 10 : w * 0.2;++		update_selection_boundaries ();+		cr.save ();+		+		// FIXME: use color theme+		cr.set_source_rgba (0, 0, 0, 1); +		+		cr.set_line_width (1);+		cr.move_to (x, y + hook_width);+		cr.line_to (x, y);+		cr.line_to (x + hook_width, y);+		cr.stroke ();++		cr.move_to (x + w - hook_width, y);+		cr.line_to (x + w, y);+		cr.line_to (x + w, y + hook_width);+		cr.stroke ();++		cr.move_to (x + w, y + h - hook_width);+		cr.line_to (x + w, y + h);+		cr.line_to (x + w - hook_width, y + h);++		cr.move_to (x + hook_width, y + h);+		cr.line_to (x, y + h);+		cr.line_to (x, y + h - hook_width);+		+		cr.stroke ();					+		cr.restore ();++		cr.save ();+		cr.set_source_rgba (1, 1, 1, 1); +		+		cr.set_line_width (1);+		cr.move_to (x + 1, y + hook_width);+		cr.line_to (x + 1, y + 1);+		cr.line_to (x + hook_width, y + 1);+		cr.stroke ();++		cr.move_to (x + w - hook_width, y + 1);+		cr.line_to (x + w - 1, y + 1);+		cr.line_to (x + w - 1, y + hook_width);+		cr.stroke ();++		cr.move_to (x + w - 1, y + h - hook_width);+		cr.line_to (x + w - 1, y + h - 1);+		cr.line_to (x + w - hook_width, y + h - 1);++		cr.move_to (x + hook_width, y + h - 1);+		cr.line_to (x + 1, y + h - 1);+		cr.line_to (x + 1, y + h - hook_width);+		+		cr.stroke ();					+		cr.restore ();+	}++	public void update_selection_boundaries () {+		get_selection_box_boundaries (out selection_box_x,+			out selection_box_y, out selection_box_width,+			out selection_box_height);	+	}++	public void get_selection_box_boundaries (out double x, out double y, out double w, out double h) {+		double px, py, px2, py2;+		+		px = CANVAS_MAX;+		py = CANVAS_MAX;+		px2 = CANVAS_MIN;+		py2 = CANVAS_MIN;+		+		foreach (Path p in get_active_paths ()) {+			if (px > p.xmin) {+				px = p.xmin;+			} ++			if (py > p.ymin) {+				py = p.ymin;+			}++			if (px2 < p.xmax) {+				px2 = p.xmax;+			}+			+			if (py2 < p.ymax) {+				py2 = p.ymax;+			}+		}+		+		w = px2 - px;+		h = py2 - py;+		x = px;+		y = py2;+	} }  }diff --git a/libbirdfont/GlyphSequence.vala b/libbirdfont/GlyphSequence.valaindex 58a6333..9b08df1 100644--- a/libbirdfont/GlyphSequence.vala+++ b/libbirdfont/GlyphSequence.vala@@ -111,7 +111,7 @@ public class GlyphSequence : GLib.Object { 				 				g = font.get_glyph_by_name (name); -				if (g != null) {+				if (likely (g != null)) { 					old.add (g); 						 					if (a.alternates.size > 0) {@@ -119,7 +119,7 @@ public class GlyphSequence : GLib.Object { 						string alt_name = a.alternates.get (0); 						Glyph? alt = font.get_glyph_by_name (alt_name); 						-						if (alt != null) {+						if (likely (alt != null)) { 							GlyphSequence replacement = new GlyphSequence (); 							replacement.add (alt); 							ligature_sequence.replace (old, replacement);diff --git a/libbirdfont/Gradient.vala b/libbirdfont/Gradient.valadeleted file mode 100644index c91e5b9..0000000--- a/libbirdfont/Gradient.vala+++ /dev/null@@ -1,53 +0,0 @@-/*-	Copyright (C) 2015 Johan Mattsson--	This library is free software; you can redistribute it and/or modify -	it under the terms of the GNU Lesser General Public License as -	published by the Free Software Foundation; either version 3 of the -	License, or (at your option) any later version.--	This library is distributed in the hope that it will be useful, but -	WITHOUT ANY WARRANTY; without even the implied warranty of -	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -	Lesser General Public License for more details.-*/--using Cairo;-using Math;--namespace BirdFont {--public class Gradient : GLib.Object {-	public double x1;-	public double y1;-	public double x2;-	public double y2;--	public Gee.ArrayList<Stop> stops;-	-	public int id = -1;--	public Gradient () {-		x1 = 0;-		y1 = 0;-		x2 = 0;-		y2 = 0;-		stops = new Gee.ArrayList<Stop> ();-	}-	-	public Gradient copy () {-		Gradient g = new Gradient ();-		g.x1 = x1;-		g.y1 = y1;-		g.x2 = x2;-		g.y2 = y2;-		-		foreach (Stop s in stops) {-			g.stops.add (s.copy ());-		}-		-		return g;-	}-}--}diff --git a/libbirdfont/Help.vala b/libbirdfont/Help.valanew file mode 100644index 0000000..1b49ba2--- /dev/null+++ b/libbirdfont/Help.vala@@ -0,0 +1,123 @@+/*+	Copyright (C) 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify+	it under the terms of the GNU Lesser General Public License as+	published by the Free Software Foundation; either version 3 of the+	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but+	WITHOUT ANY WARRANTY; without even the implied warranty of+	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU+	Lesser General Public License for more details.+*/++using Cairo;++namespace BirdFont {++public class Help {++	bool visible;+	TextArea help_text;+	Text close;+	const int box_margin = 7;+	+	public Help () {+		string v = Preferences.get ("help_visible");+		visible = v == "true";+		help_text = create_help_text (t_("BirdFont is a font editor."));+		+		Color color = Theme.get_color ("Menu Foreground");+		close = new Text ("close", 30, 0, color);+		close.load_font ("icons.bf");+	}++	public static TextArea create_help_text (string lines) {+		Color color = Theme.get_color ("Menu Foreground");+		TextArea text = new TextArea (17, color);+		text.min_width = 200;+		text.min_height = 100;+		text.width = 200;+		text.height = 100;+		text.allocation = new WidgetAllocation.for_area (0, 0, (int)text.min_width, (int)text.min_height);+		text.set_text (lines);+		text.layout ();+		text.set_editable (false);+		text.draw_border = false;+		return text;+	}++	public void set_help_text (TextArea text) {+		if (text != help_text && is_visible ()) {+			help_text = text;+			GlyphCanvas.redraw ();+		}+	}++	public void set_visible (bool v) {+		visible = v;+		Preferences.set ("help_visible", @"$v");+	}+	+	public bool is_visible () {+		return visible;+	}++	public void draw (Context cr, WidgetAllocation allocation) {+		int margin_x = 10;+		int margin_y = 15;++		help_text.allocation = allocation;+		help_text.widget_x = allocation.width - help_text.width - margin_x;+		help_text.widget_y = allocation.height - help_text.height - margin_y;+		+		draw_box (cr, allocation);+		+		help_text.draw (cr);++		double close_x = allocation.width;+		close_x -= close.get_sidebearing_extent ();+		close_x -= margin_x;+		close_x -= box_margin;+		+		double close_y = allocation.height;+		close_y -= help_text.height;+		close_y -= margin_y;+		close_y -= 2 * box_margin;+		+		close.widget_x = close_x;+		close.widget_y = close_y;+		close.draw (cr);+	}++	public bool button_press (uint button, double x, double y) {+		if (close.widget_x < x < close.widget_x + close.get_sidebearing_extent ()+			&& close.widget_y < y < close.widget_y + close.font_size) {+			+			set_visible (false);+			GlyphCanvas.redraw ();+			return true;+		}+		+		return false;+	}++	public void draw_box (Context cr, WidgetAllocation allocation) {+		cr.save();++		Theme.color (cr, "Menu Background");+		double x, y, w, h;+		x = help_text.widget_x - 2 * box_margin;+		y = help_text.widget_y - 2 * box_margin; +		w = help_text.width + 2 * box_margin;+		h = help_text.height + 2 * box_margin;+		Widget.draw_rounded_rectangle (cr, x, y, w, h, 7);+		cr.fill ();++		cr.restore();+	}++}++}diff --git a/libbirdfont/KerningDisplay.vala b/libbirdfont/KerningDisplay.valaindex 9b30cc3..325f811 100644--- a/libbirdfont/KerningDisplay.vala+++ b/libbirdfont/KerningDisplay.vala@@ -1,5 +1,5 @@ /*-	Copyright (C) 2012 2014 2015 Johan Mattsson+	Copyright (C) 2012 2014 2015 2016 Johan Mattsson  	This library is free software; you can redistribute it and/or modify  	it under the terms of the GNU Lesser General Public License as @@ -46,6 +46,8 @@ public class KerningDisplay : FontDisplay { 	public bool adjust_side_bearings = false; 	public bool right_side_bearing = true; 	+	TextArea description; +	 	public KerningDisplay () { 		GlyphSequence w = new GlyphSequence (); 		rows = new Gee.ArrayList <GlyphSequence> ();@@ -54,6 +56,8 @@ public class KerningDisplay : FontDisplay { 		redo_items = new Gee.ArrayList <UndoItem> (); 		w.set_otf_tags (KerningTools.get_otf_tags ()); 		first_row.add (w);+		+		description = Help.create_help_text (t_("Kerning is the process of adjusting the space between two letters. You can cahnge the space between one letter and all other letters in the spacing tab.")); 	}  	public GlyphSequence get_first_row () {@@ -189,7 +193,7 @@ public class KerningDisplay : FontDisplay { 					cr.save (); 					glyph.add_help_lines (); 					cr.translate (kern + x - glyph.get_lsb () - Glyph.xc (), glyph.get_baseline () + y  - Glyph.yc ());-					glyph.draw_paths (cr);+					glyph.draw_layers (cr); 					cr.restore (); 					 					w = glyph.get_width ();@@ -487,7 +491,8 @@ public class KerningDisplay : FontDisplay { 	} 	 	public override void selected_canvas () {-		KeyBindings.set_require_modifier (true);		+		KeyBindings.set_require_modifier (true);+		MainWindow.get_help ().set_help_text (description); 	} 	 	public void add_kerning_class (int index) {diff --git a/libbirdfont/LabelTool.vala b/libbirdfont/LabelTool.valaindex 8806c70..5b9dd94 100644--- a/libbirdfont/LabelTool.vala+++ b/libbirdfont/LabelTool.vala@@ -79,7 +79,8 @@ public class LabelTool : Tool { 		}); 	} -	void clear_cache () {+	public override void clear_cache () {+		base.clear_cache (); 		selected_cache = null; 		deselected_cache = null; 	}diff --git a/libbirdfont/Layer.vala b/libbirdfont/Layer.valadeleted file mode 100644index 6058b49..0000000--- a/libbirdfont/Layer.vala+++ /dev/null@@ -1,162 +0,0 @@-/*-	Copyright (C) 2015 Johan Mattsson--	This library is free software; you can redistribute it and/or modify -	it under the terms of the GNU Lesser General Public License as -	published by the Free Software Foundation; either version 3 of the -	License, or (at your option) any later version.--	This library is distributed in the hope that it will be useful, but -	WITHOUT ANY WARRANTY; without even the implied warranty of -	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -	Lesser General Public License for more details.-*/--namespace BirdFont {--public class Layer : GLib.Object {-	public PathList paths;-	public Gee.ArrayList<Layer> subgroups;-	public bool visible = true;-	public string name = "Layer";-	-	public bool is_counter = false;-	public Gradient? gradient = null;-	public bool single_path = false;-	-	public Layer () {-		paths = new PathList ();-		subgroups = new Gee.ArrayList<Layer> ();-	}--	public int index_of (Layer sublayer) {-		return subgroups.index_of (sublayer);-	}-	-	public PathList get_all_paths () {-		PathList p = new PathList ();-		-		p.append (paths);-		-		foreach (Layer sublayer in subgroups) {-			p.append (sublayer.get_all_paths ());-		}-		-		return p;-	}--	public PathList get_visible_paths () {-		PathList p = new PathList ();-		-		if (visible) {-			p.append (paths);-		}-		-		foreach (Layer sublayer in subgroups) {-			if (sublayer.visible) {-				p.append (sublayer.get_all_paths ());-			}-		}-		-		return p;-	}-		-	public void add_layer (Layer layer) {-		subgroups.add (layer);-	}--	public void add_path (Path path) {-		paths.add (path);-	}--	public void remove_path (Path path) {-		paths.remove (path);-		foreach (Layer sublayer in subgroups) {-			sublayer.remove_path (path);-		}-	}--	public void remove_layer (Layer layer) {-		subgroups.remove (layer);-		foreach (Layer sublayer in subgroups) {-			sublayer.remove_layer (layer);-		}-	}-		-	public Layer copy () {-		Layer layer = new Layer ();-		-		layer.name = name;-		layer.paths = paths.copy ();-		layer.visible = visible;-		-		foreach (Layer l in subgroups) {-			layer.subgroups.add (l.copy ());-		}--		if (gradient != null) {-			layer.gradient = ((!) gradient).copy ();-		}-		-		layer.single_path = single_path;-			-		return layer;-	}--	public void get_boundaries (out double x, out double y, out double w, out double h) {-		double px, py, px2, py2;-		-		px = Glyph.CANVAS_MAX;-		py = Glyph.CANVAS_MAX;-		px2 = Glyph.CANVAS_MIN;-		py2 = Glyph.CANVAS_MIN;-		-		foreach (Path p in get_all_paths ().paths) {-			if (px > p.xmin) {-				px = p.xmin;-			} --			if (py > p.ymin) {-				py = p.ymin;-			}--			if (px2 < p.xmax) {-				px2 = p.xmax;-			}-			-			if (py2 < p.ymax) {-				py2 = p.ymax;-			}-		}-		-		w = px2 - px;-		h = py2 - py;-		x = px;-		y = py2;-	}-		-	public void print (int indent = 0) {-		foreach (Path p in paths.paths) {-			for (int i = 0; i < indent; i++) {-				stdout.printf ("\t");-			}-			stdout.printf (@"Path open: $(p.is_open ())");-			-			if (p.color != null) {-				stdout.printf (" %s", ((!) p.color).to_rgb_hex ());-			}-			-			stdout.printf ("\n");-		}-		-		foreach (Layer l in subgroups) {-			for (int i = 0; i < indent; i++) {-				stdout.printf ("\t");-			}-			stdout.printf ("%s\n", l.name);-			l.print (indent + 1);-		}-	}-}--}diff --git a/libbirdfont/LayerLabel.vala b/libbirdfont/LayerLabel.valaindex f76c1a5..80e87c0 100644--- a/libbirdfont/LayerLabel.vala+++ b/libbirdfont/LayerLabel.vala@@ -13,6 +13,7 @@ */  using Cairo;+using SvgBird;  namespace BirdFont { @@ -27,9 +28,15 @@ public class LayerLabel : Tool { 	/** Add margin when layer is moves. */ 	bool active_layer = false; 	+	static TextArea? help_text_hide = null;+	 	public LayerLabel (Layer layer) { 		base (); +		if (help_text_hide == null) {+			update_description ();+		}+ 		this.layer = layer; 		this.label = layer.name; 		@@ -39,10 +46,10 @@ public class LayerLabel : Tool {  		panel_press_action.connect ((selected, button, tx, ty) => {	 			if (y <= ty <= y + h) {-				if (tx >= w - 30 * Toolbox.get_scale ()) {+				if (tx >= w - 30) { 					DrawingTools.deselect_layers (); 					remove_layer ();-				} if (tx < 25 * Toolbox.get_scale ()) {+				} else if (tx < 25) { 					layer.visible = !layer.visible; 					GlyphCanvas.redraw (); 					BirdFont.get_current_font ().touch ();@@ -76,6 +83,13 @@ public class LayerLabel : Tool { 				redraw (); 			} 			+			if (y <= ty <= y + h) {+				if (tx < 25 && help_text_hide != null) {+					Help help = MainWindow.get_help ();+					help.set_help_text ((!) help_text_hide);+				}+			}+			 			return false; 		}); @@ -83,7 +97,16 @@ public class LayerLabel : Tool { 			active_layer = false; 		}); 	}-	++	void update_description () {+		help_text_hide = Help.create_help_text (t_("Hide the layer."));	+	}++	public override void clear_cache () {+		base.clear_cache ();+		update_description ();+	}+		 	void move_layer_up () { 		int i; 		Glyph g = MainWindow.get_current_glyph ();diff --git a/libbirdfont/LayerUtils.vala b/libbirdfont/LayerUtils.valanew file mode 100644index 0000000..01480aa--- /dev/null+++ b/libbirdfont/LayerUtils.vala@@ -0,0 +1,128 @@+/*+	Copyright (C) 2015 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using SvgBird;++namespace BirdFont {++public class LayerUtils {++	public static Gee.ArrayList<SvgBird.Object> get_visible_objects (Layer layer) {+		ObjectGroup group = new ObjectGroup ();+		add_visible_objects (layer, group);+		return group.objects;+	}++	public static void add_visible_objects (Layer layer, ObjectGroup objects) {+		foreach (SvgBird.Object o in layer.objects) {+			if (o is Layer) {+				Layer sublayer = (Layer) o;+				+				if (sublayer.visible) {+					add_visible_objects (sublayer, objects);+				}+			} else {+				if (o.visible) {+					objects.add (o);+				}+			}+		}+	}+	+	public static PathList get_all_paths (Layer layer) {+		PathList paths = new PathList ();+		add_paths_to_group (layer, paths);+		return paths;+	}++	public static void add_paths_to_group (Layer layer, PathList paths) {+		foreach (SvgBird.Object o in layer.objects) {+			if (o is PathObject) {+				PathObject p = (PathObject) o;+				paths.add (p.get_path ());+			} else if (o is Layer) {+				add_visible_paths_to_group ((Layer) o, paths);+			}+		}+	}++	public static PathList get_visible_paths (Layer layer) {+		PathList paths = new PathList ();+		add_visible_paths_to_group (layer, paths);+		return paths;+	}++	public static void add_visible_paths_to_group (Layer layer, PathList paths) {+		foreach (SvgBird.Object o in layer.objects) {+			if (o.visible) {+				if (o is PathObject) {+					PathObject p = (PathObject) o;+					paths.add (p.get_path ());+				} else if (o is Layer) {+					add_visible_paths_to_group ((Layer) o, paths);+				}+			}+		}+	}+			+	public static void add_path (Layer layer, Path path) {+		PathObject p = new PathObject.for_path (path);+		layer.add_object (p);+	}++	public static void append_paths (Layer layer, PathList path_list) {+		foreach (Path p in path_list.paths) {+			add_path (layer, p);+		}+	}++	private static PathObject? get_object_path (Layer layer, Path path) {+		foreach (SvgBird.Object o in layer.objects) {+			if (o is PathObject) {+				PathObject p = (PathObject) o;+				if (p.get_path () == path) {+					return p;+				}+			}+		}+		+		return null;+	}+	+	public static void remove_path (Layer layer, Path path) {+		PathObject? p = get_object_path (layer, path);+		+		if (p != null) {+			layer.objects.remove ((!) p);+		}++		foreach (SvgBird.Layer sublayer in layer.get_sublayers ()) {+			remove_path (sublayer, path);+		}+	}++	public static PathList get_paths_in_layer (Layer layer) {+		PathList paths = new PathList ();+		+		foreach (SvgBird.Object object in layer.objects) {+			if (object is PathObject) {+				paths.add (((PathObject) object).get_path ());+			}+		}+		+		return paths;+	}+}++}diff --git a/libbirdfont/LicenseDialog.vala b/libbirdfont/LicenseDialog.valaindex 8d2fbb7..4225136 100644--- a/libbirdfont/LicenseDialog.vala+++ b/libbirdfont/LicenseDialog.vala@@ -28,11 +28,11 @@ public class LicenseDialog : Dialog { 	static const double margin = 20; 	 	public LicenseDialog () {-		agreement = new TextArea (font_size);+		Color color = Theme.get_color ("Text Tool Box");+		agreement = new TextArea (font_size, color); 		agreement.min_width = 300; 		agreement.set_editable (false); 		agreement.draw_border = false;-		agreement.text_color = Theme.get_color ("Text Tool Box"); 		agreement.set_text ("BirdFont is developed with donations, please consider donating to the project.\n\nThis is the freeware version of BirdFont. You may use it for creating fonts under the SIL Open Font License.\n\nWhich license do you want to use for your font?"); 		 		decline = new Button ("Commercial License");diff --git a/libbirdfont/MainWindow.vala b/libbirdfont/MainWindow.valaindex 7b851a3..c4f028a 100644--- a/libbirdfont/MainWindow.vala+++ b/libbirdfont/MainWindow.vala@@ -1,5 +1,5 @@ /*
-	Copyright (C) 2012 2014 Johan Mattsson
+	Copyright (C) 2012 2014 2016 Johan Mattsson
 
 	This library is free software; you can redistribute it and/or modify 
 	it under the terms of the GNU Lesser General Public License as 
@@ -32,6 +32,7 @@ public class MainWindow : GLib.Object { 	public static Dialog dialog;
 	public static SpacingTab spacing_tab;
 	public static Task blocking_background_task;
+	public static Help help;
 	
 	/** Number of pixels per mm */
 	public static double units = 1;
@@ -55,9 +56,14 @@ public class MainWindow : GLib.Object { 		dialog = new Dialog ();
 		spacing_tab = new SpacingTab ();
 		blocking_background_task = new Task (null);
+		help = new Help ();
 		
 		tools.select_tool (DrawingTools.bezier_tool);
 	}
+	
+	public static Help get_help () {
+		return help;
+	}
 
 	public static void abort_task () {
 		blocking_background_task.cancel ();
diff --git a/libbirdfont/Menu.vala b/libbirdfont/Menu.valaindex 1bbbef2..c0d1234 100644--- a/libbirdfont/Menu.vala+++ b/libbirdfont/Menu.vala@@ -1,5 +1,5 @@ /*-	Copyright (C) 2014 2015 Johan Mattsson+	Copyright (C) 2014 - 2016 Johan Mattsson  	This library is free software; you can redistribute it and/or modify  	it under the terms of the GNU Lesser General Public License as @@ -299,23 +299,25 @@ public class Menu : AbstractMenu { 		}); 		export_menu.items.add (import_svg_folder); -		MenuItem import_color_svg;-		import_color_svg = add_menu_item (t_("Import SVG file")  + ", " + t_("color"),-			"import svg file color", "Glyph");-		import_color_svg.action.connect (() => {-			SvgParser.import (SvgType.COLOR);-			show_menu = false;-		});-		export_menu.items.add (import_color_svg);+		if (BirdFont.has_argument ("--test")) {+			MenuItem import_color_svg;+			import_color_svg = add_menu_item (t_("Import SVG file")  + ", " + t_("color"),+				"import svg file color", "Glyph");+			import_color_svg.action.connect (() => {+				SvgParser.import (SvgType.COLOR);+				show_menu = false;+			});+			export_menu.items.add (import_color_svg); -		MenuItem import_svg_color_folder;-		import_svg_color_folder = add_menu_item (t_("Import SVG folder") + ", " + t_("color"), -			"import svg folder color", "");-		import_svg_color_folder.action.connect (() => {-			SvgParser.import_folder (SvgType.COLOR);-			show_menu = false;-		});-		export_menu.items.add (import_svg_color_folder);+			MenuItem import_svg_color_folder;+			import_svg_color_folder = add_menu_item (t_("Import SVG folder") + ", " + t_("color"), +				"import svg folder color", "");+			import_svg_color_folder.action.connect (() => {+				SvgParser.import_folder (SvgType.COLOR);+				show_menu = false;+			});+			export_menu.items.add (import_svg_color_folder);+		} 		 		MenuItem import_background_image = add_menu_item (t_("Import Background Image"), "import background image"); 		import_background_image.action.connect (() => {@@ -507,7 +509,16 @@ public class Menu : AbstractMenu { 			show_menu = false; 		}); 		menu.items.add (version);-	++		MenuItem help = add_menu_item (t_("Help"), "help");+		help.action.connect (() => {+			Help help_box = MainWindow.get_help ();+			help_box.set_visible (!help_box.is_visible ());+			GlyphCanvas.redraw ();+			show_menu = false;+		});+		menu.items.add (help);+			 		set_current_menu (menu); 		top_menu = menu; 		diff --git a/libbirdfont/MenuItem.vala b/libbirdfont/MenuItem.valaindex 735029a..1453dc9 100644--- a/libbirdfont/MenuItem.vala+++ b/libbirdfont/MenuItem.vala@@ -23,8 +23,8 @@ public class MenuItem : GLib.Object { 	public double y; 	 	// key bindings-	public uint modifiers = NONE;-	public unichar key = '\0';+	public virtual uint modifiers { get; set; default = NONE; }+	public virtual unichar key { get; set; default = '\0'; } 	 	public Gee.ArrayList<string> displays = new Gee.ArrayList<string> ();	 	diff --git a/libbirdfont/MenuTab.vala b/libbirdfont/MenuTab.valaindex 1db06d6..6283739 100644--- a/libbirdfont/MenuTab.vala+++ b/libbirdfont/MenuTab.vala@@ -12,6 +12,8 @@ 	Lesser General Public License for more details. */ +using SvgBird;+ namespace BirdFont {  public class MenuTab : FontDisplay {@@ -122,8 +124,7 @@ public class MenuTab : FontDisplay { 		Font current_font = BirdFont.get_current_font (); 		string ttf_name = ExportSettings.get_file_name (current_font) + ".ttf"; 		string ttf_name_mac = ExportSettings.get_file_name_mac (current_font) + ".ttf";-		-		print (@"$ttf_name == $ttf_name_mac");+ 		if (ttf_name == ttf_name_mac) { 			MainWindow.show_message (t_("You need to choose a different name for the TTF file with Mac adjustmets.")); 			ttf_name_mac = ExportSettings.get_file_name_mac (current_font) + " Mac.ttf";@@ -276,6 +277,7 @@ public class MenuTab : FontDisplay { 		 		DrawingTools.set_stroke_tool_visibility (); + 		string lock_grid = f.settings.get_setting ("lock_grid"); 		bool lg = bool.parse (lock_grid);		 		GridTool.lock_grid = lg;@@ -645,29 +647,29 @@ public class MenuTab : FontDisplay { 		Gee.ArrayList<Path> paths = new Gee.ArrayList<Path> (); 		 		// selected objects-		foreach (Path p in g.active_paths) {+		foreach (Path p in g.get_active_paths ()) { 			paths.add (PenTool.simplify (p, false, PenTool.simplification_threshold)); 		} 		 		// selected segments 		if (paths.size == 0) {-			foreach (Path p in g.get_all_paths ()) {+			foreach (Path p in g.get_active_paths ()) { 				g.add_active_path (null, p); 			} 			-			foreach (Path p in g.active_paths) {+			foreach (Path p in g.get_active_paths ()) { 				paths.add (PenTool.simplify (p, true, PenTool.simplification_threshold)); 			} 		} 		 		g.store_undo_state (); 		-		foreach (Path p in g.active_paths) {-			g.layers.remove_path (p);+		foreach (SvgBird.Object o in g.active_paths) {+			g.layers.remove (o); 		} -		foreach (Path p in g.active_paths) {-			g.layers.remove_path (p);+		foreach (Path p in g.get_active_paths ()) {+			LayerUtils.remove_path (g.layers, p); 		} 				 		foreach (Path p in paths) {diff --git a/libbirdfont/MoveTool.vala b/libbirdfont/MoveTool.valaindex 2445a98..9da3b2d 100644--- a/libbirdfont/MoveTool.vala+++ b/libbirdfont/MoveTool.vala@@ -1,5 +1,5 @@ /*-	Copyright (C) 2012 2013 Johan Mattsson+	Copyright (C) 2012 2013 2015 2016 Johan Mattsson  	This library is free software; you can redistribute it and/or modify  	it under the terms of the GNU Lesser General Public License as @@ -14,6 +14,7 @@  using Math; using Cairo;+using SvgBird;  namespace BirdFont { @@ -94,8 +95,13 @@ public class MoveTool : Tool { 				g.store_undo_state (); 			} 			-			foreach (Path p in g.active_paths) {-				g.layers.remove_path (p);+			foreach (SvgBird.Object p in g.active_paths) {+				if (p is PathObject) {+					LayerUtils.remove_path (g.layers, ((PathObject) p).get_path ());+				} else {+					g.layers.remove (p);+				}+				 				g.update_view (); 			} @@ -109,9 +115,8 @@ public class MoveTool : Tool { 	 	public void move (int x, int y) { 		Glyph glyph = MainWindow.get_current_glyph ();-		double dx = last_x - x;-		double dy = last_y - y; -		double p = PenTool.precision;+		double dx = Glyph.path_coordinate_x (last_x) - Glyph.path_coordinate_x (x);+		double dy = Glyph.path_coordinate_y (last_y) - Glyph.path_coordinate_y (y);  		double delta_x, delta_y; 		 		if (!move_path) {@@ -121,26 +126,11 @@ public class MoveTool : Tool { 		if (move_path && (fabs(dx) > 0 || fabs (dy) > 0)) { 			moved = true; -			delta_x = Glyph.ivz () * -dx * p;-			delta_y = Glyph.ivz () * dy * p;+			delta_x = -dx;+			delta_y = -dy; 			-			if (glyph.color_svg_data != null) {-				glyph.svg_x += delta_x;-				glyph.svg_y += delta_y;-			} else {		-				foreach (Layer group in glyph.selected_groups) {-					if (group.gradient != null) {-						Gradient g = (!) group.gradient;-						g.x1 += delta_x;-						g.x2 += delta_x;-						g.y1 += delta_y;-						g.y2 += delta_y;-					}-				}-				-				foreach (Path path in glyph.active_paths) {-					path.move (delta_x, delta_y);-				}+			foreach (SvgBird.Object object in glyph.active_paths) {+				object.move (delta_x, delta_y); 			} 		} @@ -167,7 +157,7 @@ public class MoveTool : Tool { 		if (GridTool.is_visible () && moved) { 			tie_paths_to_grid (glyph); 		} else if (GridTool.has_ttf_grid ()) {-			foreach (Path p in glyph.active_paths) {+			foreach (SvgBird.Object p in glyph.active_paths) { 				tie_path_to_ttf_grid (p); 			} 		} @@ -184,8 +174,11 @@ public class MoveTool : Tool { 			objects_moved (); 			DrawingTools.resize_tool.signal_objects_rotated (); 			-			foreach (Path p in glyph.active_paths) {-				p.create_full_stroke ();+			foreach (SvgBird.Object o in glyph.active_paths) {+				if (o is PathObject) {+					PathObject path = (PathObject) o;+					path.get_path ().create_full_stroke ();+				} 			} 		} else { 			objects_deselected ();@@ -194,42 +187,34 @@ public class MoveTool : Tool { 		 	public void press (int b, int x, int y) { 		Glyph glyph = MainWindow.get_current_glyph ();-		Path p;+		SvgBird.Object object; 		bool selected = false;-		Layer? group;-		Layer g;-		-		glyph.store_undo_state ();-		group_selection = false;+		SvgBird.Object? o; 		-		if (glyph.color_svg_data == null) {-			group = glyph.get_path_at (x, y);-			-			if (group != null) {-				g = (!) group;-				return_if_fail (g.paths.paths.size > 0);-				p = g.paths.paths.get (0);-				selected = glyph.active_paths.contains (p);-				-				if (!selected && !KeyBindings.has_shift ()) {-					glyph.clear_active_paths ();-				} -				-				foreach (Path lp in g.paths.paths) {-					if (selected && KeyBindings.has_shift ()) {-						glyph.selected_groups.remove ((!) group);-						glyph.active_paths.remove (lp);-					} else {-						glyph.add_active_path ((!) group, lp);-					}-				}-			} else if (!KeyBindings.has_shift ()) {+		glyph.store_undo_state ();	+		double px = Glyph.path_coordinate_x (x);+		double py = Glyph.path_coordinate_y (y);+		o = glyph.get_object_at (px, py);++		if (o != null) {+			object = (!) o;+			selected = glyph.active_paths_contains (object);+ 			+			if (!selected && !KeyBindings.has_shift ()) { 				glyph.clear_active_paths ();-			}+			}  			-			update_selection_boundaries ();+			if (selected && KeyBindings.has_shift ()) {+				glyph.active_paths.remove (object);+			} else {+				glyph.add_active_object (null, object);+			}			+		} else if (!KeyBindings.has_shift ()) {+			glyph.clear_active_paths (); 		}-		++		update_selection_boundaries ();+ 		move_path = true; 		 		last_x = x;@@ -245,8 +230,7 @@ public class MoveTool : Tool { 		selection_changed (); 		GlyphCanvas.redraw (); 	}-	-	+		 	void select_group () { 		double x1 = Glyph.path_coordinate_x (Math.fmin (selection_x, last_x)); 		double y1 = Glyph.path_coordinate_y (Math.fmin (selection_y, last_y));@@ -256,10 +240,10 @@ public class MoveTool : Tool { 		 		glyph.clear_active_paths (); 		-		foreach (Path p in glyph.get_paths_in_current_layer ()) {+		foreach (SvgBird.Object p in glyph.get_objects_in_current_layer ()) { 			if (p.xmin > x1 && p.xmax < x2 && p.ymin < y1 && p.ymax > y2) {-				if (p.points.size > 0) {-					glyph.add_active_path (null, p);+				if (!p.is_empty ()) {+					glyph.add_active_object (null, p); 				} 			} 		}@@ -280,7 +264,7 @@ public class MoveTool : Tool { 		 		get_selection_box_boundaries (out x, out y, out w, out h); 		-		foreach (Path path in glyph.active_paths) {+		foreach (SvgBird.Object path in glyph.active_paths) { 			path.move (glyph.left_limit - x + w / 2, font.base_line - y + h / 2); 		} 		@@ -288,25 +272,6 @@ public class MoveTool : Tool { 		objects_moved (); 		GlyphCanvas.redraw (); 	}--	static void draw_selection_box (Context cr) {-		double x = Math.fmin (selection_x, last_x);-		double y = Math.fmin (selection_y, last_y);--		double w = Math.fabs (selection_x - last_x);-		double h = Math.fabs (selection_y - last_y);-		-		Glyph glyph = MainWindow.get_current_glyph ();-		-		if (glyph.color_svg_data == null) {-			cr.save ();			-			Theme.color (cr, "Foreground 1");-			cr.set_line_width (2);-			cr.rectangle (x, y, w, h);-			cr.stroke ();-			cr.restore ();-		}-	} 	 	public static void get_selection_box_boundaries (out double x, out double y, out double w, out double h) { 		double px, py, px2, py2;@@ -317,23 +282,26 @@ public class MoveTool : Tool { 		px2 = -10000; 		py2 = -10000; 		-		foreach (Path p in glyph.active_paths) {-			p.update_region_boundaries ();-			-			if (px > p.xmin) {-				px = p.xmin;-			} +		foreach (SvgBird.Object o in glyph.active_paths) {+			if (o is PathObject) {+				Path p = ((PathObject) o).get_path ();+				p.update_region_boundaries ();+				+				if (px > p.xmin) {+					px = p.xmin;+				}  -			if (py > p.ymin) {-				py = p.ymin;-			}+				if (py > p.ymin) {+					py = p.ymin;+				} -			if (px2 < p.xmax) {-				px2 = p.xmax;-			}-			-			if (py2 < p.ymax) {-				py2 = p.ymax;+				if (px2 < p.xmax) {+					px2 = p.xmax;+				}+				+				if (py2 < p.ymax) {+					py2 = p.ymax;+				} 			} 		} 		@@ -367,7 +335,7 @@ public class MoveTool : Tool { 				break; 		} 		-		foreach (Path path in glyph.active_paths) {+		foreach (SvgBird.Object path in glyph.active_paths) { 			path.move (x * Glyph.ivz (), y * Glyph.ivz ()); 		} 		@@ -378,7 +346,7 @@ public class MoveTool : Tool { 		glyph.redraw_area (0, 0, glyph.allocation.width, glyph.allocation.height); 	} -	static void tie_path_to_ttf_grid (Path p) {+	static void tie_path_to_ttf_grid (SvgBird.Object p) { 		double sx, sy, qx, qy;	  		sx = p.xmax;@@ -428,7 +396,7 @@ public class MoveTool : Tool { 		dx_min = Math.fabs (qx - minx); 		dx_max = Math.fabs (sx - maxx); 		-		foreach (Path p in g.active_paths) {+		foreach (SvgBird.Object p in g.active_paths) { 			if (dy_min < dy_max) { 				p.move (0, qy - miny); 			} else {@@ -447,8 +415,10 @@ public class MoveTool : Tool { 	 	public static void update_boundaries_for_selection () { 		Glyph glyph = MainWindow.get_current_glyph ();-		foreach (Path p in glyph.active_paths) {-			p.update_region_boundaries ();+		foreach (SvgBird.Object o in glyph.active_paths) {+			if (o is PathObject) {+				((PathObject)o).get_path ().update_region_boundaries ();+			} 		} 	} 	@@ -470,14 +440,19 @@ public class MoveTool : Tool { 		xc = selection_box_center_x; 		yc = selection_box_center_y; -		foreach (Path p in glyph.active_paths) {-			if (vertical) {-				p.flip_vertical ();-			} else {-				p.flip_horizontal ();+		foreach (SvgBird.Object p in glyph.active_paths) {+			if (p is PathObject) {+				Path path = ((PathObject) p).get_path ();+				+				// FIXME: move to object+				if (vertical) {+					path.flip_vertical ();+				} else {+					path.flip_horizontal ();+				}+				+				path.reverse (); 			}-			-			p.reverse (); 		}  		get_selection_box_boundaries (out xc2, out yc2, out w, out h); @@ -485,7 +460,7 @@ public class MoveTool : Tool { 		dx = -(xc2 - xc); 		dy = -(yc2 - yc); 		-		foreach (Path p in glyph.active_paths) {+		foreach (SvgBird.Object p in glyph.active_paths) { 			p.move (dx, dy); 		} 		@@ -499,9 +474,9 @@ public class MoveTool : Tool { 		Glyph g = MainWindow.get_current_glyph (); 		 		g.clear_active_paths ();-		foreach (Path p in g.get_paths_in_current_layer ()) {-			if (p.points.size > 0) {-				g.add_active_path (null, p);+		foreach (SvgBird.Object p in g.get_objects_in_current_layer ()) {+			if (!p.is_empty ()) {+				g.add_active_object (null, p); 			} 		} 		@@ -510,6 +485,21 @@ public class MoveTool : Tool { 		update_selection_boundaries (); 		objects_moved (); 	}++	static void draw_selection_box (Context cr) {+		double x = Math.fmin (selection_x, last_x);+		double y = Math.fmin (selection_y, last_y);++		double w = Math.fabs (selection_x - last_x);+		double h = Math.fabs (selection_y - last_y);+		+		cr.save ();			+		Theme.color (cr, "Foreground 1");+		cr.set_line_width (2);+		cr.rectangle (x, y, w, h);+		cr.stroke ();+		cr.restore ();+	} }  }diff --git a/libbirdfont/OpenFontFormat/FontData.vala b/libbirdfont/OpenFontFormat/FontData.valaindex 4a42023..84cfe92 100644--- a/libbirdfont/OpenFontFormat/FontData.vala+++ b/libbirdfont/OpenFontFormat/FontData.vala@@ -14,7 +14,7 @@  namespace BirdFont { -public class FontData : Object {+public class FontData : GLib.Object {  	// Read pointer 	uint rp = 0;diff --git a/libbirdfont/OpenFontFormat/GlyfData.vala b/libbirdfont/OpenFontFormat/GlyfData.valaindex 9e58b6f..2b87c24 100644--- a/libbirdfont/OpenFontFormat/GlyfData.vala+++ b/libbirdfont/OpenFontFormat/GlyfData.vala@@ -16,7 +16,7 @@ using Math;  namespace BirdFont { -public class CoordinateFlags {+public class CoordinateFlags : GLib.Object { 	/** TTF coordinate flags. */  	public static const uint8 NONE           = 0;diff --git a/libbirdfont/OpenFontFormat/GlyfTable.vala b/libbirdfont/OpenFontFormat/GlyfTable.valaindex 677238e..6d8fbf8 100644--- a/libbirdfont/OpenFontFormat/GlyfTable.vala+++ b/libbirdfont/OpenFontFormat/GlyfTable.vala@@ -1,5 +1,5 @@ /*-	Copyright (C) 2012, 2013, 2014 Johan Mattsson+	Copyright (C) 2012 2013 2014 Johan Mattsson  	This library is free software; you can redistribute it and/or modify  	it under the terms of the GNU Lesser General Public License as @@ -163,7 +163,7 @@ public class GlyfTable : OtfTable { 			g.remove_empty_paths (); 			unassigned = gc.is_unassigned (); -			if (unassigned) {+			if (unassigned && gc.get_name () != ".notdef") { 				unassigned_glyphs.add (gc); 			} 			@@ -266,7 +266,6 @@ public class GlyfTable : OtfTable { 		// flags		 		nflags = glyf_data.get_nflags (); 		if (unlikely (nflags != npoints)) {-			print ("glyf table data:\n"); 			fd.dump (); 			warning (@"(nflags != npoints)  ($nflags != $npoints) in glyph $(g.name). ncontours: $ncontours"); 		}@@ -478,7 +477,7 @@ public class GlyfTable : OtfTable {  		end_points = new uint16[ncontours + 1]; 		for (int i = 0; i < ncontours; i++) {-			end_points[i] = dis.read_ushort (); // FIXA: mind shot vector is negative+			end_points[i] = dis.read_ushort (); // FIXME: mind shot vector is negative 			 			if (i > 0 && end_points[i] < end_points[i -1]) { 				warning (@"Next endpoint has bad value in $(name.str). (end_points[i] > end_points[i -1])  ($(end_points[i]) > $(end_points[i -1])) i: $i ncontours: $ncontours");diff --git a/libbirdfont/OpenFontFormat/OpenFontFormatReader.vala b/libbirdfont/OpenFontFormat/OpenFontFormatReader.valaindex 0ed067e..b99f90c 100644--- a/libbirdfont/OpenFontFormat/OpenFontFormatReader.vala+++ b/libbirdfont/OpenFontFormat/OpenFontFormatReader.vala@@ -58,7 +58,7 @@ errordomain BadFormat { 	PARSE } -public class OpenFontFormatReader : Object {+public class OpenFontFormatReader : GLib.Object { 	 	public DirectoryTable directory_table; 	public FontData font_data = new FontData ();diff --git a/libbirdfont/OpenFontFormat/OpenFontFormatWriter.vala b/libbirdfont/OpenFontFormat/OpenFontFormatWriter.valaindex ce6d627..f44ae78 100644--- a/libbirdfont/OpenFontFormat/OpenFontFormatWriter.vala+++ b/libbirdfont/OpenFontFormat/OpenFontFormatWriter.vala@@ -14,7 +14,7 @@  namespace BirdFont { -public class OpenFontFormatWriter : Object  {+public class OpenFontFormatWriter : GLib.Object  {  	DataOutputStream os; 	DataOutputStream os_mac;diff --git a/libbirdfont/OpenFontFormat/OtfInputStream.vala b/libbirdfont/OpenFontFormat/OtfInputStream.valaindex ab02b64..8256012 100644--- a/libbirdfont/OpenFontFormat/OtfInputStream.vala+++ b/libbirdfont/OpenFontFormat/OtfInputStream.vala@@ -15,7 +15,7 @@ namespace BirdFont {  /** Reader for otf data types. */-public class OtfInputStream : Object  {+public class OtfInputStream : GLib.Object  { 	 	public FileInputStream fin; 	public DataInputStream din;diff --git a/libbirdfont/OpenFontFormat/OtfTable.vala b/libbirdfont/OpenFontFormat/OtfTable.valaindex 1a58174..56887cb 100644--- a/libbirdfont/OpenFontFormat/OtfTable.vala+++ b/libbirdfont/OpenFontFormat/OtfTable.vala@@ -14,7 +14,7 @@  namespace BirdFont { -public class OtfTable : Object {+public class OtfTable : GLib.Object {  	public string id = "NO_ID"; diff --git a/libbirdfont/OpenFontFormat/SvgTable.vala b/libbirdfont/OpenFontFormat/SvgTable.valaindex 2a0d4e5..61f93a3 100644--- a/libbirdfont/OpenFontFormat/SvgTable.vala+++ b/libbirdfont/OpenFontFormat/SvgTable.vala@@ -34,19 +34,54 @@ public class SvgTable : OtfTable { 		Font font = OpenFontFormatWriter.get_current_font (); 		GlyphCollection? glyph_collection; 		GlyphCollection glyphs;-		string? svg_data; 		int gid;+		Gee.ArrayList<EmbeddedSvg> embedded_svg; 		 		for (int index = 0; index < font.length (); index++) {		 			glyph_collection = font.get_glyph_collection_index (index); 			 			if (glyph_collection != null) { 				glyphs = (!) glyph_collection;-				svg_data = glyphs.get_current ().color_svg_data;+				embedded_svg = get_embedded_svg (glyphs); 				-				if (svg_data != null) {+				if (embedded_svg.size > 0) { 					gid = glyf_table.get_gid (glyphs.get_name ());-					add_svg_glyph ((!) svg_data, gid, glyphs);+					+					StringBuilder svg = new StringBuilder ();+					svg.append ("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n");+		+					foreach (EmbeddedSvg embedded in embedded_svg) {+						svg.append ("<svg>");+						svg.append ("\n\n");+						svg.append ("<g id=");+						svg.append ("\"");+						svg.append ("glyph");+						svg.append (@"$gid");+						svg.append ("\" ");+						+						// scale the internal coordinates from 100 units per em to the +						// number of units per em in this font and move the glyph+						// in to the em box+						Glyph glyph = glyphs.get_current ();+						double scale = HeadTable.UNITS;+						double x = embedded.x - glyph.left_limit;+						double y = font.base_line - embedded.y;+						svg.append (@"transform=\"scale($scale) translate($x, $y)\"");+						+						svg.append (">");+						svg.append ("\n\n");++						append_svg_glyph (svg, embedded.svg_data, glyphs);++						svg.append ("\n\n");+						svg.append ("</g>\n");+						svg.append ("</svg>");+					}+					+					SvgTableEntry entry;+					entry = new SvgTableEntry ((uint16) gid, svg.str);+					entries.add (entry);+ 					glyphs_in_table++; 				} 			}@@ -55,8 +90,19 @@ public class SvgTable : OtfTable { 		process_svg_data (); 	} 	-	void add_svg_glyph (string svg_data, int glyph_id, GlyphCollection glyphs) {-		SvgTableEntry entry;+	Gee.ArrayList<EmbeddedSvg> get_embedded_svg (GlyphCollection glyphs) {+		Gee.ArrayList<EmbeddedSvg> svg = new Gee.ArrayList<EmbeddedSvg> ();+		+		foreach (Object object in glyphs.get_current ().get_visible_objects ()) {+			if (object is EmbeddedSvg) {+				svg.add ((EmbeddedSvg) object);+			}+		}+		+		return svg;+	}+	+	void append_svg_glyph (StringBuilder svg, string svg_data, GlyphCollection glyphs) { 		Gee.ArrayList<Tag> layer_content; 		Gee.ArrayList<Tag> svg_tags; 		Gee.ArrayList<Tag> meta;@@ -94,8 +140,6 @@ public class SvgTable : OtfTable { 			} 		} 		-		StringBuilder svg = new StringBuilder ();-		svg.append ("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n"); 		svg.append ("<"); 		svg.append (svg_root_tag.get_name ()); 		svg.append (" ");@@ -105,40 +149,14 @@ public class SvgTable : OtfTable { 		foreach (Tag tag in svg_tags) { 			append_tag (svg, tag); 		}--		svg.append ("\n\n");-		svg.append ("<g id=");-		svg.append ("\"");-		svg.append ("glyph");-		svg.append (@"$glyph_id");-		svg.append ("\" ");-		-		// scale the internal coordinates from 100 units per em to the -		// number of units per em in this font and move the glyph-		// in to the em box-		Glyph glyph = glyphs.get_current ();-		double scale = HeadTable.UNITS;-		double x = glyph.svg_x - glyph.left_limit;-		double y = font.base_line - glyph.svg_y;-		svg.append (@"transform=\"scale($scale) translate($x, $y)\"");-		-		svg.append (">");-		svg.append ("\n\n"); 		 		foreach (Tag tag in layer_content) { 			append_tag (svg, tag); 		}-		-		svg.append ("\n\n");-		svg.append ("</g>");-		svg.append ("\n\n");-		+				 		svg.append ("</"); 		svg.append (svg_root_tag.get_name ());-		svg.append (">\n");-		-		entry = new SvgTableEntry ((uint16) glyph_id, svg.str);-		entries.add (entry);+		svg.append (">\n");		 	}  	public void append_tag (StringBuilder svg, Tag tag) {diff --git a/libbirdfont/OrientationTool.vala b/libbirdfont/OrientationTool.valaindex 799cdfc..aa606d2 100644--- a/libbirdfont/OrientationTool.vala+++ b/libbirdfont/OrientationTool.vala@@ -30,8 +30,11 @@ public class OrientationTool : Tool { 		select_action.connect ((self) => { 			Glyph g = MainWindow.get_current_glyph (); 			-			foreach (Path p in g.active_paths) {-				p.reverse ();+			foreach (Object o in g.active_paths) {+				if (o is PathObject) {+					PathObject p = (PathObject) o;+					p.get_path ().reverse ();+				} 			}  			count_down = true;@@ -54,13 +57,17 @@ public class OrientationTool : Tool { 		bool has_clockwise_paths = false; 		bool has_counter_clockwise_paths = false; 		-		foreach (Path p in glyph.active_paths) {-			if (p.is_clockwise ()) {-				has_clockwise_paths = true;-			}-			-			if (!p.is_clockwise ()) {-				has_counter_clockwise_paths = true;+		foreach (Object o in glyph.active_paths) {+			if (o is PathObject) {+				Path p = ((PathObject) o).get_path ();+				+				if (p.is_clockwise ()) {+					has_clockwise_paths = true;+				}+				+				if (!p.is_clockwise ()) {+					has_counter_clockwise_paths = true;+				} 			} 		} 		diff --git a/libbirdfont/OtfFeatureTable.vala b/libbirdfont/OtfFeatureTable.valaindex 89dc8d9..d12494a 100644--- a/libbirdfont/OtfFeatureTable.vala+++ b/libbirdfont/OtfFeatureTable.vala@@ -45,7 +45,7 @@ public class OtfFeatureTable : Table {  	public override void selected_row (Row row, int column, bool delete_button) { 		int row_index = row.get_index ();-		Object o;+		GLib.Object o; 		String s; 		AlternateItem a; 		diff --git a/libbirdfont/OverView.vala b/libbirdfont/OverView.valaindex 197f1f3..ce453dd 100644--- a/libbirdfont/OverView.vala+++ b/libbirdfont/OverView.vala@@ -13,6 +13,7 @@ */  using Cairo;+using SvgBird;  namespace BirdFont { @@ -103,6 +104,13 @@ public class OverView : FontDisplay { 					set_initial_zoom (); 					PenTool.update_orientation (); 				}+				+				if (glyph_collection.get_name () == ".notdef") {+					Font font = BirdFont.get_current_font ();+					if (!font.has_glyph (".notdef")) {+						font.add_glyph_collection (glyph_collection);+					}+				} 			});  			this.open_new_glyph_signal.connect ((character) => {@@ -519,7 +527,7 @@ public class OverView : FontDisplay { 	 	public void process_item_list_update () { 		string character_string;-		Font f = BirdFont.get_current_font ();+		Font font = BirdFont.get_current_font (); 		GlyphCollection? glyphs = null; 		uint32 index; 		OverViewItem item;@@ -543,10 +551,11 @@ public class OverView : FontDisplay { 		y = OverViewItem.margin; 		 		if (all_available) {-			uint font_length = f.length ();+			uint font_length = font.length ();+			int i; 			-			for (int i = 0; i < item_list_length && index < font_length; i++) {-				glyphs = f.get_glyph_collection_index ((uint32) index);+			for (i = 0; i < item_list_length && index < font_length; i++) {+				glyphs = font.get_glyph_collection_index ((uint32) index); 				return_if_fail (glyphs != null); 				 				glyph = ((!) glyphs).get_current ();@@ -557,16 +566,20 @@ public class OverView : FontDisplay { 				item.set_character (character); 				item.set_glyphs (glyphs); 				item.generate_graphics ();-				item.x = x;-				item.y = y;-				-				if (glyphs != null) {-					item.selected = (selected_items.index_of ((!) glyphs) != -1);-				}+				item.selected = (selected_items.index_of ((!) glyphs) != -1); 				 				visible_items.add (item); 				index++; 			}+			+			if (i < item_list_length && !font.has_glyph (".notdef")) {+				item = new OverViewItem ();+				item.set_glyphs (font.get_not_def_character ());+				item.generate_graphics (false);+				item.version_menu = null;+				item.selected = (selected_items.index_of ((!) glyphs) != -1);+				visible_items.add (item);+			} 		} else { 			uint32 glyph_range_size = glyph_range.get_length (); 			@@ -593,7 +606,7 @@ public class OverView : FontDisplay { 			visible_size = visible_items.size; 			for (int i = 0; i < visible_size; i++) { 				item = visible_items.get (i);-				glyphs = f.get_glyph_collection_by_name ((!) item.character.to_string ());+				glyphs = font.get_glyph_collection_by_name ((!) item.character.to_string ()); 				item.set_glyphs (glyphs); 				 				if (glyphs != null) {@@ -669,9 +682,8 @@ public class OverView : FontDisplay { 		 	void draw_empty_canvas (WidgetAllocation allocation, Context cr) { 		Text t;-		 		cr.save ();-		t = new Text (t_("No glyphs in this view."), 24);+		t = new Text ("No glyphs in this view.", 24); 		Theme.text_color (t, "Text Foreground"); 		t.widget_x = 40; 		t.widget_y = 30;@@ -1315,7 +1327,8 @@ public class OverView : FontDisplay { 				if (is_null(i.version_menu)) { 					update = true; 				} else {-					update = !i.version_menu.menu_visible;+					VersionList v = (!) i.version_menu;+					update = !v.menu_visible; 				} 			} 			index++;diff --git a/libbirdfont/OverViewItem.vala b/libbirdfont/OverViewItem.valaindex dce58c4..549d969 100644--- a/libbirdfont/OverViewItem.vala+++ b/libbirdfont/OverViewItem.vala@@ -42,7 +42,7 @@ public class OverViewItem : GLib.Object {  	public static double glyph_scale = 1.0; 	-	public VersionList version_menu;+	public VersionList? version_menu = null; 	Text label; 	 	private Surface? cache = null;@@ -63,19 +63,22 @@ public class OverViewItem : GLib.Object { 		glyphs = gc;		 	} -	public void generate_graphics () {-		if (glyphs != null) {	-			version_menu = new VersionList ((!) glyphs);-			version_menu.add_glyph_item.connect ((glyph) => {+	public void generate_graphics (bool generate_versions = true) {+		if (glyphs != null && generate_versions) {+			VersionList versions = new VersionList ((!) glyphs);+			+			versions.add_glyph_item.connect ((glyph) => { 				((!) glyphs).insert_glyph (glyph, true); 			}); 			-			version_menu.signal_delete_item.connect ((glyph_index) => {+			versions.signal_delete_item.connect ((glyph_index) => { 				OverView v = MainWindow.get_overview (); 				version_menu = new VersionList ((!) glyphs); 				v.update_item_list (); 				GlyphCanvas.redraw (); 			});+			+			version_menu = versions; 		}	  		info = new CharacterInfo (character, glyphs);@@ -96,7 +99,6 @@ public class OverViewItem : GLib.Object { 		} 		 		Glyph g;-		Font font; 		double gx, gy; 		double x1, x2, y1, y2; 		double scale_box;@@ -104,7 +106,6 @@ public class OverViewItem : GLib.Object { 		double glyph_width, glyph_height; 		Surface s; 		Context c;-		Color color = Color.black (); 		 		g = ((!) glyphs).get_current (); 		@@ -124,31 +125,18 @@ public class OverViewItem : GLib.Object { 		c.save (); 		g.boundaries (out x1, out y1, out x2, out y2); -		if (g.color_svg_data != null) {-			font = BirdFont.get_current_font ();-			glyph_width = g.right_limit - g.left_limit;-			glyph_height = font.top_position - font.bottom_position;-		} else {-			glyph_width = x2 - x1;-			glyph_height = y2 - y1;-		}+		glyph_width = x2 - x1;+		glyph_height = y2 - y1;  		c.save (); 		c.scale (glyph_scale * Screen.get_scale (), glyph_scale * Screen.get_scale ());  		g.add_help_lines (); 				-		if (g.color_svg_data != null) {-			gx = 10;-			gy = (h / glyph_scale) - 25 / glyph_scale;-			c.translate (gx - Glyph.xc () - g.get_lsb (), g.get_baseline () + gy - Glyph.yc ());-			g.draw_svg (c);-		} else {-			gx = ((w / glyph_scale) - glyph_width) / 2 - g.get_left_side_bearing ();-			gy = (h / glyph_scale) - 25 / glyph_scale;-			c.translate (gx - Glyph.xc () - g.get_lsb (), g.get_baseline () + gy - Glyph.yc ());-			g.draw_paths (c, color);-		}+		gx = ((w / glyph_scale) - glyph_width) / 2 - g.get_left_side_bearing ();+		gy = (h / glyph_scale) - 25 / glyph_scale;+		c.translate (gx - Glyph.xc () - g.get_lsb (), g.get_baseline () + gy - Glyph.yc ());+		g.draw_layers (c); 		 		c.restore (); 		@@ -236,16 +224,17 @@ public class OverViewItem : GLib.Object { 		GlyphCollection g; 		bool s = (x <= px <= x + width) && (y <= py <= y + height); -		if (has_icons () && glyphs != null) {+		if (has_icons () && glyphs != null && version_menu != null) { 			g = (!) glyphs;-			version_menu.set_position (x + width - 21, y + height - 18);-			a = version_menu.menu_item_action (px, py); // select one item on the menu+			VersionList versions = (!) version_menu;+			versions.set_position (x + width - 21, y + height - 18);+			a = versions.menu_item_action (px, py); // select one item on the menu 			 			if (a) { 				return s; 			} 			-			version_menu.menu_icon_action (px, py); // click in the open menu+			versions.menu_icon_action (px, py); // click in the open menu 		} 		 		info.set_position (x + width - 17, y + height - 22.5);@@ -367,7 +356,10 @@ public class OverViewItem : GLib.Object { 		cc.fill (); 		 		if (has_icons ()) {-			draw_menu_icon (cc, false);+			if (version_menu != null) { +				draw_menu_icon (cc, false);+			}+			 			draw_character_info_icon (cc); 		} @@ -464,7 +456,8 @@ public class OverViewItem : GLib.Object { 	 	public void hide_menu () { 		if (!is_null (version_menu)) {-			version_menu.menu_visible = false;+			VersionList v = (!) version_menu;+			v.menu_visible = false; 		} 	} 	@@ -484,11 +477,21 @@ public class OverViewItem : GLib.Object { 	} 	 	private void draw_menu (Context cr) {-		if (glyphs == null || !version_menu.menu_visible) {+		if (glyphs == null) {+			return;+		}++		if (version_menu == null) {+			return;+		}+		+		VersionList v = (!) version_menu;+		 +		if (!v.menu_visible) { 			return; 		} 		-		version_menu.draw_menu (cr);+		v.draw_menu (cr); 	} } diff --git a/libbirdfont/OverviewTools.vala b/libbirdfont/OverviewTools.valaindex b5bf30b..0c44523 100644--- a/libbirdfont/OverviewTools.vala+++ b/libbirdfont/OverviewTools.vala@@ -285,6 +285,8 @@ public class OverviewTools : ToolCollection  { 		} 		 		o.undo_items.add (ui);+		+		MainWindow.get_overview ().update_item_list (); 		GlyphCanvas.redraw (); 	} 	@@ -308,9 +310,16 @@ public class OverviewTools : ToolCollection  { 		GlyphRange gr; 		uint size; 		OverView overview;--		// All characters-		size = BirdFont.get_current_font ().length ();+		Font font;+		+		// All characters including .notdef+		font = BirdFont.get_current_font ();+		size = font.length ();+		+		if (!font.has_glyph (".notdef")) {+			size++;+		}+		 		all_glyphs.number = get_display_value (size); 		 		// Defaultdiff --git a/libbirdfont/Path.vala b/libbirdfont/Path.valaindex c5fdcc2..11e0f1b 100644--- a/libbirdfont/Path.vala+++ b/libbirdfont/Path.vala@@ -1,5 +1,5 @@ /*-	Copyright (C) 2012 2013 2014 2015 Johan Mattsson+	Copyright (C) 2012 - 2016 Johan Mattsson  	This library is free software; you can redistribute it and/or modify  	it under the terms of the GNU Lesser General Public License as @@ -14,6 +14,7 @@  using Cairo; using Math;+using SvgBird;  namespace BirdFont { @@ -67,7 +68,7 @@ public class Path : GLib.Object { 	 	private double path_stroke_width = 0; 	-	public LineCap line_cap = LineCap.BUTT;+	public SvgBird.LineCap line_cap = SvgBird.LineCap.BUTT; 	public PathList? full_stroke = null; 	PathList? fast_stroke = null; 	StrokeTask? stroke_creator;@@ -83,15 +84,9 @@ public class Path : GLib.Object { 	bool clockwise_direction = true;  	// Iterate over each pixel in a path-	public delegate bool RasterIterator (double x, double y, double step);-	+	public delegate bool RasterIterator (double x, double y, double step);	 	public delegate bool SegmentIterator (EditPoint start, EditPoint stop); 	-	/** The stroke of an outline when the path is not filled. */-	public static double stroke_width = 0;-	public static bool show_all_line_handles = true;-	public static bool fill_open_path {get; set;}-	 	public double rotation = 0; 	public double skew = 0; 	@@ -99,27 +94,14 @@ public class Path : GLib.Object { 	public bool highlight_last_segment = false; 	 	public string point_data = "";+	+	private static Text? arrow = null;  	public Color? color = null; 	public Color? stroke_color = null;- 	public Gradient? gradient = null;-	-	private static Text? arrow = null;  	public Path () {	-		string width;-		-		if (unlikely (stroke_width < 1)) {-			width = Preferences.get ("stroke_width");-			if (width != "") {-				stroke_width = double.parse (width);-			}-		}--		if (stroke_width < 1) {-			stroke_width = 1;-		} 	}  	public bool is_filled () {@@ -175,22 +157,6 @@ public class Path : GLib.Object { 		return points.size == 0; 	} -	public void draw_boundaries  (Context cr) {-		double x = Glyph.reverse_path_coordinate_x (xmin); -		double y = Glyph.reverse_path_coordinate_y (ymin);-		double x2 = Glyph.reverse_path_coordinate_x (xmax);-		double y2 = Glyph.reverse_path_coordinate_y (ymax);-		-		cr.save ();-		-		Theme.color (cr, "Default Background");-		cr.set_line_width (2);-		cr.rectangle (x, y, x2 - x, y2 - y);-		cr.stroke ();-		-		cr.restore ();-	}- 	public void draw_outline (Context cr) { 		unowned EditPoint? n = null; 		unowned EditPoint en;@@ -217,7 +183,7 @@ public class Path : GLib.Object { 			i++; 		} -		// close path+		// closed path 		if (!is_open () && n != null) { 			if (highlight_last_segment) { 				cr.stroke ();@@ -242,27 +208,28 @@ public class Path : GLib.Object { 		} 	} 	-	public void draw_edit_points (Context cr) {		-		if (is_editable ()) {-			// control points for curvature-			foreach (EditPoint e in points) {-				if (show_all_line_handles || e.selected_point || e.selected_handle > 0) {-					draw_edit_point_handles (e, cr);-				}-			}-						-			// control points-			foreach (EditPoint e in points) {-				draw_edit_point (e, cr);+	public void draw_control_points (Context cr) {		+		// control points for curvature+		foreach (EditPoint e in points) {+			if (CanvasSettings.show_all_line_handles +				|| e.selected_point+				|| e.selected_handle > 0) {+					+				draw_edit_point_handles (e, cr); 			} 		}+					+		// on curve control points+		foreach (EditPoint e in points) {+			draw_edit_point (e, cr);+		} 	}  	/** Add all control points for a path to the cairo context. 	 * Call Context.new_path (); before this method and Context.fill () 	 * to show the path. 	 */-	public void draw_path (Context cr, Glyph glyph, Color? color = null) {+	public void draw_path (Context cr, Color? color = null) { 		unowned EditPoint? n = null; 		unowned EditPoint en; 		unowned EditPoint em;@@ -274,8 +241,8 @@ public class Path : GLib.Object { 			return; 		} -		center_x = glyph.allocation.width / 2.0;-		center_y = glyph.allocation.height / 2.0;+		center_x = Glyph.xc ();+		center_y = Glyph.yc ();  		ex = center_x + points.get (0).x; 		ey = center_y - points.get (0).y;@@ -308,12 +275,6 @@ public class Path : GLib.Object { 		} else if (color != null) { 			c = (!) color; 			cr.set_source_rgba (c.r, c.g, c.b, c.a);-		} else {-			if (is_clockwise ()) {-				Theme.color_opacity (cr, "Selected Objects", 0.4);-			} else {-				Theme.color_opacity (cr, "Selected Objects", 0.8);-			}	 		} 	} @@ -350,12 +311,9 @@ public class Path : GLib.Object { 			cr.translate (x, y); 			double inverted_zoom = Glyph.ivz (); 			cr.rotate (-angle);-			cr.translate (-x, -y); -			+			cr.translate (-x, -y); 			cr.scale (inverted_zoom, inverted_zoom);-			 			arrow_icon.draw_at_baseline (cr, x, y);-			 			cr.restore (); 		} 	}@@ -389,7 +347,6 @@ public class Path : GLib.Object { 	} 		 	private static void draw_curve (EditPoint e, EditPoint en, Context cr, bool highlighted = false, double alpha = 1) {-		Glyph g = MainWindow.get_current_glyph (); 		double xa, ya, xb, yb, xc, yc, xd, yd; 		PointType t = e.get_right_handle ().type; 		PointType u = en.get_left_handle ().type;@@ -402,8 +359,6 @@ public class Path : GLib.Object { 			Theme.color (cr, "Highlighted Guide"); 		} 		-		cr.set_line_width (stroke_width / g.view_zoom);-		 		cr.line_to (xa, ya); // this point makes sense only if it is in the first or last position  		if (t == PointType.QUADRATIC || t == PointType.LINE_QUADRATIC || t == PointType.DOUBLE_CURVE || u == PointType.QUADRATIC || u == PointType.LINE_QUADRATIC || u == PointType.DOUBLE_CURVE) {@@ -469,7 +424,7 @@ public class Path : GLib.Object { 		get_line_points (e, en, out ax, out ay, out bx, out by); 		 		Theme.color (cr, "Handle Color");-		cr.set_line_width (1.7 * (stroke_width / g.view_zoom));+		cr.set_line_width (1.7 * (CanvasSettings.stroke_width / g.view_zoom));  		cr.line_to (ax, ay); 		cr.line_to (bx, by);@@ -599,7 +554,7 @@ public class Path : GLib.Object { 	public static void draw_control_point (Context cr, double x, double y, Color color, double size = 3.5) { 		Glyph g = MainWindow.get_current_glyph (); 		double ivz = 1 / g.view_zoom;-		double width = size * Math.sqrt (stroke_width) * ivz;+		double width = size * Math.sqrt (CanvasSettings.stroke_width) * ivz; 		double xc = g.allocation.width / 2.0; 		double yc = g.allocation.height / 2.0; @@ -822,17 +777,6 @@ public class Path : GLib.Object { 		new_path.highlight_last_segment = highlight_last_segment; 		 		return new_path;-	}	-	-	public bool is_over (double x, double y) {-		Glyph g = MainWindow.get_current_glyph ();-		-		x = x * Glyph.ivz () + g.view_offset_x - Glyph.xc ();-		y = y * Glyph.ivz () + g.view_offset_y - Glyph.yc ();--		y *= -1;-		-		return is_over_coordinate (x, y); 	} 	 	public bool is_over_coordinate (double x, double y) {@@ -994,6 +938,7 @@ public class Path : GLib.Object { 			points.add (p); 			p.prev = previous_point; 			p.next = previous_point.next;+			previous_point.next = p; 		} 		 		last_point = p;@@ -2266,12 +2211,6 @@ public class Path : GLib.Object { 		 		lines = pl; 		-		/** // FIXME: Check automatic orientation.-		foreach (Path p in pl.paths) {-			lines.add (SvgParser.get_lines (p));-		}-		*/-		 		foreach (Path p in lines.paths) { 			if (p.points.size > 1 && p != path  				&& path.boundaries_intersecting (p)) {diff --git a/libbirdfont/PathList.vala b/libbirdfont/PathList.valaindex 84bf7b4..a14e2c2 100644--- a/libbirdfont/PathList.vala+++ b/libbirdfont/PathList.vala@@ -12,6 +12,8 @@ 	Lesser General Public License for more details. */ +using SvgBird;+ namespace BirdFont {  public class PathList : GLib.Object {@@ -78,6 +80,20 @@ public class PathList : GLib.Object { 		 		return pl; 	}++	public void apply_style (SvgStyle style) {+		foreach (Path p in paths) {+			if (style.has_stroke ()) {+				p.stroke = style.get_stroke_width ();+			} else {+				p.stroke = 0;+			}+			+			p.line_cap = style.get_line_cap ();+			p.reset_stroke ();+			p.update_region_boundaries ();		+		}+	} }  }diff --git a/libbirdfont/PathObject.vala b/libbirdfont/PathObject.valanew file mode 100644index 0000000..f83d467--- /dev/null+++ b/libbirdfont/PathObject.vala@@ -0,0 +1,154 @@+/*+	Copyright (C) 2015 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using Cairo;+using SvgBird;++namespace BirdFont {++public class PathObject : SvgBird.Object {++	public Path path;+	+	public override double stroke {+		get {+			return path.stroke;+		}+		+		set {+			path.stroke = value;+		}+	}+++	// FIXME: flip y axis+	public override double xmin {+		get {+			return path.xmin;+		}++		set {+			path.xmin = value;+		}+		+		default = Glyph.CANVAS_MAX;+	}++	public override double xmax {+		get {+			return path.xmax;+		}++		set {+			path.xmax = value;+		}+		+		default = Glyph.CANVAS_MIN;+	}++	public override double ymin {+		get {+			return path.ymin;+		}++		set {+			path.ymin = value;+		}+		+		default = Glyph.CANVAS_MAX;+	}++	public override double ymax {+		get {+			return path.ymax;+		}++		set {+			path.ymax = value;+		}+		+		default = Glyph.CANVAS_MIN;+	}+		+	public PathObject () {+		base ();+		path = new Path ();+		update_region_boundaries ();+	}++	public PathObject.create_copy (PathObject p) {+		base.create_copy (p);+		path = p.path.copy ();+	}++	public PathObject.for_path (Path path) {+		base ();+		this.path = path;+	}++	public override bool is_over (double x, double y) {+		return path.is_over_coordinate (x, y);+	}+	+	public override void draw_outline (Context cr) {+		// drawing is handled in Glyph.draw_bird_font_paths+	}+	+	public void draw_path (Context cr) {+		path.draw_path (cr);+	}++	public static void draw_path_list (PathList pl, Context cr) {+		foreach (Path p in pl.paths) {+			p.draw_path (cr);+		}+	}+		+	public override void move (double dx, double dy) {+		path.move (dx, dy);+		path.reset_stroke ();+	}+	+	public Path get_path () {+		return path;+	}++	public override void update_region_boundaries () {+		path.update_region_boundaries ();+	}++	public override void rotate (double theta, double xc, double yc) {+		path.rotate (theta, xc, yc);+	}+	+	public override bool is_empty () {+		return path.points.size == 0;+	}+	+	public override void resize (double ratio_x, double ratio_y) {+		path.resize (ratio_x, ratio_y);+		path.reset_stroke ();+	}+	+	public override SvgBird.Object copy () {+		return new PathObject.create_copy (this);+	}++	public override string to_string () {+		return "PathObject";+	}++}++}diff --git a/libbirdfont/PenTool.vala b/libbirdfont/PenTool.valaindex c7a5ce4..00163ff 100644--- a/libbirdfont/PenTool.vala+++ b/libbirdfont/PenTool.vala@@ -765,8 +765,11 @@ public class PenTool : Tool { 			p.path.reset_stroke (); 		} 		-		foreach (Path path in g.active_paths) {-			path.reset_stroke ();+		foreach (Object path in g.active_paths) {+			if (path is PathObject) {+				PathObject p = (PathObject) path;+				p.get_path ().reset_stroke ();+			} 		} 	} 	@@ -1055,10 +1058,11 @@ public class PenTool : Tool { 				 				// don't use set point to reflective to on open ends 				reflective = true;-				foreach (Path path in MainWindow.get_current_glyph ().active_paths) {-					if (path.is_open () && path.points.size > 0) {-						if (selected_handle.parent == path.get_first_point ()	-							|| selected_handle.parent == path.get_last_point ()) {+				foreach (SvgBird.Object path in MainWindow.get_current_glyph ().active_paths) {+					if (path.is_open () && !path.is_empty () && path is PathObject) {+						Path p = ((PathObject) path).get_path ();+						if (selected_handle.parent == p.get_first_point ()	+							|| selected_handle.parent == p.get_last_point ()) { 							reflective = false; 						} 					}@@ -1229,7 +1233,10 @@ public class PenTool : Tool { 		 		if (active_edit_point != null) { 			glyph.clear_active_paths ();-			glyph.add_active_path (null, active_path);+			+			PathObject path = new PathObject.for_path (active_path);+			glyph.add_active_object (null, path);+			 			DrawingTools.update_stroke_settings (); 			 			if (KeyBindings.modifier != SHIFT) {@@ -1408,8 +1415,10 @@ public class PenTool : Tool {  			foreach (Path merge in paths) { 				if (merge.points.size > 0) {-					if (is_close_to_point (merge.points.get (merge.points.size - 1), px, py)) {-						glyph.add_active_path (null, merge);+					PathObject merged_path = new PathObject.for_path (merge);+					+					if (is_close_to_point (merge.points.get (merge.points.size - 1), px, py)) {	+						glyph.add_active_object (null, merged_path); 						active_path = merge; 						merge.reopen (); 						glyph.open_path ();@@ -1417,7 +1426,7 @@ public class PenTool : Tool { 					} 					 					if (is_close_to_point (merge.points.get (0), px, py)) {-						glyph.add_active_path (null, merge);+						glyph.add_active_object (null, merged_path); 						active_path = merge; 						clear_directions (); 						merge.reopen ();@@ -1453,7 +1462,9 @@ public class PenTool : Tool { 			force_direction (); 			 			glyph.clear_active_paths ();-			glyph.add_active_path (null, path);+			+			PathObject closed_path = new PathObject.for_path (path);+			glyph.add_active_object (null, closed_path); 			 			if (direction_changed) { 				path.reverse ();@@ -1492,11 +1503,12 @@ public class PenTool : Tool { 				} else { 					union = merge_open_paths (path, merge);  +					PathObject union_path = new PathObject.for_path (union); 					glyph.add_path (union); 					glyph.delete_path (path); 					glyph.delete_path (merge); 					glyph.clear_active_paths ();-					glyph.add_active_path (null, union);+					glyph.add_active_object (null, union_path); 					 					union.reopen (); 					union.create_list ();@@ -1777,13 +1789,19 @@ public class PenTool : Tool { 		active_edit_point = new_point.point; 		 		return_val_if_fail (glyph.active_paths.size > 0, new PointSelection.empty ());-		add_selected_point (selected_point, glyph.active_paths.get (glyph.active_paths.size - 1));--		active_path = new_point.path;-		glyph.clear_active_paths ();-		glyph.add_active_path (null, new_point.path);+		SvgBird.Object object = glyph.active_paths.get (glyph.active_paths.size - 1);+		+		if (object is PathObject) {		+			Path path = ((PathObject) object).get_path ();+			+			add_selected_point (selected_point, path); -		move_selected = true;+			active_path = new_point.path;+			glyph.clear_active_paths ();+			glyph.add_active_object (null, object);+		+			move_selected = true;+		} 		 		return new_point; 	}@@ -1819,6 +1837,7 @@ public class PenTool : Tool { 		EditPoint inserted; 		bool stroke = StrokeTool.add_stroke; 		Glyph g = MainWindow.get_current_glyph ();+		PathObject path; 		 		if (g.active_paths.size == 0) { 			np = new Path ();@@ -1826,7 +1845,8 @@ public class PenTool : Tool { 			np.stroke = stroke ? StrokeTool.stroke_width : 0; 			np.line_cap = StrokeTool.line_cap; 			-			g.add_active_path (null, np);+			path = new PathObject.for_path (np);+			g.add_active_object (null, path); 			 			active_path = np; 			selected_path = np;@@ -1852,7 +1872,8 @@ public class PenTool : Tool { 		}  		g.clear_active_paths ();-		g.add_active_path (null, np);+		path = new PathObject.for_path (np);+		g.add_active_object (null, path); 		active_path = np; 		selected_path = np; @@ -1903,7 +1924,7 @@ public class PenTool : Tool { 		Glyph g = MainWindow.get_current_glyph ();  		double distance_to_edit_point = g.view_zoom * get_distance_to_closest_edit_point (event_x, event_y); 		-		if (!Path.show_all_line_handles) {+		if (!CanvasSettings.show_all_line_handles) { 			foreach (PointSelection selected_corner in selected_points) { 				if (is_close_to_handle (selected_corner.point, event_x, event_y, distance_to_edit_point)) { 					return true;@@ -1973,7 +1994,7 @@ public class PenTool : Tool { 		 		foreach (Path p in g.get_paths_in_current_layer ()) { 			foreach (EditPoint ep in p.points) {-				if (ep.is_selected () || Path.show_all_line_handles) {+				if (ep.is_selected () || CanvasSettings.show_all_line_handles) { 					left = ep.get_left_handle (); 					right = ep.get_right_handle (); @@ -2062,7 +2083,8 @@ public class PenTool : Tool { 		selected_handle.selected = true; 		 		active_path = p.path;-		g.add_active_path (null, active_path);+		PathObject path = new PathObject.for_path (active_path);+		g.add_active_object (null, path); 	}  	public static void add_selected_point (EditPoint p, Path path) {diff --git a/libbirdfont/QuestionDialog.vala b/libbirdfont/QuestionDialog.valaindex cabe689..a5c39e6 100644--- a/libbirdfont/QuestionDialog.vala+++ b/libbirdfont/QuestionDialog.vala@@ -28,12 +28,12 @@ public class QuestionDialog : Dialog { 	double height = 0; 	 	public QuestionDialog (string message) {-		question = new TextArea (font_size);+		Color color = Theme.get_color ("Text Tool Box");+		question = new TextArea (font_size, color); 		question.min_width = 300; 		question.min_height = font_size; 		question.set_editable (false); 		question.draw_border = false;-		question.text_color = Theme.get_color ("Text Tool Box"); 		question.set_text (message); 		buttons = new Gee.ArrayList<Button> (); 	}diff --git a/libbirdfont/Renderer/CachedFont.vala b/libbirdfont/Renderer/CachedFont.valadeleted file mode 100644index d93368a..0000000--- a/libbirdfont/Renderer/CachedFont.vala+++ /dev/null@@ -1,99 +0,0 @@-/*-	Copyright (C) 2015 Johan Mattsson--	This library is free software; you can redistribute it and/or modify -	it under the terms of the GNU Lesser General Public License as -	published by the Free Software Foundation; either version 3 of the -	License, or (at your option) any later version.--	This library is distributed in the hope that it will be useful, but -	WITHOUT ANY WARRANTY; without even the implied warranty of -	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -	Lesser General Public License for more details.-*/--using Gee;--namespace BirdFont {-	-public class CachedFont : GLib.Object {-	public Font? font;--	public double top_limit {-		get { return _top_limit; }-		set { _top_limit = value; }-	}--	public double bottom_limit {-		get { return _bottom_limit; }-		set { _bottom_limit = value; }-	}-	-	public double base_line = 0;-	double _top_limit = 92.77; // FIXME: load before first glyph-	double _bottom_limit = -24.4;-	-	static FallbackFont fallback_font {-		get {-			if (_fallback_font == null) {-				_fallback_font = new FallbackFont ();-			}-			-			return (!) _fallback_font;-		}-	}-	static FallbackFont? _fallback_font = null;--	public CachedFont (Font? font) {-		Glyph? g;-		Glyph glyph;-		-		this.font = font;--		g = get_glyph_by_name ("a");-		if (g != null) {-			glyph = (!) g;-			base_line = glyph.baseline;-			top_limit = glyph.top_limit;-			bottom_limit = glyph.bottom_limit;-		} else {-			warning("No default chararacter found in font.");-		}-	}-	-	public Glyph? get_glyph_by_name (string name) {-		Glyph? g = null;-		Font f;-		Glyph glyph;-		-		if (font != null) {-			f = (!) font;-			g = f.get_glyph_by_name (name);-			-			if (g != null) {-				glyph = (!) g;-				glyph.top_limit = f.top_limit;-				glyph.baseline = f.base_line;-				glyph.bottom_limit = f.bottom_limit;-			}-		}-		-		if (g == null && name.char_count () == 1) {-			f = fallback_font.get_single_glyph_font (name.get_char (0));-			g = f.get_glyph_by_name (name);-			-			if (g == null) {-				return null;-			}-			-			glyph = (!) g;-			glyph.top_limit = f.top_limit;-			glyph.baseline = f.base_line;-			glyph.bottom_limit = f.bottom_limit;	-		}-		-		return g;-	}-}--}diff --git a/libbirdfont/Renderer/Drawing.vala b/libbirdfont/Renderer/Drawing.valadeleted file mode 100644index 2de5049..0000000--- a/libbirdfont/Renderer/Drawing.vala+++ /dev/null@@ -1,50 +0,0 @@-/*-	Copyright (C) 2014 Johan Mattsson--	This library is free software; you can redistribute it and/or modify -	it under the terms of the GNU Lesser General Public License as -	published by the Free Software Foundation; either version 3 of the -	License, or (at your option) any later version.--	This library is distributed in the hope that it will be useful, but -	WITHOUT ANY WARRANTY; without even the implied warranty of -	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -	Lesser General Public License for more details.-*/--namespace BirdFont {--/** Interface for creating drawing callbacks. */-[Compact]-[CCode (ref_function = "bird_font_drawing_ref", unref_function = "bird_font_drawing_unref")]-public class Drawing {-	-	public int iterator_refcount = 1;-		-	public Drawing () {-	}--	public void new_path (double x, double y) {-	}--	public void curve_to (double xb, double yb, double xc, double yc, double xd, double yd) {-	}--	public void close_path (double x, double y) {-	}--	public unowned Drawing @ref () {-		iterator_refcount++;-		return this;-	}-	-	public void unref () {-		if (--iterator_refcount == 0) {-			this.free ();-		}-	}-	-	private extern void free ();-}--}diff --git a/libbirdfont/Renderer/FallbackFont.vala b/libbirdfont/Renderer/FallbackFont.valadeleted file mode 100644index 539fe0b..0000000--- a/libbirdfont/Renderer/FallbackFont.vala+++ /dev/null@@ -1,337 +0,0 @@-/*-	Copyright (C) 2015 Johan Mattsson--	This library is free software; you can redistribute it and/or modify -	it under the terms of the GNU Lesser General Public License as -	published by the Free Software Foundation; either version 3 of the -	License, or (at your option) any later version.--	This library is distributed in the hope that it will be useful, but -	WITHOUT ANY WARRANTY; without even the implied warranty of -	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -	Lesser General Public License for more details.-*/--using Gee;--[SimpleType]-[CCode (has_type_id = false)]-public extern struct FcConfig {-}--[CCode (cname = "FcInitLoadConfigAndFonts")]-public extern FcConfig* FcInitLoadConfigAndFonts ();--[CCode (cname = "FcConfigAppFontAddDir")]-public extern string* FcConfigAppFontAddDir (FcConfig* config, string path);--[CCode (cname = "FcConfigSetSysRoot")]-public extern void FcConfigSetSysRoot (FcConfig* config, string path);--[CCode (cname = "FcConfigParseAndLoad")]-public extern bool FcConfigParseAndLoad (FcConfig* config, string path, bool complain);--[CCode (cname = "FcConfigSetCurrent")]-public extern void FcConfigSetCurrent (FcConfig* config);--[CCode (cname = "FcConfigCreate")]-public extern FcConfig* FcConfigCreate ();--[CCode (cname = "FcConfigFilename")]-public extern string FcConfigFilename (string path);--[CCode (cname = "find_font")]-public extern string? find_font (FcConfig* font_config, string characters);--[CCode (cname = "find_font_family")]-public extern string? find_font_family (FcConfig* font_config, string characters);--[CCode (cname = "find_font_file")]-public extern string? find_font_file (FcConfig* font_config, string font_name);--namespace BirdFont {--// TODO: use font config-public class FallbackFont : GLib.Object {-	Gee.ArrayList<File> font_directories;-	-	FontFace* default_font = null;-	public static FcConfig* font_config = null;-	static bool font_config_started = false;-	-	string default_font_file_name = "Roboto-Regular.ttf";-	string default_font_family_name = "Roboto";--	Gee.HashMap<unichar, CachePair> glyphs;-	Gee.ArrayList<CachePair> cached;--	public int max_cached_fonts = 300;-	-	string? default_font_file = null;-	-	public FallbackFont () {-		string home = Environment.get_home_dir ();-		font_directories = new Gee.ArrayList<File> ();--		if (!font_config_started) {-			font_config_started = true;-			-			IdleSource idle = new IdleSource ();-			idle.set_callback (() => {-				Task t = new Task (init_font_config);-				MainWindow.native_window.run_non_blocking_background_thread (t);-				return false;-			});-			idle.attach (null);-		}-		-		add_font_folder ("/usr/share/fonts/");-		add_font_folder ("/usr/local/share/fonts/");-		add_font_folder (home + "/.local/share/fonts");-		add_font_folder (home + "/.fonts");-		add_font_folder ("C:\\Windows\\Fonts");-		add_font_folder (home + "/Library/Fonts");-		add_font_folder ("/Library/Fonts");-		add_font_folder ("/Network/Library/Fonts");-		add_font_folder ("/System/Library/Fonts");-		add_font_folder ("/System Folder/Fonts");-		-		glyphs = new Gee.HashMap<unichar, CachePair> ();-		cached = new Gee.ArrayList<CachePair> ();-		-		open_default_font ();-	}-	-	~FallbackFont () {-		if (default_font != null) {-			close_font (default_font);-		}-	}--	public void init_font_config () {-		FcConfig* config;-		-#if MAC-		config = FcConfigCreate();-		-		string bundle = (!) BirdFont.get_settings_directory ().get_path ();-		FcConfigSetSysRoot(config, bundle);-	-		string path = FcConfigFilename((!) SearchPaths.search_file(null, "fontconfig.settings").get_path ());-		bool loaded = FcConfigParseAndLoad(config, path, true);-		-		if (!loaded) {-			warning ("Fontconfig initialization failed.");-		}-		-		FcConfigSetCurrent (config);-#else-		config = FcInitLoadConfigAndFonts ();-#endif--		IdleSource idle = new IdleSource ();-		-		idle.set_callback (() => {-			font_config = config;-			printd("Fontconfig loaded\n");-			return false;-		});-		idle.attach (null);-	}--	public Font get_single_glyph_font (unichar c) {-		Font f;-		unichar last; -		CachePair p;-		-		if (likely (glyphs.has_key (c))) {-			p = glyphs.get (c);-			-			if (p.referenced < int.MAX) {-				p.referenced++;-			}-			-			return p.font;-		}--		// remove glyphs from cache if it is full-		if (cached.size > max_cached_fonts - 100) {-			-			cached.sort ((a, b) => {-				CachePair pa = (CachePair) a;-				CachePair pb = (CachePair) b;-				return pb.referenced - pa.referenced;-			});-			-			int j = 0;-			for (int i = cached.size - 1; i > 0; i--) {-				if (j > 100) {-					break;-				}-				-				j++;-				-				last = cached.get (i).character;-				glyphs.unset (last);-				cached.remove_at (i);-			}-		}-				-		f = get_single_fallback_glyph_font (c);-		p = new CachePair (f, c);-		-		glyphs.set (c, p);-		cached.add (p);-		-		return (Font) f;-	}--	Font get_single_fallback_glyph_font (unichar c) {-		string? font_file;-		BirdFontFile bf_parser;-		Font bf_font;-		StringBuilder? glyph_data;-		FontFace* font;--		bf_font = new Font ();-		font_file = null;-		glyph_data = null;--		// don't use fallback font in private use area-		if (0xe000 <= c <= 0xf8ff) {-			return bf_font;-		}-		-		// control characters-		if (c <= 0x001f || (0x007f <= c <= 0x008d)) {-			return bf_font;-		}-		-		// check if glyph is available in roboto-		if (default_font != null) {-			glyph_data = get_glyph_in_font ((!) default_font, c);-		}-				-		// use fontconfig to find a fallback font-		if (glyph_data == null) {-			font_file = find_font (font_config, (!) c.to_string ());-			if (font_file != null) {-				font = open_font ((!) font_file);-				glyph_data = get_glyph_in_font (font, c);-				close_font (font);-			}-		}-		-		if (glyph_data != null) {-			bf_parser = new BirdFontFile (bf_font);-			bf_parser.load_data (((!) glyph_data).str);-		}--		return bf_font;		-	}--	public StringBuilder? get_glyph_in_font (FontFace* font, unichar c) {-		StringBuilder? glyph_data = null;-		GlyphCollection gc;--		gc = new GlyphCollection (c, (!)c.to_string ());		-		glyph_data = load_glyph (font, (uint) c);--		return glyph_data;-	}-	-	void add_font_folder (string f) {-		File folder = File.new_for_path (f);-		FileInfo? file_info;-		string fn;-		string file_attributes;-		try {-			if (folder.query_exists ()) {-				font_directories.add (folder);-				-				file_attributes = FileAttribute.STANDARD_NAME;-				file_attributes += ",";-				file_attributes += FileAttribute.STANDARD_TYPE;-				var enumerator = folder.enumerate_children (file_attributes, 0);-				-				while ((file_info = enumerator.next_file ()) != null) {-					fn = ((!) file_info).get_name ();--					if (((!)file_info).get_file_type () == FileType.DIRECTORY) {-						add_font_folder ((!) get_child (folder, fn).get_path ());-					}-				}-			}-		} catch (GLib.Error e) {-			warning (e.message);-		}-	}--	File search_font_file (string font_file) {-		File d, f;-		-		for (int i = font_directories.size - 1; i >= 0; i--) {-			d = font_directories.get (i);-			f = get_child (d, font_file);-			-			if (f.query_exists ()) {-				return f;-			}-		}-		-		warning (@"The font $font_file not found");-		return File.new_for_path (font_file);-	}--	public string? get_default_font_file () {-		File font_file;-		string? fn = null;-		-		if (likely (default_font_file != null)) {-			return default_font_file;-		}-		-		font_file = SearchPaths.search_file (null, default_font_file_name);-		-		if (font_file.query_exists ()) {-			fn = (!) font_file.get_path ();-		} else {-			font_file = search_font_file (default_font_file_name);-	-			if (font_file.query_exists ()) {-				fn = (!) font_file.get_path ();-			} else {-				fn = find_font_file (font_config, default_font_family_name);-			}-		}-			-		if (likely (fn != null)) {-			default_font_file = fn;-			return fn;-		}-		-		warning(default_font_family_name + " not found");-		return null;-	}-	-	void open_default_font () {-		string? fn = get_default_font_file ();-		-		if (fn != null) {-			default_font = open_font ((!) fn);-		}-	}-	-	class CachePair : GLib.Object {-		public Font font;-		public unichar character;-		public int referenced = 1;-		-		public CachePair (Font f, unichar c) {-			font = f;-			character = c;-		}-	}-}--}diff --git a/libbirdfont/Renderer/FontCache.vala b/libbirdfont/Renderer/FontCache.valadeleted file mode 100644index 5bf2fa3..0000000--- a/libbirdfont/Renderer/FontCache.vala+++ /dev/null@@ -1,83 +0,0 @@-/*-	Copyright (C) 2014 Johan Mattsson--	This library is free software; you can redistribute it and/or modify -	it under the terms of the GNU Lesser General Public License as -	published by the Free Software Foundation; either version 3 of the -	License, or (at your option) any later version.--	This library is distributed in the hope that it will be useful, but -	WITHOUT ANY WARRANTY; without even the implied warranty of -	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -	Lesser General Public License for more details.-*/--using Gee;--namespace BirdFont {--/** Thread specific font cache. */	-public class FontCache {	-	public static FallbackFont fallback_font;-	-	static FontCache? default_cache = null;-	Gee.HashMap<string, CachedFont> fonts;-	CachedFont fallback;-	-	public FontCache () {-		if (is_null (fallback_font)) {-			fallback_font = new FallbackFont ();-		}-		-		fallback = new CachedFont (null);-		fonts = new Gee.HashMap<string, CachedFont> ();-	}-	-	public CachedFont get_font (string file_name) {-		CachedFont c;-		Font f;-		bool ok;--		if (file_name == "") {-			return fallback;-		}-		-		if (fonts.has_key (file_name)) {-			c = fonts.get (file_name);-			return c;-		}-		-		f = new Font ();-		f.set_file (file_name);-		ok = f.load ();-		if (!ok) {-			stderr.printf ("Can't load %s\n", file_name);-			return new CachedFont (null);-		}-		-		c = new CachedFont (f);-		-		if (file_name == "") {-			warning ("No file.");-			return c;-		}-		-		fonts.set (file_name, c);-		return c;-	}--	public static FontCache get_default_cache () {-		if (default_cache == null) {-			default_cache = new FontCache ();-		}-		-		return (!) default_cache;-	}--	public CachedFont get_fallback () {-		return fallback;-	}--}--}diff --git a/libbirdfont/Renderer/LineTextArea.vala b/libbirdfont/Renderer/LineTextArea.valadeleted file mode 100644index 24b8f11..0000000--- a/libbirdfont/Renderer/LineTextArea.vala+++ /dev/null@@ -1,33 +0,0 @@-/*-	Copyright (C) 2014 Johan Mattsson--	This library is free software; you can redistribute it and/or modify -	it under the terms of the GNU Lesser General Public License as -	published by the Free Software Foundation; either version 3 of the -	License, or (at your option) any later version.--	This library is distributed in the hope that it will be useful, but -	WITHOUT ANY WARRANTY; without even the implied warranty of -	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -	Lesser General Public License for more details.-*/--using Cairo;-using Math;--namespace BirdFont {--public class LineTextArea : TextArea {--	public LineTextArea (double size) {-		base (size);-		-		single_line = true;-		min_height = size;-		height = min_height;-		-		layout ();-	}-}--}diff --git a/libbirdfont/Renderer/Text.vala b/libbirdfont/Renderer/Text.valadeleted file mode 100644index ae9c5be..0000000--- a/libbirdfont/Renderer/Text.vala+++ /dev/null@@ -1,584 +0,0 @@-/*-	Copyright (C) 2014 2015 Johan Mattsson--	This library is free software; you can redistribute it and/or modify -	it under the terms of the GNU Lesser General Public License as -	published by the Free Software Foundation; either version 3 of the -	License, or (at your option) any later version.--	This library is distributed in the hope that it will be useful, but -	WITHOUT ANY WARRANTY; without even the implied warranty of -	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -	Lesser General Public License for more details.-*/--using Cairo;-using Math;--namespace BirdFont {-	-/** Test implementation of a birdfont rendering engine. */-public class Text : Widget {-	FontCache font_cache;-	public CachedFont cached_font;-	-	Surface? cache = null;-	-	public string text;-	-	private bool use_cache = true;-	-	GlyphSequence glyph_sequence {-		get {-			if (gs == null) {-				gs = generate_glyphs ();-			}-			-			return (!) gs;-		}-	}-	-	Gee.ArrayList<string> glyph_names;-	GlyphSequence? gs = null;-	-	public delegate void Iterator (Glyph glyph, double kerning, bool last);-	public double font_size;-	double sidebearing_extent = 0;--	public double r = 0;-	public double g = 0;-	public double b = 0;-	public double a = 1;-	double truncated_width = -1;-	-	double margin_left = 0;-	-	public Text (string text = "", double size = 17, double margin_bottom = 0) {-		this.margin_bottom = margin_bottom;-		font_cache = FontCache.get_default_cache ();-		cached_font = font_cache.get_fallback ();-		-		set_text (text);-		set_font_size (size);-	}-	-	public void set_use_cache (bool cache) {-		use_cache = cache;-	}-	-	public string get_text () {-		return text;-	}-	-	/** Set font for this text area.-	 * @param font_absolute path to the font file or a file name for one of the font files in search paths.-	 * @return true if the font was found-	 */-	public bool load_font (string font_file) {-		File path;-		File f;-		FontCache fc;-		-		f = File.new_for_path (font_file);-		path = (f.query_exists ()) ? f : SearchPaths.find_file (null, font_file);-		-		fc = FontCache.get_default_cache ();-		cached_font = fc.get_font ((!) path.get_path ());-		gs = generate_glyphs ();-		-		return cached_font.font != null;-	}-	-	public void set_font_size (double height_in_pixels) {-		font_size = height_in_pixels;-		sidebearing_extent = 0;-		-		if (gs == null) { // ensure height is loaded for the font-			gs = generate_glyphs ();-		}-	}--	public void set_font_cache (FontCache font_cache) {-		this.font_cache = font_cache;-	}-	-	public void set_text (string text) {	-		this.text = text;-		gs = null;-		sidebearing_extent = 0;-		cache = null;-	}--	private GlyphSequence generate_glyphs () {-		int index;-		unichar c;-		string name;-		Glyph? g;-		GlyphSequence gs;-		-		gs = new GlyphSequence ();-		-		glyph_names = new Gee.ArrayList<string> ();-		index = 0;-		while (text.get_next_char (ref index, out c)) {-			name = (!) c.to_string ();-			g = cached_font.get_glyph_by_name (name);-			-			gs.glyph.add (g);-			glyph_names.add (name);-		}-		-		return gs;-	}--	public void iterate (Iterator iter) {-		Glyph glyph;-		double w, kern;-		int wi;-		Glyph? prev;-		Glyph? g;-		GlyphSequence word_with_ligatures;-		GlyphRange? gr_left, gr_right;-		GlyphSequence word;-		KerningClasses kc;-		Font empty = Font.empty;-		-		glyph = new Glyph.no_lines ("", '\0');--		w = 0;-		prev = null;-		kern = 0;-	-		word = glyph_sequence;-		wi = 0;-	-		if (cached_font.font != null) {-			word_with_ligatures = word.process_ligatures ((!) cached_font.font);-		} else {-			word_with_ligatures = word.process_ligatures (new Font ());-		}-		-		gr_left = null;-		gr_right = null;-		-		if (cached_font.font != null) {-			kc = ((!) cached_font.font).get_kerning_classes ();-		} else {-			kc = new KerningClasses (empty);-		}	--		if (word_with_ligatures.glyph.size > 0) {-			g = word_with_ligatures.glyph.get (0);-			if (g != null) {-				margin_left = ((!) g).get_left_side_bearing ();-				-				if (margin_left < 0) {-					margin_left = -margin_left;-				} else {-					margin_left = 0;-				}-			}-		}-		-		for (int i = 0; i < word_with_ligatures.glyph.size; i++) {-			g = word_with_ligatures.glyph.get (i);-			-			if (g == null || prev == null || wi == 0) {-				kern = 0;-			} else {-				return_if_fail (wi < word_with_ligatures.ranges.size);-				return_if_fail (wi - 1 >= 0);-				-				gr_left = word_with_ligatures.ranges.get (wi - 1);-				gr_right = word_with_ligatures.ranges.get (wi);--				kern = kc.get_kerning_for_pair (((!) prev).get_name (), ((!) g).get_name (), gr_left, gr_right);-			}-				-			// process glyph-			if (g == null && (0 <= i < glyph_names.size)) {-				g = cached_font.get_glyph_by_name (glyph_names.get (i));-			}-			-			glyph = (g == null) ? new Glyph ("") : (!) g;-			iter (glyph, kern, i + 1 == word_with_ligatures.glyph.size);			-			prev = g;-			wi++;-		}-	}--	// FIXME: some fonts doesn't have on curve extrema-	public double get_extent () {-		double x = 0;-		-		iterate ((glyph, kerning, last) => {-			double x1, y1, x2, y2;-			double lsb;-			-			lsb = glyph.left_limit;-			-			if (!last) {-				x += (glyph.get_width () + kerning) * get_scale (glyph);-			} else {-				glyph.boundaries (out x1, out y1, out x2, out y2);-				x += (x2 - lsb) * get_scale (glyph);-			}-		});-		-		return x;-	}--	public double get_sidebearing_extent () {-		double x ;-		-		if (likely (sidebearing_extent > 0)) {-			return sidebearing_extent;-		}-		-		x = 0;-		-		iterate ((glyph, kerning, last) => {-			double lsb;-			lsb = glyph.left_limit;-			x += (glyph.get_width () + kerning) * get_scale (glyph);-		});-		-		sidebearing_extent = x;-		return x;-	}--	public override double get_height () {-		return font_size;-	}-	-	public double get_acender () {-		double max_height = 0;-		-		iterate ((glyph, kerning, last) => {-			double x1, y1, x2, y2;-			double h;-			glyph.boundaries (out x1, out y1, out x2, out y2);-			h = Math.fmax (y1, y2) - Math.fmin (y1, y2);-			h *= get_scale (glyph) - glyph.baseline * get_scale (glyph);-			if (h > max_height) {-				max_height = h;-			}-		});-		-		return max_height;-	}	--	public override double get_width () {-		double x = 0;-		bool first = true;-		-		iterate ((glyph, kerning, last) => {-			double x1, y1, x2, y2;-			double lsb;-			-			lsb = glyph.left_limit;-			-			if (first) {-				glyph.boundaries (out x1, out y1, out x2, out y2);-				x += (glyph.get_width () + kerning - Math.fmin (x1, x2)) * get_scale (glyph);-				first = false;-			} else if (!last) {-				x += (glyph.get_width () + kerning) * get_scale (glyph);-			} else {-				glyph.boundaries (out x1, out y1, out x2, out y2);-				x += (x2 - lsb) * get_scale (glyph);-			}-		});-		-		return x;-	}--	public double get_decender () {-		double decender_max = get_max_decender ();-		return decender_max > 0 ? decender_max : 0; -	}		--	private double get_max_decender () {-		double decender = 0;-		double decender_max = 0;-		-		iterate ((glyph, kerning, last) => {-			double x1, y1, x2, y2;-			double y;-			glyph.boundaries (out x1, out y1, out x2, out y2);-			y = Math.fmin (y1, y2);-			decender = (glyph.baseline - y) * get_scale (glyph);-			if (decender > decender_max) {-				decender_max = decender;-			}-		});-		-		return decender_max; -	}-		-	public override void draw (Context cr) {-		double descender = cached_font.bottom_limit + cached_font.base_line;-		double y = widget_y + get_height () + get_font_scale () * descender; // FIXME:-		draw_at_baseline (cr, widget_x, y);-	}-	-	public void draw_at_top (Context cr, double px, double py, string cacheid = "") {-		double s = get_font_scale ();-		double y = py + s * (cached_font.top_limit - cached_font.base_line);-		draw_at_baseline (cr, px, y, cacheid);-	}-	-	public void set_source_rgba (double r, double g, double b, double a) {-		if (this.r != r || -			this.g != g || -			this.b != b || -			this.a != a) {-		-			this.r = r;-			this.g = g;-			this.b = b;-			this.a = a;-			cache = null;-		}-	}-	-	public string get_cache_id (int offset_x, int offset_y) {-		string key;-		int64 c;-		-		c = (((int64) (r * 255)) << 24)-			| (((int64) (g * 255)) << 16)-			| (((int64) (b * 255)) << 8)-			| (((int64) (a * 255)) << 0);-		-		// FIXME: use binary key-		key = @"$font_size $c $offset_x $offset_y";-		-		return key;-	}-	-	public void draw_at_baseline (Context cr, double px, double py, string cacheid = "") {-		if (cache == null) {-			cache = draw_on_cache_surface (cacheid);-		}-		-		double screen_scale = Screen.get_scale ();-		double font_scale = get_font_scale ();-		double cache_y = py - font_scale * (cached_font.top_limit - cached_font.base_line);--		cr.save();-		cr.scale (1 / screen_scale, 1 / screen_scale);-		double scaled_x = (px - margin_left) * screen_scale;-		double scaled_y = cache_y * screen_scale;-		cr.set_source_surface ((!) cache, (int) rint (scaled_x), (int) rint (scaled_y));-		cr.paint ();-		cr.restore();-	}-	-	Surface draw_on_cache_surface (string cacheid) {-		double y;-		double ratio;-		double cc_y;-		Context cr;-		Surface cache_surface;-		double screen_scale = Screen.get_scale();-		double h = font_size * screen_scale + 1;--		ratio = get_font_scale ();-		cc_y = (cached_font.top_limit - cached_font.base_line) * ratio;--		// double x = margin_left * ratio;-		double x = 0;-		double w = get_sidebearing_extent () * screen_scale + x + margin_left + 1;-		-		cache_surface = Screen.create_background_surface ((int) w, (int) h);-		cr = new Context (cache_surface);-		cr.scale (screen_scale, screen_scale);--		y = cc_y;--		if (unlikely (cached_font.base_line != 0)) {-			warning ("Base line not zero.");-		}-		-		iterate ((glyph, kerning, last) => {-			double end;-			-			x += kerning * ratio;-			end = x + glyph.get_width () * ratio;-			-			// truncation-			if (truncated_width > 0 && end > truncated_width) {-				return;-			}--			if (use_cache) {-				draw_chached (cr, glyph, kerning, last, x, y, cc_y, -					ratio, cacheid);-			} else {-				draw_without_cache (cr, glyph, kerning, last, x, y, cc_y, ratio);-			}-			-			x = end;-		});-		-		return cache_surface;-	}--	void draw_without_cache (Context cr, Glyph glyph, double kerning, bool last, -		double x, double y, double cc_y, double ratio) {-	-		double lsb;-		-		cr.save ();-		cr.set_source_rgba (r, g, b, a);-		cr.new_path ();--		lsb = glyph.left_limit;--		foreach (Path path in glyph.get_visible_paths ()) {-			draw_path (cr, glyph, path, lsb, x, y, ratio);-		}--		cr.fill ();-		cr.restore ();-		-	}-		-	void draw_chached (Context cr, Glyph glyph, double kerning, bool last, -		double x, double y, double cc_y, double ratio,-		string cacheid = "") {-		-		double lsb;-		Surface cache;-		Surface cached_glyph;-		Context cc;-		string cache_id;-		double glyph_margin_left = glyph.get_left_side_bearing ();-		-		if (glyph_margin_left < 0) {-			glyph_margin_left = -glyph_margin_left;-		} else {-			glyph_margin_left = 0;-		}-		-		double xp = (x - glyph_margin_left * ratio) * Screen.get_scale ();-		double yp = (y - cc_y) * Screen.get_scale ();-		int offset_x, offset_y;--		offset_x = (int) (10 * (xp - (int) xp));-		offset_y = (int) (10 * (yp - (int) yp));-		-		cache_id = (cacheid == "") ? get_cache_id (offset_x, offset_y) : cacheid;-				-		if (!glyph.has_cache (cache_id)) {-			int w = (int) ((2 * glyph_margin_left * ratio + glyph.get_width ()) * ratio) + 2;-			int h = (int) font_size + 2;-			cache = Screen.create_background_surface (w, h);-			cc = new Context (cache);-			-			cc.scale(Screen.get_scale (), Screen.get_scale ());-			-			lsb = glyph.left_limit - glyph_margin_left;--			cc.save ();-			cc.set_source_rgba (r, g, b, a);-			cc.new_path ();--			foreach (Path path in glyph.get_visible_paths ()) {-				draw_path (cc, glyph, path, lsb, glyph_margin_left * ratio + offset_x / 10.0, cc_y + offset_y / 10.0, ratio);-			}-			-			cc.fill ();-			cc.restore ();--			if (use_cache) {-				glyph.set_cache (cache_id, cache);-			}-			-			cached_glyph = cache;-		} else {-			cached_glyph = glyph.get_cache (cache_id);-		}--		cr.save ();-		cr.set_antialias (Cairo.Antialias.NONE);-		cr.scale(1 / Screen.get_scale (), 1 / Screen.get_scale ());-		cr.set_source_surface (cached_glyph,-			(int) xp,-			(int) yp);-		cr.paint ();-		cr.restore ();-	}-	-	void draw_path (Context cr, Glyph glyph, Path path,-		double lsb, double x, double y, double scale) {-			-		EditPoint e, prev;-		double xa, ya, xb, yb, xc, yc, xd, yd;-		double by;-		double s = get_scale (glyph);-		-		if (path.points.size > 0) {-			if (unlikely (path.is_open ())) {-				warning (@"Path is open in $(glyph.get_name ()).");-			}-			-			//path.add_hidden_double_points (); // FIXME: this distorts shapes-				-			prev = path.points.get (path.points.size - 1);-			xa = (prev.x - lsb) * s + x;-			ya = y - prev.y * s;-			cr.move_to (xa, ya);-			-			by = (y - cached_font.base_line * s);-			for (int i = 0; i < path.points.size; i++) {-				e = path.points.get (i).copy ();-				-				PenTool.convert_point_segment_type (prev, e, PointType.CUBIC);-				-				xb = (prev.get_right_handle ().x - lsb) * s + x;-				yb = by - prev.get_right_handle ().y * s;--				xc = (e.get_left_handle ().x - lsb) * s + x;-				yc = by - e.get_left_handle ().y * s;-					-				xd = (e.x - lsb) * s + x;-				yd = by - e.y * s;--				cr.curve_to (xb, yb, xc, yc, xd, yd);-				cr.line_to (xd, yd);-				-				prev = e;-			}-		}-	}--	public double get_baseline_to_bottom (Glyph g) {-		return get_scale (g) * (-g.baseline - g.bottom_limit);-	}--	public double get_scale (Glyph g) {-		double s = g.top_limit - g.bottom_limit;-		-		if (s == 0) {-			s = cached_font.top_limit - cached_font.bottom_limit;-		}-		-		return font_size / s;-	}--	public double get_font_scale () {-		return font_size / (cached_font.top_limit - cached_font.bottom_limit);-	}--	public double get_baseline_to_bottom_for_font () {-		return get_font_scale () * (-cached_font.base_line - cached_font.bottom_limit);-	}-	-	public void truncate (double max_width) {-		truncated_width = max_width;-	}-}--}diff --git a/libbirdfont/Renderer/TextArea.vala b/libbirdfont/Renderer/TextArea.valadeleted file mode 100644index 797c52c..0000000--- a/libbirdfont/Renderer/TextArea.vala+++ /dev/null@@ -1,1665 +0,0 @@-/*-	Copyright (C) 2014 Johan Mattsson--	This library is free software; you can redistribute it and/or modify -	it under the terms of the GNU Lesser General Public License as -	published by the Free Software Foundation; either version 3 of the -	License, or (at your option) any later version.--	This library is distributed in the hope that it will be useful, but -	WITHOUT ANY WARRANTY; without even the implied warranty of -	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -	Lesser General Public License for more details.-*/--using Cairo;-using Math;--namespace BirdFont {--public class TextArea : Widget {-	-	public double min_width = 500;-	public double min_height = 100;-	public double font_size;-	public double padding = 3.3;-	public bool single_line = false;-	public Color text_color = Color.black ();-	-	public bool draw_carret {-		get { return carret_is_visible; }-		set { -			carret_is_visible = value; -			if (!value) {-				update_selection = false;-				selection_end = carret.copy ();-			}-		}-	}-	public bool carret_is_visible = false;-	public bool draw_border = true;--	public double width;-	public double height;-	-	Carret carret = new Carret ();-	Carret selection_end = new Carret ();-	bool update_selection = false;-	public bool show_selection = false;-	-	public signal void scroll (double pixels);-	public signal void text_changed (string text);-	public signal void enter (string text);-	-	Gee.ArrayList<Paragraph> paragraphs = new Gee.ArrayList<Paragraph>  ();-	private static const int DONE = -2; -	-	int last_paragraph = 0;-	string text;-	int text_length;-	-	Gee.ArrayList<TextUndoItem> undo_items = new Gee.ArrayList<TextUndoItem> ();-	Gee.ArrayList<TextUndoItem> redo_items = new Gee.ArrayList<TextUndoItem> ();-	-	bool store_undo_state_at_next_event = false;-	-	public bool editable;-	-	public TextArea (double font_size = 20, Color? c = null) {-		this.font_size = font_size;-		width = min_width;-		height = min_height;-		editable = true;-		-		if (c != null) {-			text_color = (!) c;-		}-	}--	public override void focus (bool focus) {-		draw_carret = focus;-	}--	public override double get_height () {-		return height + 2 * padding;-	}--	public override double get_width () {-		return width + 2 * padding;-	}--	public void set_font_size (double z) {-		font_size = z;-	}-	-	bool generate_paragraphs () {-		Paragraph paragraph;--		int next_paragraph = -1;-		-		if (is_null (text)) {-			warning ("No text");-			return false;-		}-		-		if (last_paragraph == DONE) {-			return false;-		}-	-		next_paragraph = text.index_of ("\n", last_paragraph);-		-		if (next_paragraph == -1) {-			paragraph = new Paragraph (text.substring (last_paragraph), font_size, paragraphs.size, text_color);-			paragraphs.add (paragraph);-			last_paragraph = DONE;-		} else {-			next_paragraph +=  "\n".length;-			paragraph = new Paragraph (text.substring (last_paragraph, next_paragraph - last_paragraph), font_size, paragraphs.size, text_color);-			paragraphs.add (paragraph);-			last_paragraph = next_paragraph;-		}-		-		return last_paragraph != DONE;-	}-	-	void generate_all_paragraphs () {-		while (generate_paragraphs ()) {-		}-	}-	-	public override void key_press (uint keyval) {-		unichar c;-		TextUndoItem ui;-		-		if (!editable) {-			return;-		}-		-		c = (unichar) keyval;-		-		switch (c) {-			case ' ':-				store_undo_edit_state ();-				add_character (keyval);-				break;-			case 'a':-				if (KeyBindings.has_ctrl () || KeyBindings.has_logo ()) {-					select_all ();-				} else {-					add_character (keyval);-				}-				break;-			case 'c':-				if (KeyBindings.has_ctrl () || KeyBindings.has_logo ()) {-					ClipTool.copy_text (this);-				} else {-					add_character (keyval);-				}-				break;-			case 'v':-				if (KeyBindings.has_ctrl () || KeyBindings.has_logo ()) {-					ClipTool.paste_text (this);-					store_undo_state_at_next_event = true;-				} else {-					add_character (keyval);-				}-				break;-			case 'y':-				if (KeyBindings.has_ctrl () || KeyBindings.has_logo ()) {-					redo ();-				} else {-					add_character (keyval);-				}-				break;-			case 'z':-				if (KeyBindings.has_ctrl () || KeyBindings.has_logo ()) {-					undo ();-				} else {-					add_character (keyval);-				}-				break;-			case Key.RIGHT:-				check_selection ();-				move_carret_next ();-				break;-			case Key.LEFT:-				check_selection ();-				move_carret_previous ();-				break;-			case Key.DOWN:-				check_selection ();-				move_carret_next_row ();-				break;-			case Key.UP:-				check_selection ();-				move_carret_previous_row ();-				break;-			case Key.END:-				check_selection ();-				move_carret_to_end_of_line ();-				break;-			case Key.HOME:-				check_selection ();-				move_carret_to_beginning_of_line ();-				break;-			case Key.BACK_SPACE:-				if (has_selection ()) {-					ui = delete_selected_text ();-					undo_items.add (ui);-					redo_items.clear ();-					store_undo_state_at_next_event = true;-				} else {-					ui = remove_last_character ();-					undo_items.add (ui);-					redo_items.clear ();-					store_undo_state_at_next_event = true;-				}-				text_changed (get_text ());-				break;-			case Key.ENTER:-				store_undo_edit_state ();-				insert_text ("\n");-				-				if (single_line) {-					enter (get_text ());-				}-				break;-			case Key.DEL:-				if (has_selection ()) {-					ui = delete_selected_text ();-					undo_items.add (ui);-					redo_items.clear ();-					store_undo_state_at_next_event = true;-				} else {-					ui = remove_next_character ();-					undo_items.add (ui);-					redo_items.clear ();-					store_undo_state_at_next_event = true;-				}-				text_changed (get_text ());-				break;		-			default:-				if (!KeyBindings.has_ctrl () && !KeyBindings.has_logo ()) {-					add_character (keyval);-				} -				break;-		}-			-		GlyphCanvas.redraw ();-	}-	-	void check_selection () {-		if (!has_selection () && KeyBindings.has_shift ()) {-			show_selection = true;-			selection_end = carret.copy ();-		}-		-		if (!KeyBindings.has_shift ()) {-			show_selection = false;-		}-	}-	-	private void add_character (uint keyval) {-		unichar c = (unichar) keyval;-		string s;--		if (!is_modifier_key (keyval) -			&& !KeyBindings.has_ctrl ()-			&& !KeyBindings.has_alt ()) {-			-			s = (!) c.to_string ();		-			-			if (s.validate ()) {				-				if (store_undo_state_at_next_event) {-					store_undo_edit_state ();-					store_undo_state_at_next_event = false;-				}-				-				insert_text (s);-			}-		}-	}--	Paragraph get_current_paragraph () {-		Paragraph p;-		-		if (unlikely (!(0 <= carret.paragraph < paragraphs.size))) {-			warning (@"No paragraph, index: $(carret.paragraph), size: $(paragraphs.size)");-			p = new Paragraph ("", 0, 0, text_color);-			paragraphs.add (p);-			return p;-		}-		-		p = paragraphs.get (carret.paragraph);-		return p;-	}--	public void set_text (string t) {-		int tl;-		-		if (single_line) {-			text = t.replace ("\n", "").replace ("\r", "");-		} else {-			text = t;-		}-		-		tl = t.length;		-		text_length += tl;-		-		paragraphs.clear ();-		generate_paragraphs ();-		-		return_if_fail (paragraphs.size != 0);-		-		carret.paragraph = paragraphs.size - 1;-		carret.character_index = paragraphs.get (paragraphs.size - 1).text.length;-		selection_end = carret.copy ();-		show_selection = false;-		-		text_changed (get_text ());-	}-	-	Carret get_selection_start () {-		if (carret.paragraph == selection_end.paragraph) {-			return carret.character_index < selection_end.character_index ? carret : selection_end;-		}-		-		return carret.paragraph < selection_end.paragraph ? carret : selection_end;	-	}--	Carret get_selection_stop () {-		if (carret.paragraph == selection_end.paragraph) {-			return carret.character_index > selection_end.character_index ? carret : selection_end;-		}-		-		return carret.paragraph > selection_end.paragraph ? carret : selection_end;		-	}-		-	public string get_selected_text () {-		Carret selection_start, selection_stop;-		int i;-		Paragraph pg;-		StringBuilder sb;-		-		sb = new StringBuilder ();-		-		if (!has_selection ()) {-			return "".dup ();-		}-		-		selection_start = get_selection_start ();-		selection_stop = get_selection_stop ();-		-		if (selection_start.paragraph == selection_stop.paragraph) {-			pg = paragraphs.get (selection_start.paragraph);-			return pg.text.substring (selection_start.character_index, selection_stop.character_index - selection_start.character_index);-		}-		-		pg = paragraphs.get (selection_start.paragraph);-		sb.append (pg.text.substring (selection_start.character_index));-		-		for (i = selection_start.paragraph + 1; i < selection_stop.paragraph; i++) {-			return_val_if_fail (0 <= i < paragraphs.size, "".dup ());-			pg = paragraphs.get (i);-			sb.append (pg.text);-		}--		pg = paragraphs.get (selection_stop.paragraph);-		sb.append (pg.text.substring (0, selection_stop.character_index));-				-		return sb.str;-	}-	-	public void select_all () {-		while (last_paragraph != DONE) {-			generate_paragraphs ();-		}-			-		if (paragraphs.size > 0) {-			carret.paragraph = 0;-			carret.character_index = 0;-			selection_end.paragraph = paragraphs.size - 1;-			selection_end.character_index = paragraphs.get (paragraphs.size - 1).text_length;-			show_selection = true;-		}-	}-	-	public TextUndoItem delete_selected_text () {-		Carret selection_start, selection_stop;-		int i;-		Paragraph pg, pge;-		string e, s, n;-		bool same;-		TextUndoItem ui;-		-		ui = new TextUndoItem (carret);-		-		e = "";-		s = "";-		n = "";-		-		if (!has_selection ()) {-			warning ("No selected text.");-			return ui;-		}-		-		selection_start = get_selection_start ();-		selection_stop = get_selection_stop ();-		-		same = selection_start.paragraph == selection_stop.paragraph;-		-		if (!same) {-			return_val_if_fail (0 <= selection_start.paragraph < paragraphs.size, ui);-			pg = paragraphs.get (selection_start.paragraph);-			s = pg.text.substring (0, selection_start.character_index);--			return_val_if_fail (0 <= selection_stop.paragraph < paragraphs.size, ui);-			pge = paragraphs.get (selection_stop.paragraph);-			e = pge.text.substring (selection_stop.character_index);-							-			if (!s.has_suffix ("\n")) {-				ui.deleted.add (pge.copy ());-				ui.edited.add (pg.copy ());-				-				pg.set_text (s + e);-				pge.set_text ("");-			} else {-				ui.edited.add (pg.copy ());-				ui.edited.add (pge.copy ());-				-				pg.set_text (s);-				pge.set_text (e);-			}-		} else {-			return_val_if_fail (0 <= selection_start.paragraph < paragraphs.size, ui);-			-			pg = paragraphs.get (selection_start.paragraph);-			n = pg.text.substring (0, selection_start.character_index);-			n += pg.text.substring (selection_stop.character_index);-			-			if (n == "") {-				ui.deleted.add (pg.copy ());-				paragraphs.remove_at (selection_start.paragraph);-			} else {-				ui.edited.add (pg.copy ());-			}-			-			pg.set_text (n);-		}-		-		if (e == "" && !same) {-			paragraphs.remove_at (selection_stop.paragraph);-		}-		-		for (i = selection_stop.paragraph - 1; i > selection_start.paragraph; i--) {-			return_val_if_fail (0 <= i < paragraphs.size, ui);-			ui.deleted.add (paragraphs.get (i));-			paragraphs.remove_at (i);-		}-		-		if (s == "" && !same) {-			return_val_if_fail (0 <= selection_start.paragraph < paragraphs.size, ui);-			paragraphs.remove_at (selection_start.paragraph);-		}-		-		carret = selection_start.copy ();-		selection_end = carret.copy ();-				-		show_selection = false;-		update_paragraph_index ();-		layout ();-		-		return ui;-	}-	-	void update_paragraph_index () {-		int i = 0;-		foreach (Paragraph p in paragraphs) {-			p.index = i;-			i++;-		}-	}-	-	public TextUndoItem remove_last_character () {-		TextUndoItem ui;-		move_carret_previous ();-		ui = remove_next_character ();-		return ui;-	}-	-	public TextUndoItem remove_next_character () {-		Paragraph paragraph;-		Paragraph next_paragraph;-		int index;-		unichar c;-		string np;-		TextUndoItem ui;-		-		ui = new TextUndoItem (carret);-		-		return_val_if_fail (0 <= carret.paragraph < paragraphs.size, ui);-		paragraph = paragraphs.get (carret.paragraph);-		-		index = carret.character_index;-	-		paragraph.text.get_next_char (ref index, out c);-		-		if (index >= paragraph.text_length) {-			np = paragraph.text.substring (0, carret.character_index);-			-			if (carret.paragraph + 1 < paragraphs.size) {-				next_paragraph = paragraphs.get (carret.paragraph + 1);-				paragraphs.remove_at (carret.paragraph + 1);-				-				np = np + next_paragraph.text;-				-				ui.deleted.add (next_paragraph);-			}-			-			paragraph.set_text (np);-			ui.edited.add (paragraph);-		} else {-			np = paragraph.text.substring (0, carret.character_index) + paragraph.text.substring (index);-			paragraph.set_text (np);--			if (np == "") {-				return_val_if_fail (carret.paragraph > 0, ui);-				carret.paragraph--;-				paragraph = paragraphs.get (carret.paragraph);-				carret.character_index = paragraph.text_length;-				-				ui.deleted.add (paragraphs.get (carret.paragraph + 1));-				-				paragraphs.remove_at (carret.paragraph + 1);-			} else {-				ui.edited.add (paragraph);-			}-		}-		-		update_paragraph_index ();-		layout ();--		return ui;-	}-	-	public void move_carret_next () {-		unichar c;-		-		move_carret_one_character ();-		-		if (KeyBindings.has_ctrl ()) {-			while (true) {-				c = move_carret_one_character ();-				-				if (c == '\0' || c == ' ') {-					break;-				}-			}-		}-	}-	-	unichar move_carret_one_character () {-		Paragraph paragraph;-		int index;-		unichar c;-		-		return_val_if_fail (0 <= carret.paragraph < paragraphs.size, '\0');-		paragraph = paragraphs.get (carret.paragraph);-		-		index = carret.character_index;-		-		paragraph.text.get_next_char (ref index, out c);-		-		if (index >= paragraph.text_length && carret.paragraph + 1 < paragraphs.size) {-			carret.paragraph++;-			carret.character_index = 0;-			c = ' ';-		} else {-			carret.character_index = index;-		}-		-		return c;	-	}--	public void move_carret_previous () {-		unichar c;-		-		move_carret_back_one_character ();-		-		if (KeyBindings.has_ctrl ()) {-			while (true) {-				c = move_carret_back_one_character ();-				-				if (c == '\0' || c == ' ') {-					break;-				}-			}-		}-	}-	-	unichar move_carret_back_one_character () {-		Paragraph paragraph;-		int index, last_index;-		unichar c;-		-		return_val_if_fail (0 <= carret.paragraph < paragraphs.size, '\0');-		paragraph = paragraphs.get (carret.paragraph);-		-		index = 0;-		last_index = -1;-		-		while (paragraph.text.get_next_char (ref index, out c) && index < carret.character_index) {-			last_index = index;-		}-		-		if (last_index <= 0 && carret.paragraph > 0) {-			carret.paragraph--;-			-			return_val_if_fail (0 <= carret.paragraph < paragraphs.size, '\0');-			paragraph = paragraphs.get (carret.paragraph);-			carret.character_index = paragraph.text_length;-			-			if (paragraph.text.has_suffix ("\n")) {-				carret.character_index -= "\n".length;-			}-			-			c = ' ';-		} else if (last_index > 0) {-			carret.character_index = last_index;-		} else {-			carret.character_index = 0;-			c = ' ';-		}-		-		return_val_if_fail (0 <= carret.paragraph < paragraphs.size, '\0');-		-		return c;-	}-	-	public void move_carret_next_row () {-		double nr = font_size;-		-		if (carret.desired_y + 2 * font_size >= allocation.height) {-			scroll (2 * font_size);-			nr = -font_size;-		}-		-		if (carret.desired_y + nr < widget_y + height - padding) {-			carret = get_carret_at (carret.desired_x - widget_x - padding, carret.desired_y + nr);-		}-	}--	public void move_carret_to_end_of_line () {-		carret = get_carret_at (widget_x + padding + width, carret.desired_y, false);	-	}--	public void move_carret_to_beginning_of_line () {-		carret = get_carret_at (widget_x, carret.desired_y, false);	-	}-	-	public void move_carret_previous_row () {-		double nr = -font_size;-		-		if (carret.desired_y - 2 * font_size < 0) {-			scroll (-2 * font_size);-			nr = font_size;-		}-		-		if (carret.desired_y + nr > widget_y + padding) {-			carret = get_carret_at (carret.desired_x, carret.desired_y + nr);-		}-	}-	-	public bool has_selection () {-		return show_selection && selection_is_visible ();-	}-	-	private bool selection_is_visible () {-		return carret.paragraph != selection_end.paragraph || carret.character_index != selection_end.character_index;-	}-	-	public void insert_text (string t) {-		string s;-		Paragraph paragraph;-		TextUndoItem ui;-		Gee.ArrayList<string> pgs;-		bool u = false;-		-		pgs = new Gee.ArrayList<string> ();-		-		if (single_line) {-			s = t.replace ("\n", "").replace ("\r", "");-			pgs.add (s);-		} else {-			if (t.last_index_of ("\n") > 0) {-				string[] parts = t.split ("\n");-				int i;-				for (i = 0; i < parts.length -1; i++) {-					pgs.add (parts[i]);-					pgs.add ("\n");-				}--				pgs.add (parts[parts.length - 1]);-				-				if (t.has_suffix ("\n")) {-					pgs.add ("\n");-				}-			} else {-				s = t;-				pgs.add (s);-			}-		}-		-		if (has_selection () && show_selection) {-			ui = delete_selected_text ();-			u = true;-			-			if (paragraphs.size == 0) {-				paragraphs.add (new Paragraph ("", font_size, 0, text_color));-			}-		} else {-			ui = new TextUndoItem (carret);-		}-		-		return_if_fail (0 <= carret.paragraph < paragraphs.size);-		paragraph = paragraphs.get (carret.paragraph);-		-		if (pgs.size > 0) {-			if (!u) {-				ui.edited.add (paragraph.copy ());-			}-			-			string first = pgs.get (0);-			-			string end; -			string nt = paragraph.text.substring (0, carret.character_index);-			-			nt += first;-			end = paragraph.text.substring (carret.character_index);-		-			paragraph.set_text (nt);-			-			int paragraph_index = carret.paragraph;-			Paragraph next_paragraph = paragraph;-			for (int i = 1; i < pgs.size; i++) {-				paragraph_index++;-				string next = pgs.get (i);-				next_paragraph = new Paragraph (next, font_size, paragraph_index, text_color);-				paragraphs.insert (paragraph_index, next_paragraph);-				ui.added.add (next_paragraph);-				u = true;-			}--			carret.paragraph = paragraph_index;-			carret.character_index = next_paragraph.text.length;--			next_paragraph.set_text (next_paragraph.text + end);-		}-		-		if (u) {-			undo_items.add (ui);-			redo_items.clear ();-		}--		update_paragraph_index ();-		layout ();-				-		text_changed (get_text ());-		show_selection = false;-	}-	-	public string get_text () {-		StringBuilder sb = new StringBuilder ();-		-		generate_all_paragraphs ();-		-		foreach (Paragraph p in paragraphs) {-			sb.append (p.text);-		}--		return sb.str;-	}-	-	Carret get_carret_at (double click_x, double click_y, -		bool check_boundaries = true) {-			-		int i = 0;-		double tx, ty;-		double p;-		string w;-		int ch_index;-		double min_d = double.MAX;-		Carret c = new Carret ();-		double dt;--		c.paragraph = -1;-		c.desired_x = click_x;-		c.desired_y = click_y;-		-		foreach (Paragraph paragraph in paragraphs) {-			if (!check_boundaries || paragraph.text_is_on_screen (allocation, widget_y)) {-				ch_index = 0;--				if (paragraph.start_y + widget_y - font_size <= click_y <= paragraph.end_y + widget_y + font_size) { -					foreach (Text next_word in paragraph.words) {-						double tt_click = click_y - widget_y - padding + font_size;--						w = next_word.text;-						-						if (next_word.widget_y <= tt_click <= next_word.widget_y + font_size) {-							-							p = next_word.get_sidebearing_extent ();-								-							if ((next_word.widget_y <= tt_click <= next_word.widget_y + font_size)-								&& (next_word.widget_x + widget_x <= click_x <= next_word.widget_x + widget_x + padding + next_word.get_sidebearing_extent ())) {-														-								tx = widget_x + next_word.widget_x + padding;-								ty = widget_y + next_word.widget_y + padding;-								-								next_word.iterate ((glyph, kerning, last) => {-									double cw;-									int ci;-									double d;-									string gc = (!) glyph.get_unichar ().to_string ();-									-									d = Math.fabs (click_x - tx);-									-									if (d <= min_d) {-										min_d = d;-										c.character_index = ch_index;-										c.paragraph = i;-									}-									-									cw = (glyph.get_width ()) * next_word.get_font_scale () + kerning;-									ci = gc.length;-									-									tx += cw;-									ch_index += ci;-								});--								dt = Math.fabs (click_x - (tx + widget_x + padding));-								if (dt < min_d) {-									min_d = dt;-									c.character_index = ch_index;-									c.paragraph = i;-								}-							} else {-								dt = Math.fabs (click_x - (next_word.widget_x + widget_x + padding + next_word.get_sidebearing_extent ()));-								-								if (dt < min_d) {-									min_d = dt;-									c.character_index = ch_index + w.length;-									-									if (w.has_suffix ("\n")) {-										c.character_index -= "\n".length;-									}-									-									c.paragraph = i;-								}-							-								ch_index += w.length;-							}-						} else {-							ch_index += w.length;-						}-					}-				}-			}-			i++;-		}-		-		if (unlikely (c.paragraph < 0)) {-			c.paragraph = paragraphs.size > 0 ? paragraphs.size - 1 : 0;-			c.character_index = paragraphs.size > 0 ? paragraphs.get (c.paragraph).text.length : 0;-		}-		-		store_undo_state_at_next_event = true;-		-		return c;-	}-	-	/** @return offset to click in text. */-	public override void layout () {-		double p;-		double tx, ty;-		string w;-		double xmax = 0;-		int i = 0;-		double dd;-		-		tx = 0;-		ty = font_size;-		-		if (allocation.width <= 0 || allocation.height <= 0) {-			warning ("Parent widget allocation is not set.");-		}-		-		for (i = paragraphs.size - 1; i >= 0 && paragraphs.size > 1; i--) {-			if (unlikely (paragraphs.get (i).is_empty ())) {-				warning ("Empty paragraph.");-				paragraphs.remove_at (i);-				update_paragraph_index ();-			}-		}-		-		i = 0;-		foreach (Paragraph paragraph in paragraphs) {-			if (paragraph.need_layout -				|| (paragraph.text_area_width != width-					&& paragraph.text_is_on_screen (allocation, widget_y))) {-						-				paragraph.start_y = ty;-				paragraph.start_x = tx;-				-				paragraph.cached_surface = null;-				-				foreach (Text next_word in paragraph.words) {-					next_word.set_font_size (font_size);-					-					w = next_word.text;-					p = next_word.get_sidebearing_extent ();--					if (unlikely (p == 0)) {-						warning (@"Zero width word: $(w)");-					}--					if (w == "") {-						break;-					}--					if (w == "\n") {-						next_word.widget_x = tx;-						next_word.widget_y = ty;-						-						tx = 0;-						ty += next_word.font_size;-					} else {-						if (!single_line) {-							if (tx + p + 2 * padding > width || w == "\n") {-								tx = 0;-								ty += next_word.font_size;-							}-						}--						if (tx + p > xmax) {-							xmax = tx + p;-						}-												-						next_word.widget_x = tx;-						next_word.widget_y = ty;-						-						if (w != "\n") {-							tx += p;-						}-					}-				}--				if (tx > xmax) {-					xmax = tx;-				}-				-				paragraph.text_area_width = width;-				paragraph.width = xmax;-				paragraph.end_x = tx;-				paragraph.end_y = ty;-				paragraph.need_layout = false;-			}-				-			if (xmax > width) {-				break;-			}-								-			tx = paragraph.end_x;-			ty = paragraph.end_y;-			i++;-		}-		-		if (xmax > width) {-			this.width = xmax + 2 * padding;-			layout ();-			return;-		}-		-		this.height = fmax (min_height, ty + 2 * padding);--		if (last_paragraph != DONE) {-			this.height = (text_length / (double) last_paragraph) * ty + 2 * padding; // estimate height-		}-		-		if (ty + widget_y < allocation.height && last_paragraph != DONE) {-			generate_paragraphs ();-			layout ();-			return;-		}--		ty = font_size;-		tx = 0;-		-		foreach (Paragraph paragraph in paragraphs) {-			dd = ty - paragraph.start_y;-			-			if (dd != 0) {-				paragraph.start_y += dd;-				paragraph.end_y += dd;-				foreach (Text word in paragraph.words) {-					word.widget_y += dd;-				}-			}-						-			ty = paragraph.end_y;-		}-	}-	-	public override void button_press (uint button, double x, double y) {-		if (is_over (x, y)) {-			carret = get_carret_at (x, y);-			selection_end = carret.copy ();-			update_selection = true;-		}-	}--	public override void button_release (uint button, double x, double y) {-		update_selection = false;-		show_selection = selection_is_visible ();-	}-	-	public override bool motion (double x, double y) {-		if (update_selection) {-			selection_end = get_carret_at (x, y);-			show_selection = selection_is_visible ();-		}-		-		return update_selection;-	}-	-	public override void draw (Context cr) {-		Text word;-		double tx, ty;-		string w;-		double scale;-		double width;-		double x = widget_x;-		double y = widget_y;-		Carret selection_start, selection_stop;-		double carret_x;-		double carret_y;-		-		layout ();-		-		if (draw_border) {-			// background-			cr.save ();-			cr.set_line_width (1);-			Theme.color (cr, "Text Area Background");-			draw_rounded_rectangle (cr, x, y, this.width, this.height - padding, padding);-			cr.fill ();-			cr.restore ();-			-			// border-			cr.save ();-			cr.set_line_width (1);-			Theme.color (cr, "Foreground 1");-			draw_rounded_rectangle (cr, x, y, this.width, this.height - padding, padding);-			cr.stroke ();-			cr.restore ();-		}-		-		cr.save ();--		word = new Text ();-		-		width = this.width - padding;-		x += padding;-		scale = word.get_font_scale ();-		y += font_size;-		-		// draw selection background-		if (has_selection ()) {-			tx = 0;-			ty = 0;-			-			selection_start = get_selection_start ();-			selection_stop = get_selection_stop ();-			-			cr.save ();-			Theme.color (cr, "Highlighted 1");--			for (int i = selection_start.paragraph; i <= selection_stop.paragraph; i++) {-				return_if_fail (0 <= i < paragraphs.size);-				Paragraph pg = paragraphs.get (i);--				if (pg.text_is_on_screen (allocation, widget_y)) {-					int char_index = 0;-					-					foreach (Text next_word in pg.words) {-						double cw = next_word.get_sidebearing_extent ();-						bool paint_background = false;-						bool partial_start = false;-						bool partial_stop = false;-						int wl;-						-						w = next_word.text;-						wl = w.length;-						scale = next_word.get_font_scale ();-												-						if (selection_start.paragraph == selection_stop.paragraph) {-							partial_start = true;-							partial_stop = true;-						} else if (selection_start.paragraph < i < selection_stop.paragraph) {-							paint_background = true;-						} else if (selection_start.paragraph == i) {-							paint_background = true;-							partial_start = true;-						} else if (selection_stop.paragraph == i) {-							paint_background = char_index + wl < selection_stop.character_index;-							partial_stop = !paint_background;-						}-						-						if (paint_background && !(partial_start || partial_stop)) {	-							double selection_y = widget_y + next_word.widget_y + scale * -next_word.cached_font.bottom_limit - font_size;-							cr.rectangle (widget_x + padding + next_word.widget_x - 1, selection_y, cw + 1, font_size);-							cr.fill ();-						}-						-						if (partial_start || partial_stop) {-							int index = char_index;-							double bx = widget_x + padding + next_word.widget_x + (partial_start ? 0 : 1);-							-							next_word.iterate ((glyph, kerning, last) => {-								double cwi;-								int ci;-								bool draw = (index >= selection_start.character_index && partial_start && !partial_stop)-									|| (index < selection_stop.character_index && !partial_start && partial_stop)-									|| (selection_start.character_index <= index < selection_stop.character_index && partial_start && partial_stop);-								-								cwi = (glyph.get_width ()) * next_word.get_font_scale () + kerning;--								if (draw) {-									double selection_y = widget_y + next_word.widget_y + scale * -next_word.cached_font.bottom_limit - font_size;-									cr.rectangle (bx - 1, selection_y, cwi + 1, font_size);-									cr.fill ();-								}-								-								bx += cwi;-								ci = ((!) glyph.get_unichar ().to_string ()).length;-								index += ci;-							});-						}	-					-						char_index += w.length;	-					}-				}-			}-			-			cr.restore ();-		}--		tx = 0;-		ty = 0;	-		-		int first_visible = 0;-		int last_visible;-		int paragraphs_size = paragraphs.size;-		while (first_visible < paragraphs_size) {-			if (paragraphs.get (first_visible).text_is_on_screen (allocation, widget_y)) {-				break;-			}-			first_visible++;-		}-		-		last_visible = first_visible;-		while (last_visible < paragraphs_size) {-			if (!paragraphs.get (last_visible).text_is_on_screen (allocation, widget_y)) {-				last_visible++;-				break;-			}-			last_visible++;-		}	-		-		if (paragraphs_size == 0) {-			if (carret_is_visible) {-				draw_carret_at (cr, widget_x + padding, widget_y + font_size + padding);-			}-			-			return;-		}-		-		Context cc; // cached context-		Paragraph paragraph;-		paragraph = paragraphs.get (0);-		-		tx = paragraph.start_x;-		ty = paragraph.start_y;--		for (int i = first_visible; i < last_visible; i++) {-			paragraph = paragraphs.get (i);-			-			tx = paragraph.start_x;-			ty = paragraph.start_y;--			if (paragraph.cached_surface == null) {				-				paragraph.cached_surface = Screen.create_background_surface ((int) width + 2, paragraph.get_height () + (int) font_size + 2);-				cc = new Context ((!) paragraph.cached_surface);-				cc.scale (Screen.get_scale(), Screen.get_scale());-				-				foreach (Text next_word in paragraph.words) {-					if (next_word.text != "\n") {-						next_word.draw_at_top (cc, next_word.widget_x, next_word.widget_y - ty);-					}-				}-			}-			-			if (likely (paragraph.cached_surface != null)) {-				// FIXME: subpixel offset in text area-				Screen.paint_background_surface(cr, -					(!) paragraph.cached_surface,-					(int) (x + tx),-					(int) (widget_y + paragraph.start_y - font_size + padding));-			} else {-				warning ("No paragraph image.");-			}-		}--		if (carret_is_visible) {-			get_carret_position (carret, out carret_x, out carret_y);-			-			if (carret_y < 0) {-				draw_carret_at (cr, widget_x + padding, widget_y + font_size + padding);-			} else {-				draw_carret_at (cr, carret_x, carret_y);-			}-		}-		-		if (has_selection ()) {-			get_carret_position (selection_end, out carret_x, out carret_y);-			-			if (carret_y < 0) {-				draw_carret_at (cr, widget_x + padding, widget_y + font_size + padding);-			} else {-				draw_carret_at (cr, carret_x, carret_y);-			}-		}-	}-	-	void get_carret_position (Carret carret, out double carret_x, out double carret_y) {-		Paragraph paragraph;-		double tx;-		double ty;-		int ch_index;-		int wl;-		double pos_x, pos_y;--		ch_index = 0;--		carret_x = -1;-		carret_y = -1;--		return_if_fail (0 <= carret.paragraph < paragraphs.size);-		paragraph = paragraphs.get (carret.paragraph);--		pos_x = -1;-		pos_y = -1;-		-		foreach (Text next_word in paragraph.words) {-			string w = next_word.text;-			wl = w.length;--			if (carret.character_index == ch_index) {-				pos_x = next_word.widget_x + widget_x + padding;-				pos_y = widget_y + next_word.widget_y + next_word.get_baseline_to_bottom_for_font ();		-			} else if (carret.character_index >= ch_index + wl) {-				pos_x = next_word.widget_x + next_word.get_sidebearing_extent () + widget_x + padding;-				pos_y = widget_y + next_word.widget_y + next_word.get_baseline_to_bottom_for_font ();-				-				if (next_word.text.has_suffix ("\n")) {-					pos_x = widget_x + padding;-					pos_y += next_word.font_size;-				}-			} else if (ch_index < carret.character_index <= ch_index + wl) {-				tx = widget_x + next_word.widget_x;-				ty = widget_y + next_word.widget_y + next_word.get_baseline_to_bottom_for_font ();-		-				if (carret.character_index <= ch_index) {-					pos_x = widget_x + padding;-					pos_y = ty;-				}--				next_word.iterate ((glyph, kerning, last) => {-					double cw;-					int ci;--					cw = (glyph.get_width ()) * next_word.get_font_scale () + kerning;-					ci = ((!) glyph.get_unichar ().to_string ()).length;-					-					if (ch_index < carret.character_index <= ch_index + ci) {-						pos_x = tx + cw + padding;-						pos_y = ty;-						-						if (glyph.get_unichar () == '\n') {-							pos_x = widget_x + padding;-							pos_y += next_word.font_size;-						}-					}-					-					tx += cw;-					ch_index += ci;-				});-			}-			-			ch_index += wl;-		}-		-		carret_x = pos_x;-		carret_y = pos_y;-	}-	-	void draw_carret_at (Context cr, double x, double y) {-		cr.save ();-		cr.set_source_rgba (0, 0, 0, 0.5);-		cr.set_line_width (1);-		cr.move_to (x, y);-		cr.line_to (x, y - font_size);-		cr.stroke ();-		cr.restore ();	-	}--	public void store_undo_edit_state () {-		TextUndoItem ui = new TextUndoItem (carret);-		ui.edited.add (get_current_paragraph ().copy ());-		undo_items.add (ui);-		redo_items.clear ();-	}-	-	public void redo () {-		TextUndoItem i;-		TextUndoItem undo_item;-		-		if (redo_items.size > 0) {-			i = redo_items.get (redo_items.size - 1); -			-			undo_item = new TextUndoItem (i.carret);-			-			i.deleted.sort ((a, b) => {-				Paragraph pa = (Paragraph) a;-				Paragraph pb = (Paragraph) b;-				return pb.index - pa.index;-			});--			i.added.sort ((a, b) => {-				Paragraph pa = (Paragraph) a;-				Paragraph pb = (Paragraph) b;-				return pa.index - pb.index;-			});--			foreach (Paragraph p in i.deleted) {-				if (unlikely (!(0 <= p.index < paragraphs.size))) {-					warning ("Paragraph not found.");-				} else {-					undo_item.deleted.add (p.copy ());-					paragraphs.remove_at (p.index);-				}-			}-						-			foreach (Paragraph p in i.added) {-				if (p.index == paragraphs.size) {-					paragraphs.add (p.copy ());-				} else {-					if (unlikely (!(0 <= p.index < paragraphs.size))) {-						warning (@"Index: $(p.index) out of bounds, size: $(paragraphs.size)");-					} else {-						undo_item.added.add (paragraphs.get (p.index).copy ());-						paragraphs.insert (p.index, p.copy ());-					}-				}-			}--			foreach (Paragraph p in i.edited) {-				if (unlikely (!(0 <= p.index < paragraphs.size))) {-					warning (@"Index: $(p.index ) out of bounds, size: $(paragraphs.size)");-					return;-				}-				-				undo_item.edited.add (paragraphs.get (p.index).copy ());-				paragraphs.set (p.index, p.copy ());-			}			-			-			redo_items.remove_at (redo_items.size - 1);-			undo_items.add (undo_item);-			-			carret = i.carret.copy ();-			layout ();-		}-	}-	-	public void undo () {-		TextUndoItem i;-		TextUndoItem redo_item;-		-		if (undo_items.size > 0) {-			i = undo_items.get (undo_items.size - 1); -			redo_item = new TextUndoItem (i.carret);-			-			i.deleted.sort ((a, b) => {-				Paragraph pa = (Paragraph) a;-				Paragraph pb = (Paragraph) b;-				return pa.index - pb.index;-			});--			i.added.sort ((a, b) => {-				Paragraph pa = (Paragraph) a;-				Paragraph pb = (Paragraph) b;-				return pb.index - pa.index;-			});-			-			foreach (Paragraph p in i.added) {-				if (unlikely (!(0 <= p.index < paragraphs.size))) {-					warning ("Paragraph not found.");-				} else {-					redo_item.added.add (paragraphs.get (p.index).copy ());-					paragraphs.remove_at (p.index);-				}-			}-						-			foreach (Paragraph p in i.deleted) {-				if (p.index == paragraphs.size) {-					paragraphs.add (p.copy ());-				} else {-					if (unlikely (!(0 <= p.index < paragraphs.size))) {-						warning (@"Index: $(p.index) out of bounds, size: $(paragraphs.size)");-					} else {-						redo_item.deleted.add (p.copy ());-						paragraphs.insert (p.index, p.copy ());-					}-				}-			}--			foreach (Paragraph p in i.edited) {-				if (unlikely (!(0 <= p.index < paragraphs.size))) {-					warning (@"Index: $(p.index ) out of bounds, size: $(paragraphs.size)");-					return;-				}-				-				redo_item.edited.add (paragraphs.get (p.index).copy ());-				paragraphs.set (p.index, p.copy ());-			}			-			-			undo_items.remove_at (undo_items.size - 1);-			redo_items.add (redo_item);-			-			carret = i.carret.copy ();-			layout ();-		}-	}-	-	public void set_editable (bool editable) {-		this.editable = editable;-	}-	-	public class TextUndoItem : GLib.Object {-		public Carret carret;-		public Gee.ArrayList<Paragraph> added = new Gee.ArrayList<Paragraph> ();-		public Gee.ArrayList<Paragraph> edited = new Gee.ArrayList<Paragraph> ();-		public Gee.ArrayList<Paragraph> deleted = new Gee.ArrayList<Paragraph> ();-		-		public TextUndoItem (Carret c) {-			carret = c.copy ();-		}-	}-		-	public class Paragraph : GLib.Object {-		public double end_x = -10000;-		public double end_y = -10000;-		-		public double start_x = -10000;-		public double start_y = -10000;-		-		public double width = -10000;-		public double text_area_width = -10000;-		-		public string text;-		-		public Gee.ArrayList<Text> words {-			get {-				if (words_in_paragraph.size == 0) {-					generate_words ();-				}-				-				return words_in_paragraph;-			}-		}-		-		private Gee.ArrayList<Text> words_in_paragraph = new Gee.ArrayList<Text> ();-		public int text_length;-		public bool need_layout = true;-		public Surface? cached_surface = null;-		double font_size;-		public int index;-		Color text_color;-		-		public Paragraph (string text, double font_size, int index, Color c) {-			this.index = index;-			this.font_size = font_size;-			text_color = c;-			set_text (text);-		}--		public Paragraph copy () {-			Paragraph p = new Paragraph (text.dup (), font_size, index, text_color);-			p.need_layout = true;-			return p;-		}--		public bool is_empty () {-			return text == "";-		}--		public void set_text (string t) {-			this.text = t;-			text_length = t.length;-			need_layout = true;-			words.clear ();-			cached_surface = null;-		}--		public int get_height () {-			return (int) (end_y - start_y) + 1;-		}-		-		public int get_width () {-			return (int) width + 1;-		}-		-		public bool text_is_on_screen (WidgetAllocation alloc, double widget_y) {-			bool v = (0 <= start_y + widget_y <= alloc.height)-				|| (0 <= end_y + widget_y <= alloc.height)-				|| (start_y + widget_y <= 0 && alloc.height <= end_y + widget_y);-			return v;-		}--		private void generate_words () {-			string w;-			int p = 0;-			bool carret_at_word_end = false;-			Text word;-			int carret = 0;-			int iter_pos = 0;--			return_if_fail (words_in_paragraph.size == 0);--			while (p < text_length) {-				w = get_next_word (out carret_at_word_end, ref iter_pos, carret);-				-				if (w == "") {-					break;-				}-				-				word = new Text (w, font_size);-				-				word.r = text_color.r;-				word.g = text_color.g;-				word.b = text_color.b;-				word.a = text_color.a;-				-				words_in_paragraph.add (word);-			}-		}--		string get_next_word (out bool carret_at_end_of_word, ref int iter_pos, int carret) {-			int i;-			int ni;-			int pi;-			string n;-			int nl;-			-			carret_at_end_of_word = false;-			-			if (iter_pos >= text_length) {-				carret_at_end_of_word = true;-				return "".dup ();-			}-			-			if (text.get_char (iter_pos) == '\n') {-				iter_pos += "\n".length;-				carret_at_end_of_word = (iter_pos == carret);-				return "\n".dup ();-			}-			-			i = text.index_of (" ", iter_pos);-			pi = i + " ".length;-			-			ni = text.index_of ("\t", iter_pos);-			if (ni != -1 && ni < pi || i == -1) {-				i = ni;-				pi = i  + "\t".length;-			}-			-			ni = text.index_of ("\n", iter_pos);-			if (ni != -1 && ni < pi || i == -1) {-				i = ni;-				pi = i;-			}-			-			if (iter_pos + iter_pos - pi > text_length || i == -1) {-				n = text.substring (iter_pos);-			} else {-				n = text.substring (iter_pos, pi - iter_pos);-			}-			-			nl = n.length;-			if (iter_pos < carret < iter_pos + nl) {-				n = text.substring (iter_pos, carret - iter_pos);-				nl = n.length;-				carret_at_end_of_word = true;-			}-			-			iter_pos += nl;-			-			if (iter_pos == carret) {-				carret_at_end_of_word = true;-			}-			-			return n;-		}-	}-	-	public class Carret : GLib.Object {-		-		public int paragraph = 0;-		-		public int character_index {-			get { -				return ci;-			}-			-			set { -				ci = value;-			}-		}-		-		private int ci = 0;-		-		public double desired_x = 0;-		public double desired_y = 0;-		-		public Carret () {-		}-		-		public void print () {-			stdout.printf (@"paragraph: $paragraph, character_index: $character_index\n");-		}-		-		public Carret copy () {-			Carret c = new Carret ();-			-			c.paragraph = paragraph;-			c.character_index = character_index;-			-			c.desired_x = desired_x;-			c.desired_y = desired_y;-			-			return c;-		}-	}-}--}diff --git a/libbirdfont/Renderer/fontconfig.c b/libbirdfont/Renderer/fontconfig.cdeleted file mode 100644index f02b747..0000000--- a/libbirdfont/Renderer/fontconfig.c+++ /dev/null@@ -1,140 +0,0 @@-/*-	Copyright (C) 2015 Johan Mattsson--	This library is free software; you can redistribute it and/or modify -	it under the terms of the GNU Lesser General Public License as -	published by the Free Software Foundation; either version 3 of the -	License, or (at your option) any later version.--	This library is distributed in the hope that it will be useful, but -	WITHOUT ANY WARRANTY; without even the implied warranty of -	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -	Lesser General Public License for more details.-*/--#include <stdio.h>-#include <glib.h>-#include <fontconfig/fontconfig.h>--gchar* find_font_with_property (FcConfig* fontconfig, const gchar* characters, const gchar* property) {-	FcPattern* pattern;-	FcCharSet* character_set;-	FcObjectSet* font_properties;-	FcFontSet* fonts;-	FcPattern* font;-	FcChar8* path;-	gchar* result;-	gchar* remaining_characters;-	gunichar character;-	-	if (fontconfig == NULL) {-		g_warning("Font config not loaded.");-		return NULL;-	}-	-	result = NULL;-	pattern = FcPatternCreate ();-	-	character_set = FcCharSetCreate ();-	-	remaining_characters = (gchar*) characters;-	while (TRUE) {-		character = g_utf8_get_char (remaining_characters);-		-		if (character == '\0') {-			break;-		}-		-		FcCharSetAddChar(character_set, character);-				-		remaining_characters = g_utf8_next_char (remaining_characters);-	}--	FcPatternAddCharSet (pattern, FC_CHARSET, character_set);-	FcCharSetDestroy (character_set);-	FcPatternAddInteger (pattern, FC_SLANT, FC_SLANT_ROMAN);-	-	FcPatternAddBool(pattern, FC_SCALABLE, FcTrue);-	font_properties = FcObjectSetBuild (property, NULL);	-	fonts = FcFontList (fontconfig, pattern, font_properties);-	-	if (fonts && fonts->nfont > 0) {-		font = fonts->fonts[0];-		if (FcPatternGetString(font, property, 0, &path) == FcResultMatch) {-			result = g_strdup ((gchar*) path);-		}-	}--	if (fonts) {-		FcFontSetDestroy(fonts);-	}--	if (pattern) {-		FcPatternDestroy(pattern);-	}--	return result;-}--/** Find a fallback font for a set of characters.- * @return A path to the font file.- */-gchar* find_font (FcConfig* fontconfig, const gchar* characters) {-	return find_font_with_property (fontconfig, characters, FC_FILE);-}--/** Find a fallback font for a set of characters.- * @return Family name of the font.- */-gchar* find_font_family (FcConfig* fontconfig, const gchar* characters) {-	return find_font_with_property (fontconfig, characters, FC_FAMILY);-}--/** Find a font file from its family name.- * @param font_config fontconfig instance- * @param font_name name of the font- * @return full path to the font file- */-gchar* find_font_file (FcConfig* font_config, const gchar* font_name) {-	const FcChar8* name;-	FcPattern* search_pattern;-	FcPattern* font;-	FcChar8* file;-	gchar* path;-	FcObjectSet* font_properties;-	FcFontSet* fonts;-	int i;--	if (font_config == NULL) {-		g_warning("Font config not loaded.");-		return NULL;-	}-	-	path = NULL;-	name = font_name;--	search_pattern = FcPatternCreate ();-	FcPatternAddString (search_pattern, FC_FAMILY, name);-	FcPatternAddBool (search_pattern, FC_SCALABLE, FcTrue);-	FcPatternAddInteger (search_pattern, FC_WEIGHT, FC_WEIGHT_MEDIUM);-	FcPatternAddInteger (search_pattern, FC_SLANT, FC_SLANT_ROMAN);-		-	font_properties = FcObjectSetBuild (FC_FILE, NULL);-	fonts = FcFontList (font_config, search_pattern, font_properties);-	-	if (fonts->nfont > 0) {-		for (i = 0; i < fonts->nfont; i++) {-			font = fonts->fonts[i];-			-			if (FcPatternGetString(font, FC_FILE, 0, &file) == FcResultMatch) {-				path = g_strdup ((gchar*) file);-				break;-			}-		}-		FcPatternDestroy (font);-	}--	FcPatternDestroy (search_pattern);-	-	return path;-}diff --git a/libbirdfont/ResizeTool.vala b/libbirdfont/ResizeTool.valaindex 8e22ca1..e685152 100644--- a/libbirdfont/ResizeTool.vala+++ b/libbirdfont/ResizeTool.vala@@ -14,6 +14,7 @@  using Math; using Cairo;+using SvgBird;  namespace BirdFont { @@ -21,7 +22,7 @@ public class ResizeTool : Tool { 	bool resize_path_proportional = false; 	bool resize_width = false; -	Path? resized_path = null;+	SvgBird.Object? resized_path = null; 	double last_resize_y; 	double last_resize_x; @@ -63,13 +64,13 @@ public class ResizeTool : Tool { 		}); 				 		press_action.connect((self, b, x, y) => {-			Path last_path;+			SvgBird.Object last_path; 			Glyph glyph; 			 			glyph = MainWindow.get_current_glyph (); 			glyph.store_undo_state (); 			-			foreach (Path p in glyph.active_paths) {+			foreach (SvgBird.Object p in glyph.active_paths) { 				if (is_over_resize_handle (p, x, y)) { 					resize_path_proportional = true; 					resized_path = p;@@ -87,7 +88,7 @@ public class ResizeTool : Tool { 				} 			} -			foreach (Path p in glyph.active_paths) {+			foreach (SvgBird.Object p in glyph.active_paths) { 				if (is_over_rotate_handle (p, x, y)) { 					rotate_path = true; 					return;@@ -121,8 +122,11 @@ public class ResizeTool : Tool { 			update_selection_box (); 			GlyphCanvas.redraw (); 			-			foreach (Path p in MainWindow.get_current_glyph ().active_paths) {-				p.create_full_stroke ();+			foreach (SvgBird.Object p in MainWindow.get_current_glyph ().active_paths) {+				if (p is PathObject) {+					PathObject path = (PathObject) p;+					path.get_path ().create_full_stroke ();+				} 			} 		}); 		@@ -151,10 +155,6 @@ public class ResizeTool : Tool { 				 				glyph = MainWindow.get_current_glyph (); 				-				foreach (Path selected_path in glyph.active_paths) {-					selected_path.reset_stroke ();-				}-				 				GlyphCanvas.redraw (); 			} 			@@ -234,9 +234,9 @@ public class ResizeTool : Tool { 	public void rotate_selected_paths (double angle, double cx, double cy) { 		Glyph glyph = MainWindow.get_current_glyph ();   		double dx, dy, xc2, yc2, w, h;-		Path last_path;+		SvgBird.Object last_path; 		-		foreach (Path p in glyph.active_paths) {+		foreach (SvgBird.Object p in glyph.active_paths) { 			p.rotate (angle, cx, cy); 		} @@ -245,7 +245,7 @@ public class ResizeTool : Tool { 		dx = -(xc2 - cx); 		dy = -(yc2 - cy); 		-		foreach (Path p in glyph.active_paths) {+		foreach (SvgBird.Object p in glyph.active_paths) { 			p.move (dx, dy); 		} 		@@ -287,7 +287,7 @@ public class ResizeTool : Tool { 		rotate_selected_paths (rotation - last_rotate, selection_box_center_x, selection_box_center_y); 	} -	static bool is_over_rotate_handle (Path p, double x, double y) {+	static bool is_over_rotate_handle (SvgBird.Object p, double x, double y) { 		double cx, cy, hx, hy; 		double size = 10; 		bool inx, iny;@@ -364,17 +364,16 @@ public class ResizeTool : Tool { 		if (!selected) { 			glyph.clear_active_paths (); 			-			foreach (Path path in glyph.get_visible_paths ()) {-				glyph.add_active_path (null, path);+			foreach (SvgBird.Object path in glyph.get_visible_objects ()) {+				glyph.add_active_object (null, path); 			} 		} 		 		get_selection_min (out resize_pos_x, out resize_pos_y); 		 		// resize paths-		foreach (Path selected_path in glyph.active_paths) {+		foreach (SvgBird.Object selected_path in glyph.active_paths) { 			selected_path.resize (ratio_x, ratio_y);-			selected_path.reset_stroke (); 		} 		 		// move paths relative to the updated xmin and xmax@@ -382,7 +381,7 @@ public class ResizeTool : Tool { 		dx = resize_pos_x - selection_minx; 		dy = resize_pos_y - selection_miny; 		-		foreach (Path selected_path in glyph.active_paths) {+		foreach (SvgBird.Object selected_path in glyph.active_paths) { 			selected_path.move (dx, dy);			 		} 		@@ -470,7 +469,7 @@ public class ResizeTool : Tool { 		 		DrawingTools.move_tool.move_to_baseline (); -		foreach (Path path in glyph.active_paths) {+		foreach (SvgBird.Object path in glyph.active_paths) { 			path.move (0, -descender * scale); 		} 		@@ -481,7 +480,7 @@ public class ResizeTool : Tool { 		Glyph glyph = MainWindow.get_current_glyph (); 		x = double.MAX; 		y = double.MAX;-		foreach (Path p in glyph.active_paths) {+		foreach (SvgBird.Object p in glyph.active_paths) { 			if (p.xmin < x) { 				x = p.xmin; 			}@@ -497,11 +496,11 @@ public class ResizeTool : Tool { 		double h, w; 		double ratio = get_resize_ratio (x, y); 		-		foreach (Path selected_path in glyph.active_paths) {+		foreach (SvgBird.Object selected_path in glyph.active_paths) { 			h = selected_path.ymax - selected_path.ymin; 			w = selected_path.xmax - selected_path.xmin; 			-			if (selected_path.points.size <= 1) {+			if (selected_path.is_empty ()) { // FIXME: test with one point 				continue; 			} 			@@ -513,13 +512,13 @@ public class ResizeTool : Tool { 		return true; 	} -	bool is_over_resize_handle (Path p, double x, double y) {+	bool is_over_resize_handle (SvgBird.Object p, double x, double y) { 		double handle_x, handle_y; 		get_resize_handle_position (out handle_x, out handle_y); 		return Path.distance (handle_x, x, handle_y, y) < 12 * MainWindow.units; 	} -	bool is_over_horizontal_resize_handle (Path p, double x, double y) {+	bool is_over_horizontal_resize_handle (SvgBird.Object p, double x, double y) { 		double handle_x, handle_y; 		get_horizontal_reseize_handle_position (out handle_x, out handle_y); 		return Path.distance (handle_x, x, handle_y, y) < 12 * MainWindow.units;		@@ -540,26 +539,28 @@ public class ResizeTool : Tool { 		if (!selected_paths) { 			glyph.clear_active_paths (); 			-			foreach (Path path in glyph.get_visible_paths ()) {-				glyph.add_active_path (null, path);+			foreach (SvgBird.Object path in glyph.get_visible_objects ()) {+				glyph.add_active_object (null, path); 			} 		}  		glyph.selection_boundaries (out x, out y, out w, out h); 	-		foreach (Path path in glyph.active_paths) {-			SvgParser.apply_matrix (path, 1, 0, s, 1, 0, 0);-			path.skew = skew;-			path.update_region_boundaries ();+		foreach (SvgBird.Object path in glyph.active_paths) {+			if (path is PathObject) { // FIXME: other objects+				Path p = ((PathObject) path).get_path ();+				SvgParser.apply_matrix (p, 1, 0, s, 1, 0, 0);+				p.skew = skew;+				path.update_region_boundaries ();+			} 		} 		 		glyph.selection_boundaries (out nx, out y, out nw, out h); 		 		dx = -(nx - x); 		-		foreach (Path p in glyph.active_paths) {+		foreach (SvgBird.Object p in glyph.active_paths) { 			p.move (dx, 0);-			p.reset_stroke (); 		} 		 		dw = (nw - w);diff --git a/libbirdfont/SaveCallback.vala b/libbirdfont/SaveCallback.valaindex ae45fea..a183834 100644--- a/libbirdfont/SaveCallback.vala+++ b/libbirdfont/SaveCallback.vala@@ -28,7 +28,7 @@ public class SaveCallback : GLib.Object { 	} 	 	public void save_as ()  {-		if (MenuTab.has_suppress_event ()) {+		if (unlikely (MenuTab.has_suppress_event ())) { 			warn_if_test ("Event suppressed"); 			return; 		}@@ -54,6 +54,7 @@ public class SaveCallback : GLib.Object { 				file_name = @"$(f)"; 				file = File.new_for_path (file_name); 				font_file_path = (!) file.get_path ();+				 				if (!file.query_exists ()) { 					save (); 				} else {diff --git a/libbirdfont/SearchPaths.vala b/libbirdfont/SearchPaths.valaindex 2238685..338f2d5 100644--- a/libbirdfont/SearchPaths.vala+++ b/libbirdfont/SearchPaths.vala@@ -94,7 +94,7 @@ public class SearchPaths { 		f = get_file (@"/usr/share/birdfont/" + d + "/", name); 		if (likely (f.query_exists ())) return f; -		return f;		+		return f; 	} 		 	public static string get_locale_directory () {diff --git a/libbirdfont/SettingsTab.vala b/libbirdfont/SettingsTab.valaindex 097fc60..3a866da 100644--- a/libbirdfont/SettingsTab.vala+++ b/libbirdfont/SettingsTab.vala@@ -43,13 +43,13 @@ public class SettingsTab : SettingsDisplay {  		stroke_width.new_value_action.connect ((self) => { 			Glyph g = MainWindow.get_current_glyph ();-			Path.stroke_width = stroke_width.get_value ();+			CanvasSettings.stroke_width = stroke_width.get_value (); 			g.redraw_area (0, 0, g.allocation.width, g.allocation.height); 			Preferences.set ("stroke_width_for_open_paths", stroke_width.get_display_value ()); 			MainWindow.get_toolbox ().redraw ((int) stroke_width.x, (int) stroke_width.y, 70, 70); 		}); 		-		Path.stroke_width = stroke_width.get_value ();+		CanvasSettings.stroke_width = stroke_width.get_value (); 		 		// adjust precision 		string precision_value = Preferences.get ("precision");@@ -81,7 +81,7 @@ public class SettingsTab : SettingsDisplay {  		Tool show_all_line_handles = new Tool ("show_all_line_handles"); 		show_all_line_handles.select_action.connect((self) => {-			Path.show_all_line_handles = !Path.show_all_line_handles;+			CanvasSettings.show_all_line_handles = !CanvasSettings.show_all_line_handles; 			Glyph g = MainWindow.get_current_glyph (); 			g.redraw_area (0, 0, g.allocation.width, g.allocation.height);			 		});@@ -89,11 +89,11 @@ public class SettingsTab : SettingsDisplay {  		Tool fill_open_path = new Tool ("fill_open_path"); 		fill_open_path.select_action.connect((self) => {-			Path.fill_open_path = true;	+			CanvasSettings.fill_open_path = true;	 		}); 		 		fill_open_path.deselect_action.connect((self) => {-			Path.fill_open_path = false;	+			CanvasSettings.fill_open_path = false;	 		}); 		tools.add (new SettingsItem (fill_open_path, t_("Fill open paths."))); diff --git a/libbirdfont/Stop.vala b/libbirdfont/Stop.valadeleted file mode 100644index ad4aa4c..0000000--- a/libbirdfont/Stop.vala+++ /dev/null@@ -1,35 +0,0 @@-/*-	Copyright (C) 2015 Johan Mattsson--	This library is free software; you can redistribute it and/or modify -	it under the terms of the GNU Lesser General Public License as -	published by the Free Software Foundation; either version 3 of the -	License, or (at your option) any later version.--	This library is distributed in the hope that it will be useful, but -	WITHOUT ANY WARRANTY; without even the implied warranty of -	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -	Lesser General Public License for more details.-*/--using Cairo;-using Math;--namespace BirdFont {--public class Stop : GLib.Object {-	public Color color = Color.black ();-	public double offset = 0;-	-	public Stop () {-	}-	-	public Stop copy () {-		Stop s = new Stop ();-		s.color = color.copy  ();-		s.offset = offset;-		return s;-	}-}--}diff --git a/libbirdfont/StrokeTool.vala b/libbirdfont/StrokeTool.valaindex 2996b38..a019db6 100644--- a/libbirdfont/StrokeTool.vala+++ b/libbirdfont/StrokeTool.vala@@ -14,15 +14,10 @@  using Cairo; using Math;+using SvgBird;  namespace BirdFont { -public enum LineCap {-	BUTT,-	SQUARE,-	ROUND-}- public class StrokeTool : GLib.Object { 	 	public static double stroke_width = 0;@@ -31,7 +26,7 @@ public class StrokeTool : GLib.Object { 	public static bool show_stroke_tools = false; 	public static bool convert_stroke = false; 	-	public static LineCap line_cap = LineCap.BUTT;+	public static SvgBird.LineCap line_cap = SvgBird.LineCap.BUTT; 	 	StrokeTask task; @@ -51,22 +46,27 @@ public class StrokeTool : GLib.Object { 		convert_stroke = true;	 		g.store_undo_state (); 		-		foreach (Path p in g.active_paths) {-			if (p.stroke > 0) {-				paths.append (p.get_completed_stroke ());+		foreach (SvgBird.Object o in g.active_paths) {+			if (o is PathObject) {+				PathObject path = (PathObject) o;+				Path p = path.get_path ();+				+				if (p.stroke > 0) {+					paths.append (p.get_completed_stroke ());+				} 			} 		}  		if (paths.paths.size > 0) {-			foreach (Path p in g.active_paths) {-				g.layers.remove_path (p);+			foreach (SvgBird.Object o in g.active_paths) {+				g.layers.remove (o); 			} 			 			g.active_paths.clear ();  			foreach (Path np in paths.paths) { 				g.add_path (np);-				g.active_paths.add (np);+				g.active_paths.add (new PathObject.for_path (np)); 			} 			 			PenTool.update_orientation ();@@ -134,11 +134,15 @@ public class StrokeTool : GLib.Object { 		 		g.store_undo_state (); -		foreach (Path p in g.active_paths) {-			if (p.stroke == 0) {-				o.add (p);-			} else {-				o.append (p.get_completed_stroke ());+		foreach (SvgBird.Object object in g.active_paths) {+			if (object is PathObject) {+				Path p = ((PathObject) object).get_path ();+				+				if (p.stroke == 0) {+					o.add (p);+				} else {+					o.append (p.get_completed_stroke ());+				} 			} 		} 						@@ -217,8 +221,8 @@ public class StrokeTool : GLib.Object { 			return; 		} 				-		foreach (Path p in g.active_paths) {-			g.delete_path (p);+		foreach (SvgBird.Object object in g.active_paths) {+			g.layers.remove (object); 		} 		 		g.clear_active_paths ();@@ -226,8 +230,9 @@ public class StrokeTool : GLib.Object { 		remove_merged_curve_parts (new_paths); 	 		foreach (Path p in new_paths.paths) {-			g.add_path (p);-			g.add_active_path (null, p);+			PathObject path = new PathObject.for_path (p);+			g.add_object (path);+			g.add_active_object (null, path); 		} 		 		PenTool.update_orientation ();@@ -1141,9 +1146,9 @@ public class StrokeTool : GLib.Object { 	}  	void add_line_cap (Path path, Path stroke1, Path stroke2, bool last_cap) {-		if (path.line_cap == LineCap.SQUARE) {+		if (path.line_cap == SvgBird.LineCap.SQUARE) { 			add_square_cap (path, stroke1, stroke2, last_cap);-		} else if (path.line_cap == LineCap.ROUND) {+		} else if (path.line_cap == SvgBird.LineCap.ROUND) { 			add_round_cap (path, stroke1, stroke2, last_cap); 		} 	}diff --git a/libbirdfont/Svg.vala b/libbirdfont/Svg.valaindex 5b2682b..82eaf9a 100644--- a/libbirdfont/Svg.vala+++ b/libbirdfont/Svg.vala@@ -16,6 +16,8 @@ using Cairo;  namespace BirdFont { +// FIXME: substrings+ public class Svg {  	/** Export to svg glyph data. */diff --git a/libbirdfont/SvgArc.vala b/libbirdfont/SvgArc.valadeleted file mode 100644index 92f3689..0000000--- a/libbirdfont/SvgArc.vala+++ /dev/null@@ -1,181 +0,0 @@-/*- * BirdFont code from SVG Salamander- * - * Copyright (c) 2004, Mark McKay- * Copyright (c) 2014, Johan Mattsson- * All rights reserved.- *- * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following- * conditions are met:- *- *   - Redistributions of source code must retain the above - *     copyright notice, this list of conditions and the following- *     disclaimer.- *   - Redistributions in binary form must reproduce the above- *     copyright notice, this list of conditions and the following- *     disclaimer in the documentation and/or other materials - *     provided with the distribution.- *- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE- * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED- * OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Mark McKay can be contacted at mark@kitfox.com.  Salamander and other- * projects can be found at http://www.kitfox.com- *- * Created on January 26, 2004, 8:40 PM- * Adapded to BirdFont on Juli 2, 2014, 5:01 PM- */--using Math;--namespace BirdFont {--/** Convert an SVG arc instruction to a Beziér path. */-static void add_arc_points (BezierPoints[] bezier_points, ref int bi, double x0, double y0, double rx, double ry, double angle, bool largeArcFlag, bool sweepFlag, double x, double y) {--	//-	// Elliptical arc implementation based on the SVG specification notes-	//--	double dx2, dy2, cosAngle, sinAngle;-	double x1, y1, Prx, Pry, Px1, Py1, radiiCheck;-	double sign, sq, coef, cx1, cy1;-	double sx2, sy2, cx, cy;-	double ux, uy, vx, vy, p, n;-	double angleStart, angleExtent;-	double s, step, theta;-	-	// Compute the half distance between the current and the final point-	dx2 = (x0 - x) / 2.0;-	dy2 = (y0 - y) / 2.0;-	-	// Convert angle from degrees to radians-	angle = 2 * PI * ((angle % 360.0) / 360.0);-	-	cosAngle = cos (angle);-	sinAngle = sin (angle);--	//-	// Step 1 : Compute (x1, y1)-	//-	x1 = cosAngle * dx2 + sinAngle * dy2;-	y1 = -sinAngle * dx2 + cosAngle * dy2;-	-	// Ensure radii are large enough-	rx = fabs(rx);-	ry = fabs(ry);-	Prx = rx * rx;-	Pry = ry * ry;-	Px1 = x1 * x1;-	Py1 = y1 * y1;--	-	// Check that radii are large enough-	radiiCheck = Px1 / Prx + Py1 / Pry;-	-	if (radiiCheck > 1) {-		rx = sqrt (radiiCheck) * rx;-		ry = sqrt (radiiCheck) * ry;-		Prx = rx * rx;-		Pry = ry * ry;-	}--	//-	// Step 2 : Compute (cx1, cy1)-	//-	sign = (largeArcFlag == sweepFlag) ? -1 : 1;-	sq = ((Prx * Pry) - (Prx * Py1) - (Pry * Px1)) / ((Prx * Py1) + (Pry * Px1));-	sq = (sq < 0) ? 0 : sq;-	coef = (sign * Math.sqrt(sq));-	cx1 = coef * ((rx * y1) / ry);-	cy1 = coef * -((ry * x1) / rx);--	//-	// Step 3 : Compute (cx, cy) from (cx1, cy1)-	//-	-	sx2 = (x0 + x) / 2.0;-	sy2 = (y0 + y) / 2.0;-	cx = sx2 - (cosAngle * cx1 - sinAngle * cy1);-	cy = sy2 - (sinAngle * cx1 + cosAngle * cy1);--	//-	// Step 4 : Compute the angleStart (angle1) and the angleExtent (dangle)-	//-	-	ux = (x1 - cx1) / rx;-	uy = (y1 - cy1) / ry;-	vx = (-x1 - cx1) / rx;-	vy = (-y1 - cy1) / ry;--	// Compute the angle start-	n = sqrt((ux * ux) + (uy * uy));-	p = ux; // (1 * ux) + (0 * uy)-	sign = (uy < 0) ? -1d : 1d;-	angleStart = sign * acos(p / n);--	// Compute the angle extent-	n = Math.sqrt((ux * ux + uy * uy) * (vx * vx + vy * vy));-	p = ux * vx + uy * vy;-	sign = (ux * vy - uy * vx < 0) ? -1d : 1d;-	angleExtent = sign * Math.acos(p / n);-	-	if(!sweepFlag && angleExtent > 0) {-		angleExtent -= 2 *PI;-	} else if (sweepFlag && angleExtent < 0) {-		angleExtent += 2 *PI;-	}-	angleExtent %= 2 * PI;-	angleStart %= 2 * PI;--	angleExtent *= -1;-	angleStart *= -1;-	-	// Approximate the path with Beziér points-	s = (angleExtent > 0) ? 1 : -1;-	step = fabs (angleExtent) / (2 * fabs (angleExtent));--	theta = PI - angleStart - angleExtent;-	-	bezier_points[bi].type = 'L';-	bezier_points[bi].svg_type = 'a';--	bezier_points[bi].x0 = cx + rx * cos (theta);-	bezier_points[bi].y0 = cy + ry * sin (theta);-									-	bi++;-					-	for (double a = 0; a < fabs (angleExtent); a += step) {-		theta = PI - angleStart - angleExtent + s * a;--		return_if_fail (0 <= bi < bezier_points.length);--		bezier_points[bi].type = 'S';-		bezier_points[bi].svg_type = 'a';--		bezier_points[bi].x0 = cx + rx * cos (theta);-		bezier_points[bi].y0 = cy + ry * sin (theta);--		bezier_points[bi].x1 = cx + rx * cos (theta + 1 * step / 4);-		bezier_points[bi].y1 = cy + ry * sin (theta + 1 * step / 4);-		-		bezier_points[bi].x2 = cx + rx * cos (theta + 2 * step / 4);-		bezier_points[bi].y2 = cy + ry * sin (theta + 2 * step / 4);-						-		bi++;-	}-}--}-	diff --git a/libbirdfont/SvgFontFormatWriter.vala b/libbirdfont/SvgFontFormatWriter.valaindex d4948d7..b2e907b 100644--- a/libbirdfont/SvgFontFormatWriter.vala+++ b/libbirdfont/SvgFontFormatWriter.vala@@ -14,7 +14,7 @@  namespace BirdFont { -class SvgFontFormatWriter : Object  {+class SvgFontFormatWriter : GLib.Object  {  	DataOutputStream os; diff --git a/libbirdfont/SvgParser.vala b/libbirdfont/SvgParser.valaindex 5060f18..cc07cdc 100644--- a/libbirdfont/SvgParser.vala+++ b/libbirdfont/SvgParser.vala@@ -14,6 +14,7 @@  using B; using Math;+using SvgBird;  namespace BirdFont { @@ -63,18 +64,15 @@ public class SvgParser { 	} 		 	public static void import_color_svg (Glyph glyph, string path) {-		try {-			string data;-			FileUtils.get_contents (path, out data);-			glyph.color_svg_data = data;--			if (glyph.color_svg_data != null) {-				glyph.svg_x = glyph.left_limit;-				glyph.svg_y = BirdFont.get_current_font ().top_position;-			}-		} catch (GLib.Error e) {-			warning (e.message);-		}+		EmbeddedSvg drawing = SvgParser.parse_embedded_svg_file (path);+		+		Layer layer = new Layer ();+		layer.name = "SVG";+		layer.add_object (drawing);+		+		glyph.add_layer (layer);+		+		// FIXME: update GUI 	} 	 	public static void import_folder (SvgType type) {@@ -127,7 +125,6 @@ public class SvgParser { 		string[] lines = xml_data.split ("\n"); 		bool has_format = false; 		SvgParser parser = new SvgParser ();-		XmlParser xmlparser;  		foreach (string l in lines) { 			if (l.index_of ("Illustrator") > -1 || l.index_of ("illustrator") > -1) {@@ -150,22 +147,15 @@ public class SvgParser { 			warn_if_test ("No format identifier found in SVG parser.\n"); 		} -		xmlparser = new XmlParser (xml_data);-		-		if (!xmlparser.validate()) {-			warning("Invalid XML in SVG parser."); -		}-		-		path_list = parser.parse_svg_file (xmlparser.get_root_tag ());+		XmlTree xml_tree = new XmlTree (xml_data);+		path_list = parser.parse_svg_file (xml_tree.get_root ()); 	 		glyph = MainWindow.get_current_glyph (); 		foreach (Path p in path_list.paths) {-			glyph.add_path (p);-		}-		-		foreach (Path p in path_list.paths) {-			glyph.add_active_path (null, p); // FIXME: groups-			p.update_region_boundaries ();+			PathObject path = new PathObject.for_path (p);+			glyph.add_object (path);+			glyph.add_active_object (null, path); // FIXME: groups+			path.update_region_boundaries (); 		} 		 		glyph.close_path ();	@@ -197,10 +187,10 @@ public class SvgParser { 		import_svg_data (svg_data); 	} 	-	private PathList parse_svg_file (Tag tag) {+	private PathList parse_svg_file (XmlElement tag) { 		Layer pl = new Layer (); 	-		foreach (Tag t in tag) {+		foreach (XmlElement t in tag) { 			 			if (t.get_name () == "g") { 				parse_layer (t, pl);@@ -235,10 +225,10 @@ public class SvgParser { 			}			 		} 		-		return pl.get_all_paths ();+		return LayerUtils.get_all_paths (pl); 	} 	-	private void parse_layer (Tag tag, Layer pl) {+	private void parse_layer (XmlElement tag, Layer pl) { 		Layer layer; 		bool hidden = false; @@ -258,7 +248,7 @@ public class SvgParser { 			return; 		} 					-		foreach (Tag t in tag) {+		foreach (XmlElement t in tag) { 			if (t.get_name () == "path") { 				parse_path (t, pl); 			}@@ -266,7 +256,7 @@ public class SvgParser { 			if (t.get_name () == "g") { 				layer = new Layer (); 				parse_layer (t, layer);-				pl.subgroups.add (layer);+				pl.objects.add (layer); 			} 			 			if (t.get_name () == "polygon") {@@ -302,12 +292,20 @@ public class SvgParser { 	} 	 	private void transform (string transform_functions, Layer layer) {-		transform_paths (transform_functions, layer.paths);+		PathList path_list = new PathList ();+		+		foreach (SvgBird.Object o in layer.objects) {+			if (o is PathObject) {+				path_list.add (((PathObject) o).get_path ());+			}+		}+		+		transform_paths (transform_functions, path_list); 		transform_subgroups (transform_functions, layer); 	} 	 	private void transform_subgroups (string transform_functions, Layer layer) {-		foreach (Layer subgroup in layer.subgroups) {+		foreach (Layer subgroup in layer.get_sublayers ()) { 			transform (transform_functions, subgroup); 		} 	}@@ -315,7 +313,7 @@ public class SvgParser { 	private void transform_paths (string transform_functions, PathList pl) { 		string data = transform_functions.dup (); 		string[] functions;-		+				 		// use only a single space as separator 		while (data.index_of ("  ") > -1) { 			data = data.replace ("  ", " ");@@ -478,7 +476,7 @@ public class SvgParser { 		return param.strip();			 	} 	-	private void parse_circle (Tag tag, Layer pl) {+	private void parse_circle (XmlElement tag, Layer pl) { 		Path p; 		double x, y, r; 		Glyph g;@@ -511,7 +509,7 @@ public class SvgParser { 			} 		} 		-		style = SvgStyle.parse (tag.get_attributes ());+		style = SvgStyle.parse (null, style, tag); 		 		if (hidden) { 			return;@@ -537,11 +535,11 @@ public class SvgParser { 			} 		} 		-		style.apply (npl);-		pl.paths.append (npl);+		npl.apply_style (style);+		append_paths (pl, npl); 	} -	private void parse_ellipse (Tag tag, Layer pl) {+	private void parse_ellipse (XmlElement tag, Layer pl) { 		Path p; 		double x, y, rx, ry; 		Glyph g;@@ -579,7 +577,7 @@ public class SvgParser { 			} 		} 		-		style = SvgStyle.parse (tag.get_attributes ());+		style = SvgStyle.parse (null, style, tag); 		 		if (hidden) { 			return;@@ -605,11 +603,11 @@ public class SvgParser { 			} 		} 		-		style.apply (npl);-		pl.paths.append (npl);+		npl.apply_style (style);+		append_paths (pl, npl); 	} -	private void parse_line (Tag tag, Layer pl) {+	private void parse_line (XmlElement tag, Layer pl) { 		Path p; 		double x1, y1, x2, y2; 		BezierPoints[] bezier_points;@@ -645,7 +643,7 @@ public class SvgParser { 			} 		} 		-		style = SvgStyle.parse (tag.get_attributes ());+		style = SvgStyle.parse (null, style, tag); 		 		if (hidden) { 			return;@@ -682,11 +680,11 @@ public class SvgParser { 			} 		} 		-		style.apply (npl);-		pl.paths.append (npl);+		npl.apply_style (style);+		append_paths (pl, npl); 	} 		-	private void parse_rect (Tag tag, Layer pl) {+	private void parse_rect (XmlElement tag, Layer layer) { 		Path p; 		double x, y, x2, y2; 		BezierPoints[] bezier_points;@@ -723,7 +721,7 @@ public class SvgParser { 			} 		} 		-		style = SvgStyle.parse (tag.get_attributes ());+		style = SvgStyle.parse (null, style, tag); 		 		if (hidden) { 			return;@@ -783,26 +781,29 @@ public class SvgParser { 			} 		} 		-		style.apply (npl);-		pl.paths.append (npl);+		npl.apply_style (style);+		append_paths (layer, npl); 	} 	-	private void parse_polygon (Tag tag, Layer pl) {+	private void parse_polygon (XmlElement tag, Layer layer) { 		PathList path_list = get_polyline (tag); 		 		foreach (Path p in path_list.paths) { 			p.close (); 		} 		-		pl.paths.append (path_list);+		append_paths (layer, path_list); 	} +	static void append_paths (Layer layer, PathList pl) {+		LayerUtils.append_paths (layer, pl);+	} 	-	private void parse_polyline (Tag tag, Layer pl) {	-		pl.paths.append (get_polyline (tag));+	private void parse_polyline (XmlElement tag, Layer layer) {	+		append_paths (layer, get_polyline (tag)); 	} 	-	private PathList get_polyline (Tag tag) {+	private PathList get_polyline (XmlElement tag) { 		Path p = new Path (); 		bool hidden = false; 		PathList path_list = new PathList ();@@ -818,14 +819,14 @@ public class SvgParser { 			} 		} -		style = SvgStyle.parse (tag.get_attributes ());+		style = SvgStyle.parse (null, style, tag); 		 		if (hidden) { 			return path_list; 		} 		 		path_list.add (p);-		style.apply (path_list);+		path_list.apply_style (style); 		 		foreach (Attribute attr in tag.get_attributes ()) { 			if (attr.get_name () == "transform") {@@ -836,7 +837,7 @@ public class SvgParser { 		return path_list; 	} 	-	private void parse_path (Tag tag, Layer pl) {+	private void parse_path (XmlElement tag, Layer layer) { 		Glyph glyph = MainWindow.get_current_glyph (); 		PathList path_list = new PathList (); 		SvgStyle style = new SvgStyle ();@@ -858,42 +859,52 @@ public class SvgParser { 			} 		} 		-		style = SvgStyle.parse (tag.get_attributes ());+		style = SvgStyle.parse (null, style, tag); 		 		if (hidden) { 			return; 		}-	-		pl.paths.append (path_list);-		style.apply (path_list);+		+		foreach (Path path in path_list.paths) {+			LayerUtils.add_path (layer, path);+		}+		+		path_list.apply_style (style);  		// assume the even odd rule is applied and convert the path 		// to a path using the non-zero rule 		int inside_count; 		bool inside;-		foreach (Path p1 in pl.paths.paths) {-			inside_count = 0;-			-			foreach (Path p2 in pl.paths.paths) {-				if (p1 != p2) {-					inside = true;+		foreach (SvgBird.Object o1 in layer.objects) {+			if (o1 is PathObject) {+				Path p1 = ((PathObject) o1).get_path ();+				inside_count = 0;+				+				foreach (SvgBird.Object o2 in layer.objects) {+					if (o2 is PathObject) {+						Path p2 = ((PathObject) o2).get_path (); 					-					foreach (EditPoint ep in p1.points) {-						if (!is_inside (ep, p2)) {-							inside = false;+						if (p1 != p2) {+							inside = true;+							+							foreach (EditPoint ep in p1.points) {+								if (!is_inside (ep, p2)) {+									inside = false;+								}+							}++							if (inside) {+								inside_count++; +							} 						} 					}--					if (inside) {-						inside_count++; -					} 				}-			}--			if (inside_count % 2 == 0) {-				p1.force_direction (Direction.CLOCKWISE);-			} else {-				p1.force_direction (Direction.COUNTER_CLOCKWISE);+				+				if (inside_count % 2 == 0) {+					p1.force_direction (Direction.CLOCKWISE);+				} else {+					p1.force_direction (Direction.COUNTER_CLOCKWISE);+				} 			} 		} 		@@ -997,49 +1008,6 @@ public class SvgParser { 		 		return inside; 	}--	/** Add space as separator to svg data. -	 * @param d svg data-	 */-	static string add_separators (string d) {-		string data = d;-		-		data = data.replace (",", " ");-		data = data.replace ("a", " a ");-		data = data.replace ("A", " A ");-		data = data.replace ("m", " m ");-		data = data.replace ("M", " M ");-		data = data.replace ("h", " h ");-		data = data.replace ("H", " H ");-		data = data.replace ("v", " v ");-		data = data.replace ("V", " V ");-		data = data.replace ("l", " l ");-		data = data.replace ("L", " L ");-		data = data.replace ("q", " q ");-		data = data.replace ("Q", " Q ");		-		data = data.replace ("c", " c ");-		data = data.replace ("C", " C ");-		data = data.replace ("t", " t ");-		data = data.replace ("T", " T ");-		data = data.replace ("s", " s ");-		data = data.replace ("S", " S ");-		data = data.replace ("zM", " z M ");-		data = data.replace ("zm", " z m ");-		data = data.replace ("z", " z ");-		data = data.replace ("Z", " Z ");-		data = data.replace ("-", " -");-		data = data.replace ("e -", "e-"); // minus can be either separator or a negative exponent-		data = data.replace ("\t", " ");-		data = data.replace ("\r\n", " ");-		data = data.replace ("\n", " ");-		-		// use only a single space as separator-		while (data.index_of ("  ") > -1) {-			data = data.replace ("  ", " ");-		}-		-		return data;-	} 	 	public void add_path_to_glyph (string d, Glyph g, bool svg_glyph = false, double units = 1) { 		PathList p = parse_svg_data (d, g, svg_glyph, units);@@ -1048,6 +1016,36 @@ public class SvgParser { 		} 	} 	+	public void get_bezier_points (string svg_data, out BezierPoints[] instructions, out int points, bool svg_glyph) {+		SvgFile.get_bezier_points (svg_data, out instructions, out points, svg_glyph);+		Gee.ArrayList<BezierPoints> bezier_points = new Gee.ArrayList<BezierPoints> ();+		BezierPoints[] arc_data = new BezierPoints[8];+		+		for (int i = 0; i < points; i++) {+			if (instructions[i].type == 'A') {+				int arc_index = 0;+				+				add_arc_points (arc_data, ref arc_index, +					instructions[i].x0, instructions[i].y0,+					instructions[i].rx, instructions[i].ry,+					instructions[i].angle,+					instructions[i].large_arc,+					instructions[i].sweep,+					instructions[i].x1, instructions[i].y1);+					+				for (int j = 0; j < arc_index; j++) {+					bezier_points.add (instructions[j]);+				}+			}+			+			bezier_points.add (instructions[i]);+		}+	+		instructions = new BezierPoints[bezier_points.size];+		for (int i = 0; i < bezier_points.size; i++) {+			instructions[i] = bezier_points.get (i);+		}+	} 	/**  	 * @param d svg data 	 * @param glyph use lines from this glyph but don't add the generated paths@@ -1056,556 +1054,25 @@ public class SvgParser { 	 * @return the new paths 	 */ 	public PathList parse_svg_data (string d, Glyph glyph, bool svg_glyph = false, double units = 1) {-		double px = 0;-		double py = 0;-		double px2 = 0;-		double py2 = 0;-		double cx = 0;-		double cy = 0;-		string data; 		Font font; 		PathList path_list = new PathList (); 		BezierPoints[] bezier_points;-		string[] c;-		double arc_rx, arc_ry;-		double arc_rotation;-		int large_arc;-		int arc_sweep;-		double arc_dest_x, arc_dest_y;+		int points;  		font = BirdFont.get_current_font ();-		-		data = add_separators (d);-		c = data.split (" ");-		bezier_points = new BezierPoints[8 * c.length + 1]; // the arc instruction can use up to eight points-		-		for (int i = 0; i < 2 * c.length + 1; i++) {-			bezier_points[i] = new BezierPoints ();-		}-		-		int bi = 0;-		-		// parse path-		int i = -1;-		while (++i < c.length && bi < bezier_points.length) {	-			if (c[i] == "m") {-				while (i + 2 < c.length && is_point (c[i + 1])) {-					bezier_points[bi].type = 'M';-					bezier_points[bi].svg_type = 'm';-					-					px += parse_double (c[++i]);-					-					if (svg_glyph) {-						py += parse_double (c[++i]);-					} else {-						py += -parse_double (c[++i]);-					}-					-					bezier_points[bi].x0 = px;-					bezier_points[bi].y0 = py;-					bi++;-				}-			} else if (c[i] == "M") {-				while (i + 2 < c.length && is_point (c[i + 1])) {-					bezier_points[bi].type = 'M';-					bezier_points[bi].svg_type = 'M';-					-					px = parse_double (c[++i]);-					-					if (svg_glyph) {-						py = parse_double (c[++i]);-					} else {-						py = -parse_double (c[++i]);-					}-					-					bezier_points[bi].x0 = px;-					bezier_points[bi].y0 = py;-					bi++;-				}-			} else if (c[i] == "h") {-				while (i + 1 < c.length && is_point (c[i + 1])) {-					bezier_points[bi].type = 'L';-					bezier_points[bi].svg_type = 'h';-					-					px += parse_double (c[++i]);--					bezier_points[bi].x0 = px;-					bezier_points[bi].y0 = py;-					bi++;-				}-			} else if (i + 1 < c.length && c[i] == "H") {-				while (is_point (c[i + 1])) {-					bezier_points[bi].type = 'L';-					bezier_points[bi].svg_type = 'H';-					-					px = parse_double (c[++i]);--					bezier_points[bi].x0 = px;-					bezier_points[bi].y0 = py;-					bi++;-				}-			} else if (c[i] == "v") {-				while (i + 1 < c.length && is_point (c[i + 1])) {-					bezier_points[bi].type = 'L';-					bezier_points[bi].svg_type = 'v';-										-					if (svg_glyph) {-						py = py + parse_double (c[++i]);-					} else {-						py = py - parse_double (c[++i]);-					}-					-					bezier_points[bi].x0 = px;-					bezier_points[bi].y0 = py;-					bi++;-				}				-			} else if (i + 1 < c.length && c[i] == "V") {-				while (is_point (c[i + 1])) {-					bezier_points[bi].type = 'L';-					bezier_points[bi].svg_type = 'V';-										-					if (svg_glyph) {-						py = parse_double (c[++i]);-					} else {-						py = -parse_double (c[++i]);-					}-					-					bezier_points[bi].x0 = px;-					bezier_points[bi].y0 = py;-					bi++;-				}-			} else if (c[i] == "l") {-				while (i + 2 < c.length && is_point (c[i + 1])) {-					bezier_points[bi].type = 'L';-					bezier_points[bi].svg_type = 'l';-										-					cx = px + parse_double (c[++i]);-					-					if (svg_glyph) {-						cy = py + parse_double (c[++i]);-					} else {-						cy = py - parse_double (c[++i]);-					}-					-					px = cx;-					py = cy;--					bezier_points[bi].x0 = cx;-					bezier_points[bi].y0 = cy;-					bi++;-				}-			} else if (c[i] == "L") {-				while (i + 2 < c.length && is_point (c[i + 1])) {-					bezier_points[bi].type = 'L';-					bezier_points[bi].svg_type = 'L';-										-					cx = parse_double (c[++i]);-					-					if (svg_glyph) {-						cy = parse_double (c[++i]);-					} else {-						cy = -parse_double (c[++i]);-					}-					-					px = cx;-					py = cy;-					-					bezier_points[bi].x0 = cx;-					bezier_points[bi].y0 = cy;-					bi++;				-				}	-			} else if (c[i] == "c") {-				while (i + 6 < c.length && is_point (c[i + 1])) {-					bezier_points[bi].type = 'C';-					bezier_points[bi].svg_type = 'C';-										-					cx = px + parse_double (c[++i]);-					-					if (svg_glyph) {-						cy = py + parse_double (c[++i]);-					} else {-						cy = py - parse_double (c[++i]);-					}-					-					bezier_points[bi].x0 = cx;-					bezier_points[bi].y0 = cy;-										-					cx = px + parse_double (c[++i]);-					-					if (svg_glyph) {-						cy = py + parse_double (c[++i]);-					} else {-						cy = py - parse_double (c[++i]);-					}-					-					px2 = cx;-					py2 = cy;-										-					bezier_points[bi].x1 = px2;-					bezier_points[bi].y1 = py2;-										-					cx = px + parse_double (c[++i]);-					-					if (svg_glyph) {-						cy = py + parse_double (c[++i]);-					} else {-						cy = py + -parse_double (c[++i]);-					}-					-					bezier_points[bi].x2 = cx;-					bezier_points[bi].y2 = cy;-										-					px = cx;-					py = cy;-					-					bi++;-				}-			} else if (c[i] == "C") {-				while (i + 6 < c.length && is_point (c[i + 1])) {-					bezier_points[bi].type = 'C';-					bezier_points[bi].svg_type = 'C';-										-					cx = parse_double (c[++i]);-					-					if (svg_glyph) {-						cy = parse_double (c[++i]);-					} else {-						cy = -parse_double (c[++i]);-					}-									-					bezier_points[bi].x0 = cx;-					bezier_points[bi].y0 = cy;-					-					cx = parse_double (c[++i]);-					-					if (svg_glyph) {-						cy = parse_double (c[++i]);-					} else {-						cy = -parse_double (c[++i]);-					}-					-					px2 = cx;-					py2 = cy;-					-					bezier_points[bi].x1 = cx;-					bezier_points[bi].y1 = cy;-										-					cx = parse_double (c[++i]);-					-					if (svg_glyph) {-						cy = parse_double (c[++i]);-					} else {-						cy = -parse_double (c[++i]);-					}-					-					bezier_points[bi].x2 = cx;-					bezier_points[bi].y2 = cy;-										-					px = cx;-					py = cy;-					-					bi++;				-				}	-			} else if (c[i] == "q") {-				while (i + 4 < c.length && is_point (c[i + 1])) {-					bezier_points[bi].type = 'Q';-					bezier_points[bi].svg_type = 'q';-										-					cx = px + parse_double (c[++i]);-					-					if (svg_glyph) {-						cy = py + parse_double (c[++i]);-					} else {-						cy = py - parse_double (c[++i]);-					}-					-					bezier_points[bi].x0 = cx;-					bezier_points[bi].y0 = cy;-										-					px2 = cx;-					py2 = cy;-										-					cx = px + parse_double (c[++i]);-					-					if (svg_glyph) {-						cy = py + parse_double (c[++i]);-					} else {-						cy = py - parse_double (c[++i]);-					}-					-					bezier_points[bi].x1 = cx;-					bezier_points[bi].y1 = cy;-										-					px = cx;-					py = cy;-					-					bi++;-				}-			} else if (c[i] == "Q") {--				while (i + 4 < c.length && is_point (c[i + 1])) {-					bezier_points[bi].type = 'Q';-					bezier_points[bi].svg_type = 'Q';-										-					cx = parse_double (c[++i]);-					-					if (svg_glyph) {-						cy = parse_double (c[++i]);-					} else {-						cy = -parse_double (c[++i]);-					}-					-					bezier_points[bi].x0 = cx;-					bezier_points[bi].y0 = cy;-					-					px2 = cx;-					py2 = cy;-										-					cx = parse_double (c[++i]);-					-					if (svg_glyph) {-						cy = parse_double (c[++i]);-					} else {-						cy = -parse_double (c[++i]);-					}-					-					px = cx;-					py = cy;--					bezier_points[bi].x1 = cx;-					bezier_points[bi].y1 = cy;-										-					bi++;					-				}	-			} else if (c[i] == "t") {-				while (i + 2 < c.length && is_point (c[i + 1])) {-					bezier_points[bi].type = 'Q';-					bezier_points[bi].svg_type = 't';-										-					// the first point is the reflection-					cx = 2 * px - px2;-					cy = 2 * py - py2; // if (svg_glyph) ?-					-					bezier_points[bi].x0 = cx;-					bezier_points[bi].y0 = cy;-					-					px2 = cx;-					py2 = cy;-										-					cx = px + parse_double (c[++i]);-					-					if (svg_glyph) {-						cy = py + parse_double (c[++i]);-					} else {-						cy = py - parse_double (c[++i]);-					}-					-					px = cx;-					py = cy;-					-					bezier_points[bi].x1 = px;-					bezier_points[bi].y1 = py;-										-					bi++;-				}-			} else if (c[i] == "T") {-				while (i + 2 < c.length && is_point (c[i + 1])) {-					bezier_points[bi].type = 'Q';-					bezier_points[bi].svg_type = 'T';-										-					// the reflection-					cx = 2 * px - px2;-					cy = 2 * py - py2; // if (svg_glyph) ?-					-					bezier_points[bi].x0 = cx;-					bezier_points[bi].y0 = cy;-										-					px2 = cx;-					py2 = cy;-					-					cx = parse_double (c[++i]);-					-					if (svg_glyph) {-						cy = parse_double (c[++i]);-					} else {-						cy = -parse_double (c[++i]);-					}-					-					px = cx;-					py = cy;-					-					bezier_points[bi].x1 = px;-					bezier_points[bi].y1 = py;-										-					bi++;				-				}-			} else if (c[i] == "s") {-				while (i + 4 < c.length && is_point (c[i + 1])) {-					bezier_points[bi].type = 'C';-					bezier_points[bi].svg_type = 's';-										-					// the first point is the reflection-					cx = 2 * px - px2;-					cy = 2 * py - py2; // if (svg_glyph) ?--					bezier_points[bi].x0 = cx;-					bezier_points[bi].y0 = cy;-															-					cx = px + parse_double (c[++i]);-					-					if (svg_glyph) {-						cy = py + parse_double (c[++i]);-					} else {-						cy = py - parse_double (c[++i]);-					}-					-					px2 = cx;-					py2 = cy;-					-					bezier_points[bi].x1 = px2;-					bezier_points[bi].y1 = py2;-					-					cx = px + parse_double (c[++i]);-					-					if (svg_glyph) {-						cy = py + parse_double (c[++i]);-					} else {-						cy = py - parse_double (c[++i]);-					}-					-					bezier_points[bi].x2 = cx;-					bezier_points[bi].y2 = cy;-												-					px = cx;-					py = cy;-					-					bi++;-				}-			} else if (c[i] == "S") {-				while (i + 4 < c.length && is_point (c[i + 1])) {-					bezier_points[bi].type = 'C';-					bezier_points[bi].svg_type = 'S';-										-					// the reflection-					cx = 2 * px - px2;-					cy = 2 * py - py2; // if (svg_glyph) ?			--					bezier_points[bi].x0 = cx;-					bezier_points[bi].y0 = cy;-					-					// the other two are regular cubic points-					cx = parse_double (c[++i]);-					-					if (svg_glyph) {-						cy = parse_double (c[++i]);-					} else {-						cy = -parse_double (c[++i]);-					}-					-					px2 = cx;-					py2 = cy;-					-					bezier_points[bi].x1 = px2;-					bezier_points[bi].y1 = py2;-					-					cx = parse_double (c[++i]);-					-					if (svg_glyph) {-						cy = parse_double (c[++i]);-					} else {-						cy = -parse_double (c[++i]);-					}-					-					bezier_points[bi].x2 = cx;-					bezier_points[bi].y2 = cy;-					-					px = cx;-					py = cy;	-					-					bi++;				-				}-			} else if (c[i] == "a") {-				while (i + 7 < c.length && is_point (c[i + 1])) {					-					arc_rx = parse_double (c[++i]);-					arc_ry = parse_double (c[++i]);-					-					arc_rotation = parse_double (c[++i]);-					large_arc = parse_int (c[++i]);-					arc_sweep = parse_int (c[++i]);-							-					cx = px + parse_double (c[++i]);-					-					if (svg_glyph) {-						cy = py + parse_double (c[++i]);-					} else {-						cy = py - parse_double (c[++i]);-					}-					-					arc_dest_x = cx;-					arc_dest_y = cy;-					-					add_arc_points (bezier_points, ref bi, px, py, arc_rx, arc_ry, arc_rotation, large_arc == 1, arc_sweep == 1, cx, cy);-					-					px = cx;-					py = cy;-					-					-				}-			} else if (i + 7 < c.length && c[i] == "A") {-				while (is_point (c[i + 1])) {					-					arc_rx = parse_double (c[++i]);-					arc_ry = parse_double (c[++i]);-					-					arc_rotation = parse_double (c[++i]);-					large_arc = parse_int (c[++i]);-					arc_sweep = parse_int (c[++i]);-							-					cx = parse_double (c[++i]);-					-					if (svg_glyph) {-						cy = parse_double (c[++i]);-					} else {-						cy = -parse_double (c[++i]);-					}-					-					arc_dest_x = cx;-					arc_dest_y = cy;-					-					add_arc_points (bezier_points, ref bi, px, py, arc_rx, arc_ry, arc_rotation, large_arc == 1, arc_sweep == 1, cx, cy);--					px = cx;-					py = cy;-					-					-				}-			} else if (c[i] == "z") {-				bezier_points[bi].type = 'z';-				bezier_points[bi].svg_type = 'z';-				-				bi++;-			} else if (c[i] == "Z") {-				bezier_points[bi].type = 'z';-				bezier_points[bi].svg_type = 'z';-									-				bi++;-			} else if (c[i] == "") {-			} else if (c[i] == " ") {-			} else {-				warning (@"Unknown instruction: $(c[i])");-			}-		}-		-		if (bi == 0) {+		SvgFile.get_bezier_points (d, out bezier_points, out points, svg_glyph);+	+		if (points == 0) { 			warning ("No points in path."); 			return path_list;	 		} 		-		move_and_resize (bezier_points, bi, svg_glyph, units, glyph);+		move_and_resize (bezier_points, points, svg_glyph, units, glyph); 		 		if (format == SvgFormat.ILLUSTRATOR) {-			path_list = create_paths_illustrator (bezier_points, bi);+			path_list = create_paths_illustrator (bezier_points, points); 		} else {-			path_list = create_paths_inkscape (bezier_points, bi);+			path_list = create_paths_inkscape (bezier_points, points); 		}  		// TODO: Find out if it is possible to tie handles.@@ -2016,29 +1483,13 @@ public class SvgParser { 		return path_list; 	} 	-	// TODO: implement a default svg parser--	static int parse_int (string? s) {-		if (is_null (s)) {-			warning ("null instead of string");-			return 0;-		}-		-		if (!is_point ((!) s)) {-			warning (@"Expecting an integer got: $((!) s)");-			return 0;-		}-		-		return int.parse ((!) s);-	}-	-	static double parse_double (string? s) {-		if (is_null (s)) {+	public static double parse_double (string? s) {+		if (unlikely (is_null (s))) { 			warning ("Got null instead of expected string."); 			return 0; 		} 		-		if (!is_point ((!) s)) {+		if (unlikely (!is_point ((!) s))) { 			warning (@"Expecting a double got: $((!) s)"); 			return 0; 		}@@ -2056,7 +1507,7 @@ public class SvgParser { 	} 	 	Path parse_poly_data (string polygon_points) {-		string data = add_separators (polygon_points);+		string data = SvgFile.add_separators (polygon_points); 		string[] c = data.split (" "); 		Path path; 		BezierPoints[] bezier_points = new BezierPoints[c.length + 1];@@ -2077,7 +1528,7 @@ public class SvgParser { 			}  			bezier_points[bi] = new BezierPoints ();-			bezier_points[bi].type == 'L';+			bezier_points[bi].type = 'L'; 			bezier_points[bi].x0 = parse_double (c[i]); 			bezier_points[bi].y0 = -parse_double (c[i + 1]); 			bi++;@@ -2097,6 +1548,82 @@ public class SvgParser { 		 		return path; 	}++	public static EmbeddedSvg parse_embedded_svg_file (string path) {+		string xml_data;+		+		try {+			FileUtils.get_contents (path, out xml_data);+			return parse_embedded_svg_data (xml_data);+		} catch (GLib.Error error) {+			warning (error.message);+		}+		+		SvgDrawing drawing = new SvgDrawing ();+		return new EmbeddedSvg (drawing);+	}++	public static EmbeddedSvg parse_embedded_svg_data (string xml_data) {+		XmlTree tree = new XmlTree (xml_data);+		SvgDrawing drawing = new SvgDrawing ();	+		SvgFile svg_file = new SvgFile (); ++		XmlElement root = tree.get_root ();+		drawing = svg_file.parse_svg_file (root);+		EmbeddedSvg svg = new EmbeddedSvg (drawing);+		svg.svg_data = xml_data;+		return svg;+	}++	/** Convert an SVG arc instruction to a Beziér path. */+	public static void add_arc_points (BezierPoints[] bezier_points, ref int bi, +		double x0, double y0, double rx, double ry, double angle,+		bool largeArcFlag, bool sweepFlag, double x, double y) {+		+		double angleStart, angleExtent;+		double s, step, theta;+		double cx, cy;+		+		cx = 0;+		cy = 0;+		+		// Approximate the path with Beziér points+		SvgBird.get_arc_arguments (x0, y0, rx, ry, angle, largeArcFlag, sweepFlag, x, y,+			out angleStart, out angleExtent, out cx, out cx);+		+		s = (angleExtent > 0) ? 1 : -1;+		step = fabs (angleExtent) / (2 * fabs (angleExtent));++		theta = PI - angleStart - angleExtent;+		+		bezier_points[bi].type = 'C';+		bezier_points[bi].svg_type = 'a';++		bezier_points[bi].x0 = cx + rx * cos (theta);+		bezier_points[bi].y0 = cy + ry * sin (theta);+		+		bi++;+						+		for (double a = 0; a < fabs (angleExtent); a += step) {+			theta = PI - angleStart - angleExtent + s * a;++			return_if_fail (0 <= bi < bezier_points.length);++			bezier_points[bi].type = 'S';+			bezier_points[bi].svg_type = 'a';++			bezier_points[bi].x0 = cx + rx * cos (theta);+			bezier_points[bi].y0 = cy + ry * sin (theta);++			bezier_points[bi].x1 = cx + rx * cos (theta + 1 * step / 4);+			bezier_points[bi].y1 = cy + ry * sin (theta + 1 * step / 4);+			+			bezier_points[bi].x2 = cx + rx * cos (theta + 2 * step / 4);+			bezier_points[bi].y2 = cy + ry * sin (theta + 2 * step / 4);+							+			bi++;+		}+	} }  }diff --git a/libbirdfont/SvgStyle.vala b/libbirdfont/SvgStyle.valadeleted file mode 100644index 33a6cdc..0000000--- a/libbirdfont/SvgStyle.vala+++ /dev/null@@ -1,124 +0,0 @@-/*-	Copyright (C) 2015 Johan Mattsson--	This library is free software; you can redistribute it and/or modify -	it under the terms of the GNU Lesser General Public License as -	published by the Free Software Foundation; either version 3 of the -	License, or (at your option) any later version.--	This library is distributed in the hope that it will be useful, but -	WITHOUT ANY WARRANTY; without even the implied warranty of -	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -	Lesser General Public License for more details.-*/--using B;-using Math;--namespace BirdFont {--public class SvgStyle {-	-	Gee.HashMap<string, string> style;-	-	public SvgStyle () {-		style = new Gee.HashMap<string, string> ();-	}-	-	public LineCap get_line_cap () {-		string l;-		-		if (!style.has_key ("stroke-linecap")) {-			return LineCap.BUTT;-		}-		-		l = style.get ("stroke-linecap");-		-		if (l == "round") {-			return LineCap.ROUND;-		} else if (l == "square") {-			return LineCap.SQUARE;-		}-		-		return LineCap.BUTT; 	-	}-	-	public bool has_stroke () {-		bool s = true;-		-		if (style.has_key ("stroke")) {-			s = style.get ("stroke") != "none";-		}-				-		return get_stroke_width () > 0 && s;-	}-		-	public double get_stroke_width () {-		if (!style.has_key ("stroke-width")) {-			return 0;-		}--		return double.parse (style.get ("stroke-width"));-	}-	-	-	public static SvgStyle parse (Attributes attributes) {-		SvgStyle s = new SvgStyle ();-		-		foreach (Attribute a in attributes) {-			if (a.get_name () == "style") {-				s.parse_key_value_pairs (a.get_content ());-			}-			-			if (a.get_name () == "stroke-width") {-				s.style.set ("stroke-width", a.get_content ());-			}--			if (a.get_name () == "stroke") {-				s.style.set ("stroke", a.get_content ());-			}--			if (a.get_name () == "fill") {-				s.style.set ("fill", a.get_content ());-			}-		}-		-		return s;-	}-	-	void parse_key_value_pairs (string svg_style) {-		string[] p = svg_style.split (";");-		string[] pair;-		string k, v;-		-		foreach (string kv in p) {-			pair = kv.split (":");-			-			if (pair.length != 2) {-				warning ("pair.length != 2");-				continue;-			}-			-			k = pair[0];-			v = pair[1];-			-			style.set (k, v);-		}-	}-	-	public void apply (PathList path_list) {-		foreach (Path p in path_list.paths) {-			if (has_stroke ()) {-				p.stroke = get_stroke_width ();-			} else {-				p.stroke = 0;-			}-			-			p.line_cap = get_line_cap ();-			p.reset_stroke ();-			p.update_region_boundaries ();		-		}-	}-}--}diff --git a/libbirdfont/TabContent.vala b/libbirdfont/TabContent.valaindex 4a1aa59..f45a1af 100644--- a/libbirdfont/TabContent.vala+++ b/libbirdfont/TabContent.vala@@ -1,5 +1,5 @@ /*-	Copyright (C) 2014 2015 Johan Mattsson+	Copyright (C) 2014 - 2016 Johan Mattsson  	This library is free software; you can redistribute it and/or modify 	it under the terms of the GNU Lesser General Public License as@@ -72,7 +72,7 @@ public class TabContent : GLib.Object { 	public static void draw (WidgetAllocation allocation, Context cr) { 		AbstractMenu menu; 		Dialog dialog;-+		 		if (unlikely (MenuTab.has_suppress_event ())) { 			cr.save (); 			Theme.color (cr, "Background 1");@@ -111,6 +111,12 @@ public class TabContent : GLib.Object { 				draw_text_input (allocation, cr); 			} 		}++		Help help = MainWindow.get_help ();+		+		if (help.is_visible ()) {+			help.draw (cr, allocation);+		} 	}  	public static void create_pause_surface () {@@ -213,6 +219,12 @@ public class TabContent : GLib.Object {  		last_press_time = GLib.get_real_time (); +		Help help = MainWindow.get_help ();+		+		if (help.button_press (button, x, y)) {+			return; // event consumed by help text+		}+ 		if (MainWindow.get_dialog ().visible) { 			MainWindow.get_dialog ().button_press (button, x, y); 		} else if (!MainWindow.get_menu ().show_menu) {diff --git a/libbirdfont/Test.vala b/libbirdfont/Test.valaindex 0308090..cec8f0d 100644--- a/libbirdfont/Test.vala+++ b/libbirdfont/Test.vala@@ -14,7 +14,7 @@  namespace BirdFont { -public class Test : Object {+public class Test : GLib.Object { 	public Callback callback; 	public string name; 	double time_stamp;diff --git a/libbirdfont/TestCases.vala b/libbirdfont/TestCases.valaindex b6ae008..913219c 100644--- a/libbirdfont/TestCases.vala+++ b/libbirdfont/TestCases.vala@@ -33,7 +33,6 @@ class TestCases { 		add (test_drawing, "Pen tool"); 		add (test_delete_points, "Delete edit points"); 		add (test_convert_to_quadratic_bezier_path, "Convert to quadratic path");-		add (test_over_path, "Over path"); 		add (test_export, "Export"); 		add (test_background_coordinates, "Background coordinates"); 		add (test_spin_button, "Spin button");@@ -583,58 +582,6 @@ class TestCases { 		 	} -	public static void test_over_path () {-		Glyph g;-		Path p = new Path ();-		Tool pen_tool;-		-		pen_tool = MainWindow.get_toolbox ().get_tool ("pen_tool");-		test_select_action (pen_tool);-		test_open_next_glyph ();-		-		g = MainWindow.get_current_glyph ();--		test_click_action (pen_tool, 3, 10, 10);-		test_click_action (pen_tool, 3, 10, 10);-		test_click_action (pen_tool, 3, 100, 10);-		test_click_action (pen_tool, 3, 100, 100);-		test_click_action (pen_tool, 3, 10, 100);-		test_click_action (pen_tool, 2, 0, 0);--		g.close_path ();--		warn_if_fail (g.active_paths.size == 0);--		g.select_path (50, 50);--		warn_if_fail (g.active_paths.size == 1);-		-		p.add (-10, 10);-		p.add (10, 10);-		p.add (10, -10);-		p.add (-10, -10);-		p.update_region_boundaries();-		g.add_path (p);-		g.close_path ();--		if (!p.is_over_coordinate (0, 0)) {-			warning ("Coordinate 0, 0 is not in path.");-		}-		-		if (!p.is_over_coordinate (-10, 10)) {-			warning ("Corner corrdinate -10, 10 is not in path.");-		}-		-		warn_if_fail (!p.is_over_coordinate (-20, -20));-		-		for (double x = -10; x <= 10; x += 0.1) {-			for (double y = 10; y <= 10; y += 0.1) {-				warn_if_fail (p.is_over_coordinate (x, y));-			} -		} -		-	}- 	public static void test_convert_to_quadratic_bezier_path () { 		Glyph g; 		Path p, p1;diff --git a/libbirdfont/TextRendering/CachedFont.vala b/libbirdfont/TextRendering/CachedFont.valanew file mode 100644index 0000000..d93368a--- /dev/null+++ b/libbirdfont/TextRendering/CachedFont.vala@@ -0,0 +1,99 @@+/*+	Copyright (C) 2015 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using Gee;++namespace BirdFont {+	+public class CachedFont : GLib.Object {+	public Font? font;++	public double top_limit {+		get { return _top_limit; }+		set { _top_limit = value; }+	}++	public double bottom_limit {+		get { return _bottom_limit; }+		set { _bottom_limit = value; }+	}+	+	public double base_line = 0;+	double _top_limit = 92.77; // FIXME: load before first glyph+	double _bottom_limit = -24.4;+	+	static FallbackFont fallback_font {+		get {+			if (_fallback_font == null) {+				_fallback_font = new FallbackFont ();+			}+			+			return (!) _fallback_font;+		}+	}+	static FallbackFont? _fallback_font = null;++	public CachedFont (Font? font) {+		Glyph? g;+		Glyph glyph;+		+		this.font = font;++		g = get_glyph_by_name ("a");+		if (g != null) {+			glyph = (!) g;+			base_line = glyph.baseline;+			top_limit = glyph.top_limit;+			bottom_limit = glyph.bottom_limit;+		} else {+			warning("No default chararacter found in font.");+		}+	}+	+	public Glyph? get_glyph_by_name (string name) {+		Glyph? g = null;+		Font f;+		Glyph glyph;+		+		if (font != null) {+			f = (!) font;+			g = f.get_glyph_by_name (name);+			+			if (g != null) {+				glyph = (!) g;+				glyph.top_limit = f.top_limit;+				glyph.baseline = f.base_line;+				glyph.bottom_limit = f.bottom_limit;+			}+		}+		+		if (g == null && name.char_count () == 1) {+			f = fallback_font.get_single_glyph_font (name.get_char (0));+			g = f.get_glyph_by_name (name);+			+			if (g == null) {+				return null;+			}+			+			glyph = (!) g;+			glyph.top_limit = f.top_limit;+			glyph.baseline = f.base_line;+			glyph.bottom_limit = f.bottom_limit;	+		}+		+		return g;+	}+}++}diff --git a/libbirdfont/TextRendering/Drawing.vala b/libbirdfont/TextRendering/Drawing.valanew file mode 100644index 0000000..2de5049--- /dev/null+++ b/libbirdfont/TextRendering/Drawing.vala@@ -0,0 +1,50 @@+/*+	Copyright (C) 2014 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++namespace BirdFont {++/** Interface for creating drawing callbacks. */+[Compact]+[CCode (ref_function = "bird_font_drawing_ref", unref_function = "bird_font_drawing_unref")]+public class Drawing {+	+	public int iterator_refcount = 1;+		+	public Drawing () {+	}++	public void new_path (double x, double y) {+	}++	public void curve_to (double xb, double yb, double xc, double yc, double xd, double yd) {+	}++	public void close_path (double x, double y) {+	}++	public unowned Drawing @ref () {+		iterator_refcount++;+		return this;+	}+	+	public void unref () {+		if (--iterator_refcount == 0) {+			this.free ();+		}+	}+	+	private extern void free ();+}++}diff --git a/libbirdfont/TextRendering/FallbackFont.vala b/libbirdfont/TextRendering/FallbackFont.valanew file mode 100644index 0000000..539fe0b--- /dev/null+++ b/libbirdfont/TextRendering/FallbackFont.vala@@ -0,0 +1,337 @@+/*+	Copyright (C) 2015 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using Gee;++[SimpleType]+[CCode (has_type_id = false)]+public extern struct FcConfig {+}++[CCode (cname = "FcInitLoadConfigAndFonts")]+public extern FcConfig* FcInitLoadConfigAndFonts ();++[CCode (cname = "FcConfigAppFontAddDir")]+public extern string* FcConfigAppFontAddDir (FcConfig* config, string path);++[CCode (cname = "FcConfigSetSysRoot")]+public extern void FcConfigSetSysRoot (FcConfig* config, string path);++[CCode (cname = "FcConfigParseAndLoad")]+public extern bool FcConfigParseAndLoad (FcConfig* config, string path, bool complain);++[CCode (cname = "FcConfigSetCurrent")]+public extern void FcConfigSetCurrent (FcConfig* config);++[CCode (cname = "FcConfigCreate")]+public extern FcConfig* FcConfigCreate ();++[CCode (cname = "FcConfigFilename")]+public extern string FcConfigFilename (string path);++[CCode (cname = "find_font")]+public extern string? find_font (FcConfig* font_config, string characters);++[CCode (cname = "find_font_family")]+public extern string? find_font_family (FcConfig* font_config, string characters);++[CCode (cname = "find_font_file")]+public extern string? find_font_file (FcConfig* font_config, string font_name);++namespace BirdFont {++// TODO: use font config+public class FallbackFont : GLib.Object {+	Gee.ArrayList<File> font_directories;+	+	FontFace* default_font = null;+	public static FcConfig* font_config = null;+	static bool font_config_started = false;+	+	string default_font_file_name = "Roboto-Regular.ttf";+	string default_font_family_name = "Roboto";++	Gee.HashMap<unichar, CachePair> glyphs;+	Gee.ArrayList<CachePair> cached;++	public int max_cached_fonts = 300;+	+	string? default_font_file = null;+	+	public FallbackFont () {+		string home = Environment.get_home_dir ();+		font_directories = new Gee.ArrayList<File> ();++		if (!font_config_started) {+			font_config_started = true;+			+			IdleSource idle = new IdleSource ();+			idle.set_callback (() => {+				Task t = new Task (init_font_config);+				MainWindow.native_window.run_non_blocking_background_thread (t);+				return false;+			});+			idle.attach (null);+		}+		+		add_font_folder ("/usr/share/fonts/");+		add_font_folder ("/usr/local/share/fonts/");+		add_font_folder (home + "/.local/share/fonts");+		add_font_folder (home + "/.fonts");+		add_font_folder ("C:\\Windows\\Fonts");+		add_font_folder (home + "/Library/Fonts");+		add_font_folder ("/Library/Fonts");+		add_font_folder ("/Network/Library/Fonts");+		add_font_folder ("/System/Library/Fonts");+		add_font_folder ("/System Folder/Fonts");+		+		glyphs = new Gee.HashMap<unichar, CachePair> ();+		cached = new Gee.ArrayList<CachePair> ();+		+		open_default_font ();+	}+	+	~FallbackFont () {+		if (default_font != null) {+			close_font (default_font);+		}+	}++	public void init_font_config () {+		FcConfig* config;+		+#if MAC+		config = FcConfigCreate();+		+		string bundle = (!) BirdFont.get_settings_directory ().get_path ();+		FcConfigSetSysRoot(config, bundle);+	+		string path = FcConfigFilename((!) SearchPaths.search_file(null, "fontconfig.settings").get_path ());+		bool loaded = FcConfigParseAndLoad(config, path, true);+		+		if (!loaded) {+			warning ("Fontconfig initialization failed.");+		}+		+		FcConfigSetCurrent (config);+#else+		config = FcInitLoadConfigAndFonts ();+#endif++		IdleSource idle = new IdleSource ();+		+		idle.set_callback (() => {+			font_config = config;+			printd("Fontconfig loaded\n");+			return false;+		});+		idle.attach (null);+	}++	public Font get_single_glyph_font (unichar c) {+		Font f;+		unichar last; +		CachePair p;+		+		if (likely (glyphs.has_key (c))) {+			p = glyphs.get (c);+			+			if (p.referenced < int.MAX) {+				p.referenced++;+			}+			+			return p.font;+		}++		// remove glyphs from cache if it is full+		if (cached.size > max_cached_fonts - 100) {+			+			cached.sort ((a, b) => {+				CachePair pa = (CachePair) a;+				CachePair pb = (CachePair) b;+				return pb.referenced - pa.referenced;+			});+			+			int j = 0;+			for (int i = cached.size - 1; i > 0; i--) {+				if (j > 100) {+					break;+				}+				+				j++;+				+				last = cached.get (i).character;+				glyphs.unset (last);+				cached.remove_at (i);+			}+		}+				+		f = get_single_fallback_glyph_font (c);+		p = new CachePair (f, c);+		+		glyphs.set (c, p);+		cached.add (p);+		+		return (Font) f;+	}++	Font get_single_fallback_glyph_font (unichar c) {+		string? font_file;+		BirdFontFile bf_parser;+		Font bf_font;+		StringBuilder? glyph_data;+		FontFace* font;++		bf_font = new Font ();+		font_file = null;+		glyph_data = null;++		// don't use fallback font in private use area+		if (0xe000 <= c <= 0xf8ff) {+			return bf_font;+		}+		+		// control characters+		if (c <= 0x001f || (0x007f <= c <= 0x008d)) {+			return bf_font;+		}+		+		// check if glyph is available in roboto+		if (default_font != null) {+			glyph_data = get_glyph_in_font ((!) default_font, c);+		}+				+		// use fontconfig to find a fallback font+		if (glyph_data == null) {+			font_file = find_font (font_config, (!) c.to_string ());+			if (font_file != null) {+				font = open_font ((!) font_file);+				glyph_data = get_glyph_in_font (font, c);+				close_font (font);+			}+		}+		+		if (glyph_data != null) {+			bf_parser = new BirdFontFile (bf_font);+			bf_parser.load_data (((!) glyph_data).str);+		}++		return bf_font;		+	}++	public StringBuilder? get_glyph_in_font (FontFace* font, unichar c) {+		StringBuilder? glyph_data = null;+		GlyphCollection gc;++		gc = new GlyphCollection (c, (!)c.to_string ());		+		glyph_data = load_glyph (font, (uint) c);++		return glyph_data;+	}+	+	void add_font_folder (string f) {+		File folder = File.new_for_path (f);+		FileInfo? file_info;+		string fn;+		string file_attributes;+		try {+			if (folder.query_exists ()) {+				font_directories.add (folder);+				+				file_attributes = FileAttribute.STANDARD_NAME;+				file_attributes += ",";+				file_attributes += FileAttribute.STANDARD_TYPE;+				var enumerator = folder.enumerate_children (file_attributes, 0);+				+				while ((file_info = enumerator.next_file ()) != null) {+					fn = ((!) file_info).get_name ();++					if (((!)file_info).get_file_type () == FileType.DIRECTORY) {+						add_font_folder ((!) get_child (folder, fn).get_path ());+					}+				}+			}+		} catch (GLib.Error e) {+			warning (e.message);+		}+	}++	File search_font_file (string font_file) {+		File d, f;+		+		for (int i = font_directories.size - 1; i >= 0; i--) {+			d = font_directories.get (i);+			f = get_child (d, font_file);+			+			if (f.query_exists ()) {+				return f;+			}+		}+		+		warning (@"The font $font_file not found");+		return File.new_for_path (font_file);+	}++	public string? get_default_font_file () {+		File font_file;+		string? fn = null;+		+		if (likely (default_font_file != null)) {+			return default_font_file;+		}+		+		font_file = SearchPaths.search_file (null, default_font_file_name);+		+		if (font_file.query_exists ()) {+			fn = (!) font_file.get_path ();+		} else {+			font_file = search_font_file (default_font_file_name);+	+			if (font_file.query_exists ()) {+				fn = (!) font_file.get_path ();+			} else {+				fn = find_font_file (font_config, default_font_family_name);+			}+		}+			+		if (likely (fn != null)) {+			default_font_file = fn;+			return fn;+		}+		+		warning(default_font_family_name + " not found");+		return null;+	}+	+	void open_default_font () {+		string? fn = get_default_font_file ();+		+		if (fn != null) {+			default_font = open_font ((!) fn);+		}+	}+	+	class CachePair : GLib.Object {+		public Font font;+		public unichar character;+		public int referenced = 1;+		+		public CachePair (Font f, unichar c) {+			font = f;+			character = c;+		}+	}+}++}diff --git a/libbirdfont/TextRendering/FontCache.vala b/libbirdfont/TextRendering/FontCache.valanew file mode 100644index 0000000..5bf2fa3--- /dev/null+++ b/libbirdfont/TextRendering/FontCache.vala@@ -0,0 +1,83 @@+/*+	Copyright (C) 2014 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using Gee;++namespace BirdFont {++/** Thread specific font cache. */	+public class FontCache {	+	public static FallbackFont fallback_font;+	+	static FontCache? default_cache = null;+	Gee.HashMap<string, CachedFont> fonts;+	CachedFont fallback;+	+	public FontCache () {+		if (is_null (fallback_font)) {+			fallback_font = new FallbackFont ();+		}+		+		fallback = new CachedFont (null);+		fonts = new Gee.HashMap<string, CachedFont> ();+	}+	+	public CachedFont get_font (string file_name) {+		CachedFont c;+		Font f;+		bool ok;++		if (file_name == "") {+			return fallback;+		}+		+		if (fonts.has_key (file_name)) {+			c = fonts.get (file_name);+			return c;+		}+		+		f = new Font ();+		f.set_file (file_name);+		ok = f.load ();+		if (!ok) {+			stderr.printf ("Can't load %s\n", file_name);+			return new CachedFont (null);+		}+		+		c = new CachedFont (f);+		+		if (file_name == "") {+			warning ("No file.");+			return c;+		}+		+		fonts.set (file_name, c);+		return c;+	}++	public static FontCache get_default_cache () {+		if (default_cache == null) {+			default_cache = new FontCache ();+		}+		+		return (!) default_cache;+	}++	public CachedFont get_fallback () {+		return fallback;+	}++}++}diff --git a/libbirdfont/TextRendering/LineTextArea.vala b/libbirdfont/TextRendering/LineTextArea.valanew file mode 100644index 0000000..24b8f11--- /dev/null+++ b/libbirdfont/TextRendering/LineTextArea.vala@@ -0,0 +1,33 @@+/*+	Copyright (C) 2014 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using Cairo;+using Math;++namespace BirdFont {++public class LineTextArea : TextArea {++	public LineTextArea (double size) {+		base (size);+		+		single_line = true;+		min_height = size;+		height = min_height;+		+		layout ();+	}+}++}diff --git a/libbirdfont/TextRendering/Text.vala b/libbirdfont/TextRendering/Text.valanew file mode 100644index 0000000..3e25c5c--- /dev/null+++ b/libbirdfont/TextRendering/Text.vala@@ -0,0 +1,592 @@+/*+	Copyright (C) 2014 2015 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using Cairo;+using Math;++namespace BirdFont {+	+/** Test implementation of a birdfont rendering engine. */+public class Text : Widget {+	FontCache font_cache;+	public CachedFont cached_font;+	+	Surface? cache = null;+	+	public string text;+	+	private bool use_cache = true;+	+	GlyphSequence glyph_sequence {+		get {+			if (gs == null) {+				gs = generate_glyphs ();+			}+			+			return (!) gs;+		}+	}+	+	Gee.ArrayList<string> glyph_names;+	GlyphSequence? gs = null;+	+	public delegate void Iterator (Glyph glyph, double kerning, bool last);+	public double font_size;+	double sidebearing_extent = 0;++	public double r = 0;+	public double g = 0;+	public double b = 0;+	public double a = 1;+	double truncated_width = -1;+	+	double margin_left = 0;+	+	public Text (string text = "", double size = 17, double margin_bottom = 0, Color? color = null) {+		this.margin_bottom = margin_bottom;+		font_cache = FontCache.get_default_cache ();+		cached_font = font_cache.get_fallback ();++		if (color != null) {+			Color c = (!) color;+			r = c.r;+			g = c.g;+			b = c.b;+			a = c.a;+		}+		+		set_text (text);+		set_font_size (size);+	}+	+	public void set_use_cache (bool cache) {+		use_cache = cache;+	}+	+	public string get_text () {+		return text;+	}+	+	/** Set font for this text area.+	 * @param font_absolute path to the font file or a file name for one of the font files in search paths.+	 * @return true if the font was found+	 */+	public bool load_font (string font_file) {+		File path;+		File f;+		FontCache fc;+		+		f = File.new_for_path (font_file);+		path = (f.query_exists ()) ? f : SearchPaths.find_file (null, font_file);+		+		fc = FontCache.get_default_cache ();+		cached_font = fc.get_font ((!) path.get_path ());+		gs = generate_glyphs ();+		+		return cached_font.font != null;+	}+	+	public void set_font_size (double height_in_pixels) {+		font_size = height_in_pixels;+		sidebearing_extent = 0;+		+		if (gs == null) { // ensure height is loaded for the font+			gs = generate_glyphs ();+		}+	}++	public void set_font_cache (FontCache font_cache) {+		this.font_cache = font_cache;+	}+	+	public void set_text (string text) {	+		this.text = text;+		gs = null;+		sidebearing_extent = 0;+		cache = null;+	}++	private GlyphSequence generate_glyphs () {+		int index;+		unichar c;+		string name;+		Glyph? g;+		GlyphSequence gs;+		+		gs = new GlyphSequence ();+		+		glyph_names = new Gee.ArrayList<string> ();+		index = 0;+		while (text.get_next_char (ref index, out c)) {+			name = (!) c.to_string ();+			g = cached_font.get_glyph_by_name (name);+			+			gs.glyph.add (g);+			glyph_names.add (name);+		}+		+		return gs;+	}++	public void iterate (Iterator iter) {+		Glyph glyph;+		double w, kern;+		int wi;+		Glyph? prev;+		Glyph? g;+		GlyphSequence word_with_ligatures;+		GlyphRange? gr_left, gr_right;+		GlyphSequence word;+		KerningClasses kc;+		Font empty = Font.empty;+		+		glyph = new Glyph.no_lines ("", '\0');++		w = 0;+		prev = null;+		kern = 0;+	+		word = glyph_sequence;+		wi = 0;+	+		if (cached_font.font != null) {+			word_with_ligatures = word.process_ligatures ((!) cached_font.font);+		} else {+			word_with_ligatures = word.process_ligatures (new Font ());+		}+		+		gr_left = null;+		gr_right = null;+		+		if (cached_font.font != null) {+			kc = ((!) cached_font.font).get_kerning_classes ();+		} else {+			kc = new KerningClasses (empty);+		}	++		if (word_with_ligatures.glyph.size > 0) {+			g = word_with_ligatures.glyph.get (0);+			if (g != null) {+				margin_left = ((!) g).get_left_side_bearing ();+				+				if (margin_left < 0) {+					margin_left = -margin_left;+				} else {+					margin_left = 0;+				}+			}+		}+		+		for (int i = 0; i < word_with_ligatures.glyph.size; i++) {+			g = word_with_ligatures.glyph.get (i);+			+			if (g == null || prev == null || wi == 0) {+				kern = 0;+			} else {+				return_if_fail (wi < word_with_ligatures.ranges.size);+				return_if_fail (wi - 1 >= 0);+				+				gr_left = word_with_ligatures.ranges.get (wi - 1);+				gr_right = word_with_ligatures.ranges.get (wi);++				kern = kc.get_kerning_for_pair (((!) prev).get_name (), ((!) g).get_name (), gr_left, gr_right);+			}+				+			// process glyph+			if (g == null && (0 <= i < glyph_names.size)) {+				g = cached_font.get_glyph_by_name (glyph_names.get (i));+			}+			+			glyph = (g == null) ? new Glyph ("") : (!) g;+			iter (glyph, kern, i + 1 == word_with_ligatures.glyph.size);			+			prev = g;+			wi++;+		}+	}++	// FIXME: some fonts doesn't have on curve extrema+	public double get_extent () {+		double x = 0;+		+		iterate ((glyph, kerning, last) => {+			double x1, y1, x2, y2;+			double lsb;+			+			lsb = glyph.left_limit;+			+			if (!last) {+				x += (glyph.get_width () + kerning) * get_scale (glyph);+			} else {+				glyph.boundaries (out x1, out y1, out x2, out y2);+				x += (x2 - lsb) * get_scale (glyph);+			}+		});+		+		return x;+	}++	public double get_sidebearing_extent () {+		double x ;+		+		if (likely (sidebearing_extent > 0)) {+			return sidebearing_extent;+		}+		+		x = 0;+		+		iterate ((glyph, kerning, last) => {+			double lsb;+			lsb = glyph.left_limit;+			x += (glyph.get_width () + kerning) * get_scale (glyph);+		});+		+		sidebearing_extent = x;+		return x;+	}++	public override double get_height () {+		return font_size;+	}+	+	public double get_acender () {+		double max_height = 0;+		+		iterate ((glyph, kerning, last) => {+			double x1, y1, x2, y2;+			double h;+			glyph.boundaries (out x1, out y1, out x2, out y2);+			h = Math.fmax (y1, y2) - Math.fmin (y1, y2);+			h *= get_scale (glyph) - glyph.baseline * get_scale (glyph);+			if (h > max_height) {+				max_height = h;+			}+		});+		+		return max_height;+	}	++	public override double get_width () {+		double x = 0;+		bool first = true;+		+		iterate ((glyph, kerning, last) => {+			double x1, y1, x2, y2;+			double lsb;+			+			lsb = glyph.left_limit;+			+			if (first) {+				glyph.boundaries (out x1, out y1, out x2, out y2);+				x += (glyph.get_width () + kerning - Math.fmin (x1, x2)) * get_scale (glyph);+				first = false;+			} else if (!last) {+				x += (glyph.get_width () + kerning) * get_scale (glyph);+			} else {+				glyph.boundaries (out x1, out y1, out x2, out y2);+				x += (x2 - lsb) * get_scale (glyph);+			}+		});+		+		return x;+	}++	public double get_decender () {+		double decender_max = get_max_decender ();+		return decender_max > 0 ? decender_max : 0; +	}		++	private double get_max_decender () {+		double decender = 0;+		double decender_max = 0;+		+		iterate ((glyph, kerning, last) => {+			double x1, y1, x2, y2;+			double y;+			glyph.boundaries (out x1, out y1, out x2, out y2);+			y = Math.fmin (y1, y2);+			decender = (glyph.baseline - y) * get_scale (glyph);+			if (decender > decender_max) {+				decender_max = decender;+			}+		});+		+		return decender_max; +	}+		+	public override void draw (Context cr) {+		double descender = cached_font.bottom_limit + cached_font.base_line;+		double y = widget_y + get_height () + get_font_scale () * descender; // FIXME:+		draw_at_baseline (cr, widget_x, y);+	}+	+	public void draw_at_top (Context cr, double px, double py, string cacheid = "") {+		double s = get_font_scale ();+		double y = py + s * (cached_font.top_limit - cached_font.base_line);+		draw_at_baseline (cr, px, y, cacheid);+	}+	+	public void set_source_rgba (double r, double g, double b, double a) {+		if (this.r != r || +			this.g != g || +			this.b != b || +			this.a != a) {+		+			this.r = r;+			this.g = g;+			this.b = b;+			this.a = a;+			cache = null;+		}+	}+	+	public string get_cache_id (int offset_x, int offset_y) {+		string key;+		int64 c;+		+		c = (((int64) (r * 255)) << 24)+			| (((int64) (g * 255)) << 16)+			| (((int64) (b * 255)) << 8)+			| (((int64) (a * 255)) << 0);+		+		// FIXME: use binary key+		key = @"$font_size $c $offset_x $offset_y";+		+		return key;+	}+	+	public void draw_at_baseline (Context cr, double px, double py, string cacheid = "") {+		if (cache == null) {+			cache = draw_on_cache_surface (cacheid);+		}+		+		double screen_scale = Screen.get_scale ();+		double font_scale = get_font_scale ();+		double cache_y = py - font_scale * (cached_font.top_limit - cached_font.base_line);++		cr.save();+		cr.scale (1 / screen_scale, 1 / screen_scale);+		double scaled_x = (px - margin_left) * screen_scale;+		double scaled_y = cache_y * screen_scale;+		cr.set_source_surface ((!) cache, (int) rint (scaled_x), (int) rint (scaled_y));+		cr.paint ();+		cr.restore();+	}+	+	Surface draw_on_cache_surface (string cacheid) {+		double y;+		double ratio;+		double cc_y;+		Context cr;+		Surface cache_surface;+		double screen_scale = Screen.get_scale();+		double h = font_size * screen_scale + 1;++		ratio = get_font_scale ();+		cc_y = (cached_font.top_limit - cached_font.base_line) * ratio;++		// double x = margin_left * ratio;+		double x = 0;+		double w = get_sidebearing_extent () * screen_scale + x + margin_left + 1;+		+		cache_surface = Screen.create_background_surface ((int) w, (int) h);+		cr = new Context (cache_surface);+		cr.scale (screen_scale, screen_scale);++		y = cc_y;++		if (unlikely (cached_font.base_line != 0)) {+			warning ("Base line not zero.");+		}+		+		iterate ((glyph, kerning, last) => {+			double end;+			+			x += kerning * ratio;+			end = x + glyph.get_width () * ratio;+			+			// truncation+			if (truncated_width > 0 && end > truncated_width) {+				return;+			}++			if (use_cache) {+				draw_chached (cr, glyph, kerning, last, x, y, cc_y, +					ratio, cacheid);+			} else {+				draw_without_cache (cr, glyph, kerning, last, x, y, cc_y, ratio);+			}+			+			x = end;+		});+		+		return cache_surface;+	}++	void draw_without_cache (Context cr, Glyph glyph, double kerning, bool last, +		double x, double y, double cc_y, double ratio) {+	+		double lsb;+		+		cr.save ();+		cr.set_source_rgba (r, g, b, a);+		cr.new_path ();++		lsb = glyph.left_limit;++		foreach (Path path in glyph.get_visible_paths ()) {+			draw_path (cr, glyph, path, lsb, x, y, ratio);+		}++		cr.fill ();+		cr.restore ();+		+	}+		+	void draw_chached (Context cr, Glyph glyph, double kerning, bool last, +		double x, double y, double cc_y, double ratio,+		string cacheid = "") {+		+		double lsb;+		Surface cache;+		Surface cached_glyph;+		Context cc;+		string cache_id;+		double glyph_margin_left = glyph.get_left_side_bearing ();+		+		if (glyph_margin_left < 0) {+			glyph_margin_left = -glyph_margin_left;+		} else {+			glyph_margin_left = 0;+		}+		+		double xp = (x - glyph_margin_left * ratio) * Screen.get_scale ();+		double yp = (y - cc_y) * Screen.get_scale ();+		int offset_x, offset_y;++		offset_x = (int) (10 * (xp - (int) xp));+		offset_y = (int) (10 * (yp - (int) yp));+		+		cache_id = (cacheid == "") ? get_cache_id (offset_x, offset_y) : cacheid;+				+		if (!glyph.has_cache (cache_id)) {+			int w = (int) ((2 * glyph_margin_left * ratio + glyph.get_width ()) * ratio) + 2;+			int h = (int) font_size + 2;+			cache = Screen.create_background_surface (w, h);+			cc = new Context (cache);+			+			cc.scale(Screen.get_scale (), Screen.get_scale ());+			+			lsb = glyph.left_limit - glyph_margin_left;++			cc.save ();+			cc.set_source_rgba (r, g, b, a);+			cc.new_path ();++			foreach (Path path in glyph.get_visible_paths ()) {+				draw_path (cc, glyph, path, lsb, glyph_margin_left * ratio + offset_x / 10.0, cc_y + offset_y / 10.0, ratio);+			}+			+			cc.fill ();+			cc.restore ();++			if (use_cache) {+				glyph.set_cache (cache_id, cache);+			}+			+			cached_glyph = cache;+		} else {+			cached_glyph = glyph.get_cache (cache_id);+		}++		cr.save ();+		cr.set_antialias (Cairo.Antialias.NONE);+		cr.scale(1 / Screen.get_scale (), 1 / Screen.get_scale ());+		cr.set_source_surface (cached_glyph,+			(int) xp,+			(int) yp);+		cr.paint ();+		cr.restore ();+	}+	+	void draw_path (Context cr, Glyph glyph, Path path,+		double lsb, double x, double y, double scale) {+			+		EditPoint e, prev;+		double xa, ya, xb, yb, xc, yc, xd, yd;+		double by;+		double s = get_scale (glyph);+		+		if (path.points.size > 0) {+			if (unlikely (path.is_open ())) {+				warning (@"Path is open in $(glyph.get_name ()).");+			}+			+			//path.add_hidden_double_points (); // FIXME: this distorts shapes+				+			prev = path.points.get (path.points.size - 1);+			xa = (prev.x - lsb) * s + x;+			ya = y - prev.y * s;+			cr.move_to (xa, ya);+			+			by = (y - cached_font.base_line * s);+			for (int i = 0; i < path.points.size; i++) {+				e = path.points.get (i).copy ();+				+				PenTool.convert_point_segment_type (prev, e, PointType.CUBIC);+				+				xb = (prev.get_right_handle ().x - lsb) * s + x;+				yb = by - prev.get_right_handle ().y * s;++				xc = (e.get_left_handle ().x - lsb) * s + x;+				yc = by - e.get_left_handle ().y * s;+					+				xd = (e.x - lsb) * s + x;+				yd = by - e.y * s;++				cr.curve_to (xb, yb, xc, yc, xd, yd);+				cr.line_to (xd, yd);+				+				prev = e;+			}+		}+	}++	public double get_baseline_to_bottom (Glyph g) {+		return get_scale (g) * (-g.baseline - g.bottom_limit);+	}++	public double get_scale (Glyph g) {+		double s = g.top_limit - g.bottom_limit;+		+		if (s == 0) {+			s = cached_font.top_limit - cached_font.bottom_limit;+		}+		+		return font_size / s;+	}++	public double get_font_scale () {+		return font_size / (cached_font.top_limit - cached_font.bottom_limit);+	}++	public double get_baseline_to_bottom_for_font () {+		return get_font_scale () * (-cached_font.base_line - cached_font.bottom_limit);+	}+	+	public void truncate (double max_width) {+		truncated_width = max_width;+	}+}++}diff --git a/libbirdfont/TextRendering/TextArea.vala b/libbirdfont/TextRendering/TextArea.valanew file mode 100644index 0000000..0b9b617--- /dev/null+++ b/libbirdfont/TextRendering/TextArea.vala@@ -0,0 +1,1659 @@+/*+	Copyright (C) 2014 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using Cairo;+using Math;++namespace BirdFont {++public class TextArea : Widget {+	+	public double min_width = 500;+	public double min_height = 100;+	public double font_size;+	public double padding = 3.3;+	public bool single_line = false;+	+	protected Color text_color = Color.black ();+	+	public bool draw_carret {+		get { return carret_is_visible; }+		set { +			carret_is_visible = value; +			if (!value) {+				update_selection = false;+				selection_end = carret.copy ();+			}+		}+	}+	public bool carret_is_visible = false;+	public bool draw_border = true;++	public double width;+	public double height;+	+	Carret carret = new Carret ();+	Carret selection_end = new Carret ();+	bool update_selection = false;+	public bool show_selection = false;+	+	public signal void scroll (double pixels);+	public signal void text_changed (string text);+	public signal void enter (string text);+	+	Gee.ArrayList<Paragraph> paragraphs = new Gee.ArrayList<Paragraph>  ();+	private static const int DONE = -2; +	+	int last_paragraph = 0;+	string text;+	int text_length;+	+	Gee.ArrayList<TextUndoItem> undo_items = new Gee.ArrayList<TextUndoItem> ();+	Gee.ArrayList<TextUndoItem> redo_items = new Gee.ArrayList<TextUndoItem> ();+	+	bool store_undo_state_at_next_event = false;+	+	public bool editable;+	+	public TextArea (double font_size = 20, Color? c = null) {+		this.font_size = font_size;+		width = min_width;+		height = min_height;+		editable = true;+		+		if (c != null) {+			text_color = (!) c;+		}+	}++	public override void focus (bool focus) {+		draw_carret = focus;+	}++	public override double get_height () {+		return height + 2 * padding;+	}++	public override double get_width () {+		return width + 2 * padding;+	}++	public void set_font_size (double z) {+		font_size = z;+	}+	+	bool generate_paragraphs () {+		Paragraph paragraph;++		int next_paragraph = -1;+		+		if (is_null (text)) {+			warning ("No text");+			return false;+		}+		+		if (last_paragraph == DONE) {+			return false;+		}+	+		next_paragraph = text.index_of ("\n", last_paragraph);+		+		if (next_paragraph == -1) {+			paragraph = new Paragraph (text.substring (last_paragraph), font_size, paragraphs.size, text_color);+			paragraphs.add (paragraph);+			last_paragraph = DONE;+		} else {+			next_paragraph +=  "\n".length;+			paragraph = new Paragraph (text.substring (last_paragraph, next_paragraph - last_paragraph), font_size, paragraphs.size, text_color);+			paragraphs.add (paragraph);+			last_paragraph = next_paragraph;+		}+		+		return last_paragraph != DONE;+	}+	+	void generate_all_paragraphs () {+		while (generate_paragraphs ()) {+		}+	}+	+	public override void key_press (uint keyval) {+		unichar c;+		TextUndoItem ui;+		+		if (!editable) {+			return;+		}+		+		c = (unichar) keyval;+		+		switch (c) {+			case ' ':+				store_undo_edit_state ();+				add_character (keyval);+				break;+			case 'a':+				if (KeyBindings.has_ctrl () || KeyBindings.has_logo ()) {+					select_all ();+				} else {+					add_character (keyval);+				}+				break;+			case 'c':+				if (KeyBindings.has_ctrl () || KeyBindings.has_logo ()) {+					ClipTool.copy_text (this);+				} else {+					add_character (keyval);+				}+				break;+			case 'v':+				if (KeyBindings.has_ctrl () || KeyBindings.has_logo ()) {+					ClipTool.paste_text (this);+					store_undo_state_at_next_event = true;+				} else {+					add_character (keyval);+				}+				break;+			case 'y':+				if (KeyBindings.has_ctrl () || KeyBindings.has_logo ()) {+					redo ();+				} else {+					add_character (keyval);+				}+				break;+			case 'z':+				if (KeyBindings.has_ctrl () || KeyBindings.has_logo ()) {+					undo ();+				} else {+					add_character (keyval);+				}+				break;+			case Key.RIGHT:+				check_selection ();+				move_carret_next ();+				break;+			case Key.LEFT:+				check_selection ();+				move_carret_previous ();+				break;+			case Key.DOWN:+				check_selection ();+				move_carret_next_row ();+				break;+			case Key.UP:+				check_selection ();+				move_carret_previous_row ();+				break;+			case Key.END:+				check_selection ();+				move_carret_to_end_of_line ();+				break;+			case Key.HOME:+				check_selection ();+				move_carret_to_beginning_of_line ();+				break;+			case Key.BACK_SPACE:+				if (has_selection ()) {+					ui = delete_selected_text ();+					undo_items.add (ui);+					redo_items.clear ();+					store_undo_state_at_next_event = true;+				} else {+					ui = remove_last_character ();+					undo_items.add (ui);+					redo_items.clear ();+					store_undo_state_at_next_event = true;+				}+				text_changed (get_text ());+				break;+			case Key.ENTER:+				store_undo_edit_state ();+				insert_text ("\n");+				+				if (single_line) {+					enter (get_text ());+				}+				break;+			case Key.DEL:+				if (has_selection ()) {+					ui = delete_selected_text ();+					undo_items.add (ui);+					redo_items.clear ();+					store_undo_state_at_next_event = true;+				} else {+					ui = remove_next_character ();+					undo_items.add (ui);+					redo_items.clear ();+					store_undo_state_at_next_event = true;+				}+				text_changed (get_text ());+				break;		+			default:+				if (!KeyBindings.has_ctrl () && !KeyBindings.has_logo ()) {+					add_character (keyval);+				} +				break;+		}+			+		GlyphCanvas.redraw ();+	}+	+	void check_selection () {+		if (!has_selection () && KeyBindings.has_shift ()) {+			show_selection = true;+			selection_end = carret.copy ();+		}+		+		if (!KeyBindings.has_shift ()) {+			show_selection = false;+		}+	}+	+	private void add_character (uint keyval) {+		unichar c = (unichar) keyval;+		string s;++		if (!is_modifier_key (keyval) +			&& !KeyBindings.has_ctrl ()+			&& !KeyBindings.has_alt ()) {+			+			s = (!) c.to_string ();		+			+			if (s.validate ()) {				+				if (store_undo_state_at_next_event) {+					store_undo_edit_state ();+					store_undo_state_at_next_event = false;+				}+				+				insert_text (s);+			}+		}+	}++	Paragraph get_current_paragraph () {+		Paragraph p;+		+		if (unlikely (!(0 <= carret.paragraph < paragraphs.size))) {+			warning (@"No paragraph, index: $(carret.paragraph), size: $(paragraphs.size)");+			p = new Paragraph ("", 0, 0, text_color);+			paragraphs.add (p);+			return p;+		}+		+		p = paragraphs.get (carret.paragraph);+		return p;+	}++	public void set_text (string t) {+		int tl;+		+		if (single_line) {+			text = t.replace ("\n", "").replace ("\r", "");+		} else {+			text = t;+		}+		+		tl = t.length;		+		text_length += tl;+		+		paragraphs.clear ();+		generate_paragraphs ();+		+		return_if_fail (paragraphs.size != 0);+		+		carret.paragraph = paragraphs.size - 1;+		carret.character_index = paragraphs.get (paragraphs.size - 1).text.length;+		selection_end = carret.copy ();+		show_selection = false;+		+		text_changed (get_text ());+	}+	+	Carret get_selection_start () {+		if (carret.paragraph == selection_end.paragraph) {+			return carret.character_index < selection_end.character_index ? carret : selection_end;+		}+		+		return carret.paragraph < selection_end.paragraph ? carret : selection_end;	+	}++	Carret get_selection_stop () {+		if (carret.paragraph == selection_end.paragraph) {+			return carret.character_index > selection_end.character_index ? carret : selection_end;+		}+		+		return carret.paragraph > selection_end.paragraph ? carret : selection_end;		+	}+		+	public string get_selected_text () {+		Carret selection_start, selection_stop;+		int i;+		Paragraph pg;+		StringBuilder sb;+		+		sb = new StringBuilder ();+		+		if (!has_selection ()) {+			return "".dup ();+		}+		+		selection_start = get_selection_start ();+		selection_stop = get_selection_stop ();+		+		if (selection_start.paragraph == selection_stop.paragraph) {+			pg = paragraphs.get (selection_start.paragraph);+			return pg.text.substring (selection_start.character_index, selection_stop.character_index - selection_start.character_index);+		}+		+		pg = paragraphs.get (selection_start.paragraph);+		sb.append (pg.text.substring (selection_start.character_index));+		+		for (i = selection_start.paragraph + 1; i < selection_stop.paragraph; i++) {+			return_val_if_fail (0 <= i < paragraphs.size, "".dup ());+			pg = paragraphs.get (i);+			sb.append (pg.text);+		}++		pg = paragraphs.get (selection_stop.paragraph);+		sb.append (pg.text.substring (0, selection_stop.character_index));+				+		return sb.str;+	}+	+	public void select_all () {+		while (last_paragraph != DONE) {+			generate_paragraphs ();+		}+			+		if (paragraphs.size > 0) {+			carret.paragraph = 0;+			carret.character_index = 0;+			selection_end.paragraph = paragraphs.size - 1;+			selection_end.character_index = paragraphs.get (paragraphs.size - 1).text_length;+			show_selection = true;+		}+	}+	+	public TextUndoItem delete_selected_text () {+		Carret selection_start, selection_stop;+		int i;+		Paragraph pg, pge;+		string e, s, n;+		bool same;+		TextUndoItem ui;+		+		ui = new TextUndoItem (carret);+		+		e = "";+		s = "";+		n = "";+		+		if (!has_selection ()) {+			warning ("No selected text.");+			return ui;+		}+		+		selection_start = get_selection_start ();+		selection_stop = get_selection_stop ();+		+		same = selection_start.paragraph == selection_stop.paragraph;+		+		if (!same) {+			return_val_if_fail (0 <= selection_start.paragraph < paragraphs.size, ui);+			pg = paragraphs.get (selection_start.paragraph);+			s = pg.text.substring (0, selection_start.character_index);++			return_val_if_fail (0 <= selection_stop.paragraph < paragraphs.size, ui);+			pge = paragraphs.get (selection_stop.paragraph);+			e = pge.text.substring (selection_stop.character_index);+							+			if (!s.has_suffix ("\n")) {+				ui.deleted.add (pge.copy ());+				ui.edited.add (pg.copy ());+				+				pg.set_text (s + e);+				pge.set_text ("");+			} else {+				ui.edited.add (pg.copy ());+				ui.edited.add (pge.copy ());+				+				pg.set_text (s);+				pge.set_text (e);+			}+		} else {+			return_val_if_fail (0 <= selection_start.paragraph < paragraphs.size, ui);+			+			pg = paragraphs.get (selection_start.paragraph);+			n = pg.text.substring (0, selection_start.character_index);+			n += pg.text.substring (selection_stop.character_index);+			+			if (n == "") {+				ui.deleted.add (pg.copy ());+				paragraphs.remove_at (selection_start.paragraph);+			} else {+				ui.edited.add (pg.copy ());+			}+			+			pg.set_text (n);+		}+		+		if (e == "" && !same) {+			paragraphs.remove_at (selection_stop.paragraph);+		}+		+		for (i = selection_stop.paragraph - 1; i > selection_start.paragraph; i--) {+			return_val_if_fail (0 <= i < paragraphs.size, ui);+			ui.deleted.add (paragraphs.get (i));+			paragraphs.remove_at (i);+		}+		+		if (s == "" && !same) {+			return_val_if_fail (0 <= selection_start.paragraph < paragraphs.size, ui);+			paragraphs.remove_at (selection_start.paragraph);+		}+		+		carret = selection_start.copy ();+		selection_end = carret.copy ();+				+		show_selection = false;+		update_paragraph_index ();+		layout ();+		+		return ui;+	}+	+	void update_paragraph_index () {+		int i = 0;+		foreach (Paragraph p in paragraphs) {+			p.index = i;+			i++;+		}+	}+	+	public TextUndoItem remove_last_character () {+		TextUndoItem ui;+		move_carret_previous ();+		ui = remove_next_character ();+		return ui;+	}+	+	public TextUndoItem remove_next_character () {+		Paragraph paragraph;+		Paragraph next_paragraph;+		int index;+		unichar c;+		string np;+		TextUndoItem ui;+		+		ui = new TextUndoItem (carret);+		+		return_val_if_fail (0 <= carret.paragraph < paragraphs.size, ui);+		paragraph = paragraphs.get (carret.paragraph);+		+		index = carret.character_index;+	+		paragraph.text.get_next_char (ref index, out c);+		+		if (index >= paragraph.text_length) {+			np = paragraph.text.substring (0, carret.character_index);+			+			if (carret.paragraph + 1 < paragraphs.size) {+				next_paragraph = paragraphs.get (carret.paragraph + 1);+				paragraphs.remove_at (carret.paragraph + 1);+				+				np = np + next_paragraph.text;+				+				ui.deleted.add (next_paragraph);+			}+			+			paragraph.set_text (np);+			ui.edited.add (paragraph);+		} else {+			np = paragraph.text.substring (0, carret.character_index) + paragraph.text.substring (index);+			paragraph.set_text (np);++			if (np == "") {+				return_val_if_fail (carret.paragraph > 0, ui);+				carret.paragraph--;+				paragraph = paragraphs.get (carret.paragraph);+				carret.character_index = paragraph.text_length;+				+				ui.deleted.add (paragraphs.get (carret.paragraph + 1));+				+				paragraphs.remove_at (carret.paragraph + 1);+			} else {+				ui.edited.add (paragraph);+			}+		}+		+		update_paragraph_index ();+		layout ();++		return ui;+	}+	+	public void move_carret_next () {+		unichar c;+		+		move_carret_one_character ();+		+		if (KeyBindings.has_ctrl ()) {+			while (true) {+				c = move_carret_one_character ();+				+				if (c == '\0' || c == ' ') {+					break;+				}+			}+		}+	}+	+	unichar move_carret_one_character () {+		Paragraph paragraph;+		int index;+		unichar c;+		+		return_val_if_fail (0 <= carret.paragraph < paragraphs.size, '\0');+		paragraph = paragraphs.get (carret.paragraph);+		+		index = carret.character_index;+		+		paragraph.text.get_next_char (ref index, out c);+		+		if (index >= paragraph.text_length && carret.paragraph + 1 < paragraphs.size) {+			carret.paragraph++;+			carret.character_index = 0;+			c = ' ';+		} else {+			carret.character_index = index;+		}+		+		return c;	+	}++	public void move_carret_previous () {+		unichar c;+		+		move_carret_back_one_character ();+		+		if (KeyBindings.has_ctrl ()) {+			while (true) {+				c = move_carret_back_one_character ();+				+				if (c == '\0' || c == ' ') {+					break;+				}+			}+		}+	}+	+	unichar move_carret_back_one_character () {+		Paragraph paragraph;+		int index, last_index;+		unichar c;+		+		return_val_if_fail (0 <= carret.paragraph < paragraphs.size, '\0');+		paragraph = paragraphs.get (carret.paragraph);+		+		index = 0;+		last_index = -1;+		+		while (paragraph.text.get_next_char (ref index, out c) && index < carret.character_index) {+			last_index = index;+		}+		+		if (last_index <= 0 && carret.paragraph > 0) {+			carret.paragraph--;+			+			return_val_if_fail (0 <= carret.paragraph < paragraphs.size, '\0');+			paragraph = paragraphs.get (carret.paragraph);+			carret.character_index = paragraph.text_length;+			+			if (paragraph.text.has_suffix ("\n")) {+				carret.character_index -= "\n".length;+			}+			+			c = ' ';+		} else if (last_index > 0) {+			carret.character_index = last_index;+		} else {+			carret.character_index = 0;+			c = ' ';+		}+		+		return_val_if_fail (0 <= carret.paragraph < paragraphs.size, '\0');+		+		return c;+	}+	+	public void move_carret_next_row () {+		double nr = font_size;+		+		if (carret.desired_y + 2 * font_size >= allocation.height) {+			scroll (2 * font_size);+			nr = -font_size;+		}+		+		if (carret.desired_y + nr < widget_y + height - padding) {+			carret = get_carret_at (carret.desired_x - widget_x - padding, carret.desired_y + nr);+		}+	}++	public void move_carret_to_end_of_line () {+		carret = get_carret_at (widget_x + padding + width, carret.desired_y, false);	+	}++	public void move_carret_to_beginning_of_line () {+		carret = get_carret_at (widget_x, carret.desired_y, false);	+	}+	+	public void move_carret_previous_row () {+		double nr = -font_size;+		+		if (carret.desired_y - 2 * font_size < 0) {+			scroll (-2 * font_size);+			nr = font_size;+		}+		+		if (carret.desired_y + nr > widget_y + padding) {+			carret = get_carret_at (carret.desired_x, carret.desired_y + nr);+		}+	}+	+	public bool has_selection () {+		return show_selection && selection_is_visible ();+	}+	+	private bool selection_is_visible () {+		return carret.paragraph != selection_end.paragraph || carret.character_index != selection_end.character_index;+	}+	+	public void insert_text (string t) {+		string s;+		Paragraph paragraph;+		TextUndoItem ui;+		Gee.ArrayList<string> pgs;+		bool u = false;+		+		pgs = new Gee.ArrayList<string> ();+		+		if (single_line) {+			s = t.replace ("\n", "").replace ("\r", "");+			pgs.add (s);+		} else {+			if (t.last_index_of ("\n") > 0) {+				string[] parts = t.split ("\n");+				int i;+				for (i = 0; i < parts.length -1; i++) {+					pgs.add (parts[i]);+					pgs.add ("\n");+				}++				pgs.add (parts[parts.length - 1]);+				+				if (t.has_suffix ("\n")) {+					pgs.add ("\n");+				}+			} else {+				s = t;+				pgs.add (s);+			}+		}+		+		if (has_selection () && show_selection) {+			ui = delete_selected_text ();+			u = true;+			+			if (paragraphs.size == 0) {+				paragraphs.add (new Paragraph ("", font_size, 0, text_color));+			}+		} else {+			ui = new TextUndoItem (carret);+		}+		+		return_if_fail (0 <= carret.paragraph < paragraphs.size);+		paragraph = paragraphs.get (carret.paragraph);+		+		if (pgs.size > 0) {+			if (!u) {+				ui.edited.add (paragraph.copy ());+			}+			+			string first = pgs.get (0);+			+			string end; +			string nt = paragraph.text.substring (0, carret.character_index);+			+			nt += first;+			end = paragraph.text.substring (carret.character_index);+		+			paragraph.set_text (nt);+			+			int paragraph_index = carret.paragraph;+			Paragraph next_paragraph = paragraph;+			for (int i = 1; i < pgs.size; i++) {+				paragraph_index++;+				string next = pgs.get (i);+				next_paragraph = new Paragraph (next, font_size, paragraph_index, text_color);+				paragraphs.insert (paragraph_index, next_paragraph);+				ui.added.add (next_paragraph);+				u = true;+			}++			carret.paragraph = paragraph_index;+			carret.character_index = next_paragraph.text.length;++			next_paragraph.set_text (next_paragraph.text + end);+		}+		+		if (u) {+			undo_items.add (ui);+			redo_items.clear ();+		}++		update_paragraph_index ();+		layout ();+				+		text_changed (get_text ());+		show_selection = false;+	}+	+	public string get_text () {+		StringBuilder sb = new StringBuilder ();+		+		generate_all_paragraphs ();+		+		foreach (Paragraph p in paragraphs) {+			sb.append (p.text);+		}++		return sb.str;+	}+	+	Carret get_carret_at (double click_x, double click_y, +		bool check_boundaries = true) {+			+		int i = 0;+		double tx, ty;+		double p;+		string w;+		int ch_index;+		double min_d = double.MAX;+		Carret c = new Carret ();+		double dt;++		c.paragraph = -1;+		c.desired_x = click_x;+		c.desired_y = click_y;+		+		foreach (Paragraph paragraph in paragraphs) {+			if (!check_boundaries || paragraph.text_is_on_screen (allocation, widget_y)) {+				ch_index = 0;++				if (paragraph.start_y + widget_y - font_size <= click_y <= paragraph.end_y + widget_y + font_size) { +					foreach (Text next_word in paragraph.words) {+						double tt_click = click_y - widget_y - padding + font_size;++						w = next_word.text;+						+						if (next_word.widget_y <= tt_click <= next_word.widget_y + font_size) {+							+							p = next_word.get_sidebearing_extent ();+								+							if ((next_word.widget_y <= tt_click <= next_word.widget_y + font_size)+								&& (next_word.widget_x + widget_x <= click_x <= next_word.widget_x + widget_x + padding + next_word.get_sidebearing_extent ())) {+														+								tx = widget_x + next_word.widget_x + padding;+								ty = widget_y + next_word.widget_y + padding;+								+								next_word.iterate ((glyph, kerning, last) => {+									double cw;+									int ci;+									double d;+									string gc = (!) glyph.get_unichar ().to_string ();+									+									d = Math.fabs (click_x - tx);+									+									if (d <= min_d) {+										min_d = d;+										c.character_index = ch_index;+										c.paragraph = i;+									}+									+									cw = (glyph.get_width ()) * next_word.get_font_scale () + kerning;+									ci = gc.length;+									+									tx += cw;+									ch_index += ci;+								});++								dt = Math.fabs (click_x - (tx + widget_x + padding));+								if (dt < min_d) {+									min_d = dt;+									c.character_index = ch_index;+									c.paragraph = i;+								}+							} else {+								dt = Math.fabs (click_x - (next_word.widget_x + widget_x + padding + next_word.get_sidebearing_extent ()));+								+								if (dt < min_d) {+									min_d = dt;+									c.character_index = ch_index + w.length;+									+									if (w.has_suffix ("\n")) {+										c.character_index -= "\n".length;+									}+									+									c.paragraph = i;+								}+							+								ch_index += w.length;+							}+						} else {+							ch_index += w.length;+						}+					}+				}+			}+			i++;+		}+		+		if (unlikely (c.paragraph < 0)) {+			c.paragraph = paragraphs.size > 0 ? paragraphs.size - 1 : 0;+			c.character_index = paragraphs.size > 0 ? paragraphs.get (c.paragraph).text.length : 0;+		}+		+		store_undo_state_at_next_event = true;+		+		return c;+	}+	+	/** @return offset to click in text. */+	public override void layout () {+		double p;+		double tx, ty;+		string w;+		double xmax = 0;+		int i = 0;+		double dd;+		+		tx = 0;+		ty = font_size;+		+		if (allocation.width <= 0 || allocation.height <= 0) {+			warning ("Parent widget allocation is not set.");+		}+		+		for (i = paragraphs.size - 1; i >= 0 && paragraphs.size > 1; i--) {+			if (unlikely (paragraphs.get (i).is_empty ())) {+				paragraphs.remove_at (i);+				update_paragraph_index ();+			}+		}+		+		i = 0;+		foreach (Paragraph paragraph in paragraphs) {+			if (paragraph.need_layout +				|| (paragraph.text_area_width != width+					&& paragraph.text_is_on_screen (allocation, widget_y))) {+						+				paragraph.start_y = ty;+				paragraph.start_x = tx;+				+				paragraph.cached_surface = null;+				+				foreach (Text next_word in paragraph.words) {+					next_word.set_font_size (font_size);+					+					w = next_word.text;+					p = next_word.get_sidebearing_extent ();++					if (unlikely (p == 0)) {+						warning (@"Zero width word: $(w)");+					}++					if (w == "") {+						break;+					}++					if (w == "\n") {+						next_word.widget_x = tx;+						next_word.widget_y = ty;+						+						tx = 0;+						ty += next_word.font_size;+					} else {+						if (!single_line) {+							if (tx + p + 2 * padding > width || w == "\n") {+								tx = 0;+								ty += next_word.font_size;+							}+						}++						if (tx + p > xmax) {+							xmax = tx + p;+						}+												+						next_word.widget_x = tx;+						next_word.widget_y = ty;+						+						if (w != "\n") {+							tx += p;+						}+					}+				}++				if (tx > xmax) {+					xmax = tx;+				}+				+				paragraph.text_area_width = width;+				paragraph.width = xmax;+				paragraph.end_x = tx;+				paragraph.end_y = ty;+				paragraph.need_layout = false;+			}+				+			if (xmax > width) {+				break;+			}+								+			tx = paragraph.end_x;+			ty = paragraph.end_y;+			i++;+		}+		+		if (xmax > width) {+			this.width = xmax + 2 * padding;+			layout ();+			return;+		}+		+		this.height = fmax (min_height, ty + 2 * padding);++		if (last_paragraph != DONE) {+			this.height = (text_length / (double) last_paragraph) * ty + 2 * padding; // estimate height+		}+		+		if (ty + widget_y < allocation.height && last_paragraph != DONE) {+			generate_paragraphs ();+			layout ();+			return;+		}++		ty = font_size;+		tx = 0;+		+		foreach (Paragraph paragraph in paragraphs) {+			dd = ty - paragraph.start_y;+			+			if (dd != 0) {+				paragraph.start_y += dd;+				paragraph.end_y += dd;+				foreach (Text word in paragraph.words) {+					word.widget_y += dd;+				}+			}+						+			ty = paragraph.end_y;+		}+	}+	+	public override void button_press (uint button, double x, double y) {+		if (is_over (x, y)) {+			carret = get_carret_at (x, y);+			selection_end = carret.copy ();+			update_selection = true;+		}+	}++	public override void button_release (uint button, double x, double y) {+		update_selection = false;+		show_selection = selection_is_visible ();+	}+	+	public override bool motion (double x, double y) {+		if (update_selection) {+			selection_end = get_carret_at (x, y);+			show_selection = selection_is_visible ();+		}+		+		return update_selection;+	}+	+	public override void draw (Context cr) {+		Text word;+		double tx, ty;+		string w;+		double scale;+		double width;+		double x = widget_x;+		double y = widget_y;+		Carret selection_start, selection_stop;+		double carret_x;+		double carret_y;+		+		layout ();+		+		if (draw_border) {+			// background+			cr.save ();+			cr.set_line_width (1);+			Theme.color (cr, "Text Area Background");+			draw_rounded_rectangle (cr, x, y, this.width, this.height - padding, padding);+			cr.fill ();+			cr.restore ();+			+			// border+			cr.save ();+			cr.set_line_width (1);+			Theme.color (cr, "Foreground 1");+			draw_rounded_rectangle (cr, x, y, this.width, this.height - padding, padding);+			cr.stroke ();+			cr.restore ();+		}+		+		cr.save ();++		word = new Text ();+		+		width = this.width - padding;+		x += padding;+		scale = word.get_font_scale ();+		y += font_size;+		+		// draw selection background+		if (has_selection ()) {+			tx = 0;+			ty = 0;+			+			selection_start = get_selection_start ();+			selection_stop = get_selection_stop ();+			+			cr.save ();+			Theme.color (cr, "Highlighted 1");++			for (int i = selection_start.paragraph; i <= selection_stop.paragraph; i++) {+				return_if_fail (0 <= i < paragraphs.size);+				Paragraph pg = paragraphs.get (i);++				if (pg.text_is_on_screen (allocation, widget_y)) {+					int char_index = 0;+					+					foreach (Text next_word in pg.words) {+						double cw = next_word.get_sidebearing_extent ();+						bool paint_background = false;+						bool partial_start = false;+						bool partial_stop = false;+						int wl;+						+						w = next_word.text;+						wl = w.length;+						scale = next_word.get_font_scale ();+												+						if (selection_start.paragraph == selection_stop.paragraph) {+							partial_start = true;+							partial_stop = true;+						} else if (selection_start.paragraph < i < selection_stop.paragraph) {+							paint_background = true;+						} else if (selection_start.paragraph == i) {+							paint_background = true;+							partial_start = true;+						} else if (selection_stop.paragraph == i) {+							paint_background = char_index + wl < selection_stop.character_index;+							partial_stop = !paint_background;+						}+						+						if (paint_background && !(partial_start || partial_stop)) {	+							double selection_y = widget_y + next_word.widget_y + scale * -next_word.cached_font.bottom_limit - font_size;+							cr.rectangle (widget_x + padding + next_word.widget_x - 1, selection_y, cw + 1, font_size);+							cr.fill ();+						}+						+						if (partial_start || partial_stop) {+							int index = char_index;+							double bx = widget_x + padding + next_word.widget_x + (partial_start ? 0 : 1);+							+							next_word.iterate ((glyph, kerning, last) => {+								double cwi;+								int ci;+								bool draw = (index >= selection_start.character_index && partial_start && !partial_stop)+									|| (index < selection_stop.character_index && !partial_start && partial_stop)+									|| (selection_start.character_index <= index < selection_stop.character_index && partial_start && partial_stop);+								+								cwi = (glyph.get_width ()) * next_word.get_font_scale () + kerning;++								if (draw) {+									double selection_y = widget_y + next_word.widget_y + scale * -next_word.cached_font.bottom_limit - font_size;+									cr.rectangle (bx - 1, selection_y, cwi + 1, font_size);+									cr.fill ();+								}+								+								bx += cwi;+								ci = ((!) glyph.get_unichar ().to_string ()).length;+								index += ci;+							});+						}	+					+						char_index += w.length;	+					}+				}+			}+			+			cr.restore ();+		}++		tx = 0;+		ty = 0;	+		+		int first_visible = 0;+		int last_visible;+		int paragraphs_size = paragraphs.size;+		while (first_visible < paragraphs_size) {+			if (paragraphs.get (first_visible).text_is_on_screen (allocation, widget_y)) {+				break;+			}+			first_visible++;+		}+		+		last_visible = first_visible;+		while (last_visible < paragraphs_size) {+			if (!paragraphs.get (last_visible).text_is_on_screen (allocation, widget_y)) {+				last_visible++;+				break;+			}+			last_visible++;+		}	+		+		if (paragraphs_size == 0) {+			if (carret_is_visible) {+				draw_carret_at (cr, widget_x + padding, widget_y + font_size + padding);+			}+			+			return;+		}+		+		Context cc; // cached context+		Paragraph paragraph;+		paragraph = paragraphs.get (0);+		+		tx = paragraph.start_x;+		ty = paragraph.start_y;++		for (int i = first_visible; i < last_visible; i++) {+			paragraph = paragraphs.get (i);+			+			tx = paragraph.start_x;+			ty = paragraph.start_y;++			if (paragraph.cached_surface == null) {				+				paragraph.cached_surface = Screen.create_background_surface ((int) width + 2, paragraph.get_height () + (int) font_size + 2);+				cc = new Context ((!) paragraph.cached_surface);+				cc.scale (Screen.get_scale(), Screen.get_scale());+				+				foreach (Text next_word in paragraph.words) {+					if (next_word.text != "\n") {+						next_word.draw_at_top (cc, next_word.widget_x, next_word.widget_y - ty);+					}+				}+			}+			+			if (likely (paragraph.cached_surface != null)) {+				// FIXME: subpixel offset in text area+				Screen.paint_background_surface(cr, +					(!) paragraph.cached_surface,+					(int) (x + tx),+					(int) (widget_y + paragraph.start_y - font_size + padding));+			} else {+				warning ("No paragraph image.");+			}+		}++		if (carret_is_visible) {+			get_carret_position (carret, out carret_x, out carret_y);+			+			if (carret_y < 0) {+				draw_carret_at (cr, widget_x + padding, widget_y + font_size + padding);+			} else {+				draw_carret_at (cr, carret_x, carret_y);+			}+		}+		+		if (has_selection ()) {+			get_carret_position (selection_end, out carret_x, out carret_y);+			+			if (carret_y < 0) {+				draw_carret_at (cr, widget_x + padding, widget_y + font_size + padding);+			} else {+				draw_carret_at (cr, carret_x, carret_y);+			}+		}+	}+	+	void get_carret_position (Carret carret, out double carret_x, out double carret_y) {+		Paragraph paragraph;+		double tx;+		double ty;+		int ch_index;+		int wl;+		double pos_x, pos_y;++		ch_index = 0;++		carret_x = -1;+		carret_y = -1;++		return_if_fail (0 <= carret.paragraph < paragraphs.size);+		paragraph = paragraphs.get (carret.paragraph);++		pos_x = -1;+		pos_y = -1;+		+		foreach (Text next_word in paragraph.words) {+			string w = next_word.text;+			wl = w.length;++			if (carret.character_index == ch_index) {+				pos_x = next_word.widget_x + widget_x + padding;+				pos_y = widget_y + next_word.widget_y + next_word.get_baseline_to_bottom_for_font ();		+			} else if (carret.character_index >= ch_index + wl) {+				pos_x = next_word.widget_x + next_word.get_sidebearing_extent () + widget_x + padding;+				pos_y = widget_y + next_word.widget_y + next_word.get_baseline_to_bottom_for_font ();+				+				if (next_word.text.has_suffix ("\n")) {+					pos_x = widget_x + padding;+					pos_y += next_word.font_size;+				}+			} else if (ch_index < carret.character_index <= ch_index + wl) {+				tx = widget_x + next_word.widget_x;+				ty = widget_y + next_word.widget_y + next_word.get_baseline_to_bottom_for_font ();+		+				if (carret.character_index <= ch_index) {+					pos_x = widget_x + padding;+					pos_y = ty;+				}++				next_word.iterate ((glyph, kerning, last) => {+					double cw;+					int ci;++					cw = (glyph.get_width ()) * next_word.get_font_scale () + kerning;+					ci = ((!) glyph.get_unichar ().to_string ()).length;+					+					if (ch_index < carret.character_index <= ch_index + ci) {+						pos_x = tx + cw + padding;+						pos_y = ty;+						+						if (glyph.get_unichar () == '\n') {+							pos_x = widget_x + padding;+							pos_y += next_word.font_size;+						}+					}+					+					tx += cw;+					ch_index += ci;+				});+			}+			+			ch_index += wl;+		}+		+		carret_x = pos_x;+		carret_y = pos_y;+	}+	+	void draw_carret_at (Context cr, double x, double y) {+		cr.save ();+		cr.set_source_rgba (0, 0, 0, 0.5);+		cr.set_line_width (1);+		cr.move_to (x, y);+		cr.line_to (x, y - font_size);+		cr.stroke ();+		cr.restore ();	+	}++	public void store_undo_edit_state () {+		TextUndoItem ui = new TextUndoItem (carret);+		ui.edited.add (get_current_paragraph ().copy ());+		undo_items.add (ui);+		redo_items.clear ();+	}+	+	public void redo () {+		TextUndoItem i;+		TextUndoItem undo_item;+		+		if (redo_items.size > 0) {+			i = redo_items.get (redo_items.size - 1); +			+			undo_item = new TextUndoItem (i.carret);+			+			i.deleted.sort ((a, b) => {+				Paragraph pa = (Paragraph) a;+				Paragraph pb = (Paragraph) b;+				return pb.index - pa.index;+			});++			i.added.sort ((a, b) => {+				Paragraph pa = (Paragraph) a;+				Paragraph pb = (Paragraph) b;+				return pa.index - pb.index;+			});++			foreach (Paragraph p in i.deleted) {+				if (unlikely (!(0 <= p.index < paragraphs.size))) {+					warning ("Paragraph not found.");+				} else {+					undo_item.deleted.add (p.copy ());+					paragraphs.remove_at (p.index);+				}+			}+						+			foreach (Paragraph p in i.added) {+				if (p.index == paragraphs.size) {+					paragraphs.add (p.copy ());+				} else {+					if (unlikely (!(0 <= p.index < paragraphs.size))) {+						warning (@"Index: $(p.index) out of bounds, size: $(paragraphs.size)");+					} else {+						undo_item.added.add (paragraphs.get (p.index).copy ());+						paragraphs.insert (p.index, p.copy ());+					}+				}+			}++			foreach (Paragraph p in i.edited) {+				if (unlikely (!(0 <= p.index < paragraphs.size))) {+					warning (@"Index: $(p.index ) out of bounds, size: $(paragraphs.size)");+					return;+				}+				+				undo_item.edited.add (paragraphs.get (p.index).copy ());+				paragraphs.set (p.index, p.copy ());+			}			+			+			redo_items.remove_at (redo_items.size - 1);+			undo_items.add (undo_item);+			+			carret = i.carret.copy ();+			layout ();+		}+	}+	+	public void undo () {+		TextUndoItem i;+		TextUndoItem redo_item;+		+		if (undo_items.size > 0) {+			i = undo_items.get (undo_items.size - 1); +			redo_item = new TextUndoItem (i.carret);+			+			i.deleted.sort ((a, b) => {+				Paragraph pa = (Paragraph) a;+				Paragraph pb = (Paragraph) b;+				return pa.index - pb.index;+			});++			i.added.sort ((a, b) => {+				Paragraph pa = (Paragraph) a;+				Paragraph pb = (Paragraph) b;+				return pb.index - pa.index;+			});+			+			foreach (Paragraph p in i.added) {+				if (unlikely (!(0 <= p.index < paragraphs.size))) {+					warning ("Paragraph not found.");+				} else {+					redo_item.added.add (paragraphs.get (p.index).copy ());+					paragraphs.remove_at (p.index);+				}+			}+						+			foreach (Paragraph p in i.deleted) {+				if (p.index == paragraphs.size) {+					paragraphs.add (p.copy ());+				} else {+					if (unlikely (!(0 <= p.index < paragraphs.size))) {+						warning (@"Index: $(p.index) out of bounds, size: $(paragraphs.size)");+					} else {+						redo_item.deleted.add (p.copy ());+						paragraphs.insert (p.index, p.copy ());+					}+				}+			}++			foreach (Paragraph p in i.edited) {+				if (unlikely (!(0 <= p.index < paragraphs.size))) {+					warning (@"Index: $(p.index ) out of bounds, size: $(paragraphs.size)");+					return;+				}+				+				redo_item.edited.add (paragraphs.get (p.index).copy ());+				paragraphs.set (p.index, p.copy ());+			}			+			+			undo_items.remove_at (undo_items.size - 1);+			redo_items.add (redo_item);+			+			carret = i.carret.copy ();+			layout ();+		}+	}+	+	public void set_editable (bool editable) {+		this.editable = editable;+	}+	+	public class TextUndoItem : GLib.Object {+		public Carret carret;+		public Gee.ArrayList<Paragraph> added = new Gee.ArrayList<Paragraph> ();+		public Gee.ArrayList<Paragraph> edited = new Gee.ArrayList<Paragraph> ();+		public Gee.ArrayList<Paragraph> deleted = new Gee.ArrayList<Paragraph> ();+		+		public TextUndoItem (Carret c) {+			carret = c.copy ();+		}+	}+		+	public class Paragraph : GLib.Object {+		public double end_x = -10000;+		public double end_y = -10000;+		+		public double start_x = -10000;+		public double start_y = -10000;+		+		public double width = -10000;+		public double text_area_width = -10000;+		+		public string text;+		+		public Gee.ArrayList<Text> words {+			get {+				if (words_in_paragraph.size == 0) {+					generate_words ();+				}+				+				return words_in_paragraph;+			}+		}+		+		private Gee.ArrayList<Text> words_in_paragraph = new Gee.ArrayList<Text> ();+		public int text_length;+		public bool need_layout = true;+		public Surface? cached_surface = null;+		double font_size;+		public int index;+		Color text_color;+		+		public Paragraph (string text, double font_size, int index, Color c) {+			this.index = index;+			this.font_size = font_size;+			text_color = c;+			set_text (text);+		}++		public Paragraph copy () {+			Paragraph p = new Paragraph (text.dup (), font_size, index, text_color);+			p.need_layout = true;+			return p;+		}++		public bool is_empty () {+			return text == "";+		}++		public void set_text (string t) {+			this.text = t;+			text_length = t.length;+			need_layout = true;+			words.clear ();+			cached_surface = null;+		}++		public int get_height () {+			return (int) (end_y - start_y) + 1;+		}+		+		public int get_width () {+			return (int) width + 1;+		}+		+		public bool text_is_on_screen (WidgetAllocation alloc, double widget_y) {+			bool v = (0 <= start_y + widget_y <= alloc.height)+				|| (0 <= end_y + widget_y <= alloc.height)+				|| (start_y + widget_y <= 0 && alloc.height <= end_y + widget_y);+			return v;+		}++		private void generate_words () {+			string w;+			int p = 0;+			bool carret_at_word_end = false;+			Text word;+			int carret = 0;+			int iter_pos = 0;++			return_if_fail (words_in_paragraph.size == 0);++			while (p < text_length) {+				w = get_next_word (out carret_at_word_end, ref iter_pos, carret);+				+				if (w == "") {+					break;+				}+				+				word = new Text (w, font_size, 0, text_color);+				words_in_paragraph.add (word);+			}+		}++		string get_next_word (out bool carret_at_end_of_word, ref int iter_pos, int carret) {+			int i;+			int ni;+			int pi;+			string n;+			int nl;+			+			carret_at_end_of_word = false;+			+			if (iter_pos >= text_length) {+				carret_at_end_of_word = true;+				return "".dup ();+			}+			+			if (text.get_char (iter_pos) == '\n') {+				iter_pos += "\n".length;+				carret_at_end_of_word = (iter_pos == carret);+				return "\n".dup ();+			}+			+			i = text.index_of (" ", iter_pos);+			pi = i + " ".length;+			+			ni = text.index_of ("\t", iter_pos);+			if (ni != -1 && ni < pi || i == -1) {+				i = ni;+				pi = i  + "\t".length;+			}+			+			ni = text.index_of ("\n", iter_pos);+			if (ni != -1 && ni < pi || i == -1) {+				i = ni;+				pi = i;+			}+			+			if (iter_pos + iter_pos - pi > text_length || i == -1) {+				n = text.substring (iter_pos);+			} else {+				n = text.substring (iter_pos, pi - iter_pos);+			}+			+			nl = n.length;+			if (iter_pos < carret < iter_pos + nl) {+				n = text.substring (iter_pos, carret - iter_pos);+				nl = n.length;+				carret_at_end_of_word = true;+			}+			+			iter_pos += nl;+			+			if (iter_pos == carret) {+				carret_at_end_of_word = true;+			}+			+			return n;+		}+	}+	+	public class Carret : GLib.Object {+		+		public int paragraph = 0;+		+		public int character_index {+			get { +				return ci;+			}+			+			set { +				ci = value;+			}+		}+		+		private int ci = 0;+		+		public double desired_x = 0;+		public double desired_y = 0;+		+		public Carret () {+		}+		+		public void print () {+			stdout.printf (@"paragraph: $paragraph, character_index: $character_index\n");+		}+		+		public Carret copy () {+			Carret c = new Carret ();+			+			c.paragraph = paragraph;+			c.character_index = character_index;+			+			c.desired_x = desired_x;+			c.desired_y = desired_y;+			+			return c;+		}+	}+}++}diff --git a/libbirdfont/TextRendering/fontconfig.c b/libbirdfont/TextRendering/fontconfig.cnew file mode 100644index 0000000..f02b747--- /dev/null+++ b/libbirdfont/TextRendering/fontconfig.c@@ -0,0 +1,140 @@+/*+	Copyright (C) 2015 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++#include <stdio.h>+#include <glib.h>+#include <fontconfig/fontconfig.h>++gchar* find_font_with_property (FcConfig* fontconfig, const gchar* characters, const gchar* property) {+	FcPattern* pattern;+	FcCharSet* character_set;+	FcObjectSet* font_properties;+	FcFontSet* fonts;+	FcPattern* font;+	FcChar8* path;+	gchar* result;+	gchar* remaining_characters;+	gunichar character;+	+	if (fontconfig == NULL) {+		g_warning("Font config not loaded.");+		return NULL;+	}+	+	result = NULL;+	pattern = FcPatternCreate ();+	+	character_set = FcCharSetCreate ();+	+	remaining_characters = (gchar*) characters;+	while (TRUE) {+		character = g_utf8_get_char (remaining_characters);+		+		if (character == '\0') {+			break;+		}+		+		FcCharSetAddChar(character_set, character);+				+		remaining_characters = g_utf8_next_char (remaining_characters);+	}++	FcPatternAddCharSet (pattern, FC_CHARSET, character_set);+	FcCharSetDestroy (character_set);+	FcPatternAddInteger (pattern, FC_SLANT, FC_SLANT_ROMAN);+	+	FcPatternAddBool(pattern, FC_SCALABLE, FcTrue);+	font_properties = FcObjectSetBuild (property, NULL);	+	fonts = FcFontList (fontconfig, pattern, font_properties);+	+	if (fonts && fonts->nfont > 0) {+		font = fonts->fonts[0];+		if (FcPatternGetString(font, property, 0, &path) == FcResultMatch) {+			result = g_strdup ((gchar*) path);+		}+	}++	if (fonts) {+		FcFontSetDestroy(fonts);+	}++	if (pattern) {+		FcPatternDestroy(pattern);+	}++	return result;+}++/** Find a fallback font for a set of characters.+ * @return A path to the font file.+ */+gchar* find_font (FcConfig* fontconfig, const gchar* characters) {+	return find_font_with_property (fontconfig, characters, FC_FILE);+}++/** Find a fallback font for a set of characters.+ * @return Family name of the font.+ */+gchar* find_font_family (FcConfig* fontconfig, const gchar* characters) {+	return find_font_with_property (fontconfig, characters, FC_FAMILY);+}++/** Find a font file from its family name.+ * @param font_config fontconfig instance+ * @param font_name name of the font+ * @return full path to the font file+ */+gchar* find_font_file (FcConfig* font_config, const gchar* font_name) {+	const FcChar8* name;+	FcPattern* search_pattern;+	FcPattern* font;+	FcChar8* file;+	gchar* path;+	FcObjectSet* font_properties;+	FcFontSet* fonts;+	int i;++	if (font_config == NULL) {+		g_warning("Font config not loaded.");+		return NULL;+	}+	+	path = NULL;+	name = font_name;++	search_pattern = FcPatternCreate ();+	FcPatternAddString (search_pattern, FC_FAMILY, name);+	FcPatternAddBool (search_pattern, FC_SCALABLE, FcTrue);+	FcPatternAddInteger (search_pattern, FC_WEIGHT, FC_WEIGHT_MEDIUM);+	FcPatternAddInteger (search_pattern, FC_SLANT, FC_SLANT_ROMAN);+		+	font_properties = FcObjectSetBuild (FC_FILE, NULL);+	fonts = FcFontList (font_config, search_pattern, font_properties);+	+	if (fonts->nfont > 0) {+		for (i = 0; i < fonts->nfont; i++) {+			font = fonts->fonts[i];+			+			if (FcPatternGetString(font, FC_FILE, 0, &file) == FcResultMatch) {+				path = g_strdup ((gchar*) file);+				break;+			}+		}+		FcPatternDestroy (font);+	}++	FcPatternDestroy (search_pattern);+	+	return path;+}diff --git a/libbirdfont/Theme.vala b/libbirdfont/Theme.valaindex b83b5c6..9dad90c 100644--- a/libbirdfont/Theme.vala+++ b/libbirdfont/Theme.vala@@ -103,8 +103,8 @@ public class Theme : GLib.Object { 		Theme.set_default_color ("Stroke Color", 141 / 255.0, 141 / 255.0, 141 / 255.0, 1); 		Theme.set_default_color ("Handle Color", 141 / 255.0, 141 / 255.0, 141 / 255.0, 1); 		Theme.set_default_color ("Fill Color", 0.5, 0.5, 0.5, 1);-		Theme.set_default_color ("Selected Objects", 35 / 255.0, 131 / 255.0, 194 / 255.0, 1);-		+		Theme.set_default_color ("Objects", 0, 0, 0, 1);+ 		Theme.set_default_color ("Background 1", 1, 1, 1, 1); 		Theme.set_default_color ("Dialog Background", 238 / 255.0, 239 / 255.0, 243 / 255.0, 1); 		Theme.set_default_color ("Menu Background", 222 / 255.0, 221 / 255.0, 226 / 255.0, 1);@@ -210,7 +210,7 @@ public class Theme : GLib.Object { 		Theme.set_default_color ("Stroke Color", 141 / 255.0, 141 / 255.0, 141 / 255.0, 1); 		Theme.set_default_color ("Handle Color", 141 / 255.0, 141 / 255.0, 141 / 255.0, 1); 		Theme.set_default_color ("Fill Color", 0.5, 0.5, 0.5, 1);-		Theme.set_default_color ("Selected Objects", 35 / 255.0, 131 / 255.0, 194 / 255.0, 1);+		Theme.set_default_color ("Objects", 0, 0, 0, 1); 		 		Theme.set_default_color ("Background 1", 1, 1, 1, 1); 		Theme.set_default_color ("Dialog Background", 55 / 255.0, 56 / 255.0, 62 / 255.0, 1);@@ -315,7 +315,7 @@ public class Theme : GLib.Object { 		Theme.set_default_color ("Stroke Color", 141 / 255.0, 141 / 255.0, 141 / 255.0, 1); 		Theme.set_default_color ("Handle Color", 141 / 255.0, 141 / 255.0, 141 / 255.0, 1); 		Theme.set_default_color ("Fill Color", 0, 0, 0, 1);-		Theme.set_default_color ("Selected Objects", 0, 0, 0, 1);+		Theme.set_default_color ("Objects", 0, 0, 0, 1); 		 		Theme.set_default_color ("Background 1", 1, 1, 1, 1); 		Theme.set_default_color ("Dialog Background", 1, 1, 1, 1);@@ -424,6 +424,7 @@ public class Theme : GLib.Object { 			t_("Handle Color"); 			t_("Fill Color"); 			t_("Selected Objects");+			t_("Objects"); 			 			t_("Background 1"); 			t_("Dialog Background");diff --git a/libbirdfont/Tool.vala b/libbirdfont/Tool.valaindex fc4e756..e5e2c2e 100644--- a/libbirdfont/Tool.vala+++ b/libbirdfont/Tool.vala@@ -1,5 +1,5 @@ /*-	Copyright (C) 2012, 2014 Johan Mattsson+	Copyright (C) 2012 2014 2016 Johan Mattsson  	This library is free software; you can redistribute it and/or modify  	it under the terms of the GNU Lesser General Public License as @@ -66,6 +66,8 @@ public class Tool : Widget { 	bool show_bg = true; 	 	public string tip = "";+	string extented_description = "";+	TextArea? help = null; 	 	public bool persistent = false; 	public bool editor_events = false;@@ -82,8 +84,9 @@ public class Tool : Widget { 	public signal void redraw_tool (); 	 	/** Create tool with a certain name and load icon "name".png */-	public Tool (string? name = null, string tip = "") {+	public Tool (string? name = null, string tip = "", string extended_description = "") { 		this.tip = tip;+		this.extented_description = extended_description; 		 		icon_font = new Text (); 		@@ -122,12 +125,39 @@ public class Tool : Widget { 		panel_move_action.connect ((self, x, y) => { 			if (is_active ()) { 				wait_for_tooltip ();+				+				Help help_box = MainWindow.get_help ();+				+				if (help == null) {+					help = update_help ();+				}+				+				help_box.set_help_text ((!) help); 				redraw (); 			} 			return false; 		}); 	} 	+	public virtual void clear_cache () {+		help = null;+	}+	+	public TextArea? update_help () {+		string t = get_tip ();+		string description = t;+		+		if (t != "" && extented_description != "") {+			description += "\n\n";+		}+		+		if (extented_description != "") {+			description += extented_description;+		}+		+		return Help.create_help_text (description);+	}+	 	public virtual string get_tip () { 		return tip; 	}@@ -221,6 +251,10 @@ public class Tool : Widget { 	} 	 	public string get_key_binding () {+		if (is_null (MainWindow.get_menu ())) {+			return "";+		}+		 		ToolItem? ti = MainWindow.get_menu ().get_item_for_tool (this); 		ToolItem t; 		diff --git a/libbirdfont/ToolItem.vala b/libbirdfont/ToolItem.valaindex 14fa829..9f163d7 100644--- a/libbirdfont/ToolItem.vala+++ b/libbirdfont/ToolItem.vala@@ -18,6 +18,28 @@ public class ToolItem : MenuItem {  	public Tool tool; +	public override uint modifiers { +		get {+			return base.modifiers;+		} +		+		set {+			base.modifiers = value;+			tool.update_help ();+		}+	}+	+	public override unichar key { +		get {+			return base.key;+		} +		+		set {+			base.key = value;+			tool.update_help ();+		}+	}+	 	public ToolItem (Tool tool) { 		base (tool.tip, tool.name); 		diff --git a/libbirdfont/TrackTool.vala b/libbirdfont/TrackTool.valaindex fc0c28a..e5ebe52 100644--- a/libbirdfont/TrackTool.vala+++ b/libbirdfont/TrackTool.vala@@ -121,8 +121,11 @@ public class TrackTool : Tool { 				start_update_timer (); 				drawing = true; 				-				foreach (Path path in glyph.active_paths) {-					path.create_full_stroke (); // cache merged stroke parts+				foreach (Object path in glyph.active_paths) {+					if (path is PathObject) {+						// cache merged stroke parts+						((PathObject) path).get_path ().create_full_stroke ();+					} 				} 			} 		});@@ -146,8 +149,9 @@ public class TrackTool : Tool { 				g = MainWindow.get_current_glyph (); 				 				if (g.active_paths.size > 0) { // set type for last point-					p = g.active_paths.get (g.active_paths.size - 1);-					+					Object o = g.active_paths.get (g.active_paths.size - 1);+					p = ((PathObject) o).get_path ();+									 					if (p.points.size > 1) { 						previous = p.points.get (p.points.size - 1); 						previous.type = DrawingTools.point_type;@@ -164,8 +168,10 @@ public class TrackTool : Tool { 					add_endpoint_and_merge (x, y); 				} 							-				foreach (Path path in g.active_paths) {-					convert_hidden_points (path);+				foreach (Object path in g.active_paths) {+					if (path is PathObject) {+						convert_hidden_points (((PathObject) path).get_path ());+					} 				} 				 				g.clear_active_paths ();@@ -226,12 +232,17 @@ public class TrackTool : Tool { 			} 		} 	}-	-	// FIXME: double check+ 	void set_tie () { 		Glyph glyph = MainWindow.get_current_glyph (); 		var paths = glyph.get_visible_paths ();-		Path p = paths.get (paths.size - 1);+		Path p;+		+		if (paths.size == 0) {+			return;+		}+		+		p = paths.get (paths.size - 1); 		 		foreach (EditPoint ep in p.points) { 			if (ep.get_right_handle ().is_line () || ep.get_left_handle ().is_line ()) {@@ -403,7 +414,14 @@ public class TrackTool : Tool { 			return; 		} 		-		p = glyph.active_paths.get (glyph.active_paths.size - 1);+		Object o = glyph.active_paths.get (glyph.active_paths.size - 1);+		+		if (unlikely (!(o is PathObject))) {+			warning ("Object is not a path");+			return;+		}+		+		p = ((PathObject) o).get_path (); 		p.reopen (); 		px = Glyph.path_coordinate_x (x); 		py = Glyph.path_coordinate_y (y);@@ -411,7 +429,8 @@ public class TrackTool : Tool { 		added_points++;  		PenTool.convert_point_to_line (new_point, false);-		new_point.set_point_type (PointType.HIDDEN);+		new_point.set_point_type (PointType.HIDDEN);		+		p.recalculate_linear_handles_for_point (new_point); 		 		if (p.points.size > 1) { 			glyph.redraw_segment (new_point, new_point.get_prev ());@@ -488,7 +507,15 @@ public class TrackTool : Tool { 			return new Path (); 		} 			-		return glyph.active_paths.get (glyph.active_paths.size - 1);		+		Object o = glyph.active_paths.get (glyph.active_paths.size - 1);+		+		if (likely (o is PathObject)) {+			return ((PathObject) o).get_path ();+		}+		+		warning ("Active object is a path.");+		+		return new Path (); 	} 	 	/** Delete all points close to the pixel at x,y. */diff --git a/libsvgbird/AttributePattern.vala b/libsvgbird/AttributePattern.valanew file mode 100644index 0000000..722f377--- /dev/null+++ b/libsvgbird/AttributePattern.vala@@ -0,0 +1,143 @@+/*+	Copyright (C) 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using B;+using Math;++namespace SvgBird {++public enum AttributePatternType {+	NONE,+	ANYTHING,+	LIST,+	EQUALS,+	STARTS_WITH+}++public class AttributePattern : GLib.Object {+	public string name = "";+	public string? content = null;+	public AttributePatternType type = AttributePatternType.NONE;++	public AttributePattern copy () {+		AttributePattern a = new AttributePattern ();+		a.name = name;+		a.content = content;+		a.type = type;+		return a;+	}+	+	public bool match (Attributes attributes) {+		switch (type) {+		case AttributePatternType.ANYTHING:+			return match_attribute_name (attributes);+		case AttributePatternType.LIST:+			return match_list (attributes);+		case AttributePatternType.EQUALS:+			return attribute_equals (attributes);+		case AttributePatternType.STARTS_WITH:+			return attribute_start_with (attributes);+		}+		+		return false;+	}++	string remove_hypen (string content) {+		int hyphen = content.index_of ("-");+		+		if (hyphen == -1) {+			return content;+		}+		+		return content.substring (0, hyphen);+	}++	bool attribute_start_with (Attributes attributes) {+		foreach (Attribute attribute in attributes) {+			if (attribute.get_name () == name +				&& remove_hypen (attribute.get_content ()) == ((!) content)) {+				return true;+			}+		}+		+		return false;+	}++	bool attribute_equals (Attributes attributes) {+		foreach (Attribute attribute in attributes) {+			if (attribute.get_name () == name +				&& attribute.get_content () == ((!) content)) {+				return true;+			}+		}+		+		return false;+	}+	+	bool match_attribute_name (Attributes attributes) {+		foreach (Attribute attribute in attributes) {+			if (attribute.get_name () == name) {+				return true;+			}+		}+		+		return false;+	}+	+	bool match_list (Attributes attributes) {+		if (content == null) {+			return false;+		}+		+		string[] list = ((!) content).split (" ");+		foreach (Attribute attribute in attributes) {+			if (attribute.get_name () == name) {+				+				string attribute_content = attribute.get_content ();+				foreach (string list_item in list) {+					if (attribute_content == list_item) {+						return true;+					}+				}+			}+		}+		+		return false;+	}++	public string to_string () {+		string c;+		+		if (content == null) {+			c = "null";+		} else {+			c = (!) content;+		}+		+		switch (type) {+		case AttributePatternType.ANYTHING:+			return "[" + name + "]";+		case AttributePatternType.LIST:+			return "[" + name + "~=" + c + "]";+		case AttributePatternType.EQUALS:+			return "[" + name + "=" + c + "]";+		case AttributePatternType.STARTS_WITH:+			return "[" + name + "|=" + c + "]";+		}+		+		return "No attributes.";+	}+}++}diff --git a/libsvgbird/BezierPoints.vala b/libsvgbird/BezierPoints.valanew file mode 100644index 0000000..d9c015a--- /dev/null+++ b/libsvgbird/BezierPoints.vala@@ -0,0 +1,45 @@+/*+	Copyright (C) 2014 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++namespace SvgBird {++/** Bezier point container for the SVG parser. */+public class BezierPoints {+	public unichar type = '\0';+	public unichar svg_type = '\0';+	public double x0  = 0;+	public double y0 = 0;+	public double x1 = 0;+	public double y1 = 0;+	public double x2 = 0;+	public double y2 = 0;++	// arc arguments+	public double rx = 0; +	public double ry = 0;+	public double angle = 0;+	public bool large_arc = false;+	public bool sweep = false;+	// the arc instructions begins at x0, y0 and ends at x1, x1++	public string to_string () {+		if (svg_type == 'A' || svg_type == 'a') {+			return @"SVG type:$((!) svg_type.to_string ()) $x0,$y0 $x1,$y1 rx=$rx, ry=$ry, angle=$angle, large_arc=$large_arc, sweep=$sweep)";+		}+		+		return @"$((!)type.to_string ()) $x0,$y0 $x1,$y1 $x2,$y2 SVG:$((!)svg_type.to_string ())";+	}+}++}diff --git a/libsvgbird/Circle.vala b/libsvgbird/Circle.valanew file mode 100644index 0000000..4224d37--- /dev/null+++ b/libsvgbird/Circle.vala@@ -0,0 +1,68 @@+/*+	Copyright (C) 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using Cairo;++namespace SvgBird {++public class Circle : Object {	++	public double cx = 0;+	public double cy = 0;+	public double r = 0;+	+	public Circle () {+	}++	public Circle.create_copy (Circle c) {+		Object.copy_attributes (c, this);+		c.cx = cx;+		c.cx = cy;+		c.r = r;+	}+	+	public override bool is_over (double x, double y) {+		return false;+	}+			+	public override void draw_outline (Context cr) {+		cr.arc (cx, cy, r, 0, 2 * Math.PI);+	}++	public override void move (double dx, double dy) {+	}+	+	public override void update_region_boundaries () {+	}++	public override void rotate (double theta, double xc, double yc) {+	}+	+	public override bool is_empty () {+		return false;+	}+	+	public override void resize (double ratio_x, double ratio_y) {+	}+	+	public override Object copy () {+		return new Circle.create_copy (this);+	}++	public override string to_string () {+		return "Circle";+	}+}++}diff --git a/libsvgbird/ClipPath.vala b/libsvgbird/ClipPath.valanew file mode 100644index 0000000..3dbcfe4--- /dev/null+++ b/libsvgbird/ClipPath.vala@@ -0,0 +1,38 @@+/*+	Copyright (C) 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using Cairo;++namespace SvgBird {++public class ClipPath : GLib.Object {+	Layer layer = new Layer ();+	+	public string id {+		get {+			return layer.id;+		}+	}+	+	public ClipPath (Layer layer) {+		this.layer = layer;+	}+	+	public void apply (Context cr) {+		layer.draw_outline (cr);+		cr.clip ();+	}+}++}diff --git a/libsvgbird/Color.vala b/libsvgbird/Color.valanew file mode 100644index 0000000..a952a3a--- /dev/null+++ b/libsvgbird/Color.vala@@ -0,0 +1,286 @@+/*+	Copyright (C) 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++namespace SvgBird {++public class Color {+	public double r;+	public double g;+	public double b;+	public double a;+	+	public Color (double r, double g, double b, double a) {+		this.r = r;+		this.g = g;+		this.b = b;+		this.a = a;+	}++	public static Color? parse (string? svg_color) {+		if (svg_color == null) {+			return null;+		}+		+		string color = (!) svg_color;+		uint32 c;+		string[] arguments;+		Color parsed = new Color (0, 0, 0, 1);++		if (color == "none") {+			return null;+		}+		+		if (!color.has_prefix ("#")) {+			color = get_hex_for_name (color);+		}+		+		color = color.replace ("#", "");+			+		if (color.char_count () == 6) {+			color.scanf ("%x", out c);+			parsed.r = (uint8)((c & 0xFF0000) >> 16) / 254.0;+			parsed.g = (uint8)((c & 0x00FF00) >> 8)/ 254.0;+			parsed.b = (uint8)(c & 0x0000FF) / 254.0;+		} else if (color.char_count () == 3) {+			color.scanf ("%x", out c);+			parsed.r = (uint8)(((c & 0xF00) >> 4) | ((c & 0xF00) >> 8)) / 254.0;+			parsed.g = (uint8)((c & 0x0F0) | ((c & 0x0F0) >> 4)) / 254.0;+			parsed.b = (uint8)(((c & 0x00F) << 4) | (c & 0x00F)) / 254.0;+		} else if (color.index_of ("%") > -1) {+			color = color.replace ("rgb", "");+			color = color.replace (" ", "");+			color = color.replace ("\t", "");+			color = color.replace ("%", "");+			arguments = color.split (",");+			+			return_val_if_fail (arguments.length == 3, parsed);+			arguments[0].scanf ("%lf", out parsed.r);+			arguments[1].scanf ("%lf", out parsed.g);+			arguments[2].scanf ("%lf", out parsed.b);+		} else if (color.index_of ("rgb") > -1) {+			color = color.replace ("rgb", "");+			color = color.replace (" ", "");+			color = color.replace ("\t", "");+			arguments = color.split (",");+			+			return_val_if_fail (arguments.length == 3, parsed);+			+			int r, g, b;+			arguments[0].scanf ("%d", out r);+			parsed.r = r / 254.0;+			+			arguments[1].scanf ("%d", out g);+			parsed.g = g / 254.0;+			+			arguments[2].scanf ("%d", out b);+			parsed.b = b / 254.0;+		} else {+			warning ("Unknown color type: " + color);+		}+		+		return parsed;+ 	}++	public string to_rgb_hex () {+		StringBuilder rgb = new StringBuilder ();+		rgb.append ("#");+		rgb.append_printf ("%02x", (int) Math.rint (r  * 254));+		rgb.append_printf ("%02x", (int) Math.rint (g  * 254));+		rgb.append_printf ("%02x", (int) Math.rint (b  * 254));+		return rgb.str;+	}++	public string to_string () {+		StringBuilder rgba = new StringBuilder ();+		rgba.append (to_rgb_hex ());+		rgba.append_printf ("%x", (int) Math.rint (a  * 254));+		return rgba.str;+	}++	public Color copy () {+		return new Color (r, g, b, a);+	}+	+	public static string get_hex_for_name (string name) {+		string color = name.down ();+		+		if (color == "black") return "#000000";+		if (color == "silver") return "#C0C0C0";+		if (color == "gray") return "#808080";+		if (color == "maroon") return "#800000";+		if (color == "red") return "#FF0000";+		if (color == "purple") return "#800080";+		if (color == "white") return "#FFFFFF";+		if (color == "fuchsia") return "#FF00FF";+		if (color == "green") return "#008000";+		if (color == "lime") return "#00FF00";+		if (color == "olive") return "#808000";+		if (color == "yellow") return "#FFFF00";+		if (color == "navy") return "#000080";+		if (color == "blue") return "#0000FF";+		if (color == "teal") return "#008080";+		if (color == "aqua") return "#00FFFF";+		if (color == "aliceblue") return "#f0f8ff";+		if (color == "antiquewhite") return "#faebd7";+		if (color == "aqua") return "#00ffff";+		if (color == "aquamarine") return "#7fffd4";+		if (color == "azure") return "#f0ffff";+		if (color == "beige") return "#f5f5dc";+		if (color == "bisque") return "#ffe4c4";+		if (color == "black") return "#000000";+		if (color == "blanchedalmond") return "#ffebcd";+		if (color == "blue") return "#0000ff";+		if (color == "blueviolet") return "#8a2be2";+		if (color == "brown") return "#a52a2a";+		if (color == "burlywood") return "#deb887";+		if (color == "cadetblue") return "#5f9ea0";+		if (color == "chartreuse") return "#7fff00";+		if (color == "chocolate") return "#d2691e";+		if (color == "coral") return "#ff7f50";+		if (color == "cornflowerblue") return "#6495ed";+		if (color == "cornsilk") return "#fff8dc";+		if (color == "crimson") return "#dc143c";+		if (color == "cyan") return "#00ffff";+		if (color == "darkblue") return "#00008b";+		if (color == "darkcyan") return "#008b8b";+		if (color == "darkgoldenrod") return "#b8860b";+		if (color == "darkgray") return "#a9a9a9";+		if (color == "darkgreen") return "#006400";+		if (color == "darkgrey") return "#a9a9a9";+		if (color == "darkkhaki") return "#bdb76b";+		if (color == "darkmagenta") return "#8b008b";+		if (color == "darkolivegreen") return "#556b2f";+		if (color == "darkorange") return "#ff8c00";+		if (color == "darkorchid") return "#9932cc";+		if (color == "darkred") return "#8b0000";+		if (color == "darksalmon") return "#e9967a";+		if (color == "darkseagreen") return "#8fbc8f";+		if (color == "darkslateblue") return "#483d8b";+		if (color == "darkslategray") return "#2f4f4f";+		if (color == "darkslategrey") return "#2f4f4f";+		if (color == "darkturquoise") return "#00ced1";+		if (color == "darkviolet") return "#9400d3";+		if (color == "deeppink") return "#ff1493";+		if (color == "deepskyblue") return "#00bfff";+		if (color == "dimgray") return "#696969";+		if (color == "dimgrey") return "#696969";+		if (color == "dodgerblue") return "#1e90ff";+		if (color == "firebrick") return "#b22222";+		if (color == "floralwhite") return "#fffaf0";+		if (color == "forestgreen") return "#228b22";+		if (color == "fuchsia") return "#ff00ff";+		if (color == "gainsboro") return "#dcdcdc";+		if (color == "ghostwhite") return "#f8f8ff";+		if (color == "gold") return "#ffd700";+		if (color == "goldenrod") return "#daa520";+		if (color == "gray") return "#808080";+		if (color == "green") return "#008000";+		if (color == "greenyellow") return "#adff2f";+		if (color == "grey") return "#808080";+		if (color == "honeydew") return "#f0fff0";+		if (color == "hotpink") return "#ff69b4";+		if (color == "indianred") return "#cd5c5c";+		if (color == "indigo") return "#4b0082";+		if (color == "ivory") return "#fffff0";+		if (color == "khaki") return "#f0e68c";+		if (color == "lavender") return "#e6e6fa";+		if (color == "lavenderblush") return "#fff0f5";+		if (color == "lawngreen") return "#7cfc00";+		if (color == "lemonchiffon") return "#fffacd";+		if (color == "lightblue") return "#add8e6";+		if (color == "lightcoral") return "#f08080";+		if (color == "lightcyan") return "#e0ffff";+		if (color == "lightgoldenrodyellow") return "#fafad2";+		if (color == "lightgray") return "#d3d3d3";+		if (color == "lightgreen") return "#90ee90";+		if (color == "lightgrey") return "#d3d3d3";+		if (color == "lightpink") return "#ffb6c1";+		if (color == "lightsalmon") return "#ffa07a";+		if (color == "lightseagreen") return "#20b2aa";+		if (color == "lightskyblue") return "#87cefa";+		if (color == "lightslategray") return "#778899";+		if (color == "lightslategrey") return "#778899";+		if (color == "lightsteelblue") return "#b0c4de";+		if (color == "lightyellow") return "#ffffe0";+		if (color == "lime") return "#00ff00";+		if (color == "limegreen") return "#32cd32";+		if (color == "linen") return "#faf0e6";+		if (color == "magenta") return "#ff00ff";+		if (color == "maroon") return "#800000";+		if (color == "mediumaquamarine") return "#66cdaa";+		if (color == "mediumblue") return "#0000cd";+		if (color == "mediumorchid") return "#ba55d3";+		if (color == "mediumpurple") return "#9370db";+		if (color == "mediumseagreen") return "#3cb371";+		if (color == "mediumslateblue") return "#7b68ee";+		if (color == "mediumspringgreen") return "#00fa9a";+		if (color == "mediumturquoise") return "#48d1cc";+		if (color == "mediumvioletred") return "#c71585";+		if (color == "midnightblue") return "#191970";+		if (color == "mintcream") return "#f5fffa";+		if (color == "mistyrose") return "#ffe4e1";+		if (color == "moccasin") return "#ffe4b5";+		if (color == "navajowhite") return "#ffdead";+		if (color == "navy") return "#000080";+		if (color == "oldlace") return "#fdf5e6";+		if (color == "olive") return "#808000";+		if (color == "olivedrab") return "#6b8e23";+		if (color == "orange") return "#ffa500";+		if (color == "orangered") return "#ff4500";+		if (color == "orchid") return "#da70d6";+		if (color == "palegoldenrod") return "#eee8aa";+		if (color == "palegreen") return "#98fb98";+		if (color == "paleturquoise") return "#afeeee";+		if (color == "palevioletred") return "#db7093";+		if (color == "papayawhip") return "#ffefd5";+		if (color == "peachpuff") return "#ffdab9";+		if (color == "peru") return "#cd853f";+		if (color == "pink") return "#ffc0cb";+		if (color == "plum") return "#dda0dd";+		if (color == "powderblue") return "#b0e0e6";+		if (color == "purple") return "#800080";+		if (color == "red") return "#ff0000";+		if (color == "rosybrown") return "#bc8f8f";+		if (color == "royalblue") return "#4169e1";+		if (color == "saddlebrown") return "#8b4513";+		if (color == "salmon") return "#fa8072";+		if (color == "sandybrown") return "#f4a460";+		if (color == "seagreen") return "#2e8b57";+		if (color == "seashell") return "#fff5ee";+		if (color == "sienna") return "#a0522d";+		if (color == "silver") return "#c0c0c0";+		if (color == "skyblue") return "#87ceeb";+		if (color == "slateblue") return "#6a5acd";+		if (color == "slategray") return "#708090";+		if (color == "slategrey") return "#708090";+		if (color == "snow") return "#fffafa";+		if (color == "springgreen") return "#00ff7f";+		if (color == "steelblue") return "#4682b4";+		if (color == "tan") return "#d2b48c";+		if (color == "teal") return "#008080";+		if (color == "thistle") return "#d8bfd8";+		if (color == "tomato") return "#ff6347";+		if (color == "turquoise") return "#40e0d0";+		if (color == "violet") return "#ee82ee";+		if (color == "wheat") return "#f5deb3";+		if (color == "white") return "#ffffff";+		if (color == "whitesmoke") return "#f5f5f5";+		if (color == "yellow") return "#ffff00";+		if (color == "yellowgreen") return "#9acd32";+		+		return "#000000";+	}+}++}diff --git a/libsvgbird/Defs.vala b/libsvgbird/Defs.valanew file mode 100644index 0000000..42e06b8--- /dev/null+++ b/libsvgbird/Defs.vala@@ -0,0 +1,138 @@+/*+	Copyright (C) 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using B;+using Math;++namespace SvgBird {++public class Defs {+	public Gee.ArrayList<ClipPath> clip_paths = new Gee.ArrayList<ClipPath> ();+	public Gee.ArrayList<Gradient> gradients = new Gee.ArrayList<Gradient> ();+	public StyleSheet style_sheet = new StyleSheet ();++	public void add (Gradient g) {+		gradients.add (g);+	}++	public ClipPath? get_clip_path_for_url (string? url) {+		if (url == null) {+			return null;+		}+		+		string tag_id = get_id_from_url ((!) url);+		return get_clip_path_for_id (tag_id);+	} +	+	public ClipPath? get_clip_path_for_id (string id) {+		string tag_id;+		+		if (id.has_prefix ("#")) {+			tag_id = id.substring ("#".length);+		} else {+			tag_id = id;+		}+		+		foreach (ClipPath clip_path in clip_paths) {+			if (clip_path.id == tag_id) {+				return clip_path;+			}+		}+		+		return null;		+	}+	+	public static string get_id_from_url (string url) {+		if (unlikely (!is_url (url))) {+			return "";+		}++		int p1 = url.index_of ("(");+		if (unlikely (p1 == -1)) {+			warning ("Not an URL: " + url);+			return "";+		}++		int p2 = url.index_of (")");+		if (unlikely (p2 == -1 || p2 < p1)) {+			warning ("Not an URL: " +  url);+			return "";+		}+	+		p1 += "(".length;+		int length = p2 - p1;+		return url.substring (p1, length);+	}+	+	public Gradient? get_gradient_for_url (string? url) {+		if (url == null) {+			return null;+		}+		+		string tag_id = get_id_from_url ((!) url);+		return get_gradient_for_id (tag_id);+	}++	public Gradient? get_gradient_for_id (string id) {+		string tag_id;+		+		if (id.has_prefix ("#")) {+			tag_id = id.substring ("#".length);+		} else {+			tag_id = id;+		}+		+		foreach (Gradient gradient in gradients) {+			if (gradient.id == tag_id) {+				return gradient;+			}+		}+		+		return null;		+	}++	public static bool is_url (string? attribute) {+		if (attribute == null) {+			return false;+		}+		+		return ((!) attribute).has_prefix ("url");+	}++	public Defs shallow_copy () {+		Defs d = new Defs ();+		+		foreach (Gradient g in gradients) {+			d.add (g);+		}+		+		d.style_sheet = style_sheet.shallow_copy ();+		+		return d;+	}++	public Defs copy () {+		Defs d = new Defs ();+		+		foreach (Gradient g in gradients) {+			d.add (g.copy ());+		}+		+		d.style_sheet = style_sheet.copy ();+		+		return d;+	}+}++}diff --git a/libsvgbird/Doubles.vala b/libsvgbird/Doubles.valanew file mode 100644index 0000000..ad6133f--- /dev/null+++ b/libsvgbird/Doubles.vala@@ -0,0 +1,91 @@+/*+	Copyright (C) 2015 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using Cairo;++namespace SvgBird {++public class Doubles : GLib.Object {+	public PointValue* data;+	public int size = 0;+	int capacity = 10;+	+	public Doubles () {+		data = new PointValue[capacity];+	}++	~Doubles () {+		delete data;+		data = null;+	}+	+	public Doubles.for_capacity (int capacity) {+		data = new PointValue[capacity];+		this.capacity = capacity;+	}+	+	void increase_capacity () {+		int new_capacity = 2 * capacity;+		PointValue* new_data = new PointValue[new_capacity];+		Posix.memcpy (new_data, data, sizeof (PointValue) * size);+		delete data;+		data = new_data;+		capacity = new_capacity;		+	}++	public void add_type (uchar type) {+		if (size >= capacity) {+			increase_capacity ();+		}++		data[size].type = type;+		size++;+	}++	public void add (double d) {+		if (size >= capacity) {+			increase_capacity ();+		}+		+		data[size].value = d;+		size++;+	}+	+	public Doubles copy () {+		Doubles d = new Doubles ();+		delete d.data;+		d.data = new double[capacity];+		d.capacity = capacity;+		d.size = size;+		Posix.memcpy (d.data, data, sizeof (PointValue) * size);+		return d;+	}+	+	public double get_double (int index) {+		if (unlikely (index < 0)) {+			warning ("index < 0");+			return 0;+		}++		if (unlikely (index >= size)) {+			warning ("index >= size");+			return 0;+		}+		+		return data[index].value;+	}+}++}+diff --git a/libsvgbird/Ellipse.vala b/libsvgbird/Ellipse.valanew file mode 100644index 0000000..8bf3be8--- /dev/null+++ b/libsvgbird/Ellipse.vala@@ -0,0 +1,75 @@+/*+	Copyright (C) 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using Cairo;+using Math;++namespace SvgBird {++public class Ellipse : Object {	++	public double cx = 0;+	public double cy = 0;+	public double rx = 0;+	public double ry = 0;+	+	public Ellipse () {+	}++	public Ellipse.create_copy (Ellipse c) {+		Object.copy_attributes (c, this);+		c.cx = cx;+		c.cx = cy;+		c.rx = rx;+		c.ry = ry;+	}+	+	public override bool is_over (double x, double y) {+		return false;+	}+			+	public override void draw_outline (Context cr) {+		cr.save ();+		cr.translate (cx, cy);+		cr.scale (rx, ry);+		cr.arc (0, 0, 1, 0, 2 * PI);+		cr.restore ();		+	}++	public override void move (double dx, double dy) {+	}+	+	public override void update_region_boundaries () {+	}++	public override void rotate (double theta, double xc, double yc) {+	}+	+	public override bool is_empty () {+		return false;+	}+	+	public override void resize (double ratio_x, double ratio_y) {+	}+	+	public override Object copy () {+		return new Ellipse.create_copy (this);+	}++	public override string to_string () {+		return "Ellipse";+	}+}++}diff --git a/libsvgbird/EmptyObject.vala b/libsvgbird/EmptyObject.valanew file mode 100644index 0000000..fb1bc4d--- /dev/null+++ b/libsvgbird/EmptyObject.vala@@ -0,0 +1,56 @@+/*+	Copyright (C) 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using Cairo;++namespace SvgBird {++public class EmptyObject : Object {++	public EmptyObject () {+	}+	+	public override bool is_over (double x, double y) {+		return false;+	}+			+	public override void draw_outline (Context cr) {+	}++	public override void move (double dx, double dy) {+	}+	+	public override void update_region_boundaries () {+	}++	public override void rotate (double theta, double xc, double yc) {+	}+	+	public override bool is_empty () {+		return false;+	}+	+	public override void resize (double ratio_x, double ratio_y) {+	}+	+	public override Object copy () {+		return new EmptyObject ();+	}++	public override string to_string () {+		return "Empty";+	}+}++}diff --git a/libsvgbird/Gradient.vala b/libsvgbird/Gradient.valanew file mode 100644index 0000000..50b2927--- /dev/null+++ b/libsvgbird/Gradient.vala@@ -0,0 +1,79 @@+/*+	Copyright (C) 2015 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using Cairo;+using Math;++namespace SvgBird {++public class Gradient : GLib.Object {+	public double x1;+	public double y1;+	public double x2;+	public double y2;++	public Gee.ArrayList<Stop> stops;+	+	public string id = "";+	public string? href = null;+	public SvgTransforms transforms;++	public Gradient () {+		x1 = 0;+		y1 = 0;+		x2 = 0;+		y2 = 0;+		stops = new Gee.ArrayList<Stop> ();+		transforms = new SvgTransforms ();+	}+	+	public Gradient copy () {+		Gradient g = new Gradient ();+		g.x1 = x1;+		g.y1 = y1;+		g.x2 = x2;+		g.y2 = y2;+		+		foreach (Stop s in stops) {+			g.stops.add (s.copy ());+		}+		+		return g;+	}+	+	public void copy_stops (Gradient g) {+		foreach (Stop stop in g.stops) {+			stops.add (stop.copy ());+		}+	}+	+	public string to_string () {+		StringBuilder description = new StringBuilder ();+		description.append ("Gradient: ");+		description.append (@"x1=$x1, y1=$y1, x2=$x2, y2=$y2");+		+		foreach (Stop stop in stops) {+			description.append (" ");+			description.append (stop.to_string ());+		}+		+		return description.str;+	}+	+	public Matrix get_matrix () {+		return transforms.get_matrix ();+	}+}++}diff --git a/libsvgbird/Layer.vala b/libsvgbird/Layer.valanew file mode 100644index 0000000..f8bf897--- /dev/null+++ b/libsvgbird/Layer.vala@@ -0,0 +1,183 @@+/*+	Copyright (C) 2015 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using Cairo;++namespace SvgBird {++public class Layer : Object {+	public ObjectGroup objects;+	public string name = "Layer";++	public Layer () {+		objects = new ObjectGroup ();+		transforms = new SvgTransforms ();+	}++	public void draw (Context cr) {+		cr.save ();+		apply_transform (cr);+		+		if (clip_path != null) {+			ClipPath clipping = (!) clip_path;+			clipping.apply (cr);+		}++		foreach (Object object in objects) {+			cr.save ();+			object.apply_transform (cr);+						+			if (object.clip_path != null) {+				ClipPath clipping = (!) object.clip_path;+				clipping.apply (cr);+			}+			+			if (object is Layer) {+				Layer sublayer = (Layer) object;+				sublayer.draw (cr);		+			} else {+				object.draw_outline (cr);+				object.paint (cr);+			}+			cr.restore ();+		}+		+		cr.restore ();+	}++	public override void draw_outline (Context cr) {+		apply_transform (cr);+		+		foreach (Object object in objects) {+			cr.save ();+			object.apply_transform (cr);+			object.draw_outline (cr);+			cr.restore ();+		}+		+		cr.restore ();+	}++	public int index_of (Layer sublayer) {+		return objects.index_of (sublayer);+	}+		+	public void add_layer (Layer layer) {+		objects.add (layer);+	}+	+	public void add_object (Object object) {+		objects.add (object);+	}++	public void remove (Object o) {+		objects.remove (o);+	}+	+	public void remove_layer (Layer layer) {+		objects.remove (layer);+		+		foreach (Object object in objects) {+			if (object is Layer) {+				Layer sublayer = (Layer) object;+				sublayer.remove_layer (layer);+			}+		}+	}+	+	public static void copy_layer (Layer from, Layer to) {+		to.name = from.name;+		to.objects = from.objects.copy ();+	}++	public override Object copy () {+		Layer layer = new Layer ();+		copy_layer (this, layer);+		Object.copy_attributes (this, layer);+		return layer;+	}+	+	public Gee.ArrayList<Layer> get_sublayers () {+		Gee.ArrayList<Layer> sublayers = new Gee.ArrayList<Layer> ();+		+		foreach (Object object in objects) {+			if (likely (object is Layer)) {+				Layer sublayer = (Layer) object;+				sublayers.add (sublayer);+			} else {+				warning ("An object in the group " + name + " is not a layer.");+			}+		}+		+		return sublayers;+	}+		+	public void print (int indent = 0) {+		stdout.printf (@"Layer: $(name)");++		if (!visible) {+			stdout.printf (" hidden");+		}+		+		stdout.printf (@" $(transforms) $(style)");+		+		stdout.printf (@"\n");++		foreach (Object object in objects) {+			stdout.printf (@"$(object.to_string ()) $(object.transforms) $(object.style)");+			+			if (!object.visible) {+				stdout.printf (" hidden");+			}+			+			stdout.printf ("\n");++			for (int i = 0; i < indent; i++) {+				stdout.printf ("\t");+			}++			if (object is Layer) {+				Layer sublayer = (Layer) object;+				sublayer.print (indent + 1);+			}+		}+	}+++	public override bool is_over (double x, double y) {+		return false;+	}+		+	public override void move (double dx, double dy) {+	}+	+	public override void update_region_boundaries () {+	}++	public override void rotate (double theta, double xc, double yc) {+	}+	+	public override bool is_empty () {+		return false;+	}+	+	public override void resize (double ratio_x, double ratio_y) {+	}+	+	public override string to_string () {+		return "Layer: " + name;+	}+}++}diff --git a/libsvgbird/Line.vala b/libsvgbird/Line.valanew file mode 100644index 0000000..fecc979--- /dev/null+++ b/libsvgbird/Line.vala@@ -0,0 +1,72 @@+/*+	Copyright (C) 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using Cairo;++namespace SvgBird {++public class Line : Object {	++	public double x1 = 0;+	public double y1 = 0;+	public double x2 = 0;+	public double y2 = 0;+	+	public Line () {+	}++	public Line.create_copy (Line c) {+		Object.copy_attributes (c, this);+		c.x1 = x1;+		c.y1 = y1;+		c.x2 = x2;+		c.y2 = y2;+	}+	+	public override bool is_over (double x, double y) {+		return false;+	}+			+	public override void draw_outline (Context cr) {+		cr.move_to (x1, y1);+		cr.line_to (x1, y1);+		cr.line_to (x2, y2);+	}++	public override void move (double dx, double dy) {+	}+	+	public override void update_region_boundaries () {+	}++	public override void rotate (double theta, double xc, double yc) {+	}+	+	public override bool is_empty () {+		return false;+	}+	+	public override void resize (double ratio_x, double ratio_y) {+	}+	+	public override Object copy () {+		return new Line.create_copy (this);+	}++	public override string to_string () {+		return "Line";+	}+}++}diff --git a/libsvgbird/LineCap.vala b/libsvgbird/LineCap.valanew file mode 100644index 0000000..45b673f--- /dev/null+++ b/libsvgbird/LineCap.vala@@ -0,0 +1,23 @@+/*+	Copyright (C) 2015 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++namespace SvgBird {++public enum LineCap {+	BUTT,+	SQUARE,+	ROUND+}++}diff --git a/libsvgbird/Object.vala b/libsvgbird/Object.valanew file mode 100644index 0000000..93a3293--- /dev/null+++ b/libsvgbird/Object.vala@@ -0,0 +1,158 @@+/*+	Copyright (C) 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using Cairo;+using Math;++namespace SvgBird {++public abstract class Object : GLib.Object {+	bool open = false;+	+	public bool visible = true;+	public SvgStyle style = new SvgStyle ();+	public SvgTransforms transforms = new SvgTransforms ();+	public ClipPath? clip_path = null;+	public string id = "";+	public string css_class = "";+	+	public virtual Color? color { get; set; } // FIXME: keep this in svg style+	public virtual Color? stroke_color { get; set; }+	public virtual Gradient? gradient { get; set; }++	/** Path boundaries */+	public virtual double xmax { get; set; }+	public virtual double xmin { get; set; }+	public virtual double ymax { get; set; }+	public virtual double ymin { get; set; }+	+	public virtual double rotation { get; set; }+	public virtual double stroke { get; set; }+	public virtual LineCap line_cap { get; set; default = LineCap.BUTT; }+	public virtual bool fill { get; set; }+		+	public Object () {	+	}++	public Object.create_copy (Object o) {	+		open = o.open;+	}+		+	public void set_open (bool open) {+		this.open = open;+	}+	+	public bool is_open () {+		return open;+	}++	public abstract void update_region_boundaries ();+	public abstract bool is_over (double x, double y);+	public abstract void draw_outline (Context cr);++	public abstract Object copy ();+	public abstract void move (double dx, double dy);+	public abstract void rotate (double theta, double xc, double yc);+	public abstract bool is_empty ();+	public abstract void resize (double ratio_x, double ratio_y);++	public static void copy_attributes (Object from, Object to) {+		to.open = from.open;++		to.color = from.color;+		to.stroke_color = from.stroke_color;+		to.gradient = from.gradient;+		+		to.xmax = from.xmax;+		to.xmin = from.xmin;+		to.ymax = from.ymax;+		to.ymin = from.ymin;+		+		to.rotation = from.rotation;+		to.stroke = from.stroke;+		to.line_cap = from.line_cap;+		to.fill = from.fill;	+	}+	+	public virtual string to_string () {+		return "Object";+	}++	public void paint (Context cr) {+		Color fill, stroke;+		bool need_fill = style.fill_gradient != null || style.fill != null;+		bool need_stroke = style.stroke_gradient != null || style.stroke != null;++		cr.set_line_width (style.stroke_width);+		+		if (style.fill_gradient != null) {+			apply_gradient (cr, (!) style.fill_gradient);+		} else if (style.fill != null) {+			fill = (!) style.fill;+			cr.set_source_rgba (fill.r, fill.g, fill.b, fill.a);+		}++		if (need_fill) {+			if (need_stroke) {+				cr.fill_preserve ();+			} else {+				cr.fill ();+			}	+		}++		if (style.stroke_gradient != null) {+			apply_gradient (cr, (!) style.stroke_gradient);+		} else if (style.stroke != null) {+			stroke = (!) style.stroke;+			cr.set_source_rgba (stroke.r, stroke.g, stroke.b, stroke.a);+		}++		if (need_stroke) {+			cr.stroke ();+		}+	}+	+	public void apply_gradient (Context cr, Gradient? gradient) {+		Cairo.Pattern pattern;+		Gradient g;+		+		if (gradient != null) {+			g = (!) gradient;+			+			pattern = new Cairo.Pattern.linear (g.x1, g.y1, g.x2, g.y2);++			Matrix gradient_matrix = g.get_matrix ();+			gradient_matrix.invert ();+			pattern.set_matrix (gradient_matrix);+			+			foreach (Stop s in g.stops) {+				Color c = s.color;+				pattern.add_color_stop_rgba (s.offset, c.r, c.g, c.b, c.a);+			}+					+			cr.set_source (pattern);+		}+	}+	+	public void apply_transform (Context cr) {+		Matrix view_matrix = cr.get_matrix ();+		Matrix object_matrix = transforms.get_matrix ();+		+		object_matrix.multiply (object_matrix, view_matrix);+		cr.set_matrix (object_matrix);+	}+					+}++}diff --git a/libsvgbird/ObjectGroup.vala b/libsvgbird/ObjectGroup.valanew file mode 100644index 0000000..259d04c--- /dev/null+++ b/libsvgbird/ObjectGroup.vala@@ -0,0 +1,76 @@+/*+	Copyright (C) 2015 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++namespace SvgBird {++public class ObjectGroup : GLib.Object {+	public Gee.ArrayList<Object> objects;+	+	public int size { +		get {+			return objects.size;+		}+	}+	+	public ObjectGroup () {+		 objects = new Gee.ArrayList<Object> ();+	}++	public Object get_object (int index) {+		if (unlikely (index < 0 || index >= size)) {+			warning ("Index out of bounds.");+			return new EmptyObject ();+		}+		+		return objects.get (index);+	}++	public int index_of (Object o) {+		return objects.index_of (o);+	}++	public Gee.Iterator<Object> iterator () {+		return objects.iterator ();+	}++	public void remove (Object p) {+		objects.remove (p);+	}+	+	public void add (Object p) {+		objects.add (p);+	}+	+	public void clear () {+		objects.clear ();+	}++	public void append (ObjectGroup group) {+		foreach (Object o in group.objects) {+			objects.add (o);+		}+	}+	+	public ObjectGroup copy () {+		ObjectGroup objects_copy = new ObjectGroup ();+		+		foreach (Object o in objects) {+			objects_copy.add (o.copy ());+		}+		+		return objects_copy;+	}+}++}diff --git a/libsvgbird/PointValue.vala b/libsvgbird/PointValue.valanew file mode 100644index 0000000..6c93beb--- /dev/null+++ b/libsvgbird/PointValue.vala@@ -0,0 +1,28 @@+/*+	Copyright (C) 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++namespace SvgBird {++[CCode (cheader_filename="point_value.h")]+public extern struct PointValue {+    uchar type;+    double value;+}++public static const uchar POINT_NONE = 0;+public static const uchar POINT_ARC = 1;+public static const uchar POINT_CUBIC = 2;+public static const uchar POINT_LINE = 3;++}diff --git a/libsvgbird/Points.vala b/libsvgbird/Points.valanew file mode 100644index 0000000..4971eec--- /dev/null+++ b/libsvgbird/Points.vala@@ -0,0 +1,40 @@+/*+	Copyright (C) 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using Cairo;++namespace SvgBird {++public class Points : GLib.Object {+	public Doubles point_data = new Doubles.for_capacity (100);+	public double x = 0;+	public double y = 0;+	public bool closed = false;+	public int size {+		get {+			return point_data.size;+		}+	}+	+	public void add (double p) {+		point_data.add (p);+	}+	+	public void add_type (uchar type) {+		point_data.add_type (type);+	}+}++}+diff --git a/libsvgbird/Polygon.vala b/libsvgbird/Polygon.valanew file mode 100644index 0000000..c7c38fc--- /dev/null+++ b/libsvgbird/Polygon.vala@@ -0,0 +1,71 @@+/*+	Copyright (C) 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using Cairo;+using Math;++namespace SvgBird {++public class Polygon : Object {++	public Doubles points = new Doubles ();++	public Polygon () {+	}+	+	public override bool is_over (double x, double y) {+		return false;+	}+	+	public override void draw_outline (Context cr) {+		if (points.size > 2) {+			cr.move_to (points.data[0].value, points.data[1].value);+			+			for (int i = 2; i < points.size - 1; i += 2) {+				cr.line_to (points.data[i].value, points.data[i + 1].value);+			}+			+			cr.close_path ();+		}		+	}+	+	public override void move (double dx, double dy) {+	}+	+	public override void update_region_boundaries () {+	}++	public override void rotate (double theta, double xc, double yc) {+	}+	+	public override bool is_empty () {+		return false;+	}+	+	public override void resize (double ratio_x, double ratio_y) {+	}+	+	public override Object copy () {+		Polygon p = new Polygon ();		+		p.points = points.copy ();+		Object.copy_attributes (this, p);+		return p;+	}++	public override string to_string () {+		return "Polygon";+	}+}++}diff --git a/libsvgbird/Polyline.vala b/libsvgbird/Polyline.valanew file mode 100644index 0000000..4128b6e--- /dev/null+++ b/libsvgbird/Polyline.vala@@ -0,0 +1,69 @@+/*+	Copyright (C) 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using Cairo;+using Math;++namespace SvgBird {++public class Polyline : Object {++	public Doubles points = new Doubles ();++	public Polyline () {+	}+	+	public override bool is_over (double x, double y) {+		return false;+	}+			+	public override void draw_outline (Context cr) {+		if (points.size > 2) {+			cr.move_to (points.data[0].value, points.data[1].value);+			+			for (int i = 2; i < points.size - 1; i += 2) {+				cr.line_to (points.data[i].value, points.data[i + 1].value);+			}+		}+	}+	+	public override void move (double dx, double dy) {+	}+	+	public override void update_region_boundaries () {+	}++	public override void rotate (double theta, double xc, double yc) {+	}+	+	public override bool is_empty () {+		return false;+	}+	+	public override void resize (double ratio_x, double ratio_y) {+	}+	+	public override Object copy () {+		Polyline p = new Polyline ();		+		p.points = points.copy ();+		Object.copy_attributes (this, p);+		return p;+	}++	public override string to_string () {+		return "Polyline";+	}+}++}diff --git a/libsvgbird/Rectangle.vala b/libsvgbird/Rectangle.valanew file mode 100644index 0000000..874f762--- /dev/null+++ b/libsvgbird/Rectangle.vala@@ -0,0 +1,97 @@+/*+	Copyright (C) 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using Cairo;+using Math;++namespace SvgBird {++public class Rectangle : Object {++	public double x = 0;+	public double y = 0;+	public double width = 0;+	public double height = 0;+	public double rx = 0;+	public double ry = 0;++	public Rectangle () {+	}+	+	public override bool is_over (double x, double y) {+		return false;+	}+			+	public override void draw_outline (Context cr) {+		if (rx == 0 && ry == 0) {+			cr.rectangle (x, y, width, height);+		} else {+			draw_rounded_corners (cr);+		}+	}+	+	public void draw_rounded_corners (Context cr) {+		cr.new_path ();+		elliptical_arc (cr, x + width - rx, y + ry, -PI / 2, 0);+		elliptical_arc (cr, x + width - rx, y + height - ry, 0, PI / 2);+		elliptical_arc (cr, x + rx, y + height - ry, PI / 2, PI);+		elliptical_arc (cr, x + rx, y + ry, PI, PI + PI / 2);+		cr.close_path ();+	}+	+	public void elliptical_arc (Context cr, double x, double y, double angle_start, double angle_stop) {+		cr.save ();+		cr.translate (x + rx, y + ry);+		cr.scale (rx, ry);+		cr.arc (0, 0, 1, angle_start, angle_stop);+		cr.restore ();+	}+	+	public override void move (double dx, double dy) {+		x += dx;+		y += dy;+	}+	+	public override void update_region_boundaries () {+	}++	public override void rotate (double theta, double xc, double yc) {+	}+	+	public override bool is_empty () {+		return false;+	}+	+	public override void resize (double ratio_x, double ratio_y) {+	}+	+	public override Object copy () {+		Rectangle r = new Rectangle ();+		+		r.x = x;+		r.y = y;+		r.width = width;+		r.height = height;+		+		Object.copy_attributes (this, r);+		+		return r;+	}++	public override string to_string () {+		return "Rectangle";+	}+}++}diff --git a/libsvgbird/Selector.vala b/libsvgbird/Selector.valanew file mode 100644index 0000000..2d7f741--- /dev/null+++ b/libsvgbird/Selector.vala@@ -0,0 +1,72 @@+/*+	Copyright (C) 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using B;+using Math;++namespace SvgBird {++public class Selector : GLib.Object {+	+	Gee.ArrayList<SelectorPattern> patterns = new Gee.ArrayList<SelectorPattern> ();+	public SvgStyle style { get; set; }++	public Selector (string pattern, SvgStyle style) {+		string[] selector_patterns = pattern.split (",");+		+		for (int i = 0; i < selector_patterns.length; i++) {+			patterns.add (new SelectorPattern (selector_patterns[i]));+		}++		this.style = style;+	}+	+	public Selector.copy_constructor (Selector selector) {+		style = selector.style.copy ();+		+		foreach (SelectorPattern pattern in selector.patterns) {+			patterns.add (pattern.copy ());+		}+	}+	+	public string to_string () {+		StringBuilder s = new StringBuilder ();+		+		foreach (SelectorPattern pattern in patterns) {+			if (s.str != "") {+				s.append (", ");+			}+			+			s.append (pattern.to_string ());+		}+		+		return s.str;+	}+	+	public Selector copy () {+		return new Selector.copy_constructor (this);+	}+	+	public bool match (XmlElement tag, string? id, string? css_class) {+		foreach (SelectorPattern pattern in patterns) {+			if (pattern.match (tag, id, css_class)) {+				return true;+			}+		}+		+		return false;+	}+}++}diff --git a/libsvgbird/SelectorPattern.vala b/libsvgbird/SelectorPattern.valanew file mode 100644index 0000000..c58f681--- /dev/null+++ b/libsvgbird/SelectorPattern.vala@@ -0,0 +1,135 @@+/*+	Copyright (C) 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using B;+using Math;++namespace SvgBird {++/** A CSS selector pattern. */+public class SelectorPattern : GLib.Object {+	Gee.ArrayList<SelectorTag> tags = new Gee.ArrayList<SelectorTag> ();++	public SelectorPattern.empty () {+	}++	public SelectorPattern (string pattern) {+		string p = pattern.strip ();+		string[] elements = p.split (" ");++		foreach (string element in elements) {+			if (element != "") {+				tags.add (new SelectorTag (element));+			}+		}+	}++	public string to_string () {+		StringBuilder s = new StringBuilder ();+		+		foreach (SelectorTag tag in tags) {+			if (s.str != "") {+				s.append (" ");+			}+			+			s.append (tag.to_string ());+		}+		+		return s.str;+	}	+	public SelectorPattern copy () {+		SelectorPattern pattern = new SelectorPattern.empty ();+		+		foreach (SelectorTag tag in tags) {+			pattern.tags.add (tag.copy ());+		}+		+		return pattern;+	}+	+	public bool match (XmlElement tag, string? id, string? css_class) {+		for (int i = tags.size - 1; i >= 0; i--) {+			SelectorTag pattern = tags.get (i);+						+			if (pattern.name == ">") {+				if (i - 1 < 0) {+					return false;+				}+				+				string parent = tags.get (i - 1).name;+				+				if (!has_parent (tag, parent)) {+					return false;+				}+			} else if (pattern.name == "+") {+				if (i - 1 < 0) {+					return false;+				}+				+				string previous = tags.get (i - 1).name;+				+				if (!is_immediately_following (tag, previous)) {+					return false;+				}+			} else if (!pattern.match (tag, id, css_class)) {+				return false;+			}+		}+		+		return true;+	}+	+	public bool is_immediately_following (XmlElement tag, string previous) {+		return get_previous (tag) == tag;+	}+	+	XmlElement? get_previous (XmlElement? xml_parent) {+		if (xml_parent == null) {+			return null;+		}+		+		XmlElement element = (!) xml_parent;+		XmlElement? parent = element.get_parent ();+		+		if (parent != null) {+			XmlElement? previous = null;+			+			foreach (XmlElement e in (!) parent) {+				if (e == xml_parent) {+					return previous;+				}+				+				previous = e;+			}+		}+		+		return null;+	}+	+	public bool has_parent (XmlElement tag, string parent) {+		XmlElement? xml_parent = tag.get_parent ();+		+		while (xml_parent != null) {+			if (((!) xml_parent).get_name () == parent) {+				return true;+			}+			+			xml_parent = tag.get_parent ();+		}+		+		return false;+	}+}++}diff --git a/libsvgbird/SelectorTag.vala b/libsvgbird/SelectorTag.valanew file mode 100644index 0000000..a9cc530--- /dev/null+++ b/libsvgbird/SelectorTag.vala@@ -0,0 +1,200 @@+/*+	Copyright (C) 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using B;+using Math;++namespace SvgBird {++/** A part of a CSS selector pattern. */+public class SelectorTag : GLib.Object {+	public string name;+	string? id = null;+	string? css_class = null;+	Gee.ArrayList<AttributePattern>? attribute_patterns = null;++	public SelectorTag.empty () {+	}+	+	public SelectorTag (string pattern) {+		string tag_pattern = pattern.strip ();+		int id_separator = tag_pattern.index_of ("#");+		int class_separator = tag_pattern.index_of (".");+		int attribute_separator = tag_pattern.index_of ("[");++		if (attribute_separator != -1) {+			parse_attributes (tag_pattern.substring (attribute_separator));+		}+				+		if (id_separator != -1) {+			name = tag_pattern.substring (0, id_separator);+			+			id_separator += "#".length;+			if (attribute_separator == -1) {+				id = tag_pattern.substring (id_separator);+			} else {+				id = tag_pattern.substring (id_separator, attribute_separator - id_separator);+			}+		} else if (class_separator != -1) {+			name = tag_pattern.substring (0, class_separator);+			+			class_separator += ".".length;+			if (attribute_separator == -1) {+				css_class = tag_pattern.substring (class_separator);+			} else {+				css_class = tag_pattern.substring (class_separator, attribute_separator - class_separator);+			}+		} else {+			if (attribute_separator == -1) {+				name = tag_pattern;+			} else {+				css_class = tag_pattern.substring (0, attribute_separator);+			}+		}+	}+	+	public SelectorTag copy () {+		SelectorTag tag = new SelectorTag.empty();+		+		tag.name = name;+		tag.id = id;+		tag.css_class = css_class;+		+		if (attribute_patterns != null) { +			foreach (AttributePattern p in (!) attribute_patterns) {+				((!) attribute_patterns).add (p.copy ());+			}+		}+		+		return tag;+	}+	+	void parse_attributes (string attributes) {+		int index = 0;+		Gee.ArrayList<AttributePattern> patterns = new Gee.ArrayList<AttributePattern> ();+		+		while (index != -1) {+			int start = attributes.index_of ("[", index);+			+			if (start == -1) {+				return;+			}+			+			int stop = attributes.index_of ("]", start);+			+			if (stop == -1) {+				return;+			}+			+			AttributePattern pattern;+			pattern = parse_attribute (attributes.substring (start, stop));+			patterns.add (pattern);+			+			index = stop + "]".length;+		}+		+		attribute_patterns = patterns;+	}+	+	AttributePattern parse_attribute (string attribute) {+		int starts_with = attribute.index_of ("|=");+		int in_list = attribute.index_of ("~=");+		int equals = attribute.index_of ("=");+		AttributePattern pattern = new AttributePattern ();++		if (starts_with != -1) {+			pattern.name = attribute.substring (0, starts_with);+			pattern.type = AttributePatternType.STARTS_WITH;+			pattern.content = attribute.substring (0, equals + "~=".length);+		} else if (in_list != -1) {+			pattern.name = attribute.substring (0, in_list);+			pattern.type = AttributePatternType.LIST;+			pattern.content = attribute.substring (0, equals + "~=".length);+		} else if (equals != -1) {+			pattern.name = attribute.substring (0, equals);+			pattern.type = AttributePatternType.EQUALS;+			pattern.content = attribute.substring (0, equals + "=".length);+		} else {+			pattern.name = attribute;+			pattern.type = AttributePatternType.ANYTHING;+		}+		+		return pattern;+	}++	public bool match (XmlElement tag, string? id, string? css_class) {+		string tag_name = tag.get_name ();+		+		if (this.name != "*" && this.name != "" && tag_name != "") {+			if (this.name != tag_name) {+				return false;+			}+		}+		+		if (this.id != null) {+			if (id == null) {+				return false;+			} ++			if (((!) this.id) != ((!) id)) {+				return false;+			}+		}+		+		if (this.css_class != null) {+			if (css_class == null) {+				return false;+			} +			+			if (((!) this.css_class) != ((!) css_class)) {+				return false;+			}+		}+		+		if (attribute_patterns != null) {+			foreach (AttributePattern pattern in (!) attribute_patterns) {+				if (!pattern.match (tag.get_attributes ())) {+					return false;+				}+			}+		}+		+		return true;+	}++	public string to_string () {+		StringBuilder s = new StringBuilder ();+		s.append ((!) name);+		+		if (id != null) {+			s.append ("#");+			s.append ((!) id);+		}++		if (css_class != null) {+			s.append (".");+			s.append ((!) css_class);+		}+		+		if (attribute_patterns != null) {+			foreach (AttributePattern a in (!) attribute_patterns) {+				s.append (a.to_string ());+			}+		}+		+		return s.str;+	}+}++}diff --git a/libsvgbird/Stop.vala b/libsvgbird/Stop.valanew file mode 100644index 0000000..8da338a--- /dev/null+++ b/libsvgbird/Stop.vala@@ -0,0 +1,39 @@+/*+	Copyright (C) 2015 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using Cairo;+using Math;++namespace SvgBird {++public class Stop : GLib.Object {+	public Color color = new Color (0, 0, 0, 1);+	public double offset = 0;+	+	public Stop () {+	}+	+	public Stop copy () {+		Stop s = new Stop ();+		s.color = color.copy  ();+		s.offset = offset;+		return s;+	}+	+	public string to_string () {+		return @"Stop: $(offset), " + color.to_string ();+	}+}++}diff --git a/libsvgbird/StyleSheet.vala b/libsvgbird/StyleSheet.valanew file mode 100644index 0000000..0efc6e7--- /dev/null+++ b/libsvgbird/StyleSheet.vala@@ -0,0 +1,160 @@+/*+	Copyright (C) 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using B;+using Math;++namespace SvgBird {+++public class StyleSheet : GLib.Object {+	+	public Gee.ArrayList<Selector> styles = new Gee.ArrayList<Selector> ();+	+	public StyleSheet () {+	}+	+	/** Copy references to all selectors in this style sheet. */+	public StyleSheet shallow_copy () {+		StyleSheet style_sheet = new StyleSheet ();+		+		foreach (Selector selector in styles) {+			style_sheet.styles.add (selector);+		}+		+		return style_sheet;+	}++	public StyleSheet copy () {+		StyleSheet style_sheet = new StyleSheet ();+		+		foreach (Selector selector in styles) {+			style_sheet.styles.add (selector.copy ());+		}+		+		return style_sheet;+	}+	+	public void apply_style (XmlElement tag, SvgStyle style) {+		string? id = null;+		string? css_class = null;+		+		foreach (Attribute attribute in tag.get_attributes ()) {+			string name = attribute.get_name ();+			+			if (name == "id") {+				id = attribute.get_content ();+			} else if (name == "class") {+				css_class = attribute.get_content ();+			}+		}+		+		foreach (Selector selector in styles) {+			if (selector.match (tag, id, css_class)) {+				style.apply (selector.style);+			}+		}+	}+	+	public void merge (StyleSheet style_sheet) {+		foreach (Selector selector in style_sheet.styles) {+			styles.add (selector.copy ());+		}+	}+	+	public static StyleSheet parse (Defs defs, XmlElement style_tag) {+		StyleSheet style_sheet = new StyleSheet ();+		string css = style_tag.get_content ();+		css = get_cdata (css);+		css = add_separators (css);+		css = replace_whitespace (css);+		+		int index = 0;+		int start_bracket_length = "{".length;+		int end_bracket_length = "}".length;+		int css_length = css.length;+		+		while (index < css_length) {+			int style_rules_start = css.index_of ("{", index);+			int style_rules_end = css.index_of ("}", style_rules_start);+			+			if (style_rules_start == -1 || style_rules_end == -1) {+				break;+			}+			+			int selector_end = style_rules_start - start_bracket_length;+			string selectors = css.substring (index, selector_end - index);+			+			int style_start = style_rules_start + start_bracket_length;+			int style_end = style_rules_end;+			string style_rules = css.substring (style_start, style_end - style_start);+			+			index = style_rules_end + end_bracket_length;+			SvgStyle style = new SvgStyle.for_properties (defs, style_rules);+			+			Selector selector = new Selector (selectors, style);+			style_sheet.styles.add (selector);+		}+		+		return style_sheet;+	}+	+	public static string get_cdata (string tag_content) {+		StringBuilder data = new StringBuilder ();+		+		int index = 0;+		int cdata_tag_length = "<![CDATA[".length;+		int cdata_end_tag_length = "]]>".length;+		int content_length = tag_content.length;+		+		while (index < content_length) {+			int cdata_start = tag_content.index_of ("<![CDATA[", index);+			int cdata_end = tag_content.index_of ("]]>", cdata_start);+			+			if (cdata_start == -1 || cdata_end == -1) {+				break;+			}+			+			cdata_start += cdata_tag_length;+			data.append (tag_content.substring (cdata_start, cdata_end - cdata_start));+			index = cdata_end + cdata_end_tag_length;+		}+		+		if (index < tag_content.length) {+			data.append (tag_content.substring (index));+		}+		+		return data.str;+	}++	public static string add_separators (string data) {+		string style_data = data.replace (">", " > ");+		style_data = data.replace ("+", " + ");+		return style_data;+	}+	+	public static string replace_whitespace (string data) {+		string style_data = data.replace ("\n", " ");+		style_data = style_data.replace ("\r", " ");+		style_data = style_data.replace ("\t", " ");+		+		while (style_data.index_of ("  ") != -1) {+			style_data = style_data.replace ("  ", " ");+		}+		+		return style_data;+	}+}++}diff --git a/libsvgbird/SvgArc.vala b/libsvgbird/SvgArc.valanew file mode 100644index 0000000..35cfe63--- /dev/null+++ b/libsvgbird/SvgArc.vala@@ -0,0 +1,154 @@+/*+ * BirdFont code from SVG Salamander+ * + * Copyright (c) 2004, Mark McKay+ * Copyright (c) 2014, Johan Mattsson+ * All rights reserved.+ *+ * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following+ * conditions are met:+ *+ *   - Redistributions of source code must retain the above + *     copyright notice, this list of conditions and the following+ *     disclaimer.+ *   - Redistributions in binary form must reproduce the above+ *     copyright notice, this list of conditions and the following+ *     disclaimer in the documentation and/or other materials + *     provided with the distribution.+ *+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE+ * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED+ * OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Mark McKay can be contacted at mark@kitfox.com.  Salamander and other+ * projects can be found at http://www.kitfox.com+ *+ * Created on January 26, 2004, 8:40 PM+ * Adapded to BirdFont on Juli 2, 2014, 5:01 PM+ */++using Math;++namespace SvgBird {++public static void get_arc_arguments (double x0, double y0,+	double rx, double ry, double angle, bool largeArcFlag,+	bool sweepFlag, double x, double y,+	out double angle_start, out double angle_extent,+	out double center_x, out double center_y) {++	//+	// Elliptical arc implementation based on the SVG specification notes+	//++	double cx, cy;+	double dx2, dy2, cosAngle, sinAngle;+	double x1, y1, Prx, Pry, Px1, Py1, radiiCheck;+	double sign, sq, coef, cx1, cy1;+	double sx2, sy2;+	double ux, uy, vx, vy, p, n;+	double angleStart, angleExtent;+	+	// Compute the half distance between the current and the final point+	dx2 = (x0 - x) / 2.0;+	dy2 = (y0 - y) / 2.0;+	+	// Convert angle from degrees to radians+	angle = angle % (2 * Math.PI);+	+	cosAngle = cos (angle);+	sinAngle = sin (angle);++	//+	// Step 1 : Compute (x1, y1)+	//+	x1 = cosAngle * dx2 + sinAngle * dy2;+	y1 = -sinAngle * dx2 + cosAngle * dy2;++	// Ensure radii are large enough+	rx = fabs(rx);+	ry = fabs(ry);+	Prx = rx * rx;+	Pry = ry * ry;+	Px1 = x1 * x1;+	Py1 = y1 * y1;++	// Check that radii are large enough+	radiiCheck = Px1 / Prx + Py1 / Pry;+	+	if (radiiCheck > 1) {+		rx = sqrt (radiiCheck) * rx;+		ry = sqrt (radiiCheck) * ry;+		Prx = rx * rx;+		Pry = ry * ry;+	}++	//+	// Step 2 : Compute (cx1, cy1)+	//+	sign = (largeArcFlag == sweepFlag) ? -1 : 1;+	sq = ((Prx * Pry) - (Prx * Py1) - (Pry * Px1)) / ((Prx * Py1) + (Pry * Px1));+	sq = (sq < 0) ? 0 : sq;+	coef = (sign * Math.sqrt(sq));+	cx1 = coef * ((rx * y1) / ry);+	cy1 = coef * -((ry * x1) / rx);++	//+	// Step 3 : Compute (cx, cy) from (cx1, cy1)+	//+	+	sx2 = (x0 + x) / 2.0;+	sy2 = (y0 + y) / 2.0;+	cx = sx2 + (cosAngle * cx1 - sinAngle * cy1);+	cy = sy2 + (sinAngle * cx1 + cosAngle * cy1);++	//+	// Step 4 : Compute the angleStart (angle1) and the angleExtent (dangle)+	//++	ux = (x1 - cx1) / rx;+	uy = (y1 - cy1) / ry;+	vx = (-x1 - cx1) / rx;+	vy = (-y1 - cy1) / ry;++	// Compute the angle start+	n = sqrt((ux * ux) + (uy * uy));+	p = ux; // (1 * ux) + (0 * uy)+	sign = (uy < 0) ? -1d : 1d;+	angleStart = sign * acos(p / n);++	// Compute the angle extent+	n = Math.sqrt((ux * ux + uy * uy) * (vx * vx + vy * vy));+	p = ux * vx + uy * vy;+	sign = (ux * vy - uy * vx < 0) ? -1d : 1d;+	angleExtent = sign * Math.acos(p / n);+	+	if(!sweepFlag && angleExtent > 0) {+		angleExtent -= 2 * PI;+	} else if (sweepFlag && angleExtent < 0) {+		angleExtent += 2 * PI;+	}++	center_x = cx;+	center_y = cy;+		+	angleExtent = -angleExtent;+	angleStart = -angleStart;++	angle_start = angleStart;+	angle_extent = angleExtent;+}+++}+diff --git a/libsvgbird/SvgDrawing.vala b/libsvgbird/SvgDrawing.valanew file mode 100644index 0000000..3301e70--- /dev/null+++ b/libsvgbird/SvgDrawing.vala@@ -0,0 +1,90 @@+/*+	Copyright (C) 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/+++using B;+using Cairo;+using Math;++namespace SvgBird {++public class SvgDrawing : Object {+	public Layer root_layer = new Layer ();+	public Defs defs = new Defs ();++	public double x = 0;+	public double y = 0;+	+	public double width {+		get {			+			return svg_width;+		}+		+		set {+			svg_width = value;+		}+	}+	public double svg_width = 0;+	+	+	public double height = 0;+		+	public override void update_region_boundaries () {+	}+	+	public override bool is_over (double x, double y) {+		return (this.x <= x <= this.x + width) +			&& (this.y <= y <= this.y + height);+	}++	public void draw (Context cr) {+		root_layer.draw (cr);+	}+		+	public override void draw_outline (Context cr) {+		root_layer.draw_outline (cr);+	}+	+	public override Object copy () {+		SvgDrawing drawing = new SvgDrawing ();+		drawing.root_layer = (Layer) root_layer.copy ();+		drawing.defs = defs.copy ();+		drawing.x = x;+		drawing.y = y;+		drawing.width = width;+		drawing.height = height;+		return drawing;+	}+	+	public override void move (double dx, double dy) {+		x += dx;+		y += dy;+	}+	+	public override void rotate (double theta, double xc, double yc) {+	}+	+	public override bool is_empty () {+		return false;+	}+	+	public override void resize (double ratio_x, double ratio_y) {+	}++	public override string to_string () {+		return @"SvgDrawing x: $x, y: $y, width: $width, height: $height";+	}+}++}diff --git a/libsvgbird/SvgFile.vala b/libsvgbird/SvgFile.valanew file mode 100644index 0000000..9cb8c36--- /dev/null+++ b/libsvgbird/SvgFile.vala@@ -0,0 +1,1360 @@+/*+	Copyright (C) 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using B;+using Cairo;+using Math;++namespace SvgBird {++public class SvgFile : GLib.Object {++	SvgDrawing drawing;++	public SvgFile () {		+	}+	+	public SvgDrawing parse_svg_data (string xml_data) {+		XmlTree tree = new XmlTree (xml_data);+		return parse_svg_file (tree.get_root ());+	}+	+	public SvgDrawing parse_svg_file (XmlElement svg_tag) {+		drawing = new SvgDrawing ();++		SvgStyle style = new SvgStyle ();+		SvgStyle.parse (drawing.defs, style, svg_tag);++		foreach (Attribute attr in svg_tag.get_attributes ()) {	+			if (attr.get_name () == "width") {+				drawing.width = parse_number (attr.get_content ());+			}++			if (attr.get_name () == "height") {+				drawing.height = parse_number (attr.get_content ());+			}+		}+				+		foreach (XmlElement t in svg_tag) {+			string name = t.get_name ();++			if (name == "g") {+				parse_layer (drawing.root_layer, style, t);+			}++			if (name == "defs") {+				parse_defs (drawing, t);+			}+			+			if (name == "a") {+				parse_link (drawing.root_layer, style, svg_tag);+			}+			+			parse_object (drawing.root_layer, style, t);+		}++		set_object_properties (drawing, new SvgStyle (), svg_tag);+		+		return drawing;+	}++	private void parse_layer (Layer layer, SvgStyle parent_style, XmlElement tag) {		+		foreach (XmlElement t in tag) {+			string name = t.get_name ();++			if (name == "g") {+				Layer sublayer = new Layer ();+				parse_layer (layer, parent_style, t);+				layer.objects.add (sublayer);+			}++			if (name == "a") {+				parse_link (layer, parent_style, t);+			}+			+			parse_object (layer, parent_style, t);+		}++		set_object_properties (layer, parent_style, tag);+	}++	void parse_clip_path (SvgDrawing drawing, XmlElement tag) {+		ClipPath clip_path;+		+		Layer layer = new Layer ();+		parse_layer (layer, new SvgStyle (), tag);+		clip_path = new ClipPath (layer);+		+		drawing.defs.clip_paths.add (clip_path);+	}++	void parse_defs (SvgDrawing drawing, XmlElement tag) {+		foreach (XmlElement t in tag) {+			// FIXME: radial+			string name = t.get_name ();+			+			if (name == "linearGradient") {+				parse_linear_gradient (drawing, t);+			} else if (name == "clipPath") {+				parse_clip_path (drawing, t);+			}+		}+		+		foreach (Gradient gradient in drawing.defs.gradients) {+			if (gradient.href != null) {+				Gradient? referenced;+				referenced = drawing.defs.get_gradient_for_id ((!) gradient.href);+				+				if (referenced != null) {+					gradient.copy_stops ((!) referenced);+				}+				+				gradient.href = null;+			}+		}+		+		foreach (XmlElement t in tag) {+			// FIXME: radial+			string name = t.get_name ();+			+			if (name == "style") {+				drawing.defs.style_sheet = StyleSheet.parse (drawing.defs, t);+			}+		}+		+	}++	void parse_linear_gradient (SvgDrawing drawing, XmlElement tag) {+		Gradient gradient = new Gradient ();+		+		drawing.defs.add (gradient);+		+		foreach (Attribute attr in tag.get_attributes ()) {+			string name = attr.get_name ();+			+			// FIXME: gradientUnits+			+			if (name == "gradientTransform") {+				gradient.transforms = parse_transform (attr.get_content ());+			}++			if (name == "href") {+				gradient.href = attr.get_content ();+			}++			if (name == "x1") {+				gradient.x1 = parse_number (attr.get_content ());+			}++			if (name == "y1") {	+				gradient.y1 = parse_number (attr.get_content ());+			}+			+			if (name == "x2") {+				gradient.x2 = parse_number (attr.get_content ());+			}++			if (name == "y2") {+				gradient.y2 = parse_number (attr.get_content ());+			}++			if (name == "id") {+				gradient.id = attr.get_content ();+			}+		}+		+		foreach (XmlElement t in tag) {+			// FIXME: radial+			string name = t.get_name ();+			+			if (name == "stop") {+				parse_stop (gradient, t);+			}+		}+	}++	void parse_stop (Gradient gradient, XmlElement tag) {+		SvgStyle parent_style = new SvgStyle (); // not inherited+		SvgStyle style = SvgStyle.parse (drawing.defs, parent_style, tag);+		Stop stop = new Stop ();+		+		gradient.stops.add (stop);+		+		foreach (Attribute attr in tag.get_attributes ()) {+			string name = attr.get_name ();+			+			if (name == "offset") {+				string stop_offset = attr.get_content ();+				+				if (stop_offset.index_of ("%") > -1) {+					stop_offset = stop_offset.replace ("%", "");+					stop.offset = parse_number (stop_offset) / 100.0;+				} else {+					stop.offset = parse_number (stop_offset);+				}+			}+		}+		+		string? stop_color = style.style.get ("stop-color");+		string? stop_opacity = style.style.get ("stop-opacity");+		Color? color = new Color (0, 0, 0, 1);+		+		if (stop_color != null) {+			color = Color.parse (stop_color);+			+			if (color != null) {+				stop.color = (!) color;+			}+		}++		if (stop_opacity != null && color != null) {+			((!) color).a = parse_number (stop_opacity);+		}+	}+	+	// links are ignored, add the content to the layer+	void parse_link (Layer layer, SvgStyle parent_style, XmlElement tag) {+		parse_layer (layer, parent_style, tag);+	}+	+	void parse_object (Layer layer, SvgStyle parent_style, XmlElement tag) {+		string name = tag.get_name ();+		+		if (name == "path") {+			parse_path (layer, parent_style, tag);+		}+							+		if (name == "polygon") {+			parse_polygon (layer, parent_style, tag);+		}++		if (name == "polyline") {+			parse_polyline (layer, parent_style, tag);+		}+		+		if (name == "rect") {+			parse_rect (layer, parent_style, tag);+		}++		if (name == "circle") {+			parse_circle (layer, parent_style, tag);+		}++		if (name == "ellipse") {+			parse_ellipse (layer, parent_style, tag);+		}+		+		if (name == "line") {+			parse_line (layer, parent_style, tag);+		}+	}++	private void parse_polygon (Layer layer, SvgStyle parent_style, XmlElement tag) {+		Polygon polygon = new Polygon ();++		foreach (Attribute attr in tag.get_attributes ()) {+			if (attr.get_name () == "points") {+				string data = add_separators (attr.get_content ());+				string[] point_data = data.split (" ");+				+				foreach (string number in point_data) {+					polygon.points.add (parse_number (number));+				}+			}+		}+		+		set_object_properties (polygon, parent_style, tag);+		layer.add_object (polygon);+	}+	+	void set_object_properties (Object object, SvgStyle parent_style, XmlElement tag) {+		Attributes attributes = tag.get_attributes ();+		+		foreach (Attribute attribute in attributes) {+			string name = attribute.get_name ();+			+			if (name == "id") {+				object.id = attribute.get_content ();+			} else if (name == "class") {+				object.css_class = attribute.get_content ();+			}+		}+		+		object.clip_path = get_clip_path (attributes);+		object.transforms = get_transform (attributes);+		object.style = SvgStyle.parse (drawing.defs, parent_style, tag);+		object.visible = is_visible (tag);+	}+		+	ClipPath? get_clip_path (Attributes attributes) {+		foreach (Attribute attribute in attributes) {+			if (attribute.get_name () == "clip-path") {+				return drawing.defs.get_clip_path_for_url (attribute.get_content ());+			}+		}+		+		return null;+	}+	+	private void parse_polyline (Layer layer, SvgStyle parent_style, XmlElement tag) {+		Polyline polyline = new Polyline ();++		foreach (Attribute attr in tag.get_attributes ()) {+			if (attr.get_name () == "points") {+				string data = add_separators (attr.get_content ());+				string[] point_data = data.split (" ");+				+				foreach (string number in point_data) {+					polyline.points.add (parse_number (number));+				}+			}+		}+		+		set_object_properties (polyline, parent_style, tag);+		layer.add_object (polyline);+	}+	+	private void parse_rect (Layer layer, SvgStyle parent_style, XmlElement tag) {+		Rectangle rectangle = new Rectangle ();++		foreach (Attribute attr in tag.get_attributes ()) {+			string attribute = attr.get_name ();+			+			if (attribute == "x") {+				rectangle.x = parse_number (attr.get_content ());+			}++			if (attribute == "y") {+				rectangle.y = parse_number (attr.get_content ());+			}++			if (attribute == "width") {+				rectangle.width = parse_number (attr.get_content ());+			}++			if (attribute == "height") {+				rectangle.height = parse_number (attr.get_content ());+			}+			+			if (attribute == "rx") {+				rectangle.rx = parse_number (attr.get_content ());+			}++			if (attribute == "ry") {+				rectangle.ry = parse_number (attr.get_content ());+			}+		}+		+		set_object_properties (rectangle, parent_style, tag);+		layer.add_object (rectangle);+	}+	+	private void parse_circle (Layer layer, SvgStyle parent_style, XmlElement tag) {+		Circle circle = new Circle ();+		+		foreach (Attribute attr in tag.get_attributes ()) {+			string name = attr.get_name ();+			+			if (name == "cx") {+				circle.cx = parse_number (attr.get_content ());+			}++			if (name == "cy") {+				circle.cy = parse_number (attr.get_content ());+			}+			+			if (name == "r") {+				circle.r = parse_number (attr.get_content ());+			}+		}+		+		set_object_properties (circle, parent_style, tag);+		layer.add_object (circle);+	}+	+	private void parse_ellipse (Layer layer, SvgStyle parent_style, XmlElement tag) {+		Ellipse ellipse = new Ellipse ();+		+		foreach (Attribute attr in tag.get_attributes ()) {+			string name = attr.get_name ();+			+			if (name == "cx") {+				ellipse.cx = parse_number (attr.get_content ());+			}++			if (name == "cy") {+				ellipse.cy = parse_number (attr.get_content ());+			}+			+			if (name == "rx") {+				ellipse.rx = parse_number (attr.get_content ());+			}+			+			if (name == "ry") {+				ellipse.ry = parse_number (attr.get_content ());+			}+		}+		+		set_object_properties (ellipse, parent_style, tag);+		layer.add_object (ellipse);+	}+	+	private void parse_line (Layer layer, SvgStyle parent_style, XmlElement tag) {+		Line line = new Line ();+		+		foreach (Attribute attr in tag.get_attributes ()) {+			string name = attr.get_name ();+			+			if (name == "x1") {+				line.x1 = parse_number (attr.get_content ());+			}++			if (name == "y1") {+				line.y1 = parse_number (attr.get_content ());+			}+			+			if (name == "x2") {+				line.x2 = parse_number (attr.get_content ());+			}+			+			if (name == "y2") {+				line.y2 = parse_number (attr.get_content ());+			}+		}+		+		set_object_properties (line, parent_style, tag);+		layer.add_object (line);+	}+	+	// FIXME: reverse order?+	public SvgTransforms parse_transform (string transforms) {+		string[] functions;+		string transform = transforms;+		SvgTransforms transform_functions;+		+		transform_functions = new SvgTransforms ();+		+		transform = transform.replace ("\t", " ");+		transform = transform.replace ("\n", " ");+		transform = transform.replace ("\r", " ");+		+		// use only a single space as separator+		while (transform.index_of ("  ") > -1) {+			transform = transform.replace ("  ", " ");+		}+		+		if (unlikely (transform.index_of (")") == -1)) {+			warning ("No parenthesis in transform function.");+			return transform_functions;+		}+		+		 // add separator+		transform = transform.replace (") ", "|");+		transform = transform.replace (")", "|"); +		functions = transform.split ("|");+		+		for (int i = 0; i < functions.length; i++) {+			if (functions[i].has_prefix ("translate")) {+				transform_functions.add (translate (functions[i]));+			}+			+			if (functions[i].has_prefix ("scale")) {+				transform_functions.add (scale (functions[i]));+			}++			if (functions[i].has_prefix ("matrix")) {+				transform_functions.add (matrix (functions[i]));+			}+			+			// TODO: rotate etc.+		}+		+		return transform_functions;+	}++	private SvgTransform matrix (string function) {+		string parameters = get_transform_parameters (function);+		string[] p = parameters.split (" ");+		SvgTransform transform = new SvgTransform ();+		transform.type = TransformType.MATRIX;+		+		if (unlikely (p.length != 6)) {+			warning ("Expecting six parameters for matrix transformation.");+			return transform;+		}+		+		for (int i = 0; i < 6; i++) {+			double argument = parse_double (p[i]);+			transform.arguments.add (argument);+		}+		+		return transform;+	}++    private static string remove_unit (string d) {+		string s = d.replace ("pt", "");+		s = s.replace ("pc", "");+		s = s.replace ("mm", "");+		s = s.replace ("cm", "");+		s = s.replace ("in", "");+		s = s.replace ("px", "");+		return s;+	}+    +	public static double parse_number (string? number_with_unit) {+		if (number_with_unit == null) {+			return 0;+		}+		+		string d = (!) number_with_unit;+		string s = remove_unit (d);+		double n = parse_double (s);+		+		if (d.has_suffix ("pt")) {+			n *= 1.25;+		} else if (d.has_suffix ("pc")) {+			n *= 15;+		} else if (d.has_suffix ("mm")) {+			n *= 3.543307;+		} else if (d.has_suffix ("cm")) {+			n *= 35.43307;+		} else if (d.has_suffix ("in")) {+			n *= 90;+		}+		+		return n;+	}+	+	private SvgTransform scale (string function) {+		string parameters = get_transform_parameters (function);+		string[] p = parameters.split (" ");+		SvgTransform transform = new SvgTransform ();+		transform.type = TransformType.SCALE;++		if (p.length > 0) {+			transform.arguments.add (parse_double (p[0]));+		}+		+		if (p.length > 1) {+			transform.arguments.add (parse_double (p[1]));+		}+		+		return transform;+	}+	+	private SvgTransform translate (string function) {+		string parameters = get_transform_parameters (function);+		string[] p = parameters.split (" ");+		SvgTransform transform = new SvgTransform ();+		transform.type = TransformType.TRANSLATE;+		+		if (p.length > 0) {+			transform.arguments.add (parse_double (p[0]));+		}+		+		if (p.length > 1) {+			transform.arguments.add (parse_double (p[1]));+		}+		+		return transform;+	}++	private string get_transform_parameters (string function) {+		int i;+		string param = "";+		+		i = function.index_of ("(");+		return_val_if_fail (i != -1, param);+		param = function.substring (i);++		param = param.replace ("(", "");+		param = param.replace ("\n", " ");+		param = param.replace ("\t", " ");+		param = param.replace (",", " ");+		+		while (param.index_of ("  ") > -1) {+			param.replace ("  ", " ");+		}+			+		return param.strip();			+	}++	private bool is_visible (XmlElement tag) {+		bool hidden = false;++		foreach (Attribute attr in tag.get_attributes ()) {+			if (attr.get_name () == "display" && attr.get_content () == "none") {+				hidden = true;+			}+			+			if (attr.get_name () == "visibility"+				&& (attr.get_content () == "hidden" +					|| attr.get_content () == "collapse")) {+				hidden = true;+			}+		}+		+		return !hidden;+	}++	private SvgTransforms get_transform (Attributes attributes) {+		foreach (Attribute attr in attributes) {+			if (attr.get_name () == "transform") {+				return parse_transform (attr.get_content ());+			}+		}+		+		return new SvgTransforms ();+	}+	+	private void parse_path (Layer layer, SvgStyle parent_style, XmlElement tag) {+		SvgPath path = new SvgPath ();++		foreach (Attribute attr in tag.get_attributes ()) {+			if (attr.get_name () == "d") {+				path.points = parse_points (attr.get_content ());+			}+		}+		+		set_object_properties (path, parent_style, tag);+		layer.add_object (path);+	}++	public Gee.ArrayList<Points> parse_points (string data) {+		Gee.ArrayList<Points> path_data = new Gee.ArrayList<Points> ();+		Points points = new Points ();+		BezierPoints[] bezier_points;+		int points_size;+	+		get_bezier_points (data, out bezier_points, out points_size, true);++		// all instructions are padded++		for (int i = 0; i < points_size; i++) {+			// FIXME: add more types+			if (bezier_points[i].type == 'M') {+				if (i == 0) {+					points.x = bezier_points[i].x0;+					points.y = bezier_points[i].y0;+				} else {+					points.add_type (POINT_LINE);+					points.add (bezier_points[i].x0);+					points.add (bezier_points[i].y0);+					points.add (0);+					points.add (0);+					points.add (0);+					points.add (0);+					points.add (0);+				}+			} else if (bezier_points[i].type == 'C') {+				points.add_type (POINT_CUBIC);+				points.add (bezier_points[i].x0);+				points.add (bezier_points[i].y0);+				points.add (bezier_points[i].x1);+				points.add (bezier_points[i].y1);+				points.add (bezier_points[i].x2);+				points.add (bezier_points[i].y2);+				points.add (0);+			} else if (bezier_points[i].type == 'L') {+				points.add_type (POINT_LINE);+				points.add (bezier_points[i].x0);+				points.add (bezier_points[i].y0);+				points.add (0);+				points.add (0);+				points.add (0);+				points.add (0);+				points.add (0);+			} else if (bezier_points[i].type == 'A') {+				BezierPoints b = bezier_points[i];+				double angle_start;+				double angle_extent;+				double center_x;+				double center_y;+				double rotation = b.angle;+								+				get_arc_arguments (b.x0, b.y0, b.rx, b.ry,+					b.angle, b.large_arc, b.sweep, b.x1, b.y1,+					out angle_start, out angle_extent,+					out center_x, out center_y);+				+				points.add_type (POINT_ARC);+				points.add (center_x);+				points.add (center_y);+				points.add (b.rx);+				points.add (b.ry);+				points.add (angle_start);+				points.add (angle_extent); +				points.add (rotation);+			} else if (bezier_points[i].type == 'z') {+				points.closed = true;+				path_data.add (points);+				points = new Points ();+			} else {+				string type = (!) bezier_points[i].type.to_string ();+				warning (@"SVG conversion not implemented for $type");+			}+		}++		if (points.size > 0) {+			path_data.add (points);+		}+		+		return path_data;+	}++	public static double parse_double (string? s) {+		if (unlikely (s == null)) {+			warning ("number is null");+			return 0;+		}+		+		if (unlikely (!double.try_parse ((!) s))) {+			warning (@"Expecting a double got: $((!) s)");+			return 0;+		}+		+		return double.parse ((!) s);+	}+	+	// FIXME: rename to instructions+	public static void get_bezier_points (string point_data, out BezierPoints[] bezier_points, out int points, bool svg_glyph) {+		double px = 0;+		double py = 0;+		double px2 = 0;+		double py2 = 0;+		double cx = 0;+		double cy = 0;+		string[] c;+		double arc_rx, arc_ry;+		double arc_rotation;+		int large_arc;+		int arc_sweep;+		double arc_dest_x, arc_dest_y;+		+		int bi = 0;++		string data = add_separators (point_data);+		c = data.split (" ");++		// the arc instruction can use up to eight points+		int bezier_points_length = 8 * c.length + 1;+		bezier_points = new BezierPoints[bezier_points_length]; +		+		for (int i = 0; i < bezier_points_length; i++) {+			bezier_points[i] = new BezierPoints ();+		}++		// parse path+		int i = -1;+		while (++i < c.length && bi < bezier_points.length) {	+			if (c[i] == "m") {+				while (i + 2 < c.length && is_point (c[i + 1])) {+					bezier_points[bi].type = 'M';+					bezier_points[bi].svg_type = 'm';+					+					px += parse_double (c[++i]);+					+					if (svg_glyph) {+						py += parse_double (c[++i]);+					} else {+						py += -parse_double (c[++i]);+					}+					+					bezier_points[bi].x0 = px;+					bezier_points[bi].y0 = py;+					bi++;+				}+			} else if (c[i] == "M") {+				while (i + 2 < c.length && is_point (c[i + 1])) {+					bezier_points[bi].type = 'M';+					bezier_points[bi].svg_type = 'M';+					+					px = parse_double (c[++i]);+					+					if (svg_glyph) {+						py = parse_double (c[++i]);+					} else {+						py = -parse_double (c[++i]);+					}+					+					bezier_points[bi].x0 = px;+					bezier_points[bi].y0 = py;+					bi++;+				}+			} else if (c[i] == "h") {+				while (i + 1 < c.length && is_point (c[i + 1])) {+					bezier_points[bi].type = 'L';+					bezier_points[bi].svg_type = 'h';+					+					px += parse_double (c[++i]);++					bezier_points[bi].x0 = px;+					bezier_points[bi].y0 = py;+					bi++;+				}+			} else if (i + 1 < c.length && c[i] == "H") {+				while (is_point (c[i + 1])) {+					bezier_points[bi].type = 'L';+					bezier_points[bi].svg_type = 'H';+					+					px = parse_double (c[++i]);++					bezier_points[bi].x0 = px;+					bezier_points[bi].y0 = py;+					bi++;+				}+			} else if (c[i] == "v") {+				while (i + 1 < c.length && is_point (c[i + 1])) {+					bezier_points[bi].type = 'L';+					bezier_points[bi].svg_type = 'v';+										+					if (svg_glyph) {+						py = py + parse_double (c[++i]);+					} else {+						py = py - parse_double (c[++i]);+					}+					+					bezier_points[bi].x0 = px;+					bezier_points[bi].y0 = py;+					bi++;+				}				+			} else if (i + 1 < c.length && c[i] == "V") {+				while (is_point (c[i + 1])) {+					bezier_points[bi].type = 'L';+					bezier_points[bi].svg_type = 'V';+										+					if (svg_glyph) {+						py = parse_double (c[++i]);+					} else {+						py = -parse_double (c[++i]);+					}+					+					bezier_points[bi].x0 = px;+					bezier_points[bi].y0 = py;+					bi++;+				}+			} else if (c[i] == "l") {+				while (i + 2 < c.length && is_point (c[i + 1])) {+					bezier_points[bi].type = 'L';+					bezier_points[bi].svg_type = 'l';+										+					cx = px + parse_double (c[++i]);+					+					if (svg_glyph) {+						cy = py + parse_double (c[++i]);+					} else {+						cy = py - parse_double (c[++i]);+					}+					+					px = cx;+					py = cy;++					bezier_points[bi].x0 = cx;+					bezier_points[bi].y0 = cy;+					bi++;+				}+			} else if (c[i] == "L") {+				while (i + 2 < c.length && is_point (c[i + 1])) {+					bezier_points[bi].type = 'L';+					bezier_points[bi].svg_type = 'L';+										+					cx = parse_double (c[++i]);+					+					if (svg_glyph) {+						cy = parse_double (c[++i]);+					} else {+						cy = -parse_double (c[++i]);+					}+					+					px = cx;+					py = cy;+					+					bezier_points[bi].x0 = cx;+					bezier_points[bi].y0 = cy;+					bi++;				+				}	+			} else if (c[i] == "c") {+				while (i + 6 < c.length && is_point (c[i + 1])) {+					bezier_points[bi].type = 'C';+					bezier_points[bi].svg_type = 'C';+										+					cx = px + parse_double (c[++i]);+					+					if (svg_glyph) {+						cy = py + parse_double (c[++i]);+					} else {+						cy = py - parse_double (c[++i]);+					}+					+					bezier_points[bi].x0 = cx;+					bezier_points[bi].y0 = cy;+										+					cx = px + parse_double (c[++i]);+					+					if (svg_glyph) {+						cy = py + parse_double (c[++i]);+					} else {+						cy = py - parse_double (c[++i]);+					}+					+					px2 = cx;+					py2 = cy;+										+					bezier_points[bi].x1 = px2;+					bezier_points[bi].y1 = py2;+										+					cx = px + parse_double (c[++i]);+					+					if (svg_glyph) {+						cy = py + parse_double (c[++i]);+					} else {+						cy = py + -parse_double (c[++i]);+					}+					+					bezier_points[bi].x2 = cx;+					bezier_points[bi].y2 = cy;+										+					px = cx;+					py = cy;+					+					bi++;+				}+			} else if (c[i] == "C") {+				while (i + 6 < c.length && is_point (c[i + 1])) {+					bezier_points[bi].type = 'C';+					bezier_points[bi].svg_type = 'C';+										+					cx = parse_double (c[++i]);+					+					if (svg_glyph) {+						cy = parse_double (c[++i]);+					} else {+						cy = -parse_double (c[++i]);+					}+									+					bezier_points[bi].x0 = cx;+					bezier_points[bi].y0 = cy;+					+					cx = parse_double (c[++i]);+					+					if (svg_glyph) {+						cy = parse_double (c[++i]);+					} else {+						cy = -parse_double (c[++i]);+					}+					+					px2 = cx;+					py2 = cy;+					+					bezier_points[bi].x1 = cx;+					bezier_points[bi].y1 = cy;+										+					cx = parse_double (c[++i]);+					+					if (svg_glyph) {+						cy = parse_double (c[++i]);+					} else {+						cy = -parse_double (c[++i]);+					}+					+					bezier_points[bi].x2 = cx;+					bezier_points[bi].y2 = cy;+										+					px = cx;+					py = cy;+					+					bi++;				+				}	+			} else if (c[i] == "q") {+				while (i + 4 < c.length && is_point (c[i + 1])) {+					bezier_points[bi].type = 'Q';+					bezier_points[bi].svg_type = 'q';+										+					cx = px + parse_double (c[++i]);+					+					if (svg_glyph) {+						cy = py + parse_double (c[++i]);+					} else {+						cy = py - parse_double (c[++i]);+					}+					+					bezier_points[bi].x0 = cx;+					bezier_points[bi].y0 = cy;+										+					px2 = cx;+					py2 = cy;+										+					cx = px + parse_double (c[++i]);+					+					if (svg_glyph) {+						cy = py + parse_double (c[++i]);+					} else {+						cy = py - parse_double (c[++i]);+					}+					+					bezier_points[bi].x1 = cx;+					bezier_points[bi].y1 = cy;+										+					px = cx;+					py = cy;+					+					bi++;+				}+			} else if (c[i] == "Q") {+				while (i + 4 < c.length && is_point (c[i + 1])) {+					bezier_points[bi].type = 'Q';+					bezier_points[bi].svg_type = 'Q';+										+					cx = parse_double (c[++i]);+					+					if (svg_glyph) {+						cy = parse_double (c[++i]);+					} else {+						cy = -parse_double (c[++i]);+					}+					+					bezier_points[bi].x0 = cx;+					bezier_points[bi].y0 = cy;+					+					px2 = cx;+					py2 = cy;+										+					cx = parse_double (c[++i]);+					+					if (svg_glyph) {+						cy = parse_double (c[++i]);+					} else {+						cy = -parse_double (c[++i]);+					}+					+					px = cx;+					py = cy;++					bezier_points[bi].x1 = cx;+					bezier_points[bi].y1 = cy;+										+					bi++;					+				}	+			} else if (c[i] == "t") {+				while (i + 2 < c.length && is_point (c[i + 1])) {+					bezier_points[bi].type = 'Q';+					bezier_points[bi].svg_type = 't';+										+					// the first point is the reflection+					cx = 2 * px - px2;+					cy = 2 * py - py2; // if (svg_glyph) ?+					+					bezier_points[bi].x0 = cx;+					bezier_points[bi].y0 = cy;+					+					px2 = cx;+					py2 = cy;+										+					cx = px + parse_double (c[++i]);+					+					if (svg_glyph) {+						cy = py + parse_double (c[++i]);+					} else {+						cy = py - parse_double (c[++i]);+					}+					+					px = cx;+					py = cy;+					+					bezier_points[bi].x1 = px;+					bezier_points[bi].y1 = py;+										+					bi++;+				}+			} else if (c[i] == "T") {+				while (i + 2 < c.length && is_point (c[i + 1])) {+					bezier_points[bi].type = 'Q';+					bezier_points[bi].svg_type = 'T';+										+					// the reflection+					cx = 2 * px - px2;+					cy = 2 * py - py2;+					+					bezier_points[bi].x0 = cx;+					bezier_points[bi].y0 = cy;+										+					px2 = cx;+					py2 = cy;+					+					cx = parse_double (c[++i]);+					+					if (svg_glyph) {+						cy = parse_double (c[++i]);+					} else {+						cy = -parse_double (c[++i]);+					}+					+					px = cx;+					py = cy;+					+					bezier_points[bi].x1 = px;+					bezier_points[bi].y1 = py;+										+					bi++;				+				}+			} else if (c[i] == "s") {+				while (i + 4 < c.length && is_point (c[i + 1])) {+					bezier_points[bi].type = 'C';+					bezier_points[bi].svg_type = 's';+										+					// the first point is the reflection+					cx = 2 * px - px2;+					cy = 2 * py - py2; // if (svg_glyph) ?++					bezier_points[bi].x0 = cx;+					bezier_points[bi].y0 = cy;+															+					cx = px + parse_double (c[++i]);+					+					if (svg_glyph) {+						cy = py + parse_double (c[++i]);+					} else {+						cy = py - parse_double (c[++i]);+					}+					+					px2 = cx;+					py2 = cy;+					+					bezier_points[bi].x1 = px2;+					bezier_points[bi].y1 = py2;+					+					cx = px + parse_double (c[++i]);+					+					if (svg_glyph) {+						cy = py + parse_double (c[++i]);+					} else {+						cy = py - parse_double (c[++i]);+					}+					+					bezier_points[bi].x2 = cx;+					bezier_points[bi].y2 = cy;+												+					px = cx;+					py = cy;+					+					bi++;+				}+			} else if (c[i] == "S") {+				while (i + 4 < c.length && is_point (c[i + 1])) {+					bezier_points[bi].type = 'C';+					bezier_points[bi].svg_type = 'S';+										+					// the reflection+					cx = 2 * px - px2;+					cy = 2 * py - py2; // if (svg_glyph) ?			++					bezier_points[bi].x0 = cx;+					bezier_points[bi].y0 = cy;+					+					// the other two are regular cubic points+					cx = parse_double (c[++i]);+					+					if (svg_glyph) {+						cy = parse_double (c[++i]);+					} else {+						cy = -parse_double (c[++i]);+					}+					+					px2 = cx;+					py2 = cy;+					+					bezier_points[bi].x1 = px2;+					bezier_points[bi].y1 = py2;+					+					cx = parse_double (c[++i]);+					+					if (svg_glyph) {+						cy = parse_double (c[++i]);+					} else {+						cy = -parse_double (c[++i]);+					}+					+					bezier_points[bi].x2 = cx;+					bezier_points[bi].y2 = cy;+					+					px = cx;+					py = cy;	+					+					bi++;+				}+			} else if (c[i] == "a") {+				while (i + 7 < c.length && is_point (c[i + 1])) {					+					arc_rx = parse_double (c[++i]);+					arc_ry = parse_double (c[++i]);+					+					arc_rotation = PI * (parse_double (c[++i]) / 180.0);+					large_arc = parse_int (c[++i]);+					arc_sweep = parse_int (c[++i]);+							+					cx = px + parse_double (c[++i]);+					+					if (svg_glyph) {+						cy = py + parse_double (c[++i]);+					} else {+						cy = py - parse_double (c[++i]);+					}+					+					arc_dest_x = cx;+					arc_dest_y = cy;+					+					bezier_points[bi].type = 'A';+					bezier_points[bi].svg_type = 'a';+					bezier_points[bi].x0 = px;+					bezier_points[bi].y0 = py;+					bezier_points[bi].x1 = cx;+					bezier_points[bi].y1 = cy;+					bezier_points[bi].rx = arc_rx;+					bezier_points[bi].ry = arc_ry;+					bezier_points[bi].angle = arc_rotation;+					bezier_points[bi].large_arc = large_arc == 1;+					bezier_points[bi].sweep = arc_sweep == 1;+					bi++;+					+					px = cx;+					py = cy;+				}+			} else if (i + 7 < c.length && c[i] == "A") {+				while (is_point (c[i + 1])) {					+					arc_rx = parse_double (c[++i]);+					arc_ry = parse_double (c[++i]);+					+					arc_rotation = PI * (parse_double (c[++i]) / 180.0);+					large_arc = parse_int (c[++i]);+					arc_sweep = parse_int (c[++i]);+							+					cx = parse_double (c[++i]);+					+					if (svg_glyph) {+						cy = parse_double (c[++i]);+					} else {+						cy = -parse_double (c[++i]);+					}+					+					arc_dest_x = cx;+					arc_dest_y = cy;+					+					bezier_points[bi].type = 'A';+					bezier_points[bi].svg_type = 'A';+					bezier_points[bi].x0 = px;+					bezier_points[bi].y0 = py;+					bezier_points[bi].x1 = cx;+					bezier_points[bi].y1 = cy;+					bezier_points[bi].rx = arc_rx;+					bezier_points[bi].ry = arc_ry;+					bezier_points[bi].angle = arc_rotation;+					bezier_points[bi].large_arc = large_arc == 1;+					bezier_points[bi].sweep = arc_sweep == 1;+					bi++;+					+					px = cx;+					py = cy;+				}+			} else if (c[i] == "z") {+				bezier_points[bi].type = 'z';+				bezier_points[bi].svg_type = 'z';+				+				bi++;+			} else if (c[i] == "Z") {+				bezier_points[bi].type = 'z';+				bezier_points[bi].svg_type = 'z';+									+				bi++;+			} else if (c[i] == "") {+			} else if (c[i] == " ") {+			} else {+				warning (@"Unknown instruction: $(c[i])");+			}+		}+		+		if (bi == 0) {+			warning ("No points in path.");+		}++		points = bi;+	}++	static int parse_int (string? s) {+		if (unlikely (s == null)) {+			warning ("null instead of string");+			return 0;+		}+		+		if (unlikely (!int64.try_parse ((!) s))) {+			warning (@"Expecting an integer: $((!) s)");+			return 0;+		}+		+		return int.parse ((!) s);+	}++	static bool is_point (string? s) {+		if (unlikely (s == null)) {+			warning ("s is null");+			return false;+		}+		+		return double.try_parse ((!) s);+	}++	/** Add space as separator to svg data. +	 * @param d svg data+	 */+	public static string add_separators (string d) {+		string data = d;+		+		data = data.replace (",", " ");+		data = data.replace ("a", " a ");+		data = data.replace ("A", " A ");+		data = data.replace ("m", " m ");+		data = data.replace ("M", " M ");+		data = data.replace ("h", " h ");+		data = data.replace ("H", " H ");+		data = data.replace ("v", " v ");+		data = data.replace ("V", " V ");+		data = data.replace ("l", " l ");+		data = data.replace ("L", " L ");+		data = data.replace ("q", " q ");+		data = data.replace ("Q", " Q ");		+		data = data.replace ("c", " c ");+		data = data.replace ("C", " C ");+		data = data.replace ("t", " t ");+		data = data.replace ("T", " T ");+		data = data.replace ("s", " s ");+		data = data.replace ("S", " S ");+		data = data.replace ("zM", " z M ");+		data = data.replace ("zm", " z m ");+		data = data.replace ("z", " z ");+		data = data.replace ("Z", " Z ");+		data = data.replace ("-", " -");+		data = data.replace ("e -", "e-"); // minus can be either separator or a negative exponent+		data = data.replace ("\t", " ");+		data = data.replace ("\r\n", " ");+		data = data.replace ("\n", " ");+		+		// use only a single space as separator+		while (data.index_of ("  ") > -1) {+			data = data.replace ("  ", " ");+		}+		+		return data;+	}++}++}diff --git a/libsvgbird/SvgPath.vala b/libsvgbird/SvgPath.valanew file mode 100644index 0000000..af2a41d--- /dev/null+++ b/libsvgbird/SvgPath.vala@@ -0,0 +1,115 @@+/*+	Copyright (C) 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using Cairo;++namespace SvgBird {++public class SvgPath : Object {	+	public Gee.ArrayList<Points> points = new Gee.ArrayList<Points> ();+	+	public SvgPath () {+	}++	public SvgPath.create_copy (SvgPath p) {+		Object.copy_attributes (p, this);+	}+	+	public override bool is_over (double x, double y) {+		return false;+	}+			+	public override void draw_outline (Context cr) {+		foreach (Points p in points) {+			cr.move_to (p.x, p.y);+			draw_points (cr, p);+			+			if (p.closed) {+				cr.close_path ();+			}+		}+	}++	public void draw_points (Context cr, Points path) {+		PointValue* points = path.point_data.data;+		int size = path.point_data.size;+		+		return_if_fail (size % 8 == 0);+		+		for (int i = 0; i < size; i += 8) {+			switch (points[i].type) {+			case POINT_ARC:		+				draw_arc (cr, points[i + 1].value, points[i + 2].value,+					points[i + 3].value, points[i + 4].value,+					points[i + 5].value, points[i + 6].value,+					points[i + 7].value);+				break;+			case POINT_CUBIC:+				cr.curve_to (points[i + 1].value, points[i + 2].value, +					points[i + 3].value, points[i + 4].value,+					points[i + 5].value, points[i + 6].value);+				break;+			case POINT_LINE:+				cr.line_to (points[i + 1].value, points[i + 2].value);+				break;+			}+		}		+	}++	static void draw_arc (Context cr,+		double x, double y,+		double rx, double ry,+		double angle_start, double angle_extent,+		double rotation) {+			+		cr.save ();+		cr.translate (x, y);+		cr.rotate (rotation);+		cr.scale (rx, ry);++		if (angle_extent > 0) {+			cr.arc_negative (0, 0, 1, -angle_start, -angle_start - angle_extent);+		} else {+			cr.arc (0, 0, 1, -angle_start, -angle_start - angle_extent);+		}+				+		cr.restore ();+	}++	public override void move (double dx, double dy) {+	}+	+	public override void update_region_boundaries () {+	}++	public override void rotate (double theta, double xc, double yc) {+	}+	+	public override bool is_empty () {+		return false;+	}+	+	public override void resize (double ratio_x, double ratio_y) {+	}+	+	public override Object copy () {+		return new SvgPath.create_copy (this);+	}++	public override string to_string () {+		return "SvgPath";+	}+}++}diff --git a/libsvgbird/SvgStyle.vala b/libsvgbird/SvgStyle.valanew file mode 100644index 0000000..111b52c--- /dev/null+++ b/libsvgbird/SvgStyle.vala@@ -0,0 +1,415 @@+/*+	Copyright (C) 2015 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using B;+using Math;++namespace SvgBird {++public class SvgStyle : GLib.Object {+	public Gee.HashMap<string, string> style = new Gee.HashMap<string, string> ();+	+	public Color? stroke = null;+	public Color? fill = null;+	public Gradient? stroke_gradient = null;+	public Gradient? fill_gradient = null;++	public double stroke_width = 0;++	private static Gee.HashMap<string, string>? inheritance;+	private static Mutex inheritance_mutex = new Mutex ();+	+	public SvgStyle () {+	}+	+	public SvgStyle.for_properties (Defs? defs, string style) {+		parse_key_value_pairs (style);+		set_style_properties (defs, this);+	}++	public void set_style (string property, string style) {+		this.style.set (property, style);+	}+	+	public bool property_equals (string property, string value) {+		string? p = get_css_property (property);+		+		if (p == null) {+			return false;+		}+		+		string css_property = (!) p;+		return css_property == value;+	}++	public bool has_css_property (string property) {+		return style.has_key (property);+	}++	public string? get_css_property (string property) {+		string p = property.down ();+		+		if (!has_css_property (p)) {+			return null;+		}+		+		return style.get (p);+	}+	+	public static bool is_inherited (string property) {+		inheritance_mutex.lock ();+		if (unlikely (inheritance == null)) {+			create_inheritance_table ();+		}+		+		Gee.HashMap<string, string> inheritance = (!) inheritance;+		string? inherited = inheritance.get (property);+		inheritance_mutex.unlock ();++		if (inherited == null) {+			return false;+		}+		+		string inherited_property = (!) inherited;+		return inherited_property == "yes";+	}++	/** Specify inheritance for a CSS property. */+	public static void set_inheritance (string property, bool inherit) {+		inheritance_mutex.lock ();+		if (unlikely (inheritance == null)) {+			create_inheritance_table ();+		}+		+		Gee.HashMap<string, string> inheritance = (!) inheritance;+		string inherit_property = inherit ? "yes" : "no";+		inheritance.set (property, inherit_property);+		inheritance_mutex.unlock ();+	}++	public SvgStyle copy () {+		SvgStyle style = new SvgStyle ();+		style.apply (this);+		return style;+	}++	public LineCap get_line_cap () {+		string l;+		+		if (!style.has_key ("stroke-linecap")) {+			return LineCap.BUTT;+		}+		+		l = style.get ("stroke-linecap");+		+		if (l == "round") {+			return LineCap.ROUND;+		} else if (l == "square") {+			return LineCap.SQUARE;+		}+		+		return LineCap.BUTT; 	+	}+	+	public bool has_stroke () {+		bool s = true;+		+		if (style.has_key ("stroke")) {+			s = style.get ("stroke") != "none";+		}+				+		return stroke_width > 0 && s;+	}+		+	public double get_stroke_width () {+		return stroke_width;+	}+	+	public string to_string () {+		StringBuilder description = new StringBuilder ();+		+		description.append ("SvgStyle: ");+		+		foreach (string key in style.keys) {+			description.append (key);+			description.append (": ");+			description.append (style.get (key));+			description.append ("; ");+		}+		+		return description.str.strip ();+	}+	+	public void inherit (SvgStyle inherited) {+		foreach (string key in inherited.style.keys) {+			if (is_inherited (key)) {+				style.set (key, inherited.style.get (key));+			}+		}+	}++	public void apply (SvgStyle inherited) {+		foreach (string key in inherited.style.keys) {+			style.set (key, inherited.style.get (key));+		}+	}+	+	public static SvgStyle parse (Defs? d, SvgStyle inherited, XmlElement tag) {+		SvgStyle s = new SvgStyle ();+		Attributes attributes = tag.get_attributes ();++		s.style.set ("fill", "#000000"); // default fill value		+		s.inherit (inherited);+		+		if (d != null) {+			StyleSheet style_sheet = ((!) d).style_sheet;+			style_sheet.apply_style (tag, s);+		}++		foreach (Attribute a in attributes) {+			if (a.get_name () == "style") {+				s.parse_key_value_pairs (a.get_content ());+			}+			+			if (a.get_name () == "stroke-width") {+				s.style.set ("stroke-width", a.get_content ());+			}++			if (a.get_name () == "stroke") {+				s.style.set ("stroke", a.get_content ());+			}++			if (a.get_name () == "fill") {+				s.style.set ("fill", a.get_content ());+			}++			if (a.get_name () == "fill-opacity") {+				s.style.set ("fill-opacity", a.get_content ());+			}++			if (a.get_name () == "stroke-opacity") {+				s.style.set ("stroke-opacity", a.get_content ());+			}+		}+	+		set_style_properties (d, s);+		return s;+	}+	+	static void set_style_properties (Defs? d, SvgStyle s) {+		double fill_opacity = 1;+		double stroke_opacity = 1;++		s.stroke_width = SvgFile.parse_number (s.style.get ("stroke-width"));+		s.stroke = Color.parse (s.style.get ("stroke"));+		s.fill = Color.parse (s.style.get ("fill"));++		string? opacity = s.style.get ("fill-opacity");+		if (opacity != null) {+			fill_opacity = SvgFile.parse_number ((!) opacity);+		}++		opacity = s.style.get ("stroke-opacity");+		if (opacity != null) {+			stroke_opacity = SvgFile.parse_number ((!) opacity);+		}+			+		if (d != null) {+			Defs defs = (!) d;++			s.stroke_gradient = defs.get_gradient_for_url (s.style.get ("stroke"));+			s.fill_gradient = defs.get_gradient_for_url (s.style.get ("fill"));+		}+		+		if (s.fill != null) {+			Color color = (!) s.fill;+			color.a = fill_opacity;+		}+		+		if (s.stroke != null) {+			Color color = (!) s.stroke;+			color.a = stroke_opacity;+		}		+	}+	+	void parse_key_value_pairs (string svg_style) {+		string[] p = svg_style.strip ().split (";");+		string[] pair;+		string k, v;+		+		foreach (string kv in p) {+			if (kv.index_of (":") != -1) {+				pair = kv.split (":");+				+				if (pair.length != 2) {+					warning ("pair.length != 2 in " + svg_style);+					continue;+				}+				+				k = pair[0].strip ().down ();+				v = pair[1].strip ().down ();+				+				if (k == "padding") {+					parse_padding_shorthand (v);+				} else {+					style.set (k, v);+				}+			}+		}+	}+	+	void parse_padding_shorthand (string arguments) {+		string[] args = StyleSheet.replace_whitespace (arguments).split (" ");+		+		if (args.length > 0) {+			style.set ("padding-top", args[0]);+		}+		+		if (args.length > 1) {+			style.set ("padding-right", args[1]);+		}++		if (args.length > 2) {+			style.set ("padding-bottom", args[2]);+		}++		if (args.length > 3) {+			style.set ("padding-left", args[3]);+		}+	}++	private static void create_inheritance_table () {+		inheritance = new Gee.HashMap<string, string> ();+		+		Gee.HashMap<string, string> inherited = (!) inheritance;+		+		inherited.set ("azimuth", "yes");+		inherited.set ("background-attachment", "no");+		inherited.set ("background-color", "no");+		inherited.set ("background-image", "no");+		inherited.set ("background-position", "no");+		inherited.set ("background-repeat", "no");+		inherited.set ("background", "no");+		inherited.set ("border-collapse", "yes");+		inherited.set ("border-color", "no");+		inherited.set ("border-spacing", "yes");+		inherited.set ("border-style", "no");+		inherited.set ("border-top", "no");+		inherited.set ("border-right", "no");+		inherited.set ("border-bottom", "no");+		inherited.set ("border-left", "no");+		inherited.set ("border-top-color", "no");+		inherited.set ("border-right-color", "no");+		inherited.set ("border-bottom-color", "no");+		inherited.set ("border-left-color", "no");+		inherited.set ("border-top-style", "no");+		inherited.set ("border-right-style", "no");+		inherited.set ("border-bottom-style", "no");+		inherited.set ("border-left-style", "no");+		inherited.set ("border-top-width", "no");+		inherited.set ("border-right-width", "no");+		inherited.set ("border-bottom-width", "no");+		inherited.set ("border-left-width", "no");+		inherited.set ("border-width", "no");+		inherited.set ("border", "no");+		inherited.set ("bottom", "no");+		inherited.set ("caption-side", "yes");+		inherited.set ("clear", "no");+		inherited.set ("clip", "no");+		inherited.set ("color", "yes");+		inherited.set ("content", "no");+		inherited.set ("counter-increment", "no");+		inherited.set ("counter-reset", "no");+		inherited.set ("cue-after", "no");+		inherited.set ("cue-before", "no");+		inherited.set ("cue", "no");+		inherited.set ("cursor", "yes");+		inherited.set ("direction", "yes");+		inherited.set ("display", "no");+		inherited.set ("elevation", "yes");+		inherited.set ("empty-cells", "yes");+		inherited.set ("float", "no");+		inherited.set ("font-family", "yes");+		inherited.set ("font-size", "yes");+		inherited.set ("font-style", "yes");+		inherited.set ("font-variant", "yes");+		inherited.set ("font-weight", "yes");+		inherited.set ("font", "yes");+		inherited.set ("height", "no");+		inherited.set ("left", "no");+		inherited.set ("letter-spacing", "yes");+		inherited.set ("line-height", "yes");+		inherited.set ("list-style-image", "yes");+		inherited.set ("list-style-position", "yes");+		inherited.set ("list-style-type", "yes");+		inherited.set ("list-style", "yes");+		inherited.set ("margin-right", "no");+		inherited.set ("margin-left", "no");+		inherited.set ("margin-top", "no");+		inherited.set ("margin-bottom", "no");+		inherited.set ("margin", "no");+		inherited.set ("max-height", "no");+		inherited.set ("max-width", "no");+		inherited.set ("min-height", "no");+		inherited.set ("min-width", "no");+		inherited.set ("orphans", "yes");+		inherited.set ("outline-color", "no");+		inherited.set ("outline-style", "no");+		inherited.set ("outline-width", "no");+		inherited.set ("outline", "no");+		inherited.set ("overflow", "no");+		inherited.set ("padding-top", "no");+		inherited.set ("padding-right", "no");+		inherited.set ("padding-bottom", "no");+		inherited.set ("padding-left", "no");+		inherited.set ("padding", "no");+		inherited.set ("page-break-after", "no");+		inherited.set ("page-break-before", "no");+		inherited.set ("page-break-inside", "no");+		inherited.set ("pause-after", "no");+		inherited.set ("pause-before", "no");+		inherited.set ("pause", "no");+		inherited.set ("pitch-range", "yes");+		inherited.set ("pitch", "yes");+		inherited.set ("play-during", "no");+		inherited.set ("position", "no");+		inherited.set ("quotes", "yes");+		inherited.set ("richness", "yes");+		inherited.set ("right", "no");+		inherited.set ("speak-header", "yes");+		inherited.set ("speak-numeral", "yes");+		inherited.set ("speak-punctuation", "yes");+		inherited.set ("speak", "yes");+		inherited.set ("speech-rate", "yes");+		inherited.set ("stress", "yes");+		inherited.set ("table-layout", "no");+		inherited.set ("text-align", "yes");+		inherited.set ("text-decoration", "no");+		inherited.set ("text-indent", "yes");+		inherited.set ("text-transform", "yes");+		inherited.set ("top", "no");+		inherited.set ("unicode-bidi", "no");+		inherited.set ("vertical-align", "no");+		inherited.set ("visibility", "yes");+		inherited.set ("voice-family", "yes");+		inherited.set ("volume", "yes");+		inherited.set ("white-space", "yes");+		inherited.set ("widows", "yes");+		inherited.set ("width", "no");+		inherited.set ("word-spacing", "yes");+		inherited.set ("z-index", "no");+	}+}++}diff --git a/libsvgbird/SvgTransform.vala b/libsvgbird/SvgTransform.valanew file mode 100644index 0000000..e2e8527--- /dev/null+++ b/libsvgbird/SvgTransform.vala@@ -0,0 +1,88 @@+/*+	Copyright (C) 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using B;+using Cairo;++namespace SvgBird {++public enum TransformType {+	NONE,+	TRANSLATE,+	MATRIX,+	SCALE+}++public class SvgTransform : GLib.Object {+	public TransformType type = TransformType.NONE;+	public Doubles arguments = new Doubles.for_capacity (10);+	+	public SvgTransform () {+	}++	public string to_string () {+		StringBuilder sb = new StringBuilder ();+		+		sb.append (@"$type");+		sb.append (" ");+		+		for (int i = 0; i < arguments.size; i++) {+			sb.append (@"$(arguments.get_double (i)) ");+		}++		return sb.str;+	}+		+	public Matrix get_matrix () {+		Matrix matrix;+		+		matrix = Matrix.identity ();+		+		if (type == TransformType.SCALE) {+			if (arguments.size == 1) {+				double s = arguments.get_double (0);+				matrix.scale (s, s);+				return matrix;+			} else if (arguments.size == 2) {+				double s0 = arguments.get_double (0);+				double s1 = arguments.get_double (1);+				matrix.scale (s0, s1);+			}+		} else if (type == TransformType.TRANSLATE) {+			if (arguments.size == 1) {+				double s = arguments.get_double (0);+				matrix.translate (s, 0);+			} else if (arguments.size == 2) {+				double s0 = arguments.get_double (0);+				double s1 = arguments.get_double (1);+				matrix.translate (s0, s1);+			}+		} else if (type == TransformType.MATRIX) {+			if (arguments.size == 6) {+				double s0 = arguments.get_double (0);+				double s1 = arguments.get_double (1);+				double s2 = arguments.get_double (2);+				double s3 = arguments.get_double (3);					+				double s4 = arguments.get_double (4);+				double s5 = arguments.get_double (5);+				+				matrix = Matrix (s0, s1, s2, s3, s4, s5);+			}+		}+		+		return matrix;+	}+}++}diff --git a/libsvgbird/SvgTransforms.vala b/libsvgbird/SvgTransforms.valanew file mode 100644index 0000000..73f7018--- /dev/null+++ b/libsvgbird/SvgTransforms.vala@@ -0,0 +1,58 @@+/*+	Copyright (C) 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++using Cairo;++namespace SvgBird {++public class SvgTransforms : GLib.Object {+	public Gee.ArrayList<SvgTransform> transforms;+	+	public SvgTransforms () {+		transforms = new Gee.ArrayList<SvgTransform> ();+	}++	public void add (SvgTransform transform) {+		transforms.add (transform);+	}+	+	public Matrix get_matrix () {+		Matrix matrix = Matrix.identity ();+		+		if (transforms.size == 0) {+			return Matrix.identity ();+		}+		+		matrix = transforms.get (0).get_matrix ();+		+		for (int i = 1; i < transforms.size; i++) {+			matrix.multiply (matrix, transforms.get (i).get_matrix ());+		}+		+		return matrix;+	}+	+	public string to_string () {+		StringBuilder sb = new StringBuilder ();+		+		foreach (SvgTransform t in transforms) {+			sb.append (t.to_string ());+			sb.append (" ");+		}+		+		return sb.str;+	}+}++}diff --git a/libsvgbird/point_value.h b/libsvgbird/point_value.hnew file mode 100644index 0000000..19035a3--- /dev/null+++ b/libsvgbird/point_value.h@@ -0,0 +1,21 @@+/*+	Copyright (C) 2016 Johan Mattsson++	This library is free software; you can redistribute it and/or modify +	it under the terms of the GNU Lesser General Public License as +	published by the Free Software Foundation; either version 3 of the +	License, or (at your option) any later version.++	This library is distributed in the hope that it will be useful, but +	WITHOUT ANY WARRANTY; without even the implied warranty of +	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +	Lesser General Public License for more details.+*/++#include<glib.h>++typedef union {+	gdouble value;+	guchar type;+} SvgBirdPointValue;+diff --git a/po/birdfont.pot b/po/birdfont.potindex e66f96f..f11d2d0 100644--- a/po/birdfont.pot+++ b/po/birdfont.pot@@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n"-"POT-Creation-Date: 2015-12-22 20:35+0100\n"+"POT-Creation-Date: 2016-01-06 12:06+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n"@@ -104,16 +104,16 @@ msgstr "" msgid "Parts" msgstr "" -#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2421+#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2462 #: libbirdfont/LigatureList.vala:106 libbirdfont/OtfFeatureTable.vala:181 msgid "Add" msgstr "" -#: libbirdfont/BackgroundTools.vala:122+#: libbirdfont/BackgroundTools.vala:123 msgid "Select Glyph" msgstr "" -#: libbirdfont/BackgroundTools.vala:231 libbirdfont/LoadCallback.vala:102+#: libbirdfont/BackgroundTools.vala:233 libbirdfont/LoadCallback.vala:102 #: libbirdfont/Menu.vala:50 msgid "Open" msgstr ""@@ -187,18 +187,18 @@ msgid "Thai" msgstr ""  #. / All lower case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:420+#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:433 msgid "a b c d e f g h i j k l m n o p q r s t u v w x y z" msgstr ""  #. / All upper case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:421+#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:434 msgid "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z" msgstr ""  #: libbirdfont/DescriptionDisplay.vala:66 #: libbirdfont/DescriptionDisplay.vala:277 libbirdfont/ExportSettings.vala:133-#: libbirdfont/Menu.vala:497 libbirdfont/TableLayout.vala:203+#: libbirdfont/Menu.vala:499 libbirdfont/TableLayout.vala:203 msgid "Name and Description" msgstr "" @@ -236,7 +236,7 @@ msgid "Unique Identifier" msgstr ""  #: libbirdfont/DescriptionDisplay.vala:150 libbirdfont/ImportUtils.vala:161-#: libbirdfont/Menu.vala:504 libbirdfont/Menu.vala:506+#: libbirdfont/Menu.vala:506 libbirdfont/Menu.vala:508 #: libbirdfont/VersionList.vala:265 msgid "Version" msgstr ""@@ -321,212 +321,221 @@ msgstr "" msgid "Grid Size" msgstr "" -#: libbirdfont/DrawingTools.vala:194+#: libbirdfont/DrawingTools.vala:195 msgid "Move canvas" msgstr "" -#: libbirdfont/DrawingTools.vala:202+#: libbirdfont/DrawingTools.vala:196+msgid "Press space and click to move the canvas."+msgstr ""++#: libbirdfont/DrawingTools.vala:204 msgid "Delete" msgstr "" -#: libbirdfont/DrawingTools.vala:209+#: libbirdfont/DrawingTools.vala:211 msgid "Select all points or paths" msgstr "" -#: libbirdfont/DrawingTools.vala:225 libbirdfont/Menu.vala:99+#: libbirdfont/DrawingTools.vala:227 libbirdfont/Menu.vala:99 msgid "Undo" msgstr "" -#: libbirdfont/DrawingTools.vala:232+#: libbirdfont/DrawingTools.vala:234 msgid "Insert new points on path" msgstr "" -#: libbirdfont/DrawingTools.vala:241+#: libbirdfont/DrawingTools.vala:244 msgid "Create quadratic Bézier curves" msgstr "" -#: libbirdfont/DrawingTools.vala:250+#: libbirdfont/DrawingTools.vala:245+msgid ""+"All control points will be converted to quadratic points in the TTF format."+msgstr ""++#: libbirdfont/DrawingTools.vala:255 msgid "Create cubic Bézier curves" msgstr "" -#: libbirdfont/DrawingTools.vala:259+#: libbirdfont/DrawingTools.vala:264 msgid "Quadratic path with two line handles" msgstr "" -#: libbirdfont/DrawingTools.vala:268+#: libbirdfont/DrawingTools.vala:273 msgid "Convert selected points" msgstr "" -#: libbirdfont/DrawingTools.vala:279+#: libbirdfont/DrawingTools.vala:284 msgid "X coordinate" msgstr "" -#: libbirdfont/DrawingTools.vala:323+#: libbirdfont/DrawingTools.vala:328 msgid "Y coordinate" msgstr "" -#: libbirdfont/DrawingTools.vala:366+#: libbirdfont/DrawingTools.vala:371 msgid "Rotation" msgstr "" -#: libbirdfont/DrawingTools.vala:405+#: libbirdfont/DrawingTools.vala:410 msgid "Width" msgstr "" -#: libbirdfont/DrawingTools.vala:430+#: libbirdfont/DrawingTools.vala:435 msgid "Height" msgstr "" -#: libbirdfont/DrawingTools.vala:473+#: libbirdfont/DrawingTools.vala:478 msgid "Tie curve handles for the selected edit point" msgstr "" -#: libbirdfont/DrawingTools.vala:524+#: libbirdfont/DrawingTools.vala:529 msgid "Symmetrical handles" msgstr "" -#: libbirdfont/DrawingTools.vala:554+#: libbirdfont/DrawingTools.vala:559 msgid "Convert segment to line." msgstr "" -#: libbirdfont/DrawingTools.vala:562+#: libbirdfont/DrawingTools.vala:567 msgid "Create counter from outline" msgstr "" -#: libbirdfont/DrawingTools.vala:565+#: libbirdfont/DrawingTools.vala:570 msgid "Scale object to font top/baseline" msgstr "" -#: libbirdfont/DrawingTools.vala:574+#: libbirdfont/DrawingTools.vala:579 msgid "Close path" msgstr "" -#: libbirdfont/DrawingTools.vala:596+#: libbirdfont/DrawingTools.vala:601 msgid "Move to path to the bottom of the layer" msgstr "" -#: libbirdfont/DrawingTools.vala:610+#: libbirdfont/DrawingTools.vala:615 msgid "Flip path vertically" msgstr "" -#: libbirdfont/DrawingTools.vala:618+#: libbirdfont/DrawingTools.vala:623 msgid "Flip path horizontally" msgstr "" -#: libbirdfont/DrawingTools.vala:627+#: libbirdfont/DrawingTools.vala:632 msgid "Set size for background image" msgstr "" -#: libbirdfont/DrawingTools.vala:665+#: libbirdfont/DrawingTools.vala:670 msgid "Show/hide background image" msgstr "" -#: libbirdfont/DrawingTools.vala:676+#: libbirdfont/DrawingTools.vala:681 msgid "Insert a new background image" msgstr "" -#: libbirdfont/DrawingTools.vala:690 libbirdfont/ThemeTab.vala:151+#: libbirdfont/DrawingTools.vala:695 libbirdfont/ThemeTab.vala:151 msgid "High contrast" msgstr "" -#: libbirdfont/DrawingTools.vala:704+#: libbirdfont/DrawingTools.vala:709 msgid "Set background threshold" msgstr "" -#: libbirdfont/DrawingTools.vala:723+#: libbirdfont/DrawingTools.vala:728 msgid "Amount of autotrace details" msgstr "" -#: libbirdfont/DrawingTools.vala:742+#: libbirdfont/DrawingTools.vala:747 msgid "Autotrace simplification" msgstr "" -#: libbirdfont/DrawingTools.vala:752+#: libbirdfont/DrawingTools.vala:757 msgid "Autotrace background image" msgstr "" -#: libbirdfont/DrawingTools.vala:760+#: libbirdfont/DrawingTools.vala:765 msgid "Delete background image" msgstr "" -#: libbirdfont/DrawingTools.vala:767+#: libbirdfont/DrawingTools.vala:772 msgid "Add layer" msgstr "" -#: libbirdfont/DrawingTools.vala:777+#: libbirdfont/DrawingTools.vala:782 msgid "Show layers" msgstr "" -#: libbirdfont/DrawingTools.vala:787+#: libbirdfont/DrawingTools.vala:792 msgid "Apply stroke" msgstr "" -#: libbirdfont/DrawingTools.vala:821 libbirdfont/SettingsTab.vala:34+#: libbirdfont/DrawingTools.vala:826 libbirdfont/SettingsTab.vala:34 msgid "Stroke width" msgstr "" -#: libbirdfont/DrawingTools.vala:863+#: libbirdfont/DrawingTools.vala:872 msgid "Create outline form stroke" msgstr "" -#: libbirdfont/DrawingTools.vala:872+#: libbirdfont/DrawingTools.vala:881 msgid "Butt line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:896+#: libbirdfont/DrawingTools.vala:908 msgid "Round line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:921+#: libbirdfont/DrawingTools.vala:936 msgid "Square line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:990+#: libbirdfont/DrawingTools.vala:1008 msgid "Show guidelines" msgstr "" -#: libbirdfont/DrawingTools.vala:1002+#: libbirdfont/DrawingTools.vala:1020 msgid "Show more guidelines" msgstr "" -#: libbirdfont/DrawingTools.vala:1018+#: libbirdfont/DrawingTools.vala:1036 msgid "Show guidelines at top and bottom margin" msgstr "" -#: libbirdfont/DrawingTools.vala:1042+#: libbirdfont/DrawingTools.vala:1060 msgid "Lock guides and grid" msgstr "" -#: libbirdfont/DrawingTools.vala:1084+#: libbirdfont/DrawingTools.vala:1102 msgid "Zoom Out More" msgstr "" -#: libbirdfont/DrawingTools.vala:1093+#: libbirdfont/DrawingTools.vala:1111 msgid "Show full glyph" msgstr "" -#: libbirdfont/DrawingTools.vala:1100+#: libbirdfont/DrawingTools.vala:1118 msgid "Fit in view" msgstr "" -#: libbirdfont/DrawingTools.vala:1107+#: libbirdfont/DrawingTools.vala:1125 msgid "Zoom in on background image" msgstr "" -#: libbirdfont/DrawingTools.vala:1117+#: libbirdfont/DrawingTools.vala:1135 msgid "Previous view" msgstr "" -#: libbirdfont/DrawingTools.vala:1123+#: libbirdfont/DrawingTools.vala:1141 msgid "Next view" msgstr "" -#: libbirdfont/DrawingTools.vala:1525+#: libbirdfont/DrawingTools.vala:1543 msgid "Set size for grid" msgstr ""  #: libbirdfont/ExportSettings.vala:41 libbirdfont/ExportSettings.vala:185-#: libbirdfont/Menu.vala:327+#: libbirdfont/Menu.vala:329 msgid "Export Settings" msgstr "" @@ -550,13 +559,13 @@ msgstr "" msgid "Export" msgstr "" -#: libbirdfont/ExportTool.vala:209 libbirdfont/Menu.vala:64-#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:68+#: libbirdfont/ExportTool.vala:222 libbirdfont/Menu.vala:64+#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:69 #: libbirdfont/SaveDialog.vala:38 libbirdfont/SaveDialogListener.vala:29 msgid "Save" msgstr "" -#: libbirdfont/ExportTool.vala:419+#: libbirdfont/ExportTool.vala:432 msgid "Alphabet" msgstr "" @@ -605,7 +614,7 @@ msgstr "" msgid "Save font" msgstr "" -#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:490+#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:492 #: libbirdfont/SettingsDisplay.vala:225 libbirdfont/SettingsTab.vala:31 #: libbirdfont/SettingsTab.vala:159 msgid "Settings"@@ -616,39 +625,39 @@ msgstr "" msgid "Themes" msgstr "" -#: libbirdfont/Glyph.vala:550+#: libbirdfont/Glyph.vala:602 msgid "top margin" msgstr "" -#: libbirdfont/Glyph.vala:557+#: libbirdfont/Glyph.vala:609 msgid "top" msgstr "" -#: libbirdfont/Glyph.vala:564+#: libbirdfont/Glyph.vala:616 msgid "x-height" msgstr "" -#: libbirdfont/Glyph.vala:573+#: libbirdfont/Glyph.vala:625 msgid "baseline" msgstr "" -#: libbirdfont/Glyph.vala:580+#: libbirdfont/Glyph.vala:632 msgid "bottom" msgstr "" -#: libbirdfont/Glyph.vala:586+#: libbirdfont/Glyph.vala:638 msgid "bottom margin" msgstr "" -#: libbirdfont/Glyph.vala:592+#: libbirdfont/Glyph.vala:644 msgid "left" msgstr "" -#: libbirdfont/Glyph.vala:601+#: libbirdfont/Glyph.vala:653 msgid "right" msgstr "" -#: libbirdfont/Glyph.vala:2421+#: libbirdfont/Glyph.vala:2462 msgid "Guide" msgstr "" @@ -660,6 +669,10 @@ msgstr "" msgid "Guides" msgstr "" +#: libbirdfont/Help.vala:29+msgid "BirdFont is a font editor."+msgstr ""+ #: libbirdfont/HiddenTools.vala:33 msgid "Zoom in" msgstr ""@@ -725,32 +738,38 @@ msgstr "" msgid "Glyph" msgstr "" -#: libbirdfont/KerningDisplay.vala:97 libbirdfont/KerningDisplay.vala:877+#: libbirdfont/KerningDisplay.vala:60+msgid ""+"Kerning is the process of adjusting the space between two letters. You can "+"cahnge the space between one letter and all other letters in the spacing tab."+msgstr ""++#: libbirdfont/KerningDisplay.vala:101 libbirdfont/KerningDisplay.vala:882 msgid "Kerning" msgstr "" -#: libbirdfont/KerningDisplay.vala:105+#: libbirdfont/KerningDisplay.vala:109 msgid "The current kerning class is malformed." msgstr "" -#: libbirdfont/KerningDisplay.vala:106+#: libbirdfont/KerningDisplay.vala:110 msgid "Add single characters separated by space and ranges on the form A-Z." msgstr "" -#: libbirdfont/KerningDisplay.vala:107+#: libbirdfont/KerningDisplay.vala:111 msgid "Type “space” to kern the space character and “divis” to kern -." msgstr "" -#: libbirdfont/KerningDisplay.vala:678 libbirdfont/OverviewTools.vala:78+#: libbirdfont/KerningDisplay.vala:683 libbirdfont/OverviewTools.vala:78 msgid "Unicode" msgstr "" -#: libbirdfont/KerningDisplay.vala:678+#: libbirdfont/KerningDisplay.vala:683 msgid "Insert" msgstr "" -#: libbirdfont/KerningDisplay.vala:877 libbirdfont/MainWindow.vala:235-#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:208+#: libbirdfont/KerningDisplay.vala:882 libbirdfont/MainWindow.vala:241+#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:231 msgid "Close" msgstr "" @@ -766,11 +785,11 @@ msgstr "" msgid "Kerning class" msgstr "" -#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:144+#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:166 #: libbirdfont/Ligatures.vala:118 libbirdfont/Ligatures.vala:141 #: libbirdfont/Ligatures.vala:164 libbirdfont/Ligatures.vala:196 #: libbirdfont/SpacingClass.vala:45 libbirdfont/SpacingTab.vala:232-#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:208+#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:231 #: libbirdfont/Theme.vala:687 msgid "Set" msgstr ""@@ -835,7 +854,11 @@ msgstr "" msgid "Character Set" msgstr "" -#: libbirdfont/LayerLabel.vala:144+#: libbirdfont/LayerLabel.vala:101+msgid "Hide the layer."+msgstr ""++#: libbirdfont/LayerLabel.vala:166 msgid "Layer" msgstr "" @@ -876,7 +899,7 @@ msgid "Contextual Substitutions" msgstr ""  #: libbirdfont/LigatureList.vala:126 libbirdfont/LigatureList.vala:140-#: libbirdfont/Menu.vala:445+#: libbirdfont/Menu.vala:447 msgid "Ligatures" msgstr "" @@ -920,7 +943,7 @@ msgstr "" msgid "You need an older version of Birdfont to open it." msgstr "" -#: libbirdfont/MainWindow.vala:235+#: libbirdfont/MainWindow.vala:241 msgid "Glyph sequence" msgstr "" @@ -980,8 +1003,8 @@ msgstr "" msgid "Move To Baseline" msgstr "" -#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:250-#: libbirdfont/OverView.vala:269 libbirdfont/OverviewTools.vala:154+#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:257+#: libbirdfont/OverView.vala:276 libbirdfont/OverviewTools.vala:154 msgid "Search" msgstr "" @@ -1053,102 +1076,106 @@ msgstr "" msgid "Export Glyph as SVG" msgstr "" -#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:303+#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:304 msgid "Import SVG file" msgstr "" -#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:313 msgid "Import SVG folder" msgstr "" -#: libbirdfont/Menu.vala:303 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:304 libbirdfont/Menu.vala:313 msgid "color" msgstr "" -#: libbirdfont/Menu.vala:320+#: libbirdfont/Menu.vala:322 msgid "Import Background Image" msgstr "" -#: libbirdfont/Menu.vala:334 libbirdfont/Preview.vala:27+#: libbirdfont/Menu.vala:336 libbirdfont/Preview.vala:27 msgid "Preview" msgstr "" -#: libbirdfont/Menu.vala:342+#: libbirdfont/Menu.vala:344 msgid "Tab" msgstr "" -#: libbirdfont/Menu.vala:348+#: libbirdfont/Menu.vala:350 msgid "Next Tab" msgstr "" -#: libbirdfont/Menu.vala:355+#: libbirdfont/Menu.vala:357 msgid "Previous Tab" msgstr "" -#: libbirdfont/Menu.vala:362+#: libbirdfont/Menu.vala:364 msgid "Close Tab" msgstr "" -#: libbirdfont/Menu.vala:369+#: libbirdfont/Menu.vala:371 msgid "Close All Tabs" msgstr "" -#: libbirdfont/Menu.vala:377+#: libbirdfont/Menu.vala:379 msgid "Spacing and Kerning" msgstr "" -#: libbirdfont/Menu.vala:383+#: libbirdfont/Menu.vala:385 msgid "Show Spacing Tab" msgstr "" -#: libbirdfont/Menu.vala:390+#: libbirdfont/Menu.vala:392 msgid "Show Kerning Tab" msgstr "" -#: libbirdfont/Menu.vala:397+#: libbirdfont/Menu.vala:399 msgid "List Kerning Pairs" msgstr "" -#: libbirdfont/Menu.vala:404 libbirdfont/SpacingClassTab.vala:80+#: libbirdfont/Menu.vala:406 libbirdfont/SpacingClassTab.vala:80 msgid "Spacing Classes" msgstr "" -#: libbirdfont/Menu.vala:411+#: libbirdfont/Menu.vala:413 msgid "Select Next Kerning Pair" msgstr "" -#: libbirdfont/Menu.vala:420+#: libbirdfont/Menu.vala:422 msgid "Select Previous Kerning Pair" msgstr "" -#: libbirdfont/Menu.vala:429+#: libbirdfont/Menu.vala:431 msgid "Load Kerning Strings" msgstr "" -#: libbirdfont/Menu.vala:436+#: libbirdfont/Menu.vala:438 msgid "Reload Kerning Strings" msgstr "" -#: libbirdfont/Menu.vala:451+#: libbirdfont/Menu.vala:453 msgid "Show Ligatures" msgstr "" -#: libbirdfont/Menu.vala:458+#: libbirdfont/Menu.vala:460 msgid "Add Ligature" msgstr "" -#: libbirdfont/Menu.vala:467+#: libbirdfont/Menu.vala:469 msgid "Git" msgstr "" -#: libbirdfont/Menu.vala:473+#: libbirdfont/Menu.vala:475 msgid "Save As .bfp" msgstr "" -#: libbirdfont/Menu.vala:482 libbirdfont/OverView.vala:471+#: libbirdfont/Menu.vala:484 libbirdfont/OverView.vala:478 msgid "Overview" msgstr "" +#: libbirdfont/Menu.vala:513+msgid "Help"+msgstr ""+ #: libbirdfont/MenuItem.vala:82 msgid "UP" msgstr ""@@ -1230,15 +1257,11 @@ msgstr "" msgid "Swashes" msgstr "" -#: libbirdfont/OverView.vala:250 libbirdfont/OverView.vala:269+#: libbirdfont/OverView.vala:257 libbirdfont/OverView.vala:276 msgid "Filter" msgstr "" -#: libbirdfont/OverView.vala:673-msgid "No glyphs in this view."-msgstr ""--#: libbirdfont/OverView.vala:1484+#: libbirdfont/OverView.vala:1498 msgid "See also:" msgstr "" @@ -1415,10 +1438,6 @@ msgstr "" msgid "Right" msgstr "" -#: libbirdfont/SvgParser.vala:62 libbirdfont/SvgParser.vala:121-msgid "Import"-msgstr ""- #: libbirdfont/Theme.vala:421 msgid "Canvas Background" msgstr ""@@ -1703,7 +1722,7 @@ msgstr "" msgid "Color" msgstr "" -#: libbirdfont/ToolItem.vala:44+#: libbirdfont/ToolItem.vala:66 msgid "Shift" msgstr "" diff --git a/po/cs.po b/po/cs.poindex 3ae69e7..9c42b65 100644--- a/po/cs.po+++ b/po/cs.po@@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n"-"POT-Creation-Date: 2015-12-22 20:35+0100\n"+"POT-Creation-Date: 2016-01-06 12:06+0100\n" "PO-Revision-Date: 2015-11-03 22:37+0000\n" "Last-Translator: fri <pavelfric@yahoo.com>\n" "Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"@@ -106,16 +106,16 @@ msgstr "Soubory" msgid "Parts" msgstr "Části" -#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2421+#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2462 #: libbirdfont/LigatureList.vala:106 libbirdfont/OtfFeatureTable.vala:181 msgid "Add" msgstr "Přidat" -#: libbirdfont/BackgroundTools.vala:122+#: libbirdfont/BackgroundTools.vala:123 msgid "Select Glyph" msgstr "Vybrat znak" -#: libbirdfont/BackgroundTools.vala:231 libbirdfont/LoadCallback.vala:102+#: libbirdfont/BackgroundTools.vala:233 libbirdfont/LoadCallback.vala:102 #: libbirdfont/Menu.vala:50 msgid "Open" msgstr "Otevřít"@@ -189,14 +189,14 @@ msgid "Thai" msgstr "Thajština"  #. / All lower case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:420+#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:433 msgid "a b c d e f g h i j k l m n o p q r s t u v w x y z" msgstr "" "a á b c č d ď e é ě f g h i í j k l m n ň o ó p q r ř s š t ť u ú ů v w x y " "ý z ž"  #. / All upper case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:421+#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:434 msgid "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z" msgstr "" "A Á B C Č D Ď E É Ě F G H I Í J K L M N Ň O Ó P Q R Ř S Š T Ť U Ú Ů V W X Y "@@ -204,7 +204,7 @@ msgstr ""  #: libbirdfont/DescriptionDisplay.vala:66 #: libbirdfont/DescriptionDisplay.vala:277 libbirdfont/ExportSettings.vala:133-#: libbirdfont/Menu.vala:497 libbirdfont/TableLayout.vala:203+#: libbirdfont/Menu.vala:499 libbirdfont/TableLayout.vala:203 msgid "Name and Description" msgstr "Název a popis" @@ -242,7 +242,7 @@ msgid "Unique Identifier" msgstr "Jedinečný identifikátor"  #: libbirdfont/DescriptionDisplay.vala:150 libbirdfont/ImportUtils.vala:161-#: libbirdfont/Menu.vala:504 libbirdfont/Menu.vala:506+#: libbirdfont/Menu.vala:506 libbirdfont/Menu.vala:508 #: libbirdfont/VersionList.vala:265 msgid "Version" msgstr "Verze"@@ -327,212 +327,221 @@ msgstr "Pomocné linky a mřížka" msgid "Grid Size" msgstr "Velikost mřížky" -#: libbirdfont/DrawingTools.vala:194+#: libbirdfont/DrawingTools.vala:195 msgid "Move canvas" msgstr "Posunout pracovní plochu" -#: libbirdfont/DrawingTools.vala:202+#: libbirdfont/DrawingTools.vala:196+msgid "Press space and click to move the canvas."+msgstr ""++#: libbirdfont/DrawingTools.vala:204 msgid "Delete" msgstr "Smazat" -#: libbirdfont/DrawingTools.vala:209+#: libbirdfont/DrawingTools.vala:211 msgid "Select all points or paths" msgstr "Vybrat všechny body nebo cesty" -#: libbirdfont/DrawingTools.vala:225 libbirdfont/Menu.vala:99+#: libbirdfont/DrawingTools.vala:227 libbirdfont/Menu.vala:99 msgid "Undo" msgstr "Zpět" -#: libbirdfont/DrawingTools.vala:232+#: libbirdfont/DrawingTools.vala:234 msgid "Insert new points on path" msgstr "Vložit nové body do cesty" -#: libbirdfont/DrawingTools.vala:241+#: libbirdfont/DrawingTools.vala:244 msgid "Create quadratic Bézier curves" msgstr "Vytvářet kvadratické Bézierovy křivky" -#: libbirdfont/DrawingTools.vala:250+#: libbirdfont/DrawingTools.vala:245+msgid ""+"All control points will be converted to quadratic points in the TTF format."+msgstr ""++#: libbirdfont/DrawingTools.vala:255 msgid "Create cubic Bézier curves" msgstr "Vytvářet kubické Bézierovy křivky" -#: libbirdfont/DrawingTools.vala:259+#: libbirdfont/DrawingTools.vala:264 msgid "Quadratic path with two line handles" msgstr "Kvadratická cesta se dvěma úchopy" -#: libbirdfont/DrawingTools.vala:268+#: libbirdfont/DrawingTools.vala:273 msgid "Convert selected points" msgstr "Převést vybrané body" -#: libbirdfont/DrawingTools.vala:279+#: libbirdfont/DrawingTools.vala:284 msgid "X coordinate" msgstr "Souřadnice x" -#: libbirdfont/DrawingTools.vala:323+#: libbirdfont/DrawingTools.vala:328 msgid "Y coordinate" msgstr "Souřadnice y" -#: libbirdfont/DrawingTools.vala:366+#: libbirdfont/DrawingTools.vala:371 msgid "Rotation" msgstr "Otočit" -#: libbirdfont/DrawingTools.vala:405+#: libbirdfont/DrawingTools.vala:410 msgid "Width" msgstr "Šířka" -#: libbirdfont/DrawingTools.vala:430+#: libbirdfont/DrawingTools.vala:435 msgid "Height" msgstr "Výška" -#: libbirdfont/DrawingTools.vala:473+#: libbirdfont/DrawingTools.vala:478 msgid "Tie curve handles for the selected edit point" msgstr "Svázat úchopy křivky vybraných bodů úprav" -#: libbirdfont/DrawingTools.vala:524+#: libbirdfont/DrawingTools.vala:529 msgid "Symmetrical handles" msgstr "Souměrné úchopy" -#: libbirdfont/DrawingTools.vala:554+#: libbirdfont/DrawingTools.vala:559 msgid "Convert segment to line." msgstr "Převést část na čáru." -#: libbirdfont/DrawingTools.vala:562+#: libbirdfont/DrawingTools.vala:567 msgid "Create counter from outline" msgstr "Obrátit cestu" -#: libbirdfont/DrawingTools.vala:565+#: libbirdfont/DrawingTools.vala:570 msgid "Scale object to font top/baseline" msgstr "" -#: libbirdfont/DrawingTools.vala:574+#: libbirdfont/DrawingTools.vala:579 msgid "Close path" msgstr "Uzavřít cestu" -#: libbirdfont/DrawingTools.vala:596+#: libbirdfont/DrawingTools.vala:601 msgid "Move to path to the bottom of the layer" msgstr "Přesunout cestu do spodní vrstvy" -#: libbirdfont/DrawingTools.vala:610+#: libbirdfont/DrawingTools.vala:615 msgid "Flip path vertically" msgstr "Zrcadlit svisle" -#: libbirdfont/DrawingTools.vala:618+#: libbirdfont/DrawingTools.vala:623 msgid "Flip path horizontally" msgstr "Zrcadlit vodorovně" -#: libbirdfont/DrawingTools.vala:627+#: libbirdfont/DrawingTools.vala:632 msgid "Set size for background image" msgstr "Nastavit velikost obrázku pozadí" -#: libbirdfont/DrawingTools.vala:665+#: libbirdfont/DrawingTools.vala:670 msgid "Show/hide background image" msgstr "Ukázat/Skrýt obrázek pozadí" -#: libbirdfont/DrawingTools.vala:676+#: libbirdfont/DrawingTools.vala:681 msgid "Insert a new background image" msgstr "Vložit nový obrázek pozadí" -#: libbirdfont/DrawingTools.vala:690 libbirdfont/ThemeTab.vala:151+#: libbirdfont/DrawingTools.vala:695 libbirdfont/ThemeTab.vala:151 msgid "High contrast" msgstr "Vysoký kontrast" -#: libbirdfont/DrawingTools.vala:704+#: libbirdfont/DrawingTools.vala:709 msgid "Set background threshold" msgstr "Nastavit práh pro pozadí" -#: libbirdfont/DrawingTools.vala:723+#: libbirdfont/DrawingTools.vala:728 msgid "Amount of autotrace details" msgstr "Podrobnost automatického obkreslení" -#: libbirdfont/DrawingTools.vala:742+#: libbirdfont/DrawingTools.vala:747 msgid "Autotrace simplification" msgstr "Zjednodušení automatického obkreslení" -#: libbirdfont/DrawingTools.vala:752+#: libbirdfont/DrawingTools.vala:757 msgid "Autotrace background image" msgstr "Automaticky obkreslit obrázek pozadí" -#: libbirdfont/DrawingTools.vala:760+#: libbirdfont/DrawingTools.vala:765 msgid "Delete background image" msgstr "Smazat obrázek pozadí" -#: libbirdfont/DrawingTools.vala:767+#: libbirdfont/DrawingTools.vala:772 msgid "Add layer" msgstr "Přidat vrstvu" -#: libbirdfont/DrawingTools.vala:777+#: libbirdfont/DrawingTools.vala:782 msgid "Show layers" msgstr "Ukázat vrstvy" -#: libbirdfont/DrawingTools.vala:787+#: libbirdfont/DrawingTools.vala:792 msgid "Apply stroke" msgstr "Použít tah" -#: libbirdfont/DrawingTools.vala:821 libbirdfont/SettingsTab.vala:34+#: libbirdfont/DrawingTools.vala:826 libbirdfont/SettingsTab.vala:34 msgid "Stroke width" msgstr "Šířka tahu" -#: libbirdfont/DrawingTools.vala:863+#: libbirdfont/DrawingTools.vala:872 msgid "Create outline form stroke" msgstr "Vytvořit obrys z tahu" -#: libbirdfont/DrawingTools.vala:872+#: libbirdfont/DrawingTools.vala:881 msgid "Butt line cap" msgstr "Nepřesahující konec" -#: libbirdfont/DrawingTools.vala:896+#: libbirdfont/DrawingTools.vala:908 msgid "Round line cap" msgstr "Zaoblený konec" -#: libbirdfont/DrawingTools.vala:921+#: libbirdfont/DrawingTools.vala:936 msgid "Square line cap" msgstr "Čtvercový konec" -#: libbirdfont/DrawingTools.vala:990+#: libbirdfont/DrawingTools.vala:1008 msgid "Show guidelines" msgstr "Zobrazit pomocné linky" -#: libbirdfont/DrawingTools.vala:1002+#: libbirdfont/DrawingTools.vala:1020 msgid "Show more guidelines" msgstr "Ukázat více pomocných linek" -#: libbirdfont/DrawingTools.vala:1018+#: libbirdfont/DrawingTools.vala:1036 msgid "Show guidelines at top and bottom margin" msgstr "Zobrazit pomocné linky horního a dolního okraje" -#: libbirdfont/DrawingTools.vala:1042+#: libbirdfont/DrawingTools.vala:1060 msgid "Lock guides and grid" msgstr "Zamknout vodítka a mřížku" -#: libbirdfont/DrawingTools.vala:1084+#: libbirdfont/DrawingTools.vala:1102 msgid "Zoom Out More" msgstr "Oddálit více" -#: libbirdfont/DrawingTools.vala:1093+#: libbirdfont/DrawingTools.vala:1111 msgid "Show full glyph" msgstr "Ukázat celý znak" -#: libbirdfont/DrawingTools.vala:1100+#: libbirdfont/DrawingTools.vala:1118 msgid "Fit in view" msgstr "Přizpůsobit velikosti okna" -#: libbirdfont/DrawingTools.vala:1107+#: libbirdfont/DrawingTools.vala:1125 msgid "Zoom in on background image" msgstr "Přiblížit na obrázek pozadí" -#: libbirdfont/DrawingTools.vala:1117+#: libbirdfont/DrawingTools.vala:1135 msgid "Previous view" msgstr "Předchozí zobrazení" -#: libbirdfont/DrawingTools.vala:1123+#: libbirdfont/DrawingTools.vala:1141 msgid "Next view" msgstr "Další zobrazení" -#: libbirdfont/DrawingTools.vala:1525+#: libbirdfont/DrawingTools.vala:1543 msgid "Set size for grid" msgstr "Nastavit velikost mřížky"  #: libbirdfont/ExportSettings.vala:41 libbirdfont/ExportSettings.vala:185-#: libbirdfont/Menu.vala:327+#: libbirdfont/Menu.vala:329 msgid "Export Settings" msgstr "Nastavení ukládání" @@ -556,13 +565,13 @@ msgstr "Formáty" msgid "Export" msgstr "Vyvést" -#: libbirdfont/ExportTool.vala:209 libbirdfont/Menu.vala:64-#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:68+#: libbirdfont/ExportTool.vala:222 libbirdfont/Menu.vala:64+#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:69 #: libbirdfont/SaveDialog.vala:38 libbirdfont/SaveDialogListener.vala:29 msgid "Save" msgstr "Uložit" -#: libbirdfont/ExportTool.vala:419+#: libbirdfont/ExportTool.vala:432 msgid "Alphabet" msgstr "Abeceda" @@ -611,7 +620,7 @@ msgstr "Otevřít písmo" msgid "Save font" msgstr "Uložit písmo" -#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:490+#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:492 #: libbirdfont/SettingsDisplay.vala:225 libbirdfont/SettingsTab.vala:31 #: libbirdfont/SettingsTab.vala:159 msgid "Settings"@@ -622,39 +631,39 @@ msgstr "Nastavení" msgid "Themes" msgstr "Motivy" -#: libbirdfont/Glyph.vala:550+#: libbirdfont/Glyph.vala:602 msgid "top margin" msgstr "Horní okraj" -#: libbirdfont/Glyph.vala:557+#: libbirdfont/Glyph.vala:609 msgid "top" msgstr "nahoře" -#: libbirdfont/Glyph.vala:564+#: libbirdfont/Glyph.vala:616 msgid "x-height" msgstr "výška x" -#: libbirdfont/Glyph.vala:573+#: libbirdfont/Glyph.vala:625 msgid "baseline" msgstr "účaří" -#: libbirdfont/Glyph.vala:580+#: libbirdfont/Glyph.vala:632 msgid "bottom" msgstr "dole" -#: libbirdfont/Glyph.vala:586+#: libbirdfont/Glyph.vala:638 msgid "bottom margin" msgstr "dolní okraj" -#: libbirdfont/Glyph.vala:592+#: libbirdfont/Glyph.vala:644 msgid "left" msgstr "vlevo" -#: libbirdfont/Glyph.vala:601+#: libbirdfont/Glyph.vala:653 msgid "right" msgstr "vpravo" -#: libbirdfont/Glyph.vala:2421+#: libbirdfont/Glyph.vala:2462 msgid "Guide" msgstr "Vodítko" @@ -666,6 +675,10 @@ msgstr "Ukázat mřížku" msgid "Guides" msgstr "Vodítka" +#: libbirdfont/Help.vala:29+msgid "BirdFont is a font editor."+msgstr ""+ #: libbirdfont/HiddenTools.vala:33 msgid "Zoom in" msgstr "Přiblížit"@@ -731,35 +744,41 @@ msgstr "do" msgid "Glyph" msgstr "Znak" -#: libbirdfont/KerningDisplay.vala:97 libbirdfont/KerningDisplay.vala:877+#: libbirdfont/KerningDisplay.vala:60+msgid ""+"Kerning is the process of adjusting the space between two letters. You can "+"cahnge the space between one letter and all other letters in the spacing tab."+msgstr ""++#: libbirdfont/KerningDisplay.vala:101 libbirdfont/KerningDisplay.vala:882 msgid "Kerning" msgstr "Podřezávání" -#: libbirdfont/KerningDisplay.vala:105+#: libbirdfont/KerningDisplay.vala:109 msgid "The current kerning class is malformed." msgstr "Nynější třída podřezávání je chybná." -#: libbirdfont/KerningDisplay.vala:106+#: libbirdfont/KerningDisplay.vala:110 msgid "Add single characters separated by space and ranges on the form A-Z." msgstr "" "Přidat jednotlivé znaky oddělené mezerou nebo rozsahy používající formát A-Z." -#: libbirdfont/KerningDisplay.vala:107+#: libbirdfont/KerningDisplay.vala:111 msgid "Type “space” to kern the space character and “divis” to kern -." msgstr "" "Pro podřezání (vyrovnání) znaku mezery stiskněte „mezerník“ a pro podřezání " "(vyrovnání) znaku spojovníku (-) pak klávesu pro „divis“." -#: libbirdfont/KerningDisplay.vala:678 libbirdfont/OverviewTools.vala:78+#: libbirdfont/KerningDisplay.vala:683 libbirdfont/OverviewTools.vala:78 msgid "Unicode" msgstr "Unicode" -#: libbirdfont/KerningDisplay.vala:678+#: libbirdfont/KerningDisplay.vala:683 msgid "Insert" msgstr "Vložit" -#: libbirdfont/KerningDisplay.vala:877 libbirdfont/MainWindow.vala:235-#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:208+#: libbirdfont/KerningDisplay.vala:882 libbirdfont/MainWindow.vala:241+#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:231 msgid "Close" msgstr "Zavřít" @@ -775,11 +794,11 @@ msgstr "Nevytvořeny žádné dvojice podřezávání" msgid "Kerning class" msgstr "Třída podřezávání" -#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:144+#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:166 #: libbirdfont/Ligatures.vala:118 libbirdfont/Ligatures.vala:141 #: libbirdfont/Ligatures.vala:164 libbirdfont/Ligatures.vala:196 #: libbirdfont/SpacingClass.vala:45 libbirdfont/SpacingTab.vala:232-#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:208+#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:231 #: libbirdfont/Theme.vala:687 msgid "Set" msgstr "Nastavit"@@ -844,7 +863,11 @@ msgstr "Znakové sady" msgid "Character Set" msgstr "Znaková sada" -#: libbirdfont/LayerLabel.vala:144+#: libbirdfont/LayerLabel.vala:101+msgid "Hide the layer."+msgstr ""++#: libbirdfont/LayerLabel.vala:166 msgid "Layer" msgstr "Vrstva" @@ -885,7 +908,7 @@ msgid "Contextual Substitutions" msgstr "Náhrady vyplývající ze souvislostí"  #: libbirdfont/LigatureList.vala:126 libbirdfont/LigatureList.vala:140-#: libbirdfont/Menu.vala:445+#: libbirdfont/Menu.vala:447 msgid "Ligatures" msgstr "Slitky" @@ -929,7 +952,7 @@ msgstr "Toto písmo bylo uděláno ve staré verzi Birdfontu." msgid "You need an older version of Birdfont to open it." msgstr "K jeho otevření potřebujete starší verzi Birdfontu." -#: libbirdfont/MainWindow.vala:235+#: libbirdfont/MainWindow.vala:241 msgid "Glyph sequence" msgstr "Pořadí znaků" @@ -989,8 +1012,8 @@ msgstr "Vybrat všechny znaky" msgid "Move To Baseline" msgstr "Přesunout na účaří" -#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:250-#: libbirdfont/OverView.vala:269 libbirdfont/OverviewTools.vala:154+#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:257+#: libbirdfont/OverView.vala:276 libbirdfont/OverviewTools.vala:154 msgid "Search" msgstr "Hledat" @@ -1062,102 +1085,106 @@ msgstr "Vyvést písma" msgid "Export Glyph as SVG" msgstr "Vyvést znak jako SVG" -#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:303+#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:304 msgid "Import SVG file" msgstr "Zavést soubor SVG" -#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:313 msgid "Import SVG folder" msgstr "Zavést složku SVG" -#: libbirdfont/Menu.vala:303 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:304 libbirdfont/Menu.vala:313 msgid "color" msgstr "" -#: libbirdfont/Menu.vala:320+#: libbirdfont/Menu.vala:322 msgid "Import Background Image" msgstr "Zavést obrázek pozadí" -#: libbirdfont/Menu.vala:334 libbirdfont/Preview.vala:27+#: libbirdfont/Menu.vala:336 libbirdfont/Preview.vala:27 msgid "Preview" msgstr "Náhled" -#: libbirdfont/Menu.vala:342+#: libbirdfont/Menu.vala:344 msgid "Tab" msgstr "Karta" -#: libbirdfont/Menu.vala:348+#: libbirdfont/Menu.vala:350 msgid "Next Tab" msgstr "Další karta" -#: libbirdfont/Menu.vala:355+#: libbirdfont/Menu.vala:357 msgid "Previous Tab" msgstr "Předchozí karta" -#: libbirdfont/Menu.vala:362+#: libbirdfont/Menu.vala:364 msgid "Close Tab" msgstr "Zavřít kartu" -#: libbirdfont/Menu.vala:369+#: libbirdfont/Menu.vala:371 msgid "Close All Tabs" msgstr "Zavřít všechny karty" -#: libbirdfont/Menu.vala:377+#: libbirdfont/Menu.vala:379 msgid "Spacing and Kerning" msgstr "Rozestupy a podřezávání" -#: libbirdfont/Menu.vala:383+#: libbirdfont/Menu.vala:385 msgid "Show Spacing Tab" msgstr "Ukázat kartu prostrkávání (rozestupů)" -#: libbirdfont/Menu.vala:390+#: libbirdfont/Menu.vala:392 msgid "Show Kerning Tab" msgstr "Ukázat kartu podřezávání (vyrovnání)" -#: libbirdfont/Menu.vala:397+#: libbirdfont/Menu.vala:399 msgid "List Kerning Pairs" msgstr "Vypsat dvojice podřezávání (vyrovnání)" -#: libbirdfont/Menu.vala:404 libbirdfont/SpacingClassTab.vala:80+#: libbirdfont/Menu.vala:406 libbirdfont/SpacingClassTab.vala:80 msgid "Spacing Classes" msgstr "Třídy prostrkávání (rozestupů)" -#: libbirdfont/Menu.vala:411+#: libbirdfont/Menu.vala:413 msgid "Select Next Kerning Pair" msgstr "Vybrat další dvojici podřezávání (vyrovnání)" -#: libbirdfont/Menu.vala:420+#: libbirdfont/Menu.vala:422 msgid "Select Previous Kerning Pair" msgstr "Vybrat předchozí dvojici podřezávání (vyrovnání)" -#: libbirdfont/Menu.vala:429+#: libbirdfont/Menu.vala:431 msgid "Load Kerning Strings" msgstr "Nahrát podřezávací řetězce" -#: libbirdfont/Menu.vala:436+#: libbirdfont/Menu.vala:438 msgid "Reload Kerning Strings" msgstr "Nahrát podřezávací řetězce znovu" -#: libbirdfont/Menu.vala:451+#: libbirdfont/Menu.vala:453 msgid "Show Ligatures" msgstr "Ukázat slitky" -#: libbirdfont/Menu.vala:458+#: libbirdfont/Menu.vala:460 msgid "Add Ligature" msgstr "Přidat slitek" -#: libbirdfont/Menu.vala:467+#: libbirdfont/Menu.vala:469 msgid "Git" msgstr "Git" -#: libbirdfont/Menu.vala:473+#: libbirdfont/Menu.vala:475 msgid "Save As .bfp" msgstr "Uložit jako BFP" -#: libbirdfont/Menu.vala:482 libbirdfont/OverView.vala:471+#: libbirdfont/Menu.vala:484 libbirdfont/OverView.vala:478 msgid "Overview" msgstr "Přehled" +#: libbirdfont/Menu.vala:513+msgid "Help"+msgstr ""+ #: libbirdfont/MenuItem.vala:82 msgid "UP" msgstr "NAHORU"@@ -1239,15 +1266,11 @@ msgstr "Velká písmena na kapitálky" msgid "Swashes" msgstr "Ozdobná písmena" -#: libbirdfont/OverView.vala:250 libbirdfont/OverView.vala:269+#: libbirdfont/OverView.vala:257 libbirdfont/OverView.vala:276 msgid "Filter" msgstr "Filtr" -#: libbirdfont/OverView.vala:673-msgid "No glyphs in this view."-msgstr "Žádné znaky v tomto zobrazení."--#: libbirdfont/OverView.vala:1484+#: libbirdfont/OverView.vala:1498 msgid "See also:" msgstr "Další podrobnosti:" @@ -1424,10 +1447,6 @@ msgstr "Vlevo" msgid "Right" msgstr "Vpravo" -#: libbirdfont/SvgParser.vala:62 libbirdfont/SvgParser.vala:121-msgid "Import"-msgstr "Zavést"- #: libbirdfont/Theme.vala:421 msgid "Canvas Background" msgstr "Pozadí plátna"@@ -1712,7 +1731,7 @@ msgstr "Vlastní" msgid "Color" msgstr "Barva" -#: libbirdfont/ToolItem.vala:44+#: libbirdfont/ToolItem.vala:66 msgid "Shift" msgstr "Posun" @@ -1756,6 +1775,12 @@ msgstr "Neznámý formát souboru." msgid "Writing" msgstr "Zapisuje se" +#~ msgid "No glyphs in this view."+#~ msgstr "Žádné znaky v tomto zobrazení."++#~ msgid "Import"+#~ msgstr "Zavést"+ #~ msgid "Full name (name and style)" #~ msgstr "Celý název (název a styl)" diff --git a/po/de.po b/po/de.poindex a13f96d..09b6224 100644--- a/po/de.po+++ b/po/de.po@@ -6,9 +6,9 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n"-"POT-Creation-Date: 2015-12-22 20:35+0100\n"-"PO-Revision-Date: 2015-12-06 17:51+0000\n"-"Last-Translator: killertomatoketchup <mumpitzmanfred@gmail.com>\n"+"POT-Creation-Date: 2016-01-06 12:06+0100\n"+"PO-Revision-Date: 2015-12-26 00:03+0000\n"+"Last-Translator: Anonymous Pootle User\n" "Language-Team: LANGUAGE <LL@li.org>\n" "Language: de\n" "MIME-Version: 1.0\n"@@ -16,7 +16,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.5.1-rc1\n"-"X-POOTLE-MTIME: 1449424312.000000\n"+"X-POOTLE-MTIME: 1451088214.000000\n"  #: libbirdfont/Argument.vala:277 msgid "Usage"@@ -105,16 +105,16 @@ msgstr "Dateien" msgid "Parts" msgstr "Teile" -#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2421+#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2462 #: libbirdfont/LigatureList.vala:106 libbirdfont/OtfFeatureTable.vala:181 msgid "Add" msgstr "Hinzufügen" -#: libbirdfont/BackgroundTools.vala:122+#: libbirdfont/BackgroundTools.vala:123 msgid "Select Glyph" msgstr "Glyphe auswählen" -#: libbirdfont/BackgroundTools.vala:231 libbirdfont/LoadCallback.vala:102+#: libbirdfont/BackgroundTools.vala:233 libbirdfont/LoadCallback.vala:102 #: libbirdfont/Menu.vala:50 msgid "Open" msgstr "Öffnen"@@ -188,18 +188,18 @@ msgid "Thai" msgstr "Thai"  #. / All lower case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:420+#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:433 msgid "a b c d e f g h i j k l m n o p q r s t u v w x y z" msgstr "a ä b c d e f g h i j k l m n o ö p q r s ß t u ü v w x y z"  #. / All upper case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:421+#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:434 msgid "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z" msgstr "A Ä B C D E F G H I J K L M O Ö P Q R S T U Ü V W X Y Z"  #: libbirdfont/DescriptionDisplay.vala:66 #: libbirdfont/DescriptionDisplay.vala:277 libbirdfont/ExportSettings.vala:133-#: libbirdfont/Menu.vala:497 libbirdfont/TableLayout.vala:203+#: libbirdfont/Menu.vala:499 libbirdfont/TableLayout.vala:203 msgid "Name and Description" msgstr "Name und Beschreibung" @@ -237,7 +237,7 @@ msgid "Unique Identifier" msgstr "Eindeutige Kennung"  #: libbirdfont/DescriptionDisplay.vala:150 libbirdfont/ImportUtils.vala:161-#: libbirdfont/Menu.vala:504 libbirdfont/Menu.vala:506+#: libbirdfont/Menu.vala:506 libbirdfont/Menu.vala:508 #: libbirdfont/VersionList.vala:265 msgid "Version" msgstr "Version"@@ -322,213 +322,222 @@ msgstr "Leitlinien & Gitter" msgid "Grid Size" msgstr "Gittergröße" -#: libbirdfont/DrawingTools.vala:194+#: libbirdfont/DrawingTools.vala:195 msgid "Move canvas" msgstr "Arbeitsfläche verschieben" -#: libbirdfont/DrawingTools.vala:202+#: libbirdfont/DrawingTools.vala:196+msgid "Press space and click to move the canvas."+msgstr ""++#: libbirdfont/DrawingTools.vala:204 msgid "Delete" msgstr "Löschen" -#: libbirdfont/DrawingTools.vala:209+#: libbirdfont/DrawingTools.vala:211 msgid "Select all points or paths" msgstr "Wähle alle Punkte oder Pfade" -#: libbirdfont/DrawingTools.vala:225 libbirdfont/Menu.vala:99+#: libbirdfont/DrawingTools.vala:227 libbirdfont/Menu.vala:99 msgid "Undo" msgstr "Rückgängig" -#: libbirdfont/DrawingTools.vala:232+#: libbirdfont/DrawingTools.vala:234 msgid "Insert new points on path" msgstr "Füge zusätzliche Punkte im Linienzug Pfad ein" -#: libbirdfont/DrawingTools.vala:241+#: libbirdfont/DrawingTools.vala:244 msgid "Create quadratic Bézier curves" msgstr "Erstelle quadratische Bézierkurven" -#: libbirdfont/DrawingTools.vala:250+#: libbirdfont/DrawingTools.vala:245+msgid ""+"All control points will be converted to quadratic points in the TTF format."+msgstr ""++#: libbirdfont/DrawingTools.vala:255 msgid "Create cubic Bézier curves" msgstr "Erstelle kubische Bézierkurven" -#: libbirdfont/DrawingTools.vala:259+#: libbirdfont/DrawingTools.vala:264 msgid "Quadratic path with two line handles" msgstr "Quadratischer Pfad mit zwei Griffpunkten" -#: libbirdfont/DrawingTools.vala:268+#: libbirdfont/DrawingTools.vala:273 msgid "Convert selected points" msgstr "Ausgewählte Punkte umwandeln" -#: libbirdfont/DrawingTools.vala:279+#: libbirdfont/DrawingTools.vala:284 msgid "X coordinate" msgstr "X-Koordinate" -#: libbirdfont/DrawingTools.vala:323+#: libbirdfont/DrawingTools.vala:328 msgid "Y coordinate" msgstr "Y-Koordinate" -#: libbirdfont/DrawingTools.vala:366+#: libbirdfont/DrawingTools.vala:371 msgid "Rotation" msgstr "Drehen" -#: libbirdfont/DrawingTools.vala:405+#: libbirdfont/DrawingTools.vala:410 msgid "Width" msgstr "Breite" -#: libbirdfont/DrawingTools.vala:430+#: libbirdfont/DrawingTools.vala:435 msgid "Height" msgstr "Höhe" -#: libbirdfont/DrawingTools.vala:473+#: libbirdfont/DrawingTools.vala:478 msgid "Tie curve handles for the selected edit point" msgstr "Verbinde Griffpunkte der ausgewählten Ankerpunkte"  # ist Ankerpunkt das richtige Wort?-#: libbirdfont/DrawingTools.vala:524+#: libbirdfont/DrawingTools.vala:529 msgid "Symmetrical handles" msgstr "Symmetrische Griffpunkte" -#: libbirdfont/DrawingTools.vala:554+#: libbirdfont/DrawingTools.vala:559 msgid "Convert segment to line." msgstr "Segment zur Linie umwandeln." -#: libbirdfont/DrawingTools.vala:562+#: libbirdfont/DrawingTools.vala:567 msgid "Create counter from outline" msgstr "Kontur invertieren" -#: libbirdfont/DrawingTools.vala:565+#: libbirdfont/DrawingTools.vala:570 msgid "Scale object to font top/baseline"-msgstr ""+msgstr "Skaliere das Objekt zum oberen Schriftrand/Basislinie" -#: libbirdfont/DrawingTools.vala:574+#: libbirdfont/DrawingTools.vala:579 msgid "Close path" msgstr "Pfad schließen" -#: libbirdfont/DrawingTools.vala:596+#: libbirdfont/DrawingTools.vala:601 msgid "Move to path to the bottom of the layer" msgstr "Verschiebe Pfad auf die unterste Ebene" -#: libbirdfont/DrawingTools.vala:610+#: libbirdfont/DrawingTools.vala:615 msgid "Flip path vertically" msgstr "Pfad vertikal spiegeln" -#: libbirdfont/DrawingTools.vala:618+#: libbirdfont/DrawingTools.vala:623 msgid "Flip path horizontally" msgstr "Pfad horizontal spiegeln" -#: libbirdfont/DrawingTools.vala:627+#: libbirdfont/DrawingTools.vala:632 msgid "Set size for background image" msgstr "Hintergrundbildgröße festlegen" -#: libbirdfont/DrawingTools.vala:665+#: libbirdfont/DrawingTools.vala:670 msgid "Show/hide background image" msgstr "Hintergrundbild anzeigen/ausblenden" -#: libbirdfont/DrawingTools.vala:676+#: libbirdfont/DrawingTools.vala:681 msgid "Insert a new background image" msgstr "Neues Hintergrundbild einfügen" -#: libbirdfont/DrawingTools.vala:690 libbirdfont/ThemeTab.vala:151+#: libbirdfont/DrawingTools.vala:695 libbirdfont/ThemeTab.vala:151 msgid "High contrast" msgstr "Hoher Kontrast" -#: libbirdfont/DrawingTools.vala:704+#: libbirdfont/DrawingTools.vala:709 msgid "Set background threshold" msgstr "Hintergrund-Grenzwert einstellen" -#: libbirdfont/DrawingTools.vala:723+#: libbirdfont/DrawingTools.vala:728 msgid "Amount of autotrace details" msgstr "Menge der Nachzeichen-Details" -#: libbirdfont/DrawingTools.vala:742+#: libbirdfont/DrawingTools.vala:747 msgid "Autotrace simplification" msgstr "Autoverfolgungs-Vereinfachung" -#: libbirdfont/DrawingTools.vala:752+#: libbirdfont/DrawingTools.vala:757 msgid "Autotrace background image" msgstr "Hintergrundbild Nachzeichnen" -#: libbirdfont/DrawingTools.vala:760+#: libbirdfont/DrawingTools.vala:765 msgid "Delete background image" msgstr "Hintergrundbild löschen" -#: libbirdfont/DrawingTools.vala:767+#: libbirdfont/DrawingTools.vala:772 msgid "Add layer" msgstr "Ebene hinzufügen" -#: libbirdfont/DrawingTools.vala:777+#: libbirdfont/DrawingTools.vala:782 msgid "Show layers" msgstr "Ebenen anzeigen" -#: libbirdfont/DrawingTools.vala:787+#: libbirdfont/DrawingTools.vala:792 msgid "Apply stroke" msgstr "Kontur anwenden" -#: libbirdfont/DrawingTools.vala:821 libbirdfont/SettingsTab.vala:34+#: libbirdfont/DrawingTools.vala:826 libbirdfont/SettingsTab.vala:34 msgid "Stroke width" msgstr "Breite der Kontur" -#: libbirdfont/DrawingTools.vala:863+#: libbirdfont/DrawingTools.vala:872 msgid "Create outline form stroke" msgstr "Außenlinie von Kontur erstellen" -#: libbirdfont/DrawingTools.vala:872+#: libbirdfont/DrawingTools.vala:881 msgid "Butt line cap" msgstr "Stumpfes Linienende" -#: libbirdfont/DrawingTools.vala:896+#: libbirdfont/DrawingTools.vala:908 msgid "Round line cap" msgstr "Abgerundetes Linienende" -#: libbirdfont/DrawingTools.vala:921+#: libbirdfont/DrawingTools.vala:936 msgid "Square line cap" msgstr "Eckiges Ende" -#: libbirdfont/DrawingTools.vala:990+#: libbirdfont/DrawingTools.vala:1008 msgid "Show guidelines" msgstr "Hilfslinien anzeigen" -#: libbirdfont/DrawingTools.vala:1002+#: libbirdfont/DrawingTools.vala:1020 msgid "Show more guidelines" msgstr "mehr Hilfslinien anzeigen" -#: libbirdfont/DrawingTools.vala:1018+#: libbirdfont/DrawingTools.vala:1036 msgid "Show guidelines at top and bottom margin" msgstr "Hilfslinien am oberen und unteren Rand anzeigen" -#: libbirdfont/DrawingTools.vala:1042+#: libbirdfont/DrawingTools.vala:1060 msgid "Lock guides and grid" msgstr "Hilfslinien und Gitter sperren" -#: libbirdfont/DrawingTools.vala:1084+#: libbirdfont/DrawingTools.vala:1102 msgid "Zoom Out More" msgstr "Mehr hinauszoomen" -#: libbirdfont/DrawingTools.vala:1093+#: libbirdfont/DrawingTools.vala:1111 msgid "Show full glyph" msgstr "Gesamte Glyphe anzeigen" -#: libbirdfont/DrawingTools.vala:1100+#: libbirdfont/DrawingTools.vala:1118 msgid "Fit in view" msgstr "Ansicht einpassen" -#: libbirdfont/DrawingTools.vala:1107+#: libbirdfont/DrawingTools.vala:1125 msgid "Zoom in on background image" msgstr "Ansicht auf Hintergrundbild vergrößern" -#: libbirdfont/DrawingTools.vala:1117+#: libbirdfont/DrawingTools.vala:1135 msgid "Previous view" msgstr "Vorherige Ansicht" -#: libbirdfont/DrawingTools.vala:1123+#: libbirdfont/DrawingTools.vala:1141 msgid "Next view" msgstr "Nächste Ansicht" -#: libbirdfont/DrawingTools.vala:1525+#: libbirdfont/DrawingTools.vala:1543 msgid "Set size for grid" msgstr "Rastergröße einstellen"  #: libbirdfont/ExportSettings.vala:41 libbirdfont/ExportSettings.vala:185-#: libbirdfont/Menu.vala:327+#: libbirdfont/Menu.vala:329 msgid "Export Settings" msgstr "Einstellungen exportieren" @@ -552,13 +561,13 @@ msgstr "Formate" msgid "Export" msgstr "Export" -#: libbirdfont/ExportTool.vala:209 libbirdfont/Menu.vala:64-#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:68+#: libbirdfont/ExportTool.vala:222 libbirdfont/Menu.vala:64+#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:69 #: libbirdfont/SaveDialog.vala:38 libbirdfont/SaveDialogListener.vala:29 msgid "Save" msgstr "Speichern" -#: libbirdfont/ExportTool.vala:419+#: libbirdfont/ExportTool.vala:432 msgid "Alphabet" msgstr "Alphabet" @@ -607,7 +616,7 @@ msgstr "Schrift öffnen" msgid "Save font" msgstr "Schrift speichern" -#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:490+#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:492 #: libbirdfont/SettingsDisplay.vala:225 libbirdfont/SettingsTab.vala:31 #: libbirdfont/SettingsTab.vala:159 msgid "Settings"@@ -618,39 +627,39 @@ msgstr "Einstellungen" msgid "Themes" msgstr "Designs" -#: libbirdfont/Glyph.vala:550+#: libbirdfont/Glyph.vala:602 msgid "top margin" msgstr "oberer Rand" -#: libbirdfont/Glyph.vala:557+#: libbirdfont/Glyph.vala:609 msgid "top" msgstr "oben" -#: libbirdfont/Glyph.vala:564+#: libbirdfont/Glyph.vala:616 msgid "x-height" msgstr "X-Höhe" -#: libbirdfont/Glyph.vala:573+#: libbirdfont/Glyph.vala:625 msgid "baseline" msgstr "Grundlinie" -#: libbirdfont/Glyph.vala:580+#: libbirdfont/Glyph.vala:632 msgid "bottom" msgstr "unten" -#: libbirdfont/Glyph.vala:586+#: libbirdfont/Glyph.vala:638 msgid "bottom margin" msgstr "Unterer Rand" -#: libbirdfont/Glyph.vala:592+#: libbirdfont/Glyph.vala:644 msgid "left" msgstr "links" -#: libbirdfont/Glyph.vala:601+#: libbirdfont/Glyph.vala:653 msgid "right" msgstr "rechts" -#: libbirdfont/Glyph.vala:2421+#: libbirdfont/Glyph.vala:2462 msgid "Guide" msgstr "Anleitung" @@ -662,6 +671,10 @@ msgstr "Raster anzeigen" msgid "Guides" msgstr "Anleitungen" +#: libbirdfont/Help.vala:29+msgid "BirdFont is a font editor."+msgstr ""+ #: libbirdfont/HiddenTools.vala:33 msgid "Zoom in" msgstr "Ansicht vergrößern"@@ -727,35 +740,41 @@ msgstr "zu" msgid "Glyph" msgstr "Glyphe" -#: libbirdfont/KerningDisplay.vala:97 libbirdfont/KerningDisplay.vala:877+#: libbirdfont/KerningDisplay.vala:60+msgid ""+"Kerning is the process of adjusting the space between two letters. You can "+"cahnge the space between one letter and all other letters in the spacing tab."+msgstr ""++#: libbirdfont/KerningDisplay.vala:101 libbirdfont/KerningDisplay.vala:882 msgid "Kerning" msgstr "Unterschneidung" -#: libbirdfont/KerningDisplay.vala:105+#: libbirdfont/KerningDisplay.vala:109 msgid "The current kerning class is malformed." msgstr "Die aktuelle Unterschneidungs-Klasse ist fehlerhaft." -#: libbirdfont/KerningDisplay.vala:106+#: libbirdfont/KerningDisplay.vala:110 msgid "Add single characters separated by space and ranges on the form A-Z." msgstr "" "Einzelne Zeichen im Bereich von A-Z, getrennt durch Leerzeichen, hinzufügen." -#: libbirdfont/KerningDisplay.vala:107+#: libbirdfont/KerningDisplay.vala:111 msgid "Type “space” to kern the space character and “divis” to kern -." msgstr "" "Zum unterschneiden des Leerzeichens die \"Leertaste\" drücken, für den " "Bindestrich die \"-\" Taste." -#: libbirdfont/KerningDisplay.vala:678 libbirdfont/OverviewTools.vala:78+#: libbirdfont/KerningDisplay.vala:683 libbirdfont/OverviewTools.vala:78 msgid "Unicode" msgstr "Unicode" -#: libbirdfont/KerningDisplay.vala:678+#: libbirdfont/KerningDisplay.vala:683 msgid "Insert" msgstr "Einfügen" -#: libbirdfont/KerningDisplay.vala:877 libbirdfont/MainWindow.vala:235-#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:208+#: libbirdfont/KerningDisplay.vala:882 libbirdfont/MainWindow.vala:241+#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:231 msgid "Close" msgstr "Schließen" @@ -771,11 +790,11 @@ msgstr "Es wurden keine Unterschneidungs-Paare erstellt." msgid "Kerning class" msgstr "Unterschneidungs-Klasse" -#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:144+#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:166 #: libbirdfont/Ligatures.vala:118 libbirdfont/Ligatures.vala:141 #: libbirdfont/Ligatures.vala:164 libbirdfont/Ligatures.vala:196 #: libbirdfont/SpacingClass.vala:45 libbirdfont/SpacingTab.vala:232-#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:208+#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:231 #: libbirdfont/Theme.vala:687 msgid "Set" msgstr "Übernehmen"@@ -840,7 +859,11 @@ msgstr "Zeichensätze" msgid "Character Set" msgstr "Zeichensatz" -#: libbirdfont/LayerLabel.vala:144+#: libbirdfont/LayerLabel.vala:101+msgid "Hide the layer."+msgstr ""++#: libbirdfont/LayerLabel.vala:166 msgid "Layer" msgstr "Ebene" @@ -881,7 +904,7 @@ msgid "Contextual Substitutions" msgstr "Kontextabhängiger Ersatz"  #: libbirdfont/LigatureList.vala:126 libbirdfont/LigatureList.vala:140-#: libbirdfont/Menu.vala:445+#: libbirdfont/Menu.vala:447 msgid "Ligatures" msgstr "Ligaturen" @@ -926,7 +949,7 @@ msgstr "Diese Schriftart wurde mit einer alten Version von Birdfont erstellt." msgid "You need an older version of Birdfont to open it." msgstr "Sie brauchen eine ältere Version von Birdfont zum Öffnen" -#: libbirdfont/MainWindow.vala:235+#: libbirdfont/MainWindow.vala:241 msgid "Glyph sequence" msgstr "Glyphenfolge" @@ -986,8 +1009,8 @@ msgstr "Alle Glyphen auswählen" msgid "Move To Baseline" msgstr "Verschiebe auf Grundlinie" -#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:250-#: libbirdfont/OverView.vala:269 libbirdfont/OverviewTools.vala:154+#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:257+#: libbirdfont/OverView.vala:276 libbirdfont/OverviewTools.vala:154 msgid "Search" msgstr "Suchen" @@ -1059,103 +1082,107 @@ msgstr "Schrift exportieren" msgid "Export Glyph as SVG" msgstr "Glyphe als SVG exportieren" -#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:303+#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:304 msgid "Import SVG file" msgstr "SVG-Datei importieren" -#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:313 msgid "Import SVG folder" msgstr "SVG Verzeichnis importieren" -#: libbirdfont/Menu.vala:303 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:304 libbirdfont/Menu.vala:313 msgid "color"-msgstr ""+msgstr "Farbe" -#: libbirdfont/Menu.vala:320+#: libbirdfont/Menu.vala:322 msgid "Import Background Image" msgstr "Hintergrundbild importieren" -#: libbirdfont/Menu.vala:334 libbirdfont/Preview.vala:27+#: libbirdfont/Menu.vala:336 libbirdfont/Preview.vala:27 msgid "Preview" msgstr "Vorschau" -#: libbirdfont/Menu.vala:342+#: libbirdfont/Menu.vala:344 msgid "Tab" msgstr "Tab" -#: libbirdfont/Menu.vala:348+#: libbirdfont/Menu.vala:350 msgid "Next Tab" msgstr "Nächster Tab" -#: libbirdfont/Menu.vala:355+#: libbirdfont/Menu.vala:357 msgid "Previous Tab" msgstr "Vorheriger Tab" -#: libbirdfont/Menu.vala:362+#: libbirdfont/Menu.vala:364 msgid "Close Tab" msgstr "Tab schließen" -#: libbirdfont/Menu.vala:369+#: libbirdfont/Menu.vala:371 msgid "Close All Tabs" msgstr "Alle Tabs schließen" -#: libbirdfont/Menu.vala:377+#: libbirdfont/Menu.vala:379 msgid "Spacing and Kerning" msgstr "Sperren und Unterschneidung" -#: libbirdfont/Menu.vala:383+#: libbirdfont/Menu.vala:385 msgid "Show Spacing Tab" msgstr "Zeige Tab für Zeichenabstand" -#: libbirdfont/Menu.vala:390+#: libbirdfont/Menu.vala:392 msgid "Show Kerning Tab" msgstr "Tab für Unterschneidungen anzeigen" -#: libbirdfont/Menu.vala:397+#: libbirdfont/Menu.vala:399 msgid "List Kerning Pairs" msgstr "Unterschneidungspaare auflisten"  # sounds better-#: libbirdfont/Menu.vala:404 libbirdfont/SpacingClassTab.vala:80+#: libbirdfont/Menu.vala:406 libbirdfont/SpacingClassTab.vala:80 msgid "Spacing Classes" msgstr "Zeichenabstands-Klassen" -#: libbirdfont/Menu.vala:411+#: libbirdfont/Menu.vala:413 msgid "Select Next Kerning Pair" msgstr "Nächstes Unterschneidungspaar auswählen" -#: libbirdfont/Menu.vala:420+#: libbirdfont/Menu.vala:422 msgid "Select Previous Kerning Pair" msgstr "Vorheriges Unterschneidungspaar auswählen" -#: libbirdfont/Menu.vala:429+#: libbirdfont/Menu.vala:431 msgid "Load Kerning Strings" msgstr "Unterschneidungsdaten laden" -#: libbirdfont/Menu.vala:436+#: libbirdfont/Menu.vala:438 msgid "Reload Kerning Strings" msgstr "Unterschneidungsdaten erneut laden" -#: libbirdfont/Menu.vala:451+#: libbirdfont/Menu.vala:453 msgid "Show Ligatures" msgstr "Ligaturen anzeigen" -#: libbirdfont/Menu.vala:458+#: libbirdfont/Menu.vala:460 msgid "Add Ligature" msgstr "Ligatur hinzufügen" -#: libbirdfont/Menu.vala:467+#: libbirdfont/Menu.vala:469 msgid "Git" msgstr "Git" -#: libbirdfont/Menu.vala:473+#: libbirdfont/Menu.vala:475 msgid "Save As .bfp" msgstr "Als .bfp speichern" -#: libbirdfont/Menu.vala:482 libbirdfont/OverView.vala:471+#: libbirdfont/Menu.vala:484 libbirdfont/OverView.vala:478 msgid "Overview" msgstr "Übersicht" +#: libbirdfont/Menu.vala:513+msgid "Help"+msgstr ""+ #: libbirdfont/MenuItem.vala:82 msgid "UP" msgstr "Nach oben"@@ -1238,15 +1265,11 @@ msgstr "Großbuchstaben zu Kapitälchen" msgid "Swashes" msgstr "Zierschriften" -#: libbirdfont/OverView.vala:250 libbirdfont/OverView.vala:269+#: libbirdfont/OverView.vala:257 libbirdfont/OverView.vala:276 msgid "Filter" msgstr "Filter" -#: libbirdfont/OverView.vala:673-msgid "No glyphs in this view."-msgstr "Keine Zeichen in dieser Ansicht."--#: libbirdfont/OverView.vala:1484+#: libbirdfont/OverView.vala:1498 msgid "See also:" msgstr "Siehe auch:" @@ -1301,11 +1324,11 @@ msgstr "Kurvenausrichtung einstellen"  #: libbirdfont/OverviewTools.vala:160 msgid "Master Size"-msgstr ""+msgstr "Hauptgröße"  #: libbirdfont/OverviewTools.vala:175 msgid "Create new master font"-msgstr ""+msgstr "Erstelle neue Hauptschrift"  #: libbirdfont/OverwriteBfFile.vala:25 msgid "This file already exists. Do you want to replace it?"@@ -1425,10 +1448,6 @@ msgstr "Links" msgid "Right" msgstr "Rechts" -#: libbirdfont/SvgParser.vala:62 libbirdfont/SvgParser.vala:121-msgid "Import"-msgstr "Importieren"- #: libbirdfont/Theme.vala:421 msgid "Canvas Background" msgstr "Zeichenflächen-Hintergrund"@@ -1719,7 +1738,7 @@ msgstr "Benutzerdefiniert" msgid "Color" msgstr "Farben" -#: libbirdfont/ToolItem.vala:44+#: libbirdfont/ToolItem.vala:66 msgid "Shift" msgstr "Verschieben" @@ -1763,6 +1782,12 @@ msgstr "Unbekanntes Dateiformat." msgid "Writing" msgstr "Wird geschrieben..." +#~ msgid "No glyphs in this view."+#~ msgstr "Keine Zeichen in dieser Ansicht."++#~ msgid "Import"+#~ msgstr "Importieren"+ #~ msgid "Full name (name and style)" #~ msgstr "Vollständiger Name (Name und Schriftstil)" diff --git a/po/el.po b/po/el.poindex 658aa69..23ee0b1 100644--- a/po/el.po+++ b/po/el.po@@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n"-"POT-Creation-Date: 2015-12-22 20:35+0100\n"+"POT-Creation-Date: 2016-01-06 12:06+0100\n" "PO-Revision-Date: 2014-08-28 18:37+0000\n" "Last-Translator: Anonymous Pootle User\n" "Language-Team: LANGUAGE <LL@li.org>\n"@@ -105,16 +105,16 @@ msgstr "Αρχεία" msgid "Parts" msgstr "" -#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2421+#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2462 #: libbirdfont/LigatureList.vala:106 libbirdfont/OtfFeatureTable.vala:181 msgid "Add" msgstr "" -#: libbirdfont/BackgroundTools.vala:122+#: libbirdfont/BackgroundTools.vala:123 msgid "Select Glyph" msgstr "" -#: libbirdfont/BackgroundTools.vala:231 libbirdfont/LoadCallback.vala:102+#: libbirdfont/BackgroundTools.vala:233 libbirdfont/LoadCallback.vala:102 #: libbirdfont/Menu.vala:50 msgid "Open" msgstr "Άνοιγμα"@@ -189,18 +189,18 @@ msgid "Thai" msgstr ""  #. / All lower case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:420+#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:433 msgid "a b c d e f g h i j k l m n o p q r s t u v w x y z" msgstr "α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ ω"  #. / All upper case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:421+#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:434 msgid "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z" msgstr "Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω"  #: libbirdfont/DescriptionDisplay.vala:66 #: libbirdfont/DescriptionDisplay.vala:277 libbirdfont/ExportSettings.vala:133-#: libbirdfont/Menu.vala:497 libbirdfont/TableLayout.vala:203+#: libbirdfont/Menu.vala:499 libbirdfont/TableLayout.vala:203 msgid "Name and Description" msgstr "" @@ -239,7 +239,7 @@ msgid "Unique Identifier" msgstr ""  #: libbirdfont/DescriptionDisplay.vala:150 libbirdfont/ImportUtils.vala:161-#: libbirdfont/Menu.vala:504 libbirdfont/Menu.vala:506+#: libbirdfont/Menu.vala:506 libbirdfont/Menu.vala:508 #: libbirdfont/VersionList.vala:265 msgid "Version" msgstr "Έκδοση"@@ -324,217 +324,226 @@ msgstr "" msgid "Grid Size" msgstr "" -#: libbirdfont/DrawingTools.vala:194+#: libbirdfont/DrawingTools.vala:195 msgid "Move canvas" msgstr "" -#: libbirdfont/DrawingTools.vala:202+#: libbirdfont/DrawingTools.vala:196+msgid "Press space and click to move the canvas."+msgstr ""++#: libbirdfont/DrawingTools.vala:204 msgid "Delete" msgstr "" -#: libbirdfont/DrawingTools.vala:209+#: libbirdfont/DrawingTools.vala:211 msgid "Select all points or paths" msgstr "" -#: libbirdfont/DrawingTools.vala:225 libbirdfont/Menu.vala:99+#: libbirdfont/DrawingTools.vala:227 libbirdfont/Menu.vala:99 #, fuzzy msgid "Undo" msgstr "_Αναίρεση" -#: libbirdfont/DrawingTools.vala:232+#: libbirdfont/DrawingTools.vala:234 msgid "Insert new points on path" msgstr "" -#: libbirdfont/DrawingTools.vala:241+#: libbirdfont/DrawingTools.vala:244 #, fuzzy msgid "Create quadratic Bézier curves" msgstr "Δημιουργία καμπύλων Bézier" -#: libbirdfont/DrawingTools.vala:250+#: libbirdfont/DrawingTools.vala:245+msgid ""+"All control points will be converted to quadratic points in the TTF format."+msgstr ""++#: libbirdfont/DrawingTools.vala:255 #, fuzzy msgid "Create cubic Bézier curves" msgstr "Δημιουργία καμπύλων Bézier" -#: libbirdfont/DrawingTools.vala:259+#: libbirdfont/DrawingTools.vala:264 msgid "Quadratic path with two line handles" msgstr "" -#: libbirdfont/DrawingTools.vala:268+#: libbirdfont/DrawingTools.vala:273 msgid "Convert selected points" msgstr "Μετατροπή επιλεγμένων σημείων" -#: libbirdfont/DrawingTools.vala:279+#: libbirdfont/DrawingTools.vala:284 msgid "X coordinate" msgstr "" -#: libbirdfont/DrawingTools.vala:323+#: libbirdfont/DrawingTools.vala:328 msgid "Y coordinate" msgstr "" -#: libbirdfont/DrawingTools.vala:366+#: libbirdfont/DrawingTools.vala:371 msgid "Rotation" msgstr "" -#: libbirdfont/DrawingTools.vala:405+#: libbirdfont/DrawingTools.vala:410 msgid "Width" msgstr "" -#: libbirdfont/DrawingTools.vala:430+#: libbirdfont/DrawingTools.vala:435 #, fuzzy msgid "Height" msgstr "Βάρος" -#: libbirdfont/DrawingTools.vala:473+#: libbirdfont/DrawingTools.vala:478 msgid "Tie curve handles for the selected edit point" msgstr "" -#: libbirdfont/DrawingTools.vala:524+#: libbirdfont/DrawingTools.vala:529 msgid "Symmetrical handles" msgstr "" -#: libbirdfont/DrawingTools.vala:554+#: libbirdfont/DrawingTools.vala:559 msgid "Convert segment to line." msgstr "Μετατροπή τμήματος σε γραμμή." -#: libbirdfont/DrawingTools.vala:562+#: libbirdfont/DrawingTools.vala:567 msgid "Create counter from outline" msgstr "Δημιουργία κοίλου από περίγραμμα" -#: libbirdfont/DrawingTools.vala:565+#: libbirdfont/DrawingTools.vala:570 msgid "Scale object to font top/baseline" msgstr "" -#: libbirdfont/DrawingTools.vala:574+#: libbirdfont/DrawingTools.vala:579 msgid "Close path" msgstr "" -#: libbirdfont/DrawingTools.vala:596+#: libbirdfont/DrawingTools.vala:601 msgid "Move to path to the bottom of the layer" msgstr "" -#: libbirdfont/DrawingTools.vala:610+#: libbirdfont/DrawingTools.vala:615 msgid "Flip path vertically" msgstr "Κατακόρυφη αναστροφή μονοπατιού" -#: libbirdfont/DrawingTools.vala:618+#: libbirdfont/DrawingTools.vala:623 msgid "Flip path horizontally" msgstr "Οριζόντια αναστροφή μονοπατιού" -#: libbirdfont/DrawingTools.vala:627+#: libbirdfont/DrawingTools.vala:632 msgid "Set size for background image" msgstr "Επιλογή μεγέθους εικόνας φόντου" -#: libbirdfont/DrawingTools.vala:665+#: libbirdfont/DrawingTools.vala:670 msgid "Show/hide background image" msgstr "Εμφάνιση/απόκρυψη εικόνας φόντου" -#: libbirdfont/DrawingTools.vala:676+#: libbirdfont/DrawingTools.vala:681 msgid "Insert a new background image" msgstr "Εισαγωγή νέας εικόνας φόντου" -#: libbirdfont/DrawingTools.vala:690 libbirdfont/ThemeTab.vala:151+#: libbirdfont/DrawingTools.vala:695 libbirdfont/ThemeTab.vala:151 msgid "High contrast" msgstr "" -#: libbirdfont/DrawingTools.vala:704+#: libbirdfont/DrawingTools.vala:709 msgid "Set background threshold" msgstr "" -#: libbirdfont/DrawingTools.vala:723+#: libbirdfont/DrawingTools.vala:728 msgid "Amount of autotrace details" msgstr "" -#: libbirdfont/DrawingTools.vala:742+#: libbirdfont/DrawingTools.vala:747 msgid "Autotrace simplification" msgstr "" -#: libbirdfont/DrawingTools.vala:752+#: libbirdfont/DrawingTools.vala:757 msgid "Autotrace background image" msgstr "" -#: libbirdfont/DrawingTools.vala:760+#: libbirdfont/DrawingTools.vala:765 msgid "Delete background image" msgstr "" -#: libbirdfont/DrawingTools.vala:767+#: libbirdfont/DrawingTools.vala:772 msgid "Add layer" msgstr "" -#: libbirdfont/DrawingTools.vala:777+#: libbirdfont/DrawingTools.vala:782 msgid "Show layers" msgstr "" -#: libbirdfont/DrawingTools.vala:787+#: libbirdfont/DrawingTools.vala:792 msgid "Apply stroke" msgstr "" -#: libbirdfont/DrawingTools.vala:821 libbirdfont/SettingsTab.vala:34+#: libbirdfont/DrawingTools.vala:826 libbirdfont/SettingsTab.vala:34 msgid "Stroke width" msgstr "Πάχος πινελιάς" -#: libbirdfont/DrawingTools.vala:863+#: libbirdfont/DrawingTools.vala:872 msgid "Create outline form stroke" msgstr "" -#: libbirdfont/DrawingTools.vala:872+#: libbirdfont/DrawingTools.vala:881 msgid "Butt line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:896+#: libbirdfont/DrawingTools.vala:908 msgid "Round line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:921+#: libbirdfont/DrawingTools.vala:936 msgid "Square line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:990+#: libbirdfont/DrawingTools.vala:1008 msgid "Show guidelines" msgstr "Εμφάνιση οδηγών" -#: libbirdfont/DrawingTools.vala:1002+#: libbirdfont/DrawingTools.vala:1020 msgid "Show more guidelines" msgstr "" -#: libbirdfont/DrawingTools.vala:1018+#: libbirdfont/DrawingTools.vala:1036 msgid "Show guidelines at top and bottom margin" msgstr "" -#: libbirdfont/DrawingTools.vala:1042+#: libbirdfont/DrawingTools.vala:1060 msgid "Lock guides and grid" msgstr "" -#: libbirdfont/DrawingTools.vala:1084+#: libbirdfont/DrawingTools.vala:1102 msgid "Zoom Out More" msgstr "" -#: libbirdfont/DrawingTools.vala:1093+#: libbirdfont/DrawingTools.vala:1111 msgid "Show full glyph" msgstr "" -#: libbirdfont/DrawingTools.vala:1100+#: libbirdfont/DrawingTools.vala:1118 msgid "Fit in view" msgstr "" -#: libbirdfont/DrawingTools.vala:1107+#: libbirdfont/DrawingTools.vala:1125 #, fuzzy msgid "Zoom in on background image" msgstr "Ξάκρισμα εικόνας φόντου" -#: libbirdfont/DrawingTools.vala:1117+#: libbirdfont/DrawingTools.vala:1135 msgid "Previous view" msgstr "Προηγούμενη προβολή" -#: libbirdfont/DrawingTools.vala:1123+#: libbirdfont/DrawingTools.vala:1141 msgid "Next view" msgstr "Επόμενη προβολή" -#: libbirdfont/DrawingTools.vala:1525+#: libbirdfont/DrawingTools.vala:1543 msgid "Set size for grid" msgstr ""  #: libbirdfont/ExportSettings.vala:41 libbirdfont/ExportSettings.vala:185-#: libbirdfont/Menu.vala:327+#: libbirdfont/Menu.vala:329 msgid "Export Settings" msgstr "" @@ -558,13 +567,13 @@ msgstr "" msgid "Export" msgstr "" -#: libbirdfont/ExportTool.vala:209 libbirdfont/Menu.vala:64-#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:68+#: libbirdfont/ExportTool.vala:222 libbirdfont/Menu.vala:64+#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:69 #: libbirdfont/SaveDialog.vala:38 libbirdfont/SaveDialogListener.vala:29 msgid "Save" msgstr "Αποθήκευση" -#: libbirdfont/ExportTool.vala:419+#: libbirdfont/ExportTool.vala:432 msgid "Alphabet" msgstr "" @@ -614,7 +623,7 @@ msgstr "" msgid "Save font" msgstr "" -#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:490+#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:492 #: libbirdfont/SettingsDisplay.vala:225 libbirdfont/SettingsTab.vala:31 #: libbirdfont/SettingsTab.vala:159 msgid "Settings"@@ -625,39 +634,39 @@ msgstr "" msgid "Themes" msgstr "" -#: libbirdfont/Glyph.vala:550+#: libbirdfont/Glyph.vala:602 msgid "top margin" msgstr "" -#: libbirdfont/Glyph.vala:557+#: libbirdfont/Glyph.vala:609 msgid "top" msgstr "" -#: libbirdfont/Glyph.vala:564+#: libbirdfont/Glyph.vala:616 msgid "x-height" msgstr "" -#: libbirdfont/Glyph.vala:573+#: libbirdfont/Glyph.vala:625 msgid "baseline" msgstr "" -#: libbirdfont/Glyph.vala:580+#: libbirdfont/Glyph.vala:632 msgid "bottom" msgstr "" -#: libbirdfont/Glyph.vala:586+#: libbirdfont/Glyph.vala:638 msgid "bottom margin" msgstr "" -#: libbirdfont/Glyph.vala:592+#: libbirdfont/Glyph.vala:644 msgid "left" msgstr "" -#: libbirdfont/Glyph.vala:601+#: libbirdfont/Glyph.vala:653 msgid "right" msgstr "" -#: libbirdfont/Glyph.vala:2421+#: libbirdfont/Glyph.vala:2462 msgid "Guide" msgstr "" @@ -669,6 +678,10 @@ msgstr "Προβολή πλέγματος" msgid "Guides" msgstr "" +#: libbirdfont/Help.vala:29+msgid "BirdFont is a font editor."+msgstr ""+ #: libbirdfont/HiddenTools.vala:33 msgid "Zoom in" msgstr ""@@ -734,33 +747,39 @@ msgstr "" msgid "Glyph" msgstr "" -#: libbirdfont/KerningDisplay.vala:97 libbirdfont/KerningDisplay.vala:877+#: libbirdfont/KerningDisplay.vala:60+msgid ""+"Kerning is the process of adjusting the space between two letters. You can "+"cahnge the space between one letter and all other letters in the spacing tab."+msgstr ""++#: libbirdfont/KerningDisplay.vala:101 libbirdfont/KerningDisplay.vala:882 msgid "Kerning" msgstr "Διαστοιχείωση" -#: libbirdfont/KerningDisplay.vala:105+#: libbirdfont/KerningDisplay.vala:109 #, fuzzy msgid "The current kerning class is malformed." msgstr "Η τρέχουσα κλάση διαστοιχείωσης είναι ακατάλληλη" -#: libbirdfont/KerningDisplay.vala:106+#: libbirdfont/KerningDisplay.vala:110 msgid "Add single characters separated by space and ranges on the form A-Z." msgstr "" -#: libbirdfont/KerningDisplay.vala:107+#: libbirdfont/KerningDisplay.vala:111 msgid "Type “space” to kern the space character and “divis” to kern -." msgstr "" -#: libbirdfont/KerningDisplay.vala:678 libbirdfont/OverviewTools.vala:78+#: libbirdfont/KerningDisplay.vala:683 libbirdfont/OverviewTools.vala:78 msgid "Unicode" msgstr "" -#: libbirdfont/KerningDisplay.vala:678+#: libbirdfont/KerningDisplay.vala:683 msgid "Insert" msgstr "" -#: libbirdfont/KerningDisplay.vala:877 libbirdfont/MainWindow.vala:235-#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:208+#: libbirdfont/KerningDisplay.vala:882 libbirdfont/MainWindow.vala:241+#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:231 msgid "Close" msgstr "Τερματισμός" @@ -776,11 +795,11 @@ msgstr "" msgid "Kerning class" msgstr "" -#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:144+#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:166 #: libbirdfont/Ligatures.vala:118 libbirdfont/Ligatures.vala:141 #: libbirdfont/Ligatures.vala:164 libbirdfont/Ligatures.vala:196 #: libbirdfont/SpacingClass.vala:45 libbirdfont/SpacingTab.vala:232-#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:208+#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:231 #: libbirdfont/Theme.vala:687 msgid "Set" msgstr ""@@ -845,7 +864,11 @@ msgstr "" msgid "Character Set" msgstr "" -#: libbirdfont/LayerLabel.vala:144+#: libbirdfont/LayerLabel.vala:101+msgid "Hide the layer."+msgstr ""++#: libbirdfont/LayerLabel.vala:166 msgid "Layer" msgstr "" @@ -886,7 +909,7 @@ msgid "Contextual Substitutions" msgstr ""  #: libbirdfont/LigatureList.vala:126 libbirdfont/LigatureList.vala:140-#: libbirdfont/Menu.vala:445+#: libbirdfont/Menu.vala:447 msgid "Ligatures" msgstr "" @@ -930,7 +953,7 @@ msgstr "" msgid "You need an older version of Birdfont to open it." msgstr "" -#: libbirdfont/MainWindow.vala:235+#: libbirdfont/MainWindow.vala:241 msgid "Glyph sequence" msgstr "Ακολουθία γλύφων" @@ -990,8 +1013,8 @@ msgstr "" msgid "Move To Baseline" msgstr "" -#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:250-#: libbirdfont/OverView.vala:269 libbirdfont/OverviewTools.vala:154+#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:257+#: libbirdfont/OverView.vala:276 libbirdfont/OverviewTools.vala:154 msgid "Search" msgstr "Αναζήτηση" @@ -1063,102 +1086,106 @@ msgstr "" msgid "Export Glyph as SVG" msgstr "" -#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:303+#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:304 msgid "Import SVG file" msgstr "" -#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:313 msgid "Import SVG folder" msgstr "" -#: libbirdfont/Menu.vala:303 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:304 libbirdfont/Menu.vala:313 msgid "color" msgstr "" -#: libbirdfont/Menu.vala:320+#: libbirdfont/Menu.vala:322 msgid "Import Background Image" msgstr "" -#: libbirdfont/Menu.vala:334 libbirdfont/Preview.vala:27+#: libbirdfont/Menu.vala:336 libbirdfont/Preview.vala:27 msgid "Preview" msgstr "" -#: libbirdfont/Menu.vala:342+#: libbirdfont/Menu.vala:344 msgid "Tab" msgstr "" -#: libbirdfont/Menu.vala:348+#: libbirdfont/Menu.vala:350 msgid "Next Tab" msgstr "" -#: libbirdfont/Menu.vala:355+#: libbirdfont/Menu.vala:357 msgid "Previous Tab" msgstr "" -#: libbirdfont/Menu.vala:362+#: libbirdfont/Menu.vala:364 msgid "Close Tab" msgstr "" -#: libbirdfont/Menu.vala:369+#: libbirdfont/Menu.vala:371 msgid "Close All Tabs" msgstr "" -#: libbirdfont/Menu.vala:377+#: libbirdfont/Menu.vala:379 msgid "Spacing and Kerning" msgstr "" -#: libbirdfont/Menu.vala:383+#: libbirdfont/Menu.vala:385 msgid "Show Spacing Tab" msgstr "" -#: libbirdfont/Menu.vala:390+#: libbirdfont/Menu.vala:392 msgid "Show Kerning Tab" msgstr "" -#: libbirdfont/Menu.vala:397+#: libbirdfont/Menu.vala:399 msgid "List Kerning Pairs" msgstr "" -#: libbirdfont/Menu.vala:404 libbirdfont/SpacingClassTab.vala:80+#: libbirdfont/Menu.vala:406 libbirdfont/SpacingClassTab.vala:80 msgid "Spacing Classes" msgstr "" -#: libbirdfont/Menu.vala:411+#: libbirdfont/Menu.vala:413 msgid "Select Next Kerning Pair" msgstr "" -#: libbirdfont/Menu.vala:420+#: libbirdfont/Menu.vala:422 msgid "Select Previous Kerning Pair" msgstr "" -#: libbirdfont/Menu.vala:429+#: libbirdfont/Menu.vala:431 msgid "Load Kerning Strings" msgstr "" -#: libbirdfont/Menu.vala:436+#: libbirdfont/Menu.vala:438 msgid "Reload Kerning Strings" msgstr "" -#: libbirdfont/Menu.vala:451+#: libbirdfont/Menu.vala:453 msgid "Show Ligatures" msgstr "" -#: libbirdfont/Menu.vala:458+#: libbirdfont/Menu.vala:460 msgid "Add Ligature" msgstr "" -#: libbirdfont/Menu.vala:467+#: libbirdfont/Menu.vala:469 msgid "Git" msgstr "" -#: libbirdfont/Menu.vala:473+#: libbirdfont/Menu.vala:475 msgid "Save As .bfp" msgstr "" -#: libbirdfont/Menu.vala:482 libbirdfont/OverView.vala:471+#: libbirdfont/Menu.vala:484 libbirdfont/OverView.vala:478 msgid "Overview" msgstr "Επισκόπηση" +#: libbirdfont/Menu.vala:513+msgid "Help"+msgstr ""+ #: libbirdfont/MenuItem.vala:82 msgid "UP" msgstr ""@@ -1241,15 +1268,11 @@ msgstr "" msgid "Swashes" msgstr "" -#: libbirdfont/OverView.vala:250 libbirdfont/OverView.vala:269+#: libbirdfont/OverView.vala:257 libbirdfont/OverView.vala:276 msgid "Filter" msgstr "Φίλτρο" -#: libbirdfont/OverView.vala:673-msgid "No glyphs in this view."-msgstr ""--#: libbirdfont/OverView.vala:1484+#: libbirdfont/OverView.vala:1498 msgid "See also:" msgstr "" @@ -1426,10 +1449,6 @@ msgstr "" msgid "Right" msgstr "" -#: libbirdfont/SvgParser.vala:62 libbirdfont/SvgParser.vala:121-msgid "Import"-msgstr "Εισαγωγή"- #: libbirdfont/Theme.vala:421 msgid "Canvas Background" msgstr ""@@ -1714,7 +1733,7 @@ msgstr "" msgid "Color" msgstr "" -#: libbirdfont/ToolItem.vala:44+#: libbirdfont/ToolItem.vala:66 msgid "Shift" msgstr "" @@ -1758,6 +1777,9 @@ msgstr "" msgid "Writing" msgstr "" +#~ msgid "Import"+#~ msgstr "Εισαγωγή"+ #~ msgid "Full name (name and style)" #~ msgstr "Πλήρης ονομασία (όνομα και στυλ)" diff --git a/po/es.po b/po/es.poindex dca1aca..ff3454b 100644--- a/po/es.po+++ b/po/es.po@@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n"-"POT-Creation-Date: 2015-12-22 20:35+0100\n"+"POT-Creation-Date: 2016-01-06 12:06+0100\n" "PO-Revision-Date: 2015-12-16 18:17+0000\n" "Last-Translator: Anonymous Pootle User\n" "Language-Team: LANGUAGE <LL@li.org>\n"@@ -105,16 +105,16 @@ msgstr "Archivos" msgid "Parts" msgstr "Partes" -#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2421+#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2462 #: libbirdfont/LigatureList.vala:106 libbirdfont/OtfFeatureTable.vala:181 msgid "Add" msgstr "Agregar" -#: libbirdfont/BackgroundTools.vala:122+#: libbirdfont/BackgroundTools.vala:123 msgid "Select Glyph" msgstr "Seleccionar glifo" -#: libbirdfont/BackgroundTools.vala:231 libbirdfont/LoadCallback.vala:102+#: libbirdfont/BackgroundTools.vala:233 libbirdfont/LoadCallback.vala:102 #: libbirdfont/Menu.vala:50 msgid "Open" msgstr "Abrir"@@ -188,18 +188,18 @@ msgid "Thai" msgstr "Tailandés"  #. / All lower case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:420+#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:433 msgid "a b c d e f g h i j k l m n o p q r s t u v w x y z" msgstr "a b c d e f g h i j k l m n ñ o p q r s t u v w x y z"  #. / All upper case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:421+#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:434 msgid "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z" msgstr "A B C D E F G H I J K L M N Ñ O P Q R S T U V W X Y Z"  #: libbirdfont/DescriptionDisplay.vala:66 #: libbirdfont/DescriptionDisplay.vala:277 libbirdfont/ExportSettings.vala:133-#: libbirdfont/Menu.vala:497 libbirdfont/TableLayout.vala:203+#: libbirdfont/Menu.vala:499 libbirdfont/TableLayout.vala:203 msgid "Name and Description" msgstr "Nombre y descripción" @@ -237,7 +237,7 @@ msgid "Unique Identifier" msgstr "Identificador único"  #: libbirdfont/DescriptionDisplay.vala:150 libbirdfont/ImportUtils.vala:161-#: libbirdfont/Menu.vala:504 libbirdfont/Menu.vala:506+#: libbirdfont/Menu.vala:506 libbirdfont/Menu.vala:508 #: libbirdfont/VersionList.vala:265 msgid "Version" msgstr "Versión"@@ -323,214 +323,223 @@ msgstr "Guías y cuadrícula" msgid "Grid Size" msgstr "Tamaño de Cuadrícula" -#: libbirdfont/DrawingTools.vala:194+#: libbirdfont/DrawingTools.vala:195 msgid "Move canvas" msgstr "Mover lienzo" -#: libbirdfont/DrawingTools.vala:202+#: libbirdfont/DrawingTools.vala:196+msgid "Press space and click to move the canvas."+msgstr ""++#: libbirdfont/DrawingTools.vala:204 msgid "Delete" msgstr "Eliminar" -#: libbirdfont/DrawingTools.vala:209+#: libbirdfont/DrawingTools.vala:211 msgid "Select all points or paths" msgstr "Seleccionar todos los puntos o trazos" -#: libbirdfont/DrawingTools.vala:225 libbirdfont/Menu.vala:99+#: libbirdfont/DrawingTools.vala:227 libbirdfont/Menu.vala:99 msgid "Undo" msgstr "Deshacer" -#: libbirdfont/DrawingTools.vala:232+#: libbirdfont/DrawingTools.vala:234 msgid "Insert new points on path" msgstr "Insertar puntos nuevos en el trazo" -#: libbirdfont/DrawingTools.vala:241+#: libbirdfont/DrawingTools.vala:244 msgid "Create quadratic Bézier curves" msgstr "Crear curvas cuadráticas de Bézier" -#: libbirdfont/DrawingTools.vala:250+#: libbirdfont/DrawingTools.vala:245+msgid ""+"All control points will be converted to quadratic points in the TTF format."+msgstr ""++#: libbirdfont/DrawingTools.vala:255 msgid "Create cubic Bézier curves" msgstr "Crear curvas cúbicas de Bézier" -#: libbirdfont/DrawingTools.vala:259+#: libbirdfont/DrawingTools.vala:264 msgid "Quadratic path with two line handles" msgstr "Trazo cuadrático con dos tiradores de línea" -#: libbirdfont/DrawingTools.vala:268+#: libbirdfont/DrawingTools.vala:273 msgid "Convert selected points" msgstr "Convertir puntos seleccionados" -#: libbirdfont/DrawingTools.vala:279+#: libbirdfont/DrawingTools.vala:284 msgid "X coordinate" msgstr "Coordenada X" -#: libbirdfont/DrawingTools.vala:323+#: libbirdfont/DrawingTools.vala:328 msgid "Y coordinate" msgstr "Coordenada Y" -#: libbirdfont/DrawingTools.vala:366+#: libbirdfont/DrawingTools.vala:371 msgid "Rotation" msgstr "Girar" -#: libbirdfont/DrawingTools.vala:405+#: libbirdfont/DrawingTools.vala:410 msgid "Width" msgstr "Ancho" -#: libbirdfont/DrawingTools.vala:430+#: libbirdfont/DrawingTools.vala:435 msgid "Height" msgstr "Alto" -#: libbirdfont/DrawingTools.vala:473+#: libbirdfont/DrawingTools.vala:478 msgid "Tie curve handles for the selected edit point" msgstr "Ligar tiradores de curva al punto de edición seleccionado" -#: libbirdfont/DrawingTools.vala:524+#: libbirdfont/DrawingTools.vala:529 msgid "Symmetrical handles" msgstr "Tiradores simétricos" -#: libbirdfont/DrawingTools.vala:554+#: libbirdfont/DrawingTools.vala:559 msgid "Convert segment to line." msgstr "Convertir segmento en línea" -#: libbirdfont/DrawingTools.vala:562+#: libbirdfont/DrawingTools.vala:567 msgid "Create counter from outline" msgstr "Crear un contador a partir del contorno" -#: libbirdfont/DrawingTools.vala:565+#: libbirdfont/DrawingTools.vala:570 msgid "Scale object to font top/baseline" msgstr "" -#: libbirdfont/DrawingTools.vala:574+#: libbirdfont/DrawingTools.vala:579 msgid "Close path" msgstr "Cerrar Trazo" -#: libbirdfont/DrawingTools.vala:596+#: libbirdfont/DrawingTools.vala:601 #, fuzzy msgid "Move to path to the bottom of the layer" msgstr "Mover trazo a la parte inferior de la capa" -#: libbirdfont/DrawingTools.vala:610+#: libbirdfont/DrawingTools.vala:615 msgid "Flip path vertically" msgstr "Voltear el trazo verticalmente" -#: libbirdfont/DrawingTools.vala:618+#: libbirdfont/DrawingTools.vala:623 msgid "Flip path horizontally" msgstr "Voltear el trazo horizontalmente" -#: libbirdfont/DrawingTools.vala:627+#: libbirdfont/DrawingTools.vala:632 msgid "Set size for background image" msgstr "Establecer el tamaño de la imagen de fondo" -#: libbirdfont/DrawingTools.vala:665+#: libbirdfont/DrawingTools.vala:670 msgid "Show/hide background image" msgstr "Mostrar/ocultar imagen de fondo" -#: libbirdfont/DrawingTools.vala:676+#: libbirdfont/DrawingTools.vala:681 msgid "Insert a new background image" msgstr "Insertar una imagen de fondo nueva" -#: libbirdfont/DrawingTools.vala:690 libbirdfont/ThemeTab.vala:151+#: libbirdfont/DrawingTools.vala:695 libbirdfont/ThemeTab.vala:151 msgid "High contrast" msgstr "Alto contraste" -#: libbirdfont/DrawingTools.vala:704+#: libbirdfont/DrawingTools.vala:709 msgid "Set background threshold" msgstr "Fijar nivel de transparencia del fondo" -#: libbirdfont/DrawingTools.vala:723+#: libbirdfont/DrawingTools.vala:728 msgid "Amount of autotrace details" msgstr "Nivel de detalle del trazador automático" -#: libbirdfont/DrawingTools.vala:742+#: libbirdfont/DrawingTools.vala:747 msgid "Autotrace simplification" msgstr "Simplificación del trazador automático" -#: libbirdfont/DrawingTools.vala:752+#: libbirdfont/DrawingTools.vala:757 msgid "Autotrace background image" msgstr "Trazar automáticamente la imagen de fondo" -#: libbirdfont/DrawingTools.vala:760+#: libbirdfont/DrawingTools.vala:765 msgid "Delete background image" msgstr "Eliminar imagen de fondo" -#: libbirdfont/DrawingTools.vala:767+#: libbirdfont/DrawingTools.vala:772 msgid "Add layer" msgstr "Añadir capa" -#: libbirdfont/DrawingTools.vala:777+#: libbirdfont/DrawingTools.vala:782 msgid "Show layers" msgstr "Mostrar capas" -#: libbirdfont/DrawingTools.vala:787+#: libbirdfont/DrawingTools.vala:792 msgid "Apply stroke" msgstr "Aplicar trazo" -#: libbirdfont/DrawingTools.vala:821 libbirdfont/SettingsTab.vala:34+#: libbirdfont/DrawingTools.vala:826 libbirdfont/SettingsTab.vala:34 msgid "Stroke width" msgstr "Ancho del trazo" -#: libbirdfont/DrawingTools.vala:863+#: libbirdfont/DrawingTools.vala:872 msgid "Create outline form stroke" msgstr "Crear forma de trazo en contorno " -#: libbirdfont/DrawingTools.vala:872+#: libbirdfont/DrawingTools.vala:881 msgid "Butt line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:896+#: libbirdfont/DrawingTools.vala:908 msgid "Round line cap" msgstr "Línea redondeada" -#: libbirdfont/DrawingTools.vala:921+#: libbirdfont/DrawingTools.vala:936 msgid "Square line cap" msgstr "Linea de borde cuadrado" -#: libbirdfont/DrawingTools.vala:990+#: libbirdfont/DrawingTools.vala:1008 msgid "Show guidelines" msgstr "Mostrar líneas guía" -#: libbirdfont/DrawingTools.vala:1002+#: libbirdfont/DrawingTools.vala:1020 #, fuzzy msgid "Show more guidelines" msgstr "Mostrar líneas guía" -#: libbirdfont/DrawingTools.vala:1018+#: libbirdfont/DrawingTools.vala:1036 msgid "Show guidelines at top and bottom margin" msgstr "Mostrar líneas guía en los márgenes sup. e inf." -#: libbirdfont/DrawingTools.vala:1042+#: libbirdfont/DrawingTools.vala:1060 msgid "Lock guides and grid" msgstr "" -#: libbirdfont/DrawingTools.vala:1084+#: libbirdfont/DrawingTools.vala:1102 msgid "Zoom Out More" msgstr "Alejar" -#: libbirdfont/DrawingTools.vala:1093+#: libbirdfont/DrawingTools.vala:1111 msgid "Show full glyph" msgstr "Mostrar el glifo completo" -#: libbirdfont/DrawingTools.vala:1100+#: libbirdfont/DrawingTools.vala:1118 msgid "Fit in view" msgstr "Ajustar a ventana" -#: libbirdfont/DrawingTools.vala:1107+#: libbirdfont/DrawingTools.vala:1125 msgid "Zoom in on background image" msgstr "Ampliar la imagen de fondo" -#: libbirdfont/DrawingTools.vala:1117+#: libbirdfont/DrawingTools.vala:1135 msgid "Previous view" msgstr "Vista anterior" -#: libbirdfont/DrawingTools.vala:1123+#: libbirdfont/DrawingTools.vala:1141 msgid "Next view" msgstr "Vista siguiente" -#: libbirdfont/DrawingTools.vala:1525+#: libbirdfont/DrawingTools.vala:1543 msgid "Set size for grid" msgstr "Establecer tamaño de la cuadrícula"  #: libbirdfont/ExportSettings.vala:41 libbirdfont/ExportSettings.vala:185-#: libbirdfont/Menu.vala:327+#: libbirdfont/Menu.vala:329 msgid "Export Settings" msgstr "Configuraciones de exportación" @@ -554,13 +563,13 @@ msgstr "Formatos" msgid "Export" msgstr "Exportar" -#: libbirdfont/ExportTool.vala:209 libbirdfont/Menu.vala:64-#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:68+#: libbirdfont/ExportTool.vala:222 libbirdfont/Menu.vala:64+#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:69 #: libbirdfont/SaveDialog.vala:38 libbirdfont/SaveDialogListener.vala:29 msgid "Save" msgstr "Guardar" -#: libbirdfont/ExportTool.vala:419+#: libbirdfont/ExportTool.vala:432 msgid "Alphabet" msgstr "Alfabeto" @@ -612,7 +621,7 @@ msgstr "Fuente libre" msgid "Save font" msgstr "Guardar fuente" -#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:490+#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:492 #: libbirdfont/SettingsDisplay.vala:225 libbirdfont/SettingsTab.vala:31 #: libbirdfont/SettingsTab.vala:159 msgid "Settings"@@ -623,39 +632,39 @@ msgstr "Ajustes" msgid "Themes" msgstr "Temas" -#: libbirdfont/Glyph.vala:550+#: libbirdfont/Glyph.vala:602 msgid "top margin" msgstr "" -#: libbirdfont/Glyph.vala:557+#: libbirdfont/Glyph.vala:609 msgid "top" msgstr "" -#: libbirdfont/Glyph.vala:564+#: libbirdfont/Glyph.vala:616 msgid "x-height" msgstr "" -#: libbirdfont/Glyph.vala:573+#: libbirdfont/Glyph.vala:625 msgid "baseline" msgstr "" -#: libbirdfont/Glyph.vala:580+#: libbirdfont/Glyph.vala:632 msgid "bottom" msgstr "" -#: libbirdfont/Glyph.vala:586+#: libbirdfont/Glyph.vala:638 msgid "bottom margin" msgstr "" -#: libbirdfont/Glyph.vala:592+#: libbirdfont/Glyph.vala:644 msgid "left" msgstr "" -#: libbirdfont/Glyph.vala:601+#: libbirdfont/Glyph.vala:653 msgid "right" msgstr "" -#: libbirdfont/Glyph.vala:2421+#: libbirdfont/Glyph.vala:2462 msgid "Guide" msgstr "Guía" @@ -667,6 +676,10 @@ msgstr "Mostrar cuadrícula" msgid "Guides" msgstr "Guías" +#: libbirdfont/Help.vala:29+msgid "BirdFont is a font editor."+msgstr ""+ #: libbirdfont/HiddenTools.vala:33 msgid "Zoom in" msgstr "Ampliar"@@ -732,34 +745,40 @@ msgstr "a" msgid "Glyph" msgstr "Glifo" -#: libbirdfont/KerningDisplay.vala:97 libbirdfont/KerningDisplay.vala:877+#: libbirdfont/KerningDisplay.vala:60+msgid ""+"Kerning is the process of adjusting the space between two letters. You can "+"cahnge the space between one letter and all other letters in the spacing tab."+msgstr ""++#: libbirdfont/KerningDisplay.vala:101 libbirdfont/KerningDisplay.vala:882 msgid "Kerning" msgstr "Interletraje" -#: libbirdfont/KerningDisplay.vala:105+#: libbirdfont/KerningDisplay.vala:109 msgid "The current kerning class is malformed." msgstr "La clase de interletraje actual tiene un formato incorrecto." -#: libbirdfont/KerningDisplay.vala:106+#: libbirdfont/KerningDisplay.vala:110 msgid "Add single characters separated by space and ranges on the form A-Z." msgstr "Se admiten caracteres separados por espacios entre la A y la Z." -#: libbirdfont/KerningDisplay.vala:107+#: libbirdfont/KerningDisplay.vala:111 msgid "Type “space” to kern the space character and “divis” to kern -." msgstr "" "Escribe “space” para interletrar el caracter de espacio y “divis” para " "inteletrar -." -#: libbirdfont/KerningDisplay.vala:678 libbirdfont/OverviewTools.vala:78+#: libbirdfont/KerningDisplay.vala:683 libbirdfont/OverviewTools.vala:78 msgid "Unicode" msgstr "Unicode" -#: libbirdfont/KerningDisplay.vala:678+#: libbirdfont/KerningDisplay.vala:683 msgid "Insert" msgstr "Insertar" -#: libbirdfont/KerningDisplay.vala:877 libbirdfont/MainWindow.vala:235-#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:208+#: libbirdfont/KerningDisplay.vala:882 libbirdfont/MainWindow.vala:241+#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:231 msgid "Close" msgstr "Cerrar" @@ -775,11 +794,11 @@ msgstr "No se emparejaron kernings" msgid "Kerning class" msgstr "Clase de interletraje" -#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:144+#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:166 #: libbirdfont/Ligatures.vala:118 libbirdfont/Ligatures.vala:141 #: libbirdfont/Ligatures.vala:164 libbirdfont/Ligatures.vala:196 #: libbirdfont/SpacingClass.vala:45 libbirdfont/SpacingTab.vala:232-#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:208+#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:231 #: libbirdfont/Theme.vala:687 msgid "Set" msgstr "Definir"@@ -847,7 +866,11 @@ msgstr "Conjunto de caracteres" msgid "Character Set" msgstr "Conjunto de caracteres" -#: libbirdfont/LayerLabel.vala:144+#: libbirdfont/LayerLabel.vala:101+msgid "Hide the layer."+msgstr ""++#: libbirdfont/LayerLabel.vala:166 #, fuzzy msgid "Layer" msgstr "Capas"@@ -890,7 +913,7 @@ msgid "Contextual Substitutions" msgstr "Nueva sustitución contextual"  #: libbirdfont/LigatureList.vala:126 libbirdfont/LigatureList.vala:140-#: libbirdfont/Menu.vala:445+#: libbirdfont/Menu.vala:447 msgid "Ligatures" msgstr "Ligaduras" @@ -935,7 +958,7 @@ msgstr "" msgid "You need an older version of Birdfont to open it." msgstr "" -#: libbirdfont/MainWindow.vala:235+#: libbirdfont/MainWindow.vala:241 msgid "Glyph sequence" msgstr "Secuencia de glifos" @@ -996,8 +1019,8 @@ msgstr "Seleccionar todos los trazos" msgid "Move To Baseline" msgstr "Mover a la línea base" -#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:250-#: libbirdfont/OverView.vala:269 libbirdfont/OverviewTools.vala:154+#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:257+#: libbirdfont/OverView.vala:276 libbirdfont/OverviewTools.vala:154 msgid "Search" msgstr "Buscar" @@ -1070,105 +1093,109 @@ msgstr "Exportar tipografías" msgid "Export Glyph as SVG" msgstr "Exportar glifo como SVG" -#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:303+#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:304 msgid "Import SVG file" msgstr "Importar archivo SVG" -#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:313 #, fuzzy msgid "Import SVG folder" msgstr "Importar archivo SVG" -#: libbirdfont/Menu.vala:303 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:304 libbirdfont/Menu.vala:313 msgid "color" msgstr "" -#: libbirdfont/Menu.vala:320+#: libbirdfont/Menu.vala:322 msgid "Import Background Image" msgstr "Importar imagen de fondo" -#: libbirdfont/Menu.vala:334 libbirdfont/Preview.vala:27+#: libbirdfont/Menu.vala:336 libbirdfont/Preview.vala:27 msgid "Preview" msgstr "Previsualizar" -#: libbirdfont/Menu.vala:342+#: libbirdfont/Menu.vala:344 msgid "Tab" msgstr "Pestaña" -#: libbirdfont/Menu.vala:348+#: libbirdfont/Menu.vala:350 msgid "Next Tab" msgstr "Siguiente pestaña" -#: libbirdfont/Menu.vala:355+#: libbirdfont/Menu.vala:357 msgid "Previous Tab" msgstr "Pestaña anterior" -#: libbirdfont/Menu.vala:362+#: libbirdfont/Menu.vala:364 msgid "Close Tab" msgstr "Cerrar pestaña" -#: libbirdfont/Menu.vala:369+#: libbirdfont/Menu.vala:371 msgid "Close All Tabs" msgstr "Cerrar todas las pestañas" -#: libbirdfont/Menu.vala:377+#: libbirdfont/Menu.vala:379 msgid "Spacing and Kerning" msgstr "" -#: libbirdfont/Menu.vala:383+#: libbirdfont/Menu.vala:385 msgid "Show Spacing Tab" msgstr "Mostrar pestaña de espaciado" -#: libbirdfont/Menu.vala:390+#: libbirdfont/Menu.vala:392 msgid "Show Kerning Tab" msgstr "Mostrar pestaña de interletrado" -#: libbirdfont/Menu.vala:397+#: libbirdfont/Menu.vala:399 msgid "List Kerning Pairs" msgstr "Enumerar pares de interletrado" -#: libbirdfont/Menu.vala:404 libbirdfont/SpacingClassTab.vala:80+#: libbirdfont/Menu.vala:406 libbirdfont/SpacingClassTab.vala:80 msgid "Spacing Classes" msgstr "Clases de espaciado" -#: libbirdfont/Menu.vala:411+#: libbirdfont/Menu.vala:413 msgid "Select Next Kerning Pair" msgstr "Seleccionar siguiente par de interletrado" -#: libbirdfont/Menu.vala:420+#: libbirdfont/Menu.vala:422 msgid "Select Previous Kerning Pair" msgstr "Seleccionar par de interletrado anterior" -#: libbirdfont/Menu.vala:429+#: libbirdfont/Menu.vala:431 #, fuzzy msgid "Load Kerning Strings" msgstr "Cargar lineas kerning" -#: libbirdfont/Menu.vala:436+#: libbirdfont/Menu.vala:438 #, fuzzy msgid "Reload Kerning Strings" msgstr "Cargar lineas kerning" -#: libbirdfont/Menu.vala:451+#: libbirdfont/Menu.vala:453 msgid "Show Ligatures" msgstr "Mostrar ligaturas" -#: libbirdfont/Menu.vala:458+#: libbirdfont/Menu.vala:460 msgid "Add Ligature" msgstr "Añadir ligatura" -#: libbirdfont/Menu.vala:467+#: libbirdfont/Menu.vala:469 msgid "Git" msgstr "Git" -#: libbirdfont/Menu.vala:473+#: libbirdfont/Menu.vala:475 msgid "Save As .bfp" msgstr "Guardar como .bfp" -#: libbirdfont/Menu.vala:482 libbirdfont/OverView.vala:471+#: libbirdfont/Menu.vala:484 libbirdfont/OverView.vala:478 msgid "Overview" msgstr "Vista general" +#: libbirdfont/Menu.vala:513+msgid "Help"+msgstr ""+ #: libbirdfont/MenuItem.vala:82 msgid "UP" msgstr ""@@ -1250,15 +1277,11 @@ msgstr "" msgid "Swashes" msgstr "" -#: libbirdfont/OverView.vala:250 libbirdfont/OverView.vala:269+#: libbirdfont/OverView.vala:257 libbirdfont/OverView.vala:276 msgid "Filter" msgstr "Filtro" -#: libbirdfont/OverView.vala:673-msgid "No glyphs in this view."-msgstr "No hay glifos en esta vista."--#: libbirdfont/OverView.vala:1484+#: libbirdfont/OverView.vala:1498 msgid "See also:" msgstr "Ver también:" @@ -1437,10 +1460,6 @@ msgstr "" msgid "Right" msgstr "" -#: libbirdfont/SvgParser.vala:62 libbirdfont/SvgParser.vala:121-msgid "Import"-msgstr "Importar"- #: libbirdfont/Theme.vala:421 msgid "Canvas Background" msgstr ""@@ -1728,7 +1747,7 @@ msgstr "" msgid "Color" msgstr "" -#: libbirdfont/ToolItem.vala:44+#: libbirdfont/ToolItem.vala:66 msgid "Shift" msgstr "" @@ -1773,6 +1792,12 @@ msgstr "Formato de archivo desconocido." msgid "Writing" msgstr "Escribiendo" +#~ msgid "No glyphs in this view."+#~ msgstr "No hay glifos en esta vista."++#~ msgid "Import"+#~ msgstr "Importar"+ #~ msgid "Full name (name and style)" #~ msgstr "Nombre completo (nombre y estilo)" diff --git a/po/fi.po b/po/fi.poindex 8d8b294..387a469 100644--- a/po/fi.po+++ b/po/fi.po@@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n"-"POT-Creation-Date: 2015-12-22 20:35+0100\n"+"POT-Creation-Date: 2016-01-06 12:06+0100\n" "PO-Revision-Date: 2015-06-27 20:54+0000\n" "Last-Translator: Jyrki <yardan74@gmail.com>\n" "Language-Team: LANGUAGE <LL@li.org>\n"@@ -105,16 +105,16 @@ msgstr "Tiedostot" msgid "Parts" msgstr "Osat" -#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2421+#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2462 #: libbirdfont/LigatureList.vala:106 libbirdfont/OtfFeatureTable.vala:181 msgid "Add" msgstr "Lisää" -#: libbirdfont/BackgroundTools.vala:122+#: libbirdfont/BackgroundTools.vala:123 msgid "Select Glyph" msgstr "Valitse Glyyfi" -#: libbirdfont/BackgroundTools.vala:231 libbirdfont/LoadCallback.vala:102+#: libbirdfont/BackgroundTools.vala:233 libbirdfont/LoadCallback.vala:102 #: libbirdfont/Menu.vala:50 msgid "Open" msgstr "Avaa"@@ -188,18 +188,18 @@ msgid "Thai" msgstr "Thai"  #. / All lower case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:420+#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:433 msgid "a b c d e f g h i j k l m n o p q r s t u v w x y z" msgstr "a b c d e f g h i j k l m n o p q r s t u v w x y z å ä ö"  #. / All upper case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:421+#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:434 msgid "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z" msgstr "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Å Ä Ö"  #: libbirdfont/DescriptionDisplay.vala:66 #: libbirdfont/DescriptionDisplay.vala:277 libbirdfont/ExportSettings.vala:133-#: libbirdfont/Menu.vala:497 libbirdfont/TableLayout.vala:203+#: libbirdfont/Menu.vala:499 libbirdfont/TableLayout.vala:203 msgid "Name and Description" msgstr "Nimi ja kuvaus" @@ -237,7 +237,7 @@ msgid "Unique Identifier" msgstr "Yksilöllinen tunniste"  #: libbirdfont/DescriptionDisplay.vala:150 libbirdfont/ImportUtils.vala:161-#: libbirdfont/Menu.vala:504 libbirdfont/Menu.vala:506+#: libbirdfont/Menu.vala:506 libbirdfont/Menu.vala:508 #: libbirdfont/VersionList.vala:265 msgid "Version" msgstr "Versio"@@ -322,212 +322,221 @@ msgstr "Apulinjat & Ruudukko" msgid "Grid Size" msgstr "Ruudukon koko" -#: libbirdfont/DrawingTools.vala:194+#: libbirdfont/DrawingTools.vala:195 msgid "Move canvas" msgstr "Siirrä piirtoalaa" -#: libbirdfont/DrawingTools.vala:202+#: libbirdfont/DrawingTools.vala:196+msgid "Press space and click to move the canvas."+msgstr ""++#: libbirdfont/DrawingTools.vala:204 msgid "Delete" msgstr "Poista" -#: libbirdfont/DrawingTools.vala:209+#: libbirdfont/DrawingTools.vala:211 msgid "Select all points or paths" msgstr "Valitse kaikki pisteet tai polut" -#: libbirdfont/DrawingTools.vala:225 libbirdfont/Menu.vala:99+#: libbirdfont/DrawingTools.vala:227 libbirdfont/Menu.vala:99 msgid "Undo" msgstr "Kumoa" -#: libbirdfont/DrawingTools.vala:232+#: libbirdfont/DrawingTools.vala:234 msgid "Insert new points on path" msgstr "Lisäää uusia pisteitä tai polkuja" -#: libbirdfont/DrawingTools.vala:241+#: libbirdfont/DrawingTools.vala:244 msgid "Create quadratic Bézier curves" msgstr "Luo toisen asteen Bézier-käyriä" -#: libbirdfont/DrawingTools.vala:250+#: libbirdfont/DrawingTools.vala:245+msgid ""+"All control points will be converted to quadratic points in the TTF format."+msgstr ""++#: libbirdfont/DrawingTools.vala:255 msgid "Create cubic Bézier curves" msgstr "Luo kolmannen asteen Bézier-käyriä" -#: libbirdfont/DrawingTools.vala:259+#: libbirdfont/DrawingTools.vala:264 msgid "Quadratic path with two line handles" msgstr "Toisen asteen polku kahdella kahvalla" -#: libbirdfont/DrawingTools.vala:268+#: libbirdfont/DrawingTools.vala:273 msgid "Convert selected points" msgstr "Muunna valitut pisteet" -#: libbirdfont/DrawingTools.vala:279+#: libbirdfont/DrawingTools.vala:284 msgid "X coordinate" msgstr "X-koordinaatti" -#: libbirdfont/DrawingTools.vala:323+#: libbirdfont/DrawingTools.vala:328 msgid "Y coordinate" msgstr "Y-koordinaatti" -#: libbirdfont/DrawingTools.vala:366+#: libbirdfont/DrawingTools.vala:371 msgid "Rotation" msgstr "Kierto" -#: libbirdfont/DrawingTools.vala:405+#: libbirdfont/DrawingTools.vala:410 msgid "Width" msgstr "Leveys" -#: libbirdfont/DrawingTools.vala:430+#: libbirdfont/DrawingTools.vala:435 msgid "Height" msgstr "Korkeus" -#: libbirdfont/DrawingTools.vala:473+#: libbirdfont/DrawingTools.vala:478 msgid "Tie curve handles for the selected edit point" msgstr "Sido käyrän valitun muokkauspisteen kahvat " -#: libbirdfont/DrawingTools.vala:524+#: libbirdfont/DrawingTools.vala:529 msgid "Symmetrical handles" msgstr "Symmetriset kahvat" -#: libbirdfont/DrawingTools.vala:554+#: libbirdfont/DrawingTools.vala:559 msgid "Convert segment to line." msgstr "Muuta lohko viivaksi" -#: libbirdfont/DrawingTools.vala:562+#: libbirdfont/DrawingTools.vala:567 msgid "Create counter from outline" msgstr "Luo reunaviivasta vastakkainen" -#: libbirdfont/DrawingTools.vala:565+#: libbirdfont/DrawingTools.vala:570 msgid "Scale object to font top/baseline" msgstr "" -#: libbirdfont/DrawingTools.vala:574+#: libbirdfont/DrawingTools.vala:579 msgid "Close path" msgstr "Sulje polku" -#: libbirdfont/DrawingTools.vala:596+#: libbirdfont/DrawingTools.vala:601 msgid "Move to path to the bottom of the layer" msgstr "Laske tämä taso pinon alimmaksi " -#: libbirdfont/DrawingTools.vala:610+#: libbirdfont/DrawingTools.vala:615 msgid "Flip path vertically" msgstr "Peilaa polku pystysuunnassa" -#: libbirdfont/DrawingTools.vala:618+#: libbirdfont/DrawingTools.vala:623 msgid "Flip path horizontally" msgstr "Peilaa polku vaakasuunnassa" -#: libbirdfont/DrawingTools.vala:627+#: libbirdfont/DrawingTools.vala:632 msgid "Set size for background image" msgstr "Aseta koko taustakuvalle" -#: libbirdfont/DrawingTools.vala:665+#: libbirdfont/DrawingTools.vala:670 msgid "Show/hide background image" msgstr "Näytä/piilota taustakuva" -#: libbirdfont/DrawingTools.vala:676+#: libbirdfont/DrawingTools.vala:681 msgid "Insert a new background image" msgstr "Lisää uusi taustakuva" -#: libbirdfont/DrawingTools.vala:690 libbirdfont/ThemeTab.vala:151+#: libbirdfont/DrawingTools.vala:695 libbirdfont/ThemeTab.vala:151 msgid "High contrast" msgstr "Korkea kontrasti" -#: libbirdfont/DrawingTools.vala:704+#: libbirdfont/DrawingTools.vala:709 msgid "Set background threshold" msgstr "Aseta taustan kynnysarvo" -#: libbirdfont/DrawingTools.vala:723+#: libbirdfont/DrawingTools.vala:728 msgid "Amount of autotrace details" msgstr "Automaattijäljityksen yksityiskohtien määrä" -#: libbirdfont/DrawingTools.vala:742+#: libbirdfont/DrawingTools.vala:747 msgid "Autotrace simplification" msgstr "Automaattijäljityksen yksinkertaistus" -#: libbirdfont/DrawingTools.vala:752+#: libbirdfont/DrawingTools.vala:757 msgid "Autotrace background image" msgstr "Automaattijäljitä taustakuva" -#: libbirdfont/DrawingTools.vala:760+#: libbirdfont/DrawingTools.vala:765 msgid "Delete background image" msgstr "Poista taustakuva" -#: libbirdfont/DrawingTools.vala:767+#: libbirdfont/DrawingTools.vala:772 msgid "Add layer" msgstr "Lisää taso" -#: libbirdfont/DrawingTools.vala:777+#: libbirdfont/DrawingTools.vala:782 msgid "Show layers" msgstr "Näytä tasot" -#: libbirdfont/DrawingTools.vala:787+#: libbirdfont/DrawingTools.vala:792 msgid "Apply stroke" msgstr "Ota viiva käyttöön" -#: libbirdfont/DrawingTools.vala:821 libbirdfont/SettingsTab.vala:34+#: libbirdfont/DrawingTools.vala:826 libbirdfont/SettingsTab.vala:34 msgid "Stroke width" msgstr "Viivan leveys" -#: libbirdfont/DrawingTools.vala:863+#: libbirdfont/DrawingTools.vala:872 msgid "Create outline form stroke" msgstr "Luo viivasta reunaviivat" -#: libbirdfont/DrawingTools.vala:872+#: libbirdfont/DrawingTools.vala:881 msgid "Butt line cap" msgstr "Tasattu viivan pää" -#: libbirdfont/DrawingTools.vala:896+#: libbirdfont/DrawingTools.vala:908 msgid "Round line cap" msgstr "Pyöristetty viivan pää" -#: libbirdfont/DrawingTools.vala:921+#: libbirdfont/DrawingTools.vala:936 msgid "Square line cap" msgstr "Neliön muotoinen viivan pää" -#: libbirdfont/DrawingTools.vala:990+#: libbirdfont/DrawingTools.vala:1008 msgid "Show guidelines" msgstr "Näytä apulinjat" -#: libbirdfont/DrawingTools.vala:1002+#: libbirdfont/DrawingTools.vala:1020 msgid "Show more guidelines" msgstr "näytä lisää apuviivoja" -#: libbirdfont/DrawingTools.vala:1018+#: libbirdfont/DrawingTools.vala:1036 msgid "Show guidelines at top and bottom margin" msgstr "Näytä apulinjat ylä- ja alamarginaalissa" -#: libbirdfont/DrawingTools.vala:1042+#: libbirdfont/DrawingTools.vala:1060 msgid "Lock guides and grid" msgstr "" -#: libbirdfont/DrawingTools.vala:1084+#: libbirdfont/DrawingTools.vala:1102 msgid "Zoom Out More" msgstr "Laajenna näkymää lisää" -#: libbirdfont/DrawingTools.vala:1093+#: libbirdfont/DrawingTools.vala:1111 msgid "Show full glyph" msgstr "Näytä koko glyyfi" -#: libbirdfont/DrawingTools.vala:1100+#: libbirdfont/DrawingTools.vala:1118 msgid "Fit in view" msgstr "Sovita näkymään" -#: libbirdfont/DrawingTools.vala:1107+#: libbirdfont/DrawingTools.vala:1125 msgid "Zoom in on background image" msgstr "Zoomaa taustakuvaan" -#: libbirdfont/DrawingTools.vala:1117+#: libbirdfont/DrawingTools.vala:1135 msgid "Previous view" msgstr "Edellinen näkymä" -#: libbirdfont/DrawingTools.vala:1123+#: libbirdfont/DrawingTools.vala:1141 msgid "Next view" msgstr "Seuraava näkymä" -#: libbirdfont/DrawingTools.vala:1525+#: libbirdfont/DrawingTools.vala:1543 msgid "Set size for grid" msgstr "Aseta ruudukon koko"  #: libbirdfont/ExportSettings.vala:41 libbirdfont/ExportSettings.vala:185-#: libbirdfont/Menu.vala:327+#: libbirdfont/Menu.vala:329 msgid "Export Settings" msgstr "Vientiasetukset" @@ -551,13 +560,13 @@ msgstr "Muodot" msgid "Export" msgstr "Vie" -#: libbirdfont/ExportTool.vala:209 libbirdfont/Menu.vala:64-#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:68+#: libbirdfont/ExportTool.vala:222 libbirdfont/Menu.vala:64+#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:69 #: libbirdfont/SaveDialog.vala:38 libbirdfont/SaveDialogListener.vala:29 msgid "Save" msgstr "Tallenna" -#: libbirdfont/ExportTool.vala:419+#: libbirdfont/ExportTool.vala:432 msgid "Alphabet" msgstr "Aakkosto" @@ -607,7 +616,7 @@ msgstr "Avaa fontti" msgid "Save font" msgstr "Tallenna fontti" -#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:490+#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:492 #: libbirdfont/SettingsDisplay.vala:225 libbirdfont/SettingsTab.vala:31 #: libbirdfont/SettingsTab.vala:159 msgid "Settings"@@ -618,39 +627,39 @@ msgstr "Asetukset" msgid "Themes" msgstr "Teemat" -#: libbirdfont/Glyph.vala:550+#: libbirdfont/Glyph.vala:602 msgid "top margin" msgstr "" -#: libbirdfont/Glyph.vala:557+#: libbirdfont/Glyph.vala:609 msgid "top" msgstr "" -#: libbirdfont/Glyph.vala:564+#: libbirdfont/Glyph.vala:616 msgid "x-height" msgstr "" -#: libbirdfont/Glyph.vala:573+#: libbirdfont/Glyph.vala:625 msgid "baseline" msgstr "" -#: libbirdfont/Glyph.vala:580+#: libbirdfont/Glyph.vala:632 msgid "bottom" msgstr "" -#: libbirdfont/Glyph.vala:586+#: libbirdfont/Glyph.vala:638 msgid "bottom margin" msgstr "" -#: libbirdfont/Glyph.vala:592+#: libbirdfont/Glyph.vala:644 msgid "left" msgstr "" -#: libbirdfont/Glyph.vala:601+#: libbirdfont/Glyph.vala:653 msgid "right" msgstr "" -#: libbirdfont/Glyph.vala:2421+#: libbirdfont/Glyph.vala:2462 msgid "Guide" msgstr "Apulinja" @@ -662,6 +671,10 @@ msgstr "Näytä ruudukko" msgid "Guides" msgstr "Apulinjat" +#: libbirdfont/Help.vala:29+msgid "BirdFont is a font editor."+msgstr ""+ #: libbirdfont/HiddenTools.vala:33 msgid "Zoom in" msgstr "Lähennä"@@ -727,33 +740,39 @@ msgstr "" msgid "Glyph" msgstr "Glyyfi" -#: libbirdfont/KerningDisplay.vala:97 libbirdfont/KerningDisplay.vala:877+#: libbirdfont/KerningDisplay.vala:60+msgid ""+"Kerning is the process of adjusting the space between two letters. You can "+"cahnge the space between one letter and all other letters in the spacing tab."+msgstr ""++#: libbirdfont/KerningDisplay.vala:101 libbirdfont/KerningDisplay.vala:882 msgid "Kerning" msgstr "Parivälistys" -#: libbirdfont/KerningDisplay.vala:105+#: libbirdfont/KerningDisplay.vala:109 msgid "The current kerning class is malformed." msgstr "Nykyinen parivälistysluokka on epämuodostunut." -#: libbirdfont/KerningDisplay.vala:106+#: libbirdfont/KerningDisplay.vala:110 msgid "Add single characters separated by space and ranges on the form A-Z." msgstr "Lisää yksittäisiä merkkejä A-Z väliltä välilyönnillä erotettuna." -#: libbirdfont/KerningDisplay.vala:107+#: libbirdfont/KerningDisplay.vala:111 msgid "Type “space” to kern the space character and “divis” to kern -." msgstr "" "Kirjoita \"space\" välistääksesi välilyöntiä tai \"divis\" vlälistääksesi -." -#: libbirdfont/KerningDisplay.vala:678 libbirdfont/OverviewTools.vala:78+#: libbirdfont/KerningDisplay.vala:683 libbirdfont/OverviewTools.vala:78 msgid "Unicode" msgstr "Unicode" -#: libbirdfont/KerningDisplay.vala:678+#: libbirdfont/KerningDisplay.vala:683 msgid "Insert" msgstr "Lisää" -#: libbirdfont/KerningDisplay.vala:877 libbirdfont/MainWindow.vala:235-#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:208+#: libbirdfont/KerningDisplay.vala:882 libbirdfont/MainWindow.vala:241+#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:231 msgid "Close" msgstr "Sulje" @@ -769,11 +788,11 @@ msgstr "Parivälistyspareja ei ole luotu." msgid "Kerning class" msgstr "Parivälistysluokka" -#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:144+#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:166 #: libbirdfont/Ligatures.vala:118 libbirdfont/Ligatures.vala:141 #: libbirdfont/Ligatures.vala:164 libbirdfont/Ligatures.vala:196 #: libbirdfont/SpacingClass.vala:45 libbirdfont/SpacingTab.vala:232-#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:208+#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:231 #: libbirdfont/Theme.vala:687 msgid "Set" msgstr "Aseta"@@ -840,7 +859,11 @@ msgstr "Merkistökoodaus" msgid "Character Set" msgstr "Merkistökoodaus" -#: libbirdfont/LayerLabel.vala:144+#: libbirdfont/LayerLabel.vala:101+msgid "Hide the layer."+msgstr ""++#: libbirdfont/LayerLabel.vala:166 msgid "Layer" msgstr "Taso" @@ -883,7 +906,7 @@ msgid "Contextual Substitutions" msgstr ""  #: libbirdfont/LigatureList.vala:126 libbirdfont/LigatureList.vala:140-#: libbirdfont/Menu.vala:445+#: libbirdfont/Menu.vala:447 #, fuzzy msgid "Ligatures" msgstr "Ligatuuri"@@ -928,7 +951,7 @@ msgstr "Tämä fontti on tehty Birdfontin vanhemmalla versiolla." msgid "You need an older version of Birdfont to open it." msgstr "Tarvitset vanhemman version Birdfontista avataksesi sen." -#: libbirdfont/MainWindow.vala:235+#: libbirdfont/MainWindow.vala:241 msgid "Glyph sequence" msgstr "Glyyfijono" @@ -989,8 +1012,8 @@ msgstr "" msgid "Move To Baseline" msgstr "Siirrä peruslinjalle" -#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:250-#: libbirdfont/OverView.vala:269 libbirdfont/OverviewTools.vala:154+#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:257+#: libbirdfont/OverView.vala:276 libbirdfont/OverviewTools.vala:154 msgid "Search" msgstr "Etsi" @@ -1063,103 +1086,107 @@ msgstr "Vie Fontit" msgid "Export Glyph as SVG" msgstr "Vie glyyfi SVG:nä" -#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:303+#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:304 msgid "Import SVG file" msgstr "Tuo SVG-tiedosto" -#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:313 msgid "Import SVG folder" msgstr "Tuo SVG-kansio" -#: libbirdfont/Menu.vala:303 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:304 libbirdfont/Menu.vala:313 msgid "color" msgstr "" -#: libbirdfont/Menu.vala:320+#: libbirdfont/Menu.vala:322 msgid "Import Background Image" msgstr "Tuo Taustakuva" -#: libbirdfont/Menu.vala:334 libbirdfont/Preview.vala:27+#: libbirdfont/Menu.vala:336 libbirdfont/Preview.vala:27 msgid "Preview" msgstr "" -#: libbirdfont/Menu.vala:342+#: libbirdfont/Menu.vala:344 msgid "Tab" msgstr "" -#: libbirdfont/Menu.vala:348+#: libbirdfont/Menu.vala:350 msgid "Next Tab" msgstr "" -#: libbirdfont/Menu.vala:355+#: libbirdfont/Menu.vala:357 msgid "Previous Tab" msgstr "" -#: libbirdfont/Menu.vala:362+#: libbirdfont/Menu.vala:364 msgid "Close Tab" msgstr "" -#: libbirdfont/Menu.vala:369+#: libbirdfont/Menu.vala:371 msgid "Close All Tabs" msgstr "" -#: libbirdfont/Menu.vala:377+#: libbirdfont/Menu.vala:379 msgid "Spacing and Kerning" msgstr "Välistys ja Parivälistys" -#: libbirdfont/Menu.vala:383+#: libbirdfont/Menu.vala:385 msgid "Show Spacing Tab" msgstr "Näytä Välistys välilehti" -#: libbirdfont/Menu.vala:390+#: libbirdfont/Menu.vala:392 msgid "Show Kerning Tab" msgstr "Näytä parivälistys välilehti" -#: libbirdfont/Menu.vala:397+#: libbirdfont/Menu.vala:399 msgid "List Kerning Pairs" msgstr "Listaa parivälistysparit" -#: libbirdfont/Menu.vala:404 libbirdfont/SpacingClassTab.vala:80+#: libbirdfont/Menu.vala:406 libbirdfont/SpacingClassTab.vala:80 msgid "Spacing Classes" msgstr "Välistysluokat" -#: libbirdfont/Menu.vala:411+#: libbirdfont/Menu.vala:413 msgid "Select Next Kerning Pair" msgstr "Valitse seuraava arivälistyspari" -#: libbirdfont/Menu.vala:420+#: libbirdfont/Menu.vala:422 msgid "Select Previous Kerning Pair" msgstr "Valitse edellinen parivälistyspari" -#: libbirdfont/Menu.vala:429+#: libbirdfont/Menu.vala:431 msgid "Load Kerning Strings" msgstr "Lataa parivälistysketjut" -#: libbirdfont/Menu.vala:436+#: libbirdfont/Menu.vala:438 msgid "Reload Kerning Strings" msgstr "Lataa parivälistysketjut uudelleen" -#: libbirdfont/Menu.vala:451+#: libbirdfont/Menu.vala:453 msgid "Show Ligatures" msgstr "Näytä ligatuurit" -#: libbirdfont/Menu.vala:458+#: libbirdfont/Menu.vala:460 #, fuzzy msgid "Add Ligature" msgstr "Lisää ligatuuri" -#: libbirdfont/Menu.vala:467+#: libbirdfont/Menu.vala:469 msgid "Git" msgstr "" -#: libbirdfont/Menu.vala:473+#: libbirdfont/Menu.vala:475 msgid "Save As .bfp" msgstr "" -#: libbirdfont/Menu.vala:482 libbirdfont/OverView.vala:471+#: libbirdfont/Menu.vala:484 libbirdfont/OverView.vala:478 msgid "Overview" msgstr "" +#: libbirdfont/Menu.vala:513+msgid "Help"+msgstr ""+ #: libbirdfont/MenuItem.vala:82 msgid "UP" msgstr "YLÖS"@@ -1241,15 +1268,11 @@ msgstr "" msgid "Swashes" msgstr "" -#: libbirdfont/OverView.vala:250 libbirdfont/OverView.vala:269+#: libbirdfont/OverView.vala:257 libbirdfont/OverView.vala:276 msgid "Filter" msgstr "Suodata" -#: libbirdfont/OverView.vala:673-msgid "No glyphs in this view."-msgstr "Ei glyyfejä tässä näkymässä."--#: libbirdfont/OverView.vala:1484+#: libbirdfont/OverView.vala:1498 msgid "See also:" msgstr "Katso myös:" @@ -1428,10 +1451,6 @@ msgstr "Vasen" msgid "Right" msgstr "Oikea" -#: libbirdfont/SvgParser.vala:62 libbirdfont/SvgParser.vala:121-msgid "Import"-msgstr "Tuo"- #: libbirdfont/Theme.vala:421 msgid "Canvas Background" msgstr "Piirtoalan tausta"@@ -1718,7 +1737,7 @@ msgstr "Mukautettu" msgid "Color" msgstr "Väri" -#: libbirdfont/ToolItem.vala:44+#: libbirdfont/ToolItem.vala:66 msgid "Shift" msgstr "" @@ -1763,6 +1782,12 @@ msgstr "" msgid "Writing" msgstr "" +#~ msgid "No glyphs in this view."+#~ msgstr "Ei glyyfejä tässä näkymässä."++#~ msgid "Import"+#~ msgstr "Tuo"+ #, fuzzy #~ msgid "Full name (name and style)" #~ msgstr "Koko nimi (Nimi ja tyyli)"diff --git a/po/fr.po b/po/fr.poindex bb526cc..a932fb0 100644--- a/po/fr.po+++ b/po/fr.po@@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n"-"POT-Creation-Date: 2015-12-22 20:35+0100\n"+"POT-Creation-Date: 2016-01-06 12:06+0100\n" "PO-Revision-Date: 2015-12-19 13:31+0000\n" "Last-Translator: fasterthanlime <amos@itch.io>\n" "Language-Team: LANGUAGE <LL@li.org>\n"@@ -105,16 +105,16 @@ msgstr "Fichiers" msgid "Parts" msgstr "Parties" -#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2421+#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2462 #: libbirdfont/LigatureList.vala:106 libbirdfont/OtfFeatureTable.vala:181 msgid "Add" msgstr "Ajouter" -#: libbirdfont/BackgroundTools.vala:122+#: libbirdfont/BackgroundTools.vala:123 msgid "Select Glyph" msgstr "Sélectionner un glyphe" -#: libbirdfont/BackgroundTools.vala:231 libbirdfont/LoadCallback.vala:102+#: libbirdfont/BackgroundTools.vala:233 libbirdfont/LoadCallback.vala:102 #: libbirdfont/Menu.vala:50 msgid "Open" msgstr "Ouvrir"@@ -188,18 +188,18 @@ msgid "Thai" msgstr "Thaï"  #. / All lower case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:420+#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:433 msgid "a b c d e f g h i j k l m n o p q r s t u v w x y z" msgstr "a b c d e f g h i j k l m n o p q r s t u v w x y z"  #. / All upper case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:421+#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:434 msgid "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z" msgstr "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z"  #: libbirdfont/DescriptionDisplay.vala:66 #: libbirdfont/DescriptionDisplay.vala:277 libbirdfont/ExportSettings.vala:133-#: libbirdfont/Menu.vala:497 libbirdfont/TableLayout.vala:203+#: libbirdfont/Menu.vala:499 libbirdfont/TableLayout.vala:203 msgid "Name and Description" msgstr "Nom et description" @@ -238,7 +238,7 @@ msgid "Unique Identifier" msgstr "Identifiant unique"  #: libbirdfont/DescriptionDisplay.vala:150 libbirdfont/ImportUtils.vala:161-#: libbirdfont/Menu.vala:504 libbirdfont/Menu.vala:506+#: libbirdfont/Menu.vala:506 libbirdfont/Menu.vala:508 #: libbirdfont/VersionList.vala:265 msgid "Version" msgstr "Version"@@ -324,215 +324,224 @@ msgstr "Lignes guide et grille" msgid "Grid Size" msgstr "Taille de la grille" -#: libbirdfont/DrawingTools.vala:194+#: libbirdfont/DrawingTools.vala:195 msgid "Move canvas" msgstr "Déplacer le canevas" -#: libbirdfont/DrawingTools.vala:202+#: libbirdfont/DrawingTools.vala:196+msgid "Press space and click to move the canvas."+msgstr ""++#: libbirdfont/DrawingTools.vala:204 msgid "Delete" msgstr "Supprimer" -#: libbirdfont/DrawingTools.vala:209+#: libbirdfont/DrawingTools.vala:211 msgid "Select all points or paths" msgstr "Sélectionnez tous les points de la ligne" -#: libbirdfont/DrawingTools.vala:225 libbirdfont/Menu.vala:99+#: libbirdfont/DrawingTools.vala:227 libbirdfont/Menu.vala:99 msgid "Undo" msgstr "Retour" -#: libbirdfont/DrawingTools.vala:232+#: libbirdfont/DrawingTools.vala:234 msgid "Insert new points on path" msgstr "Insérer de nouveaux points sur le chemin" -#: libbirdfont/DrawingTools.vala:241+#: libbirdfont/DrawingTools.vala:244 msgid "Create quadratic Bézier curves" msgstr "Créer des courbes de Bézier quadratiques" -#: libbirdfont/DrawingTools.vala:250+#: libbirdfont/DrawingTools.vala:245+msgid ""+"All control points will be converted to quadratic points in the TTF format."+msgstr ""++#: libbirdfont/DrawingTools.vala:255 msgid "Create cubic Bézier curves" msgstr "Créer des courbes de Bézier cubiques" -#: libbirdfont/DrawingTools.vala:259+#: libbirdfont/DrawingTools.vala:264 msgid "Quadratic path with two line handles" msgstr "Chemin quadratique avec deux poignées de contrôle" -#: libbirdfont/DrawingTools.vala:268+#: libbirdfont/DrawingTools.vala:273 msgid "Convert selected points" msgstr "Convertir les points sélectionnés" -#: libbirdfont/DrawingTools.vala:279+#: libbirdfont/DrawingTools.vala:284 msgid "X coordinate" msgstr "Coordonnée X" -#: libbirdfont/DrawingTools.vala:323+#: libbirdfont/DrawingTools.vala:328 msgid "Y coordinate" msgstr "Coordonnée Y" -#: libbirdfont/DrawingTools.vala:366+#: libbirdfont/DrawingTools.vala:371 msgid "Rotation" msgstr "Rotation" -#: libbirdfont/DrawingTools.vala:405+#: libbirdfont/DrawingTools.vala:410 msgid "Width" msgstr "Largeur" -#: libbirdfont/DrawingTools.vala:430+#: libbirdfont/DrawingTools.vala:435 msgid "Height" msgstr "Hauteur" -#: libbirdfont/DrawingTools.vala:473+#: libbirdfont/DrawingTools.vala:478 msgid "Tie curve handles for the selected edit point" msgstr "Lier les points de la courbe pour le point sélectionné" -#: libbirdfont/DrawingTools.vala:524+#: libbirdfont/DrawingTools.vala:529 msgid "Symmetrical handles" msgstr "Poignées symétriques" -#: libbirdfont/DrawingTools.vala:554+#: libbirdfont/DrawingTools.vala:559 msgid "Convert segment to line." msgstr "Convertir le segment en ligne." -#: libbirdfont/DrawingTools.vala:562+#: libbirdfont/DrawingTools.vala:567 msgid "Create counter from outline" msgstr "Créer un compteur depuis la ligne extérieure" -#: libbirdfont/DrawingTools.vala:565+#: libbirdfont/DrawingTools.vala:570 msgid "Scale object to font top/baseline" msgstr "" -#: libbirdfont/DrawingTools.vala:574+#: libbirdfont/DrawingTools.vala:579 msgid "Close path" msgstr "Fermer le tracé" -#: libbirdfont/DrawingTools.vala:596+#: libbirdfont/DrawingTools.vala:601 #, fuzzy msgid "Move to path to the bottom of the layer" msgstr "Déplacer la feuille vers le calque bas" -#: libbirdfont/DrawingTools.vala:610+#: libbirdfont/DrawingTools.vala:615 msgid "Flip path vertically" msgstr "Retourner verticalement le tracé" -#: libbirdfont/DrawingTools.vala:618+#: libbirdfont/DrawingTools.vala:623 msgid "Flip path horizontally" msgstr "Retourner horizontalement le tracé" -#: libbirdfont/DrawingTools.vala:627+#: libbirdfont/DrawingTools.vala:632 msgid "Set size for background image" msgstr "Définir la taille de l'image de fond" -#: libbirdfont/DrawingTools.vala:665+#: libbirdfont/DrawingTools.vala:670 msgid "Show/hide background image" msgstr "Afficher/cacher l'image de fond" -#: libbirdfont/DrawingTools.vala:676+#: libbirdfont/DrawingTools.vala:681 msgid "Insert a new background image" msgstr "Insérer une nouvelle image de fond" -#: libbirdfont/DrawingTools.vala:690 libbirdfont/ThemeTab.vala:151+#: libbirdfont/DrawingTools.vala:695 libbirdfont/ThemeTab.vala:151 msgid "High contrast" msgstr "Contraste élevé" -#: libbirdfont/DrawingTools.vala:704+#: libbirdfont/DrawingTools.vala:709 msgid "Set background threshold" msgstr "Définir le seuil d'arrière plan" -#: libbirdfont/DrawingTools.vala:723+#: libbirdfont/DrawingTools.vala:728 msgid "Amount of autotrace details" msgstr "Importance des détails d'autotrace" -#: libbirdfont/DrawingTools.vala:742+#: libbirdfont/DrawingTools.vala:747 msgid "Autotrace simplification" msgstr "Simplification du tracé automatique" -#: libbirdfont/DrawingTools.vala:752+#: libbirdfont/DrawingTools.vala:757 msgid "Autotrace background image" msgstr "Tracé automatique de l'image d'arrière-plan" -#: libbirdfont/DrawingTools.vala:760+#: libbirdfont/DrawingTools.vala:765 msgid "Delete background image" msgstr "Effacer l'image de fond ?" -#: libbirdfont/DrawingTools.vala:767+#: libbirdfont/DrawingTools.vala:772 msgid "Add layer" msgstr "ajouter un calque" -#: libbirdfont/DrawingTools.vala:777+#: libbirdfont/DrawingTools.vala:782 msgid "Show layers" msgstr "" -#: libbirdfont/DrawingTools.vala:787+#: libbirdfont/DrawingTools.vala:792 #, fuzzy msgid "Apply stroke" msgstr "Appliquer le tracé" -#: libbirdfont/DrawingTools.vala:821 libbirdfont/SettingsTab.vala:34+#: libbirdfont/DrawingTools.vala:826 libbirdfont/SettingsTab.vala:34 msgid "Stroke width" msgstr "Épaisseur de trait" -#: libbirdfont/DrawingTools.vala:863+#: libbirdfont/DrawingTools.vala:872 msgid "Create outline form stroke" msgstr "Créer un contour depuis le tracé" -#: libbirdfont/DrawingTools.vala:872+#: libbirdfont/DrawingTools.vala:881 msgid "Butt line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:896+#: libbirdfont/DrawingTools.vala:908 msgid "Round line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:921+#: libbirdfont/DrawingTools.vala:936 msgid "Square line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:990+#: libbirdfont/DrawingTools.vala:1008 msgid "Show guidelines" msgstr "Afficher les recommandations" -#: libbirdfont/DrawingTools.vala:1002+#: libbirdfont/DrawingTools.vala:1020 #, fuzzy msgid "Show more guidelines" msgstr "Afficher les recommandations" -#: libbirdfont/DrawingTools.vala:1018+#: libbirdfont/DrawingTools.vala:1036 msgid "Show guidelines at top and bottom margin" msgstr "Afficher le guide aux marges du haut et du bas" -#: libbirdfont/DrawingTools.vala:1042+#: libbirdfont/DrawingTools.vala:1060 msgid "Lock guides and grid" msgstr "" -#: libbirdfont/DrawingTools.vala:1084+#: libbirdfont/DrawingTools.vala:1102 msgid "Zoom Out More" msgstr "Dézoomer encore" -#: libbirdfont/DrawingTools.vala:1093+#: libbirdfont/DrawingTools.vala:1111 msgid "Show full glyph" msgstr "Afficher le glyphe complet" -#: libbirdfont/DrawingTools.vala:1100+#: libbirdfont/DrawingTools.vala:1118 msgid "Fit in view" msgstr "" -#: libbirdfont/DrawingTools.vala:1107+#: libbirdfont/DrawingTools.vala:1125 msgid "Zoom in on background image" msgstr "Zoom sur l'image de fond" -#: libbirdfont/DrawingTools.vala:1117+#: libbirdfont/DrawingTools.vala:1135 msgid "Previous view" msgstr "Vue précédente" -#: libbirdfont/DrawingTools.vala:1123+#: libbirdfont/DrawingTools.vala:1141 msgid "Next view" msgstr "Vue suivante" -#: libbirdfont/DrawingTools.vala:1525+#: libbirdfont/DrawingTools.vala:1543 msgid "Set size for grid" msgstr "Définir les dimensions de la grille"  #: libbirdfont/ExportSettings.vala:41 libbirdfont/ExportSettings.vala:185-#: libbirdfont/Menu.vala:327+#: libbirdfont/Menu.vala:329 msgid "Export Settings" msgstr "" @@ -556,13 +565,13 @@ msgstr "" msgid "Export" msgstr "Exporter" -#: libbirdfont/ExportTool.vala:209 libbirdfont/Menu.vala:64-#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:68+#: libbirdfont/ExportTool.vala:222 libbirdfont/Menu.vala:64+#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:69 #: libbirdfont/SaveDialog.vala:38 libbirdfont/SaveDialogListener.vala:29 msgid "Save" msgstr "Enregistrer" -#: libbirdfont/ExportTool.vala:419+#: libbirdfont/ExportTool.vala:432 msgid "Alphabet" msgstr "" @@ -613,7 +622,7 @@ msgstr "" msgid "Save font" msgstr "" -#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:490+#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:492 #: libbirdfont/SettingsDisplay.vala:225 libbirdfont/SettingsTab.vala:31 #: libbirdfont/SettingsTab.vala:159 msgid "Settings"@@ -624,39 +633,39 @@ msgstr "" msgid "Themes" msgstr "" -#: libbirdfont/Glyph.vala:550+#: libbirdfont/Glyph.vala:602 msgid "top margin" msgstr "" -#: libbirdfont/Glyph.vala:557+#: libbirdfont/Glyph.vala:609 msgid "top" msgstr "" -#: libbirdfont/Glyph.vala:564+#: libbirdfont/Glyph.vala:616 msgid "x-height" msgstr "" -#: libbirdfont/Glyph.vala:573+#: libbirdfont/Glyph.vala:625 msgid "baseline" msgstr "" -#: libbirdfont/Glyph.vala:580+#: libbirdfont/Glyph.vala:632 msgid "bottom" msgstr "" -#: libbirdfont/Glyph.vala:586+#: libbirdfont/Glyph.vala:638 msgid "bottom margin" msgstr "" -#: libbirdfont/Glyph.vala:592+#: libbirdfont/Glyph.vala:644 msgid "left" msgstr "" -#: libbirdfont/Glyph.vala:601+#: libbirdfont/Glyph.vala:653 msgid "right" msgstr "" -#: libbirdfont/Glyph.vala:2421+#: libbirdfont/Glyph.vala:2462 msgid "Guide" msgstr "" @@ -668,6 +677,10 @@ msgstr "Afficher la grille" msgid "Guides" msgstr "" +#: libbirdfont/Help.vala:29+msgid "BirdFont is a font editor."+msgstr ""+ #: libbirdfont/HiddenTools.vala:33 msgid "Zoom in" msgstr "Zoom avant"@@ -733,35 +746,41 @@ msgstr "vers" msgid "Glyph" msgstr "Glyphe" -#: libbirdfont/KerningDisplay.vala:97 libbirdfont/KerningDisplay.vala:877+#: libbirdfont/KerningDisplay.vala:60+msgid ""+"Kerning is the process of adjusting the space between two letters. You can "+"cahnge the space between one letter and all other letters in the spacing tab."+msgstr ""++#: libbirdfont/KerningDisplay.vala:101 libbirdfont/KerningDisplay.vala:882 msgid "Kerning" msgstr "Crénage" -#: libbirdfont/KerningDisplay.vala:105+#: libbirdfont/KerningDisplay.vala:109 msgid "The current kerning class is malformed." msgstr "La classe de crénage actuelle est incorrect." -#: libbirdfont/KerningDisplay.vala:106+#: libbirdfont/KerningDisplay.vala:110 msgid "Add single characters separated by space and ranges on the form A-Z." msgstr "" "Ajouter des caractères simples séparé par un espace et des plages sous la " "forme A-Z." -#: libbirdfont/KerningDisplay.vala:107+#: libbirdfont/KerningDisplay.vala:111 msgid "Type “space” to kern the space character and “divis” to kern -." msgstr "" "Tapez [Espace] pour créner l'espace entre les caractères et [/] pour créner" -#: libbirdfont/KerningDisplay.vala:678 libbirdfont/OverviewTools.vala:78+#: libbirdfont/KerningDisplay.vala:683 libbirdfont/OverviewTools.vala:78 msgid "Unicode" msgstr "" -#: libbirdfont/KerningDisplay.vala:678+#: libbirdfont/KerningDisplay.vala:683 msgid "Insert" msgstr "" -#: libbirdfont/KerningDisplay.vala:877 libbirdfont/MainWindow.vala:235-#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:208+#: libbirdfont/KerningDisplay.vala:882 libbirdfont/MainWindow.vala:241+#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:231 msgid "Close" msgstr "Fermer" @@ -777,11 +796,11 @@ msgstr "" msgid "Kerning class" msgstr "type d'approche" -#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:144+#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:166 #: libbirdfont/Ligatures.vala:118 libbirdfont/Ligatures.vala:141 #: libbirdfont/Ligatures.vala:164 libbirdfont/Ligatures.vala:196 #: libbirdfont/SpacingClass.vala:45 libbirdfont/SpacingTab.vala:232-#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:208+#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:231 #: libbirdfont/Theme.vala:687 msgid "Set" msgstr "Définir"@@ -848,7 +867,11 @@ msgstr "Jeu de caractères" msgid "Character Set" msgstr "Jeu de caractères" -#: libbirdfont/LayerLabel.vala:144+#: libbirdfont/LayerLabel.vala:101+msgid "Hide the layer."+msgstr ""++#: libbirdfont/LayerLabel.vala:166 #, fuzzy msgid "Layer" msgstr "Couches"@@ -891,7 +914,7 @@ msgid "Contextual Substitutions" msgstr ""  #: libbirdfont/LigatureList.vala:126 libbirdfont/LigatureList.vala:140-#: libbirdfont/Menu.vala:445+#: libbirdfont/Menu.vala:447 msgid "Ligatures" msgstr "Ligatures" @@ -938,7 +961,7 @@ msgstr "" msgid "You need an older version of Birdfont to open it." msgstr "" -#: libbirdfont/MainWindow.vala:235+#: libbirdfont/MainWindow.vala:241 msgid "Glyph sequence" msgstr "Enchainement du glyphe" @@ -1011,8 +1034,8 @@ msgstr "Sélectionner _Tous les Chemins" msgid "Move To Baseline" msgstr "Déplacer vers Baseline" -#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:250-#: libbirdfont/OverView.vala:269 libbirdfont/OverviewTools.vala:154+#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:257+#: libbirdfont/OverView.vala:276 libbirdfont/OverviewTools.vala:154 msgid "Search" msgstr "Rechercher" @@ -1093,116 +1116,120 @@ msgstr "Exporter les polices" msgid "Export Glyph as SVG" msgstr "_Exporter le glyphe au format SVG" -#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:303+#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:304 msgid "Import SVG file" msgstr "" -#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:313 msgid "Import SVG folder" msgstr "" -#: libbirdfont/Menu.vala:303 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:304 libbirdfont/Menu.vala:313 msgid "color" msgstr "" -#: libbirdfont/Menu.vala:320+#: libbirdfont/Menu.vala:322 #, fuzzy msgid "Import Background Image" msgstr "Choix d'une image d'arrière-plan" -#: libbirdfont/Menu.vala:334 libbirdfont/Preview.vala:27+#: libbirdfont/Menu.vala:336 libbirdfont/Preview.vala:27 msgid "Preview" msgstr "Aperçu" -#: libbirdfont/Menu.vala:342+#: libbirdfont/Menu.vala:344 #, fuzzy msgid "Tab" msgstr "Onglet" -#: libbirdfont/Menu.vala:348+#: libbirdfont/Menu.vala:350 #, fuzzy msgid "Next Tab" msgstr "Onglet _Suivant" -#: libbirdfont/Menu.vala:355+#: libbirdfont/Menu.vala:357 #, fuzzy msgid "Previous Tab" msgstr "Onglet précédent" -#: libbirdfont/Menu.vala:362+#: libbirdfont/Menu.vala:364 #, fuzzy msgid "Close Tab" msgstr "_Fermer l'onglet" -#: libbirdfont/Menu.vala:369+#: libbirdfont/Menu.vala:371 #, fuzzy msgid "Close All Tabs" msgstr "_Fermer _tous les onglets" -#: libbirdfont/Menu.vala:377+#: libbirdfont/Menu.vala:379 msgid "Spacing and Kerning" msgstr "" -#: libbirdfont/Menu.vala:383+#: libbirdfont/Menu.vala:385 #, fuzzy msgid "Show Spacing Tab" msgstr "Montrer -l'Espacement de Tabulation" -#: libbirdfont/Menu.vala:390+#: libbirdfont/Menu.vala:392 #, fuzzy msgid "Show Kerning Tab" msgstr "Montrer l'onglet de crénage" -#: libbirdfont/Menu.vala:397+#: libbirdfont/Menu.vala:399 #, fuzzy msgid "List Kerning Pairs" msgstr "_Lister les paires de crénage" -#: libbirdfont/Menu.vala:404 libbirdfont/SpacingClassTab.vala:80+#: libbirdfont/Menu.vala:406 libbirdfont/SpacingClassTab.vala:80 #, fuzzy msgid "Spacing Classes" msgstr "classe espacement" -#: libbirdfont/Menu.vala:411+#: libbirdfont/Menu.vala:413 #, fuzzy msgid "Select Next Kerning Pair" msgstr "Sélectionner la Paire de Crénage _Suivante" -#: libbirdfont/Menu.vala:420+#: libbirdfont/Menu.vala:422 #, fuzzy msgid "Select Previous Kerning Pair" msgstr "Sélectionner la _Précédente Paire de Crénage" -#: libbirdfont/Menu.vala:429+#: libbirdfont/Menu.vala:431 msgid "Load Kerning Strings" msgstr "" -#: libbirdfont/Menu.vala:436+#: libbirdfont/Menu.vala:438 msgid "Reload Kerning Strings" msgstr "" -#: libbirdfont/Menu.vala:451+#: libbirdfont/Menu.vala:453 #, fuzzy msgid "Show Ligatures" msgstr "Montrer les Ligatures" -#: libbirdfont/Menu.vala:458+#: libbirdfont/Menu.vala:460 msgid "Add Ligature" msgstr "" -#: libbirdfont/Menu.vala:467+#: libbirdfont/Menu.vala:469 msgid "Git" msgstr "" -#: libbirdfont/Menu.vala:473+#: libbirdfont/Menu.vala:475 #, fuzzy msgid "Save As .bfp" msgstr "Enregistrer en .bfp" -#: libbirdfont/Menu.vala:482 libbirdfont/OverView.vala:471+#: libbirdfont/Menu.vala:484 libbirdfont/OverView.vala:478 msgid "Overview" msgstr "Vue d'ensemble" +#: libbirdfont/Menu.vala:513+msgid "Help"+msgstr ""+ #: libbirdfont/MenuItem.vala:82 msgid "UP" msgstr ""@@ -1284,15 +1311,11 @@ msgstr "" msgid "Swashes" msgstr "" -#: libbirdfont/OverView.vala:250 libbirdfont/OverView.vala:269+#: libbirdfont/OverView.vala:257 libbirdfont/OverView.vala:276 msgid "Filter" msgstr "Filtrer" -#: libbirdfont/OverView.vala:673-msgid "No glyphs in this view."-msgstr "Pas de glyphe dans cet aperçu."--#: libbirdfont/OverView.vala:1484+#: libbirdfont/OverView.vala:1498 msgid "See also:" msgstr "Voir également :" @@ -1472,10 +1495,6 @@ msgstr "" msgid "Right" msgstr "" -#: libbirdfont/SvgParser.vala:62 libbirdfont/SvgParser.vala:121-msgid "Import"-msgstr "Importer"- #: libbirdfont/Theme.vala:421 msgid "Canvas Background" msgstr ""@@ -1762,7 +1781,7 @@ msgstr "" msgid "Color" msgstr "" -#: libbirdfont/ToolItem.vala:44+#: libbirdfont/ToolItem.vala:66 msgid "Shift" msgstr "" @@ -1807,6 +1826,12 @@ msgstr "Format de fichier inconnu" msgid "Writing" msgstr "Écriture" +#~ msgid "No glyphs in this view."+#~ msgstr "Pas de glyphe dans cet aperçu."++#~ msgid "Import"+#~ msgstr "Importer"+ #~ msgid "Full name (name and style)" #~ msgstr "Nom complet (nom et style)" diff --git a/po/he.po b/po/he.poindex eb6fa57..6585d77 100644--- a/po/he.po+++ b/po/he.po@@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n"-"POT-Creation-Date: 2015-12-22 20:35+0100\n"+"POT-Creation-Date: 2016-01-06 12:06+0100\n" "PO-Revision-Date: 2015-09-01 15:09+0000\n" "Last-Translator: Anonymous Pootle User\n" "Language-Team: LANGUAGE <LL@li.org>\n"@@ -107,16 +107,16 @@ msgstr "קבצים" msgid "Parts" msgstr "חלקים" -#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2421+#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2462 #: libbirdfont/LigatureList.vala:106 libbirdfont/OtfFeatureTable.vala:181 msgid "Add" msgstr "" -#: libbirdfont/BackgroundTools.vala:122+#: libbirdfont/BackgroundTools.vala:123 msgid "Select Glyph" msgstr "" -#: libbirdfont/BackgroundTools.vala:231 libbirdfont/LoadCallback.vala:102+#: libbirdfont/BackgroundTools.vala:233 libbirdfont/LoadCallback.vala:102 #: libbirdfont/Menu.vala:50 msgid "Open" msgstr ""@@ -191,18 +191,18 @@ msgid "Thai" msgstr ""  #. / All lower case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:420+#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:433 msgid "a b c d e f g h i j k l m n o p q r s t u v w x y z" msgstr ""  #. / All upper case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:421+#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:434 msgid "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z" msgstr ""  #: libbirdfont/DescriptionDisplay.vala:66 #: libbirdfont/DescriptionDisplay.vala:277 libbirdfont/ExportSettings.vala:133-#: libbirdfont/Menu.vala:497 libbirdfont/TableLayout.vala:203+#: libbirdfont/Menu.vala:499 libbirdfont/TableLayout.vala:203 msgid "Name and Description" msgstr "" @@ -240,7 +240,7 @@ msgid "Unique Identifier" msgstr ""  #: libbirdfont/DescriptionDisplay.vala:150 libbirdfont/ImportUtils.vala:161-#: libbirdfont/Menu.vala:504 libbirdfont/Menu.vala:506+#: libbirdfont/Menu.vala:506 libbirdfont/Menu.vala:508 #: libbirdfont/VersionList.vala:265 msgid "Version" msgstr ""@@ -325,212 +325,221 @@ msgstr "" msgid "Grid Size" msgstr "" -#: libbirdfont/DrawingTools.vala:194+#: libbirdfont/DrawingTools.vala:195 msgid "Move canvas" msgstr "" -#: libbirdfont/DrawingTools.vala:202+#: libbirdfont/DrawingTools.vala:196+msgid "Press space and click to move the canvas."+msgstr ""++#: libbirdfont/DrawingTools.vala:204 msgid "Delete" msgstr "" -#: libbirdfont/DrawingTools.vala:209+#: libbirdfont/DrawingTools.vala:211 msgid "Select all points or paths" msgstr "" -#: libbirdfont/DrawingTools.vala:225 libbirdfont/Menu.vala:99+#: libbirdfont/DrawingTools.vala:227 libbirdfont/Menu.vala:99 msgid "Undo" msgstr "" -#: libbirdfont/DrawingTools.vala:232+#: libbirdfont/DrawingTools.vala:234 msgid "Insert new points on path" msgstr "" -#: libbirdfont/DrawingTools.vala:241+#: libbirdfont/DrawingTools.vala:244 msgid "Create quadratic Bézier curves" msgstr "" -#: libbirdfont/DrawingTools.vala:250+#: libbirdfont/DrawingTools.vala:245+msgid ""+"All control points will be converted to quadratic points in the TTF format."+msgstr ""++#: libbirdfont/DrawingTools.vala:255 msgid "Create cubic Bézier curves" msgstr "" -#: libbirdfont/DrawingTools.vala:259+#: libbirdfont/DrawingTools.vala:264 msgid "Quadratic path with two line handles" msgstr "" -#: libbirdfont/DrawingTools.vala:268+#: libbirdfont/DrawingTools.vala:273 msgid "Convert selected points" msgstr "" -#: libbirdfont/DrawingTools.vala:279+#: libbirdfont/DrawingTools.vala:284 msgid "X coordinate" msgstr "" -#: libbirdfont/DrawingTools.vala:323+#: libbirdfont/DrawingTools.vala:328 msgid "Y coordinate" msgstr "" -#: libbirdfont/DrawingTools.vala:366+#: libbirdfont/DrawingTools.vala:371 msgid "Rotation" msgstr "" -#: libbirdfont/DrawingTools.vala:405+#: libbirdfont/DrawingTools.vala:410 msgid "Width" msgstr "" -#: libbirdfont/DrawingTools.vala:430+#: libbirdfont/DrawingTools.vala:435 msgid "Height" msgstr "" -#: libbirdfont/DrawingTools.vala:473+#: libbirdfont/DrawingTools.vala:478 msgid "Tie curve handles for the selected edit point" msgstr "" -#: libbirdfont/DrawingTools.vala:524+#: libbirdfont/DrawingTools.vala:529 msgid "Symmetrical handles" msgstr "" -#: libbirdfont/DrawingTools.vala:554+#: libbirdfont/DrawingTools.vala:559 msgid "Convert segment to line." msgstr "" -#: libbirdfont/DrawingTools.vala:562+#: libbirdfont/DrawingTools.vala:567 msgid "Create counter from outline" msgstr "" -#: libbirdfont/DrawingTools.vala:565+#: libbirdfont/DrawingTools.vala:570 msgid "Scale object to font top/baseline" msgstr "" -#: libbirdfont/DrawingTools.vala:574+#: libbirdfont/DrawingTools.vala:579 msgid "Close path" msgstr "" -#: libbirdfont/DrawingTools.vala:596+#: libbirdfont/DrawingTools.vala:601 msgid "Move to path to the bottom of the layer" msgstr "" -#: libbirdfont/DrawingTools.vala:610+#: libbirdfont/DrawingTools.vala:615 msgid "Flip path vertically" msgstr "" -#: libbirdfont/DrawingTools.vala:618+#: libbirdfont/DrawingTools.vala:623 msgid "Flip path horizontally" msgstr "" -#: libbirdfont/DrawingTools.vala:627+#: libbirdfont/DrawingTools.vala:632 msgid "Set size for background image" msgstr "" -#: libbirdfont/DrawingTools.vala:665+#: libbirdfont/DrawingTools.vala:670 msgid "Show/hide background image" msgstr "" -#: libbirdfont/DrawingTools.vala:676+#: libbirdfont/DrawingTools.vala:681 msgid "Insert a new background image" msgstr "" -#: libbirdfont/DrawingTools.vala:690 libbirdfont/ThemeTab.vala:151+#: libbirdfont/DrawingTools.vala:695 libbirdfont/ThemeTab.vala:151 msgid "High contrast" msgstr "" -#: libbirdfont/DrawingTools.vala:704+#: libbirdfont/DrawingTools.vala:709 msgid "Set background threshold" msgstr "" -#: libbirdfont/DrawingTools.vala:723+#: libbirdfont/DrawingTools.vala:728 msgid "Amount of autotrace details" msgstr "" -#: libbirdfont/DrawingTools.vala:742+#: libbirdfont/DrawingTools.vala:747 msgid "Autotrace simplification" msgstr "" -#: libbirdfont/DrawingTools.vala:752+#: libbirdfont/DrawingTools.vala:757 msgid "Autotrace background image" msgstr "" -#: libbirdfont/DrawingTools.vala:760+#: libbirdfont/DrawingTools.vala:765 msgid "Delete background image" msgstr "" -#: libbirdfont/DrawingTools.vala:767+#: libbirdfont/DrawingTools.vala:772 msgid "Add layer" msgstr "" -#: libbirdfont/DrawingTools.vala:777+#: libbirdfont/DrawingTools.vala:782 msgid "Show layers" msgstr "" -#: libbirdfont/DrawingTools.vala:787+#: libbirdfont/DrawingTools.vala:792 msgid "Apply stroke" msgstr "" -#: libbirdfont/DrawingTools.vala:821 libbirdfont/SettingsTab.vala:34+#: libbirdfont/DrawingTools.vala:826 libbirdfont/SettingsTab.vala:34 msgid "Stroke width" msgstr "" -#: libbirdfont/DrawingTools.vala:863+#: libbirdfont/DrawingTools.vala:872 msgid "Create outline form stroke" msgstr "" -#: libbirdfont/DrawingTools.vala:872+#: libbirdfont/DrawingTools.vala:881 msgid "Butt line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:896+#: libbirdfont/DrawingTools.vala:908 msgid "Round line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:921+#: libbirdfont/DrawingTools.vala:936 msgid "Square line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:990+#: libbirdfont/DrawingTools.vala:1008 msgid "Show guidelines" msgstr "" -#: libbirdfont/DrawingTools.vala:1002+#: libbirdfont/DrawingTools.vala:1020 msgid "Show more guidelines" msgstr "" -#: libbirdfont/DrawingTools.vala:1018+#: libbirdfont/DrawingTools.vala:1036 msgid "Show guidelines at top and bottom margin" msgstr "" -#: libbirdfont/DrawingTools.vala:1042+#: libbirdfont/DrawingTools.vala:1060 msgid "Lock guides and grid" msgstr "" -#: libbirdfont/DrawingTools.vala:1084+#: libbirdfont/DrawingTools.vala:1102 msgid "Zoom Out More" msgstr "" -#: libbirdfont/DrawingTools.vala:1093+#: libbirdfont/DrawingTools.vala:1111 msgid "Show full glyph" msgstr "" -#: libbirdfont/DrawingTools.vala:1100+#: libbirdfont/DrawingTools.vala:1118 msgid "Fit in view" msgstr "" -#: libbirdfont/DrawingTools.vala:1107+#: libbirdfont/DrawingTools.vala:1125 msgid "Zoom in on background image" msgstr "" -#: libbirdfont/DrawingTools.vala:1117+#: libbirdfont/DrawingTools.vala:1135 msgid "Previous view" msgstr "" -#: libbirdfont/DrawingTools.vala:1123+#: libbirdfont/DrawingTools.vala:1141 msgid "Next view" msgstr "" -#: libbirdfont/DrawingTools.vala:1525+#: libbirdfont/DrawingTools.vala:1543 msgid "Set size for grid" msgstr ""  #: libbirdfont/ExportSettings.vala:41 libbirdfont/ExportSettings.vala:185-#: libbirdfont/Menu.vala:327+#: libbirdfont/Menu.vala:329 msgid "Export Settings" msgstr "" @@ -554,13 +563,13 @@ msgstr "" msgid "Export" msgstr "" -#: libbirdfont/ExportTool.vala:209 libbirdfont/Menu.vala:64-#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:68+#: libbirdfont/ExportTool.vala:222 libbirdfont/Menu.vala:64+#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:69 #: libbirdfont/SaveDialog.vala:38 libbirdfont/SaveDialogListener.vala:29 msgid "Save" msgstr "" -#: libbirdfont/ExportTool.vala:419+#: libbirdfont/ExportTool.vala:432 msgid "Alphabet" msgstr "" @@ -609,7 +618,7 @@ msgstr "" msgid "Save font" msgstr "" -#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:490+#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:492 #: libbirdfont/SettingsDisplay.vala:225 libbirdfont/SettingsTab.vala:31 #: libbirdfont/SettingsTab.vala:159 msgid "Settings"@@ -620,39 +629,39 @@ msgstr "" msgid "Themes" msgstr "" -#: libbirdfont/Glyph.vala:550+#: libbirdfont/Glyph.vala:602 msgid "top margin" msgstr "" -#: libbirdfont/Glyph.vala:557+#: libbirdfont/Glyph.vala:609 msgid "top" msgstr "" -#: libbirdfont/Glyph.vala:564+#: libbirdfont/Glyph.vala:616 msgid "x-height" msgstr "" -#: libbirdfont/Glyph.vala:573+#: libbirdfont/Glyph.vala:625 msgid "baseline" msgstr "" -#: libbirdfont/Glyph.vala:580+#: libbirdfont/Glyph.vala:632 msgid "bottom" msgstr "" -#: libbirdfont/Glyph.vala:586+#: libbirdfont/Glyph.vala:638 msgid "bottom margin" msgstr "" -#: libbirdfont/Glyph.vala:592+#: libbirdfont/Glyph.vala:644 msgid "left" msgstr "" -#: libbirdfont/Glyph.vala:601+#: libbirdfont/Glyph.vala:653 msgid "right" msgstr "" -#: libbirdfont/Glyph.vala:2421+#: libbirdfont/Glyph.vala:2462 msgid "Guide" msgstr "" @@ -664,6 +673,10 @@ msgstr "" msgid "Guides" msgstr "" +#: libbirdfont/Help.vala:29+msgid "BirdFont is a font editor."+msgstr ""+ #: libbirdfont/HiddenTools.vala:33 msgid "Zoom in" msgstr ""@@ -729,32 +742,38 @@ msgstr "" msgid "Glyph" msgstr "" -#: libbirdfont/KerningDisplay.vala:97 libbirdfont/KerningDisplay.vala:877+#: libbirdfont/KerningDisplay.vala:60+msgid ""+"Kerning is the process of adjusting the space between two letters. You can "+"cahnge the space between one letter and all other letters in the spacing tab."+msgstr ""++#: libbirdfont/KerningDisplay.vala:101 libbirdfont/KerningDisplay.vala:882 msgid "Kerning" msgstr "" -#: libbirdfont/KerningDisplay.vala:105+#: libbirdfont/KerningDisplay.vala:109 msgid "The current kerning class is malformed." msgstr "" -#: libbirdfont/KerningDisplay.vala:106+#: libbirdfont/KerningDisplay.vala:110 msgid "Add single characters separated by space and ranges on the form A-Z." msgstr "" -#: libbirdfont/KerningDisplay.vala:107+#: libbirdfont/KerningDisplay.vala:111 msgid "Type “space” to kern the space character and “divis” to kern -." msgstr "" -#: libbirdfont/KerningDisplay.vala:678 libbirdfont/OverviewTools.vala:78+#: libbirdfont/KerningDisplay.vala:683 libbirdfont/OverviewTools.vala:78 msgid "Unicode" msgstr "" -#: libbirdfont/KerningDisplay.vala:678+#: libbirdfont/KerningDisplay.vala:683 msgid "Insert" msgstr "" -#: libbirdfont/KerningDisplay.vala:877 libbirdfont/MainWindow.vala:235-#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:208+#: libbirdfont/KerningDisplay.vala:882 libbirdfont/MainWindow.vala:241+#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:231 msgid "Close" msgstr "" @@ -770,11 +789,11 @@ msgstr "" msgid "Kerning class" msgstr "" -#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:144+#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:166 #: libbirdfont/Ligatures.vala:118 libbirdfont/Ligatures.vala:141 #: libbirdfont/Ligatures.vala:164 libbirdfont/Ligatures.vala:196 #: libbirdfont/SpacingClass.vala:45 libbirdfont/SpacingTab.vala:232-#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:208+#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:231 #: libbirdfont/Theme.vala:687 msgid "Set" msgstr ""@@ -839,7 +858,11 @@ msgstr "" msgid "Character Set" msgstr "" -#: libbirdfont/LayerLabel.vala:144+#: libbirdfont/LayerLabel.vala:101+msgid "Hide the layer."+msgstr ""++#: libbirdfont/LayerLabel.vala:166 msgid "Layer" msgstr "" @@ -880,7 +903,7 @@ msgid "Contextual Substitutions" msgstr ""  #: libbirdfont/LigatureList.vala:126 libbirdfont/LigatureList.vala:140-#: libbirdfont/Menu.vala:445+#: libbirdfont/Menu.vala:447 msgid "Ligatures" msgstr "" @@ -924,7 +947,7 @@ msgstr "" msgid "You need an older version of Birdfont to open it." msgstr "" -#: libbirdfont/MainWindow.vala:235+#: libbirdfont/MainWindow.vala:241 msgid "Glyph sequence" msgstr "" @@ -984,8 +1007,8 @@ msgstr "" msgid "Move To Baseline" msgstr "" -#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:250-#: libbirdfont/OverView.vala:269 libbirdfont/OverviewTools.vala:154+#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:257+#: libbirdfont/OverView.vala:276 libbirdfont/OverviewTools.vala:154 msgid "Search" msgstr "" @@ -1057,102 +1080,106 @@ msgstr "" msgid "Export Glyph as SVG" msgstr "" -#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:303+#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:304 msgid "Import SVG file" msgstr "" -#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:313 msgid "Import SVG folder" msgstr "" -#: libbirdfont/Menu.vala:303 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:304 libbirdfont/Menu.vala:313 msgid "color" msgstr "" -#: libbirdfont/Menu.vala:320+#: libbirdfont/Menu.vala:322 msgid "Import Background Image" msgstr "" -#: libbirdfont/Menu.vala:334 libbirdfont/Preview.vala:27+#: libbirdfont/Menu.vala:336 libbirdfont/Preview.vala:27 msgid "Preview" msgstr "" -#: libbirdfont/Menu.vala:342+#: libbirdfont/Menu.vala:344 msgid "Tab" msgstr "" -#: libbirdfont/Menu.vala:348+#: libbirdfont/Menu.vala:350 msgid "Next Tab" msgstr "" -#: libbirdfont/Menu.vala:355+#: libbirdfont/Menu.vala:357 msgid "Previous Tab" msgstr "" -#: libbirdfont/Menu.vala:362+#: libbirdfont/Menu.vala:364 msgid "Close Tab" msgstr "" -#: libbirdfont/Menu.vala:369+#: libbirdfont/Menu.vala:371 msgid "Close All Tabs" msgstr "" -#: libbirdfont/Menu.vala:377+#: libbirdfont/Menu.vala:379 msgid "Spacing and Kerning" msgstr "" -#: libbirdfont/Menu.vala:383+#: libbirdfont/Menu.vala:385 msgid "Show Spacing Tab" msgstr "" -#: libbirdfont/Menu.vala:390+#: libbirdfont/Menu.vala:392 msgid "Show Kerning Tab" msgstr "" -#: libbirdfont/Menu.vala:397+#: libbirdfont/Menu.vala:399 msgid "List Kerning Pairs" msgstr "" -#: libbirdfont/Menu.vala:404 libbirdfont/SpacingClassTab.vala:80+#: libbirdfont/Menu.vala:406 libbirdfont/SpacingClassTab.vala:80 msgid "Spacing Classes" msgstr "" -#: libbirdfont/Menu.vala:411+#: libbirdfont/Menu.vala:413 msgid "Select Next Kerning Pair" msgstr "" -#: libbirdfont/Menu.vala:420+#: libbirdfont/Menu.vala:422 msgid "Select Previous Kerning Pair" msgstr "" -#: libbirdfont/Menu.vala:429+#: libbirdfont/Menu.vala:431 msgid "Load Kerning Strings" msgstr "" -#: libbirdfont/Menu.vala:436+#: libbirdfont/Menu.vala:438 msgid "Reload Kerning Strings" msgstr "" -#: libbirdfont/Menu.vala:451+#: libbirdfont/Menu.vala:453 msgid "Show Ligatures" msgstr "" -#: libbirdfont/Menu.vala:458+#: libbirdfont/Menu.vala:460 msgid "Add Ligature" msgstr "" -#: libbirdfont/Menu.vala:467+#: libbirdfont/Menu.vala:469 msgid "Git" msgstr "" -#: libbirdfont/Menu.vala:473+#: libbirdfont/Menu.vala:475 msgid "Save As .bfp" msgstr "" -#: libbirdfont/Menu.vala:482 libbirdfont/OverView.vala:471+#: libbirdfont/Menu.vala:484 libbirdfont/OverView.vala:478 msgid "Overview" msgstr "" +#: libbirdfont/Menu.vala:513+msgid "Help"+msgstr ""+ #: libbirdfont/MenuItem.vala:82 msgid "UP" msgstr ""@@ -1234,15 +1261,11 @@ msgstr "" msgid "Swashes" msgstr "" -#: libbirdfont/OverView.vala:250 libbirdfont/OverView.vala:269+#: libbirdfont/OverView.vala:257 libbirdfont/OverView.vala:276 msgid "Filter" msgstr "" -#: libbirdfont/OverView.vala:673-msgid "No glyphs in this view."-msgstr ""--#: libbirdfont/OverView.vala:1484+#: libbirdfont/OverView.vala:1498 msgid "See also:" msgstr "" @@ -1419,10 +1442,6 @@ msgstr "" msgid "Right" msgstr "" -#: libbirdfont/SvgParser.vala:62 libbirdfont/SvgParser.vala:121-msgid "Import"-msgstr ""- #: libbirdfont/Theme.vala:421 msgid "Canvas Background" msgstr ""@@ -1707,7 +1726,7 @@ msgstr "" msgid "Color" msgstr "" -#: libbirdfont/ToolItem.vala:44+#: libbirdfont/ToolItem.vala:66 msgid "Shift" msgstr "" diff --git a/po/id.po b/po/id.poindex f393892..0bf50af 100644--- a/po/id.po+++ b/po/id.po@@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n"-"POT-Creation-Date: 2015-12-22 20:35+0100\n"+"POT-Creation-Date: 2016-01-06 12:06+0100\n" "PO-Revision-Date: 2015-06-01 11:21+0000\n" "Last-Translator: Dheeta <dita.m.saputri@gmail.com>\n" "Language-Team: LANGUAGE <LL@li.org>\n"@@ -105,16 +105,16 @@ msgstr "Berkas" msgid "Parts" msgstr "Bagian" -#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2421+#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2462 #: libbirdfont/LigatureList.vala:106 libbirdfont/OtfFeatureTable.vala:181 msgid "Add" msgstr "Tambah" -#: libbirdfont/BackgroundTools.vala:122+#: libbirdfont/BackgroundTools.vala:123 msgid "Select Glyph" msgstr "Pilih Glyph" -#: libbirdfont/BackgroundTools.vala:231 libbirdfont/LoadCallback.vala:102+#: libbirdfont/BackgroundTools.vala:233 libbirdfont/LoadCallback.vala:102 #: libbirdfont/Menu.vala:50 msgid "Open" msgstr "Buka"@@ -188,18 +188,18 @@ msgid "Thai" msgstr "Thailand"  #. / All lower case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:420+#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:433 msgid "a b c d e f g h i j k l m n o p q r s t u v w x y z" msgstr "a b c d e f g h i j k l m n o p q r s t u v w x y z"  #. / All upper case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:421+#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:434 msgid "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z" msgstr ""  #: libbirdfont/DescriptionDisplay.vala:66 #: libbirdfont/DescriptionDisplay.vala:277 libbirdfont/ExportSettings.vala:133-#: libbirdfont/Menu.vala:497 libbirdfont/TableLayout.vala:203+#: libbirdfont/Menu.vala:499 libbirdfont/TableLayout.vala:203 msgid "Name and Description" msgstr "Nama dan Perintah" @@ -237,7 +237,7 @@ msgid "Unique Identifier" msgstr ""  #: libbirdfont/DescriptionDisplay.vala:150 libbirdfont/ImportUtils.vala:161-#: libbirdfont/Menu.vala:504 libbirdfont/Menu.vala:506+#: libbirdfont/Menu.vala:506 libbirdfont/Menu.vala:508 #: libbirdfont/VersionList.vala:265 msgid "Version" msgstr "Versi"@@ -322,212 +322,221 @@ msgstr "Pedoman & Kisi-kisi" msgid "Grid Size" msgstr "Ukuran Kisi/kotak" -#: libbirdfont/DrawingTools.vala:194+#: libbirdfont/DrawingTools.vala:195 msgid "Move canvas" msgstr "Pindahkan kanvas" -#: libbirdfont/DrawingTools.vala:202+#: libbirdfont/DrawingTools.vala:196+msgid "Press space and click to move the canvas."+msgstr ""++#: libbirdfont/DrawingTools.vala:204 msgid "Delete" msgstr "Hapus" -#: libbirdfont/DrawingTools.vala:209+#: libbirdfont/DrawingTools.vala:211 msgid "Select all points or paths" msgstr "Pilih semua titik atau jalan" -#: libbirdfont/DrawingTools.vala:225 libbirdfont/Menu.vala:99+#: libbirdfont/DrawingTools.vala:227 libbirdfont/Menu.vala:99 msgid "Undo" msgstr "" -#: libbirdfont/DrawingTools.vala:232+#: libbirdfont/DrawingTools.vala:234 msgid "Insert new points on path" msgstr "" -#: libbirdfont/DrawingTools.vala:241+#: libbirdfont/DrawingTools.vala:244 msgid "Create quadratic Bézier curves" msgstr "" -#: libbirdfont/DrawingTools.vala:250+#: libbirdfont/DrawingTools.vala:245+msgid ""+"All control points will be converted to quadratic points in the TTF format."+msgstr ""++#: libbirdfont/DrawingTools.vala:255 msgid "Create cubic Bézier curves" msgstr "" -#: libbirdfont/DrawingTools.vala:259+#: libbirdfont/DrawingTools.vala:264 msgid "Quadratic path with two line handles" msgstr "" -#: libbirdfont/DrawingTools.vala:268+#: libbirdfont/DrawingTools.vala:273 msgid "Convert selected points" msgstr "" -#: libbirdfont/DrawingTools.vala:279+#: libbirdfont/DrawingTools.vala:284 msgid "X coordinate" msgstr "" -#: libbirdfont/DrawingTools.vala:323+#: libbirdfont/DrawingTools.vala:328 msgid "Y coordinate" msgstr "" -#: libbirdfont/DrawingTools.vala:366+#: libbirdfont/DrawingTools.vala:371 msgid "Rotation" msgstr "" -#: libbirdfont/DrawingTools.vala:405+#: libbirdfont/DrawingTools.vala:410 msgid "Width" msgstr "Lebar" -#: libbirdfont/DrawingTools.vala:430+#: libbirdfont/DrawingTools.vala:435 msgid "Height" msgstr "Tinggi" -#: libbirdfont/DrawingTools.vala:473+#: libbirdfont/DrawingTools.vala:478 msgid "Tie curve handles for the selected edit point" msgstr "Ikat lengkungan pegangan untuk titik sunting yang dipilih" -#: libbirdfont/DrawingTools.vala:524+#: libbirdfont/DrawingTools.vala:529 msgid "Symmetrical handles" msgstr "Pegangan simetris" -#: libbirdfont/DrawingTools.vala:554+#: libbirdfont/DrawingTools.vala:559 msgid "Convert segment to line." msgstr "Mengubah ruas ke garis." -#: libbirdfont/DrawingTools.vala:562+#: libbirdfont/DrawingTools.vala:567 msgid "Create counter from outline" msgstr "Membuat loket dari garis besar" -#: libbirdfont/DrawingTools.vala:565+#: libbirdfont/DrawingTools.vala:570 msgid "Scale object to font top/baseline" msgstr "" -#: libbirdfont/DrawingTools.vala:574+#: libbirdfont/DrawingTools.vala:579 msgid "Close path" msgstr "Tutup jalur" -#: libbirdfont/DrawingTools.vala:596+#: libbirdfont/DrawingTools.vala:601 msgid "Move to path to the bottom of the layer" msgstr "" -#: libbirdfont/DrawingTools.vala:610+#: libbirdfont/DrawingTools.vala:615 msgid "Flip path vertically" msgstr "Balik jalur secara tegak lurus" -#: libbirdfont/DrawingTools.vala:618+#: libbirdfont/DrawingTools.vala:623 msgid "Flip path horizontally" msgstr "" -#: libbirdfont/DrawingTools.vala:627+#: libbirdfont/DrawingTools.vala:632 msgid "Set size for background image" msgstr "" -#: libbirdfont/DrawingTools.vala:665+#: libbirdfont/DrawingTools.vala:670 msgid "Show/hide background image" msgstr "" -#: libbirdfont/DrawingTools.vala:676+#: libbirdfont/DrawingTools.vala:681 msgid "Insert a new background image" msgstr "" -#: libbirdfont/DrawingTools.vala:690 libbirdfont/ThemeTab.vala:151+#: libbirdfont/DrawingTools.vala:695 libbirdfont/ThemeTab.vala:151 msgid "High contrast" msgstr "" -#: libbirdfont/DrawingTools.vala:704+#: libbirdfont/DrawingTools.vala:709 msgid "Set background threshold" msgstr "" -#: libbirdfont/DrawingTools.vala:723+#: libbirdfont/DrawingTools.vala:728 msgid "Amount of autotrace details" msgstr "" -#: libbirdfont/DrawingTools.vala:742+#: libbirdfont/DrawingTools.vala:747 msgid "Autotrace simplification" msgstr "" -#: libbirdfont/DrawingTools.vala:752+#: libbirdfont/DrawingTools.vala:757 msgid "Autotrace background image" msgstr "" -#: libbirdfont/DrawingTools.vala:760+#: libbirdfont/DrawingTools.vala:765 msgid "Delete background image" msgstr "" -#: libbirdfont/DrawingTools.vala:767+#: libbirdfont/DrawingTools.vala:772 msgid "Add layer" msgstr "" -#: libbirdfont/DrawingTools.vala:777+#: libbirdfont/DrawingTools.vala:782 msgid "Show layers" msgstr "" -#: libbirdfont/DrawingTools.vala:787+#: libbirdfont/DrawingTools.vala:792 msgid "Apply stroke" msgstr "Terapkan sapuan" -#: libbirdfont/DrawingTools.vala:821 libbirdfont/SettingsTab.vala:34+#: libbirdfont/DrawingTools.vala:826 libbirdfont/SettingsTab.vala:34 msgid "Stroke width" msgstr "Lebar sapuan" -#: libbirdfont/DrawingTools.vala:863+#: libbirdfont/DrawingTools.vala:872 msgid "Create outline form stroke" msgstr "Membuat garis besar dari sapuan" -#: libbirdfont/DrawingTools.vala:872+#: libbirdfont/DrawingTools.vala:881 msgid "Butt line cap" msgstr "Penutup baris belakang" -#: libbirdfont/DrawingTools.vala:896+#: libbirdfont/DrawingTools.vala:908 msgid "Round line cap" msgstr "Penutup baris bulat" -#: libbirdfont/DrawingTools.vala:921+#: libbirdfont/DrawingTools.vala:936 msgid "Square line cap" msgstr "Penutup baris kotak" -#: libbirdfont/DrawingTools.vala:990+#: libbirdfont/DrawingTools.vala:1008 msgid "Show guidelines" msgstr "Tampilkan pedoman" -#: libbirdfont/DrawingTools.vala:1002+#: libbirdfont/DrawingTools.vala:1020 msgid "Show more guidelines" msgstr "Tampilkan lebih banyak pedoman" -#: libbirdfont/DrawingTools.vala:1018+#: libbirdfont/DrawingTools.vala:1036 msgid "Show guidelines at top and bottom margin" msgstr "Tampilkan pedoman di batas atas dan bawah " -#: libbirdfont/DrawingTools.vala:1042+#: libbirdfont/DrawingTools.vala:1060 msgid "Lock guides and grid" msgstr "" -#: libbirdfont/DrawingTools.vala:1084+#: libbirdfont/DrawingTools.vala:1102 msgid "Zoom Out More" msgstr "Lebih Memperbesar Keluar" -#: libbirdfont/DrawingTools.vala:1093+#: libbirdfont/DrawingTools.vala:1111 msgid "Show full glyph" msgstr "" -#: libbirdfont/DrawingTools.vala:1100+#: libbirdfont/DrawingTools.vala:1118 msgid "Fit in view" msgstr "" -#: libbirdfont/DrawingTools.vala:1107+#: libbirdfont/DrawingTools.vala:1125 msgid "Zoom in on background image" msgstr "" -#: libbirdfont/DrawingTools.vala:1117+#: libbirdfont/DrawingTools.vala:1135 msgid "Previous view" msgstr "" -#: libbirdfont/DrawingTools.vala:1123+#: libbirdfont/DrawingTools.vala:1141 msgid "Next view" msgstr "" -#: libbirdfont/DrawingTools.vala:1525+#: libbirdfont/DrawingTools.vala:1543 msgid "Set size for grid" msgstr ""  #: libbirdfont/ExportSettings.vala:41 libbirdfont/ExportSettings.vala:185-#: libbirdfont/Menu.vala:327+#: libbirdfont/Menu.vala:329 msgid "Export Settings" msgstr "" @@ -551,13 +560,13 @@ msgstr "Bentuk" msgid "Export" msgstr "Menambahkan" -#: libbirdfont/ExportTool.vala:209 libbirdfont/Menu.vala:64-#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:68+#: libbirdfont/ExportTool.vala:222 libbirdfont/Menu.vala:64+#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:69 #: libbirdfont/SaveDialog.vala:38 libbirdfont/SaveDialogListener.vala:29 msgid "Save" msgstr "Menyimpan" -#: libbirdfont/ExportTool.vala:419+#: libbirdfont/ExportTool.vala:432 msgid "Alphabet" msgstr "" @@ -606,7 +615,7 @@ msgstr "Buka huruf" msgid "Save font" msgstr "Simpan huruf" -#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:490+#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:492 #: libbirdfont/SettingsDisplay.vala:225 libbirdfont/SettingsTab.vala:31 #: libbirdfont/SettingsTab.vala:159 msgid "Settings"@@ -617,39 +626,39 @@ msgstr "Pengaturan" msgid "Themes" msgstr "" -#: libbirdfont/Glyph.vala:550+#: libbirdfont/Glyph.vala:602 msgid "top margin" msgstr "" -#: libbirdfont/Glyph.vala:557+#: libbirdfont/Glyph.vala:609 msgid "top" msgstr "" -#: libbirdfont/Glyph.vala:564+#: libbirdfont/Glyph.vala:616 msgid "x-height" msgstr "" -#: libbirdfont/Glyph.vala:573+#: libbirdfont/Glyph.vala:625 msgid "baseline" msgstr "" -#: libbirdfont/Glyph.vala:580+#: libbirdfont/Glyph.vala:632 msgid "bottom" msgstr "" -#: libbirdfont/Glyph.vala:586+#: libbirdfont/Glyph.vala:638 msgid "bottom margin" msgstr "" -#: libbirdfont/Glyph.vala:592+#: libbirdfont/Glyph.vala:644 msgid "left" msgstr "" -#: libbirdfont/Glyph.vala:601+#: libbirdfont/Glyph.vala:653 msgid "right" msgstr "" -#: libbirdfont/Glyph.vala:2421+#: libbirdfont/Glyph.vala:2462 msgid "Guide" msgstr "" @@ -661,6 +670,10 @@ msgstr "" msgid "Guides" msgstr "" +#: libbirdfont/Help.vala:29+msgid "BirdFont is a font editor."+msgstr ""+ #: libbirdfont/HiddenTools.vala:33 msgid "Zoom in" msgstr ""@@ -726,35 +739,41 @@ msgstr "pada" msgid "Glyph" msgstr "Glyph" -#: libbirdfont/KerningDisplay.vala:97 libbirdfont/KerningDisplay.vala:877+#: libbirdfont/KerningDisplay.vala:60+msgid ""+"Kerning is the process of adjusting the space between two letters. You can "+"cahnge the space between one letter and all other letters in the spacing tab."+msgstr ""++#: libbirdfont/KerningDisplay.vala:101 libbirdfont/KerningDisplay.vala:882 msgid "Kerning" msgstr "" -#: libbirdfont/KerningDisplay.vala:105+#: libbirdfont/KerningDisplay.vala:109 msgid "The current kerning class is malformed." msgstr "" -#: libbirdfont/KerningDisplay.vala:106+#: libbirdfont/KerningDisplay.vala:110 msgid "Add single characters separated by space and ranges on the form A-Z." msgstr "" "Menambahkan karakter tunggal dipisahkan oleh ruang dan rentang pada bentuk A-" "Z." -#: libbirdfont/KerningDisplay.vala:107+#: libbirdfont/KerningDisplay.vala:111 msgid "Type “space” to kern the space character and “divis” to kern -." msgstr "" "Ketik \"ruang\" untuk pangkal karakter ruang dan \"divis\" untuk pangkal -." -#: libbirdfont/KerningDisplay.vala:678 libbirdfont/OverviewTools.vala:78+#: libbirdfont/KerningDisplay.vala:683 libbirdfont/OverviewTools.vala:78 msgid "Unicode" msgstr "Standar kode" -#: libbirdfont/KerningDisplay.vala:678+#: libbirdfont/KerningDisplay.vala:683 msgid "Insert" msgstr "Sisipkan" -#: libbirdfont/KerningDisplay.vala:877 libbirdfont/MainWindow.vala:235-#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:208+#: libbirdfont/KerningDisplay.vala:882 libbirdfont/MainWindow.vala:241+#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:231 msgid "Close" msgstr "Tutup" @@ -770,11 +789,11 @@ msgstr "Tidak ada sepasang pangkal yang dibuat." msgid "Kerning class" msgstr "Kelas pangkal" -#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:144+#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:166 #: libbirdfont/Ligatures.vala:118 libbirdfont/Ligatures.vala:141 #: libbirdfont/Ligatures.vala:164 libbirdfont/Ligatures.vala:196 #: libbirdfont/SpacingClass.vala:45 libbirdfont/SpacingTab.vala:232-#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:208+#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:231 #: libbirdfont/Theme.vala:687 msgid "Set" msgstr "Atur"@@ -839,7 +858,11 @@ msgstr "Mengatur Karakter" msgid "Character Set" msgstr "Mengatur Karakter" -#: libbirdfont/LayerLabel.vala:144+#: libbirdfont/LayerLabel.vala:101+msgid "Hide the layer."+msgstr ""++#: libbirdfont/LayerLabel.vala:166 msgid "Layer" msgstr "" @@ -880,7 +903,7 @@ msgid "Contextual Substitutions" msgstr ""  #: libbirdfont/LigatureList.vala:126 libbirdfont/LigatureList.vala:140-#: libbirdfont/Menu.vala:445+#: libbirdfont/Menu.vala:447 msgid "Ligatures" msgstr "" @@ -924,7 +947,7 @@ msgstr "" msgid "You need an older version of Birdfont to open it." msgstr "" -#: libbirdfont/MainWindow.vala:235+#: libbirdfont/MainWindow.vala:241 msgid "Glyph sequence" msgstr "" @@ -984,8 +1007,8 @@ msgstr "" msgid "Move To Baseline" msgstr "" -#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:250-#: libbirdfont/OverView.vala:269 libbirdfont/OverviewTools.vala:154+#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:257+#: libbirdfont/OverView.vala:276 libbirdfont/OverviewTools.vala:154 msgid "Search" msgstr "" @@ -1057,102 +1080,106 @@ msgstr "Menambahkan Huruf" msgid "Export Glyph as SVG" msgstr "Menambahkan Glyph sebagai SVG" -#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:303+#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:304 msgid "Import SVG file" msgstr "Memasukkan berkas SVG" -#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:313 msgid "Import SVG folder" msgstr "Memasukkan berkas SVG" -#: libbirdfont/Menu.vala:303 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:304 libbirdfont/Menu.vala:313 msgid "color" msgstr "" -#: libbirdfont/Menu.vala:320+#: libbirdfont/Menu.vala:322 msgid "Import Background Image" msgstr "" -#: libbirdfont/Menu.vala:334 libbirdfont/Preview.vala:27+#: libbirdfont/Menu.vala:336 libbirdfont/Preview.vala:27 msgid "Preview" msgstr "" -#: libbirdfont/Menu.vala:342+#: libbirdfont/Menu.vala:344 msgid "Tab" msgstr "" -#: libbirdfont/Menu.vala:348+#: libbirdfont/Menu.vala:350 msgid "Next Tab" msgstr "" -#: libbirdfont/Menu.vala:355+#: libbirdfont/Menu.vala:357 msgid "Previous Tab" msgstr "" -#: libbirdfont/Menu.vala:362+#: libbirdfont/Menu.vala:364 msgid "Close Tab" msgstr "" -#: libbirdfont/Menu.vala:369+#: libbirdfont/Menu.vala:371 msgid "Close All Tabs" msgstr "Tutup semua tab" -#: libbirdfont/Menu.vala:377+#: libbirdfont/Menu.vala:379 msgid "Spacing and Kerning" msgstr "" -#: libbirdfont/Menu.vala:383+#: libbirdfont/Menu.vala:385 msgid "Show Spacing Tab" msgstr "" -#: libbirdfont/Menu.vala:390+#: libbirdfont/Menu.vala:392 msgid "Show Kerning Tab" msgstr "" -#: libbirdfont/Menu.vala:397+#: libbirdfont/Menu.vala:399 msgid "List Kerning Pairs" msgstr "" -#: libbirdfont/Menu.vala:404 libbirdfont/SpacingClassTab.vala:80+#: libbirdfont/Menu.vala:406 libbirdfont/SpacingClassTab.vala:80 msgid "Spacing Classes" msgstr "" -#: libbirdfont/Menu.vala:411+#: libbirdfont/Menu.vala:413 msgid "Select Next Kerning Pair" msgstr "" -#: libbirdfont/Menu.vala:420+#: libbirdfont/Menu.vala:422 msgid "Select Previous Kerning Pair" msgstr "" -#: libbirdfont/Menu.vala:429+#: libbirdfont/Menu.vala:431 msgid "Load Kerning Strings" msgstr "" -#: libbirdfont/Menu.vala:436+#: libbirdfont/Menu.vala:438 msgid "Reload Kerning Strings" msgstr "" -#: libbirdfont/Menu.vala:451+#: libbirdfont/Menu.vala:453 msgid "Show Ligatures" msgstr "" -#: libbirdfont/Menu.vala:458+#: libbirdfont/Menu.vala:460 msgid "Add Ligature" msgstr "" -#: libbirdfont/Menu.vala:467+#: libbirdfont/Menu.vala:469 msgid "Git" msgstr "" -#: libbirdfont/Menu.vala:473+#: libbirdfont/Menu.vala:475 msgid "Save As .bfp" msgstr "" -#: libbirdfont/Menu.vala:482 libbirdfont/OverView.vala:471+#: libbirdfont/Menu.vala:484 libbirdfont/OverView.vala:478 msgid "Overview" msgstr "" +#: libbirdfont/Menu.vala:513+msgid "Help"+msgstr ""+ #: libbirdfont/MenuItem.vala:82 msgid "UP" msgstr ""@@ -1234,15 +1261,11 @@ msgstr "" msgid "Swashes" msgstr "" -#: libbirdfont/OverView.vala:250 libbirdfont/OverView.vala:269+#: libbirdfont/OverView.vala:257 libbirdfont/OverView.vala:276 msgid "Filter" msgstr "" -#: libbirdfont/OverView.vala:673-msgid "No glyphs in this view."-msgstr ""--#: libbirdfont/OverView.vala:1484+#: libbirdfont/OverView.vala:1498 msgid "See also:" msgstr "" @@ -1419,10 +1442,6 @@ msgstr "" msgid "Right" msgstr "" -#: libbirdfont/SvgParser.vala:62 libbirdfont/SvgParser.vala:121-msgid "Import"-msgstr ""- #: libbirdfont/Theme.vala:421 msgid "Canvas Background" msgstr ""@@ -1707,7 +1726,7 @@ msgstr "" msgid "Color" msgstr "" -#: libbirdfont/ToolItem.vala:44+#: libbirdfont/ToolItem.vala:66 msgid "Shift" msgstr "" diff --git a/po/it.po b/po/it.poindex 2d1ebe2..975c840 100644--- a/po/it.po+++ b/po/it.po@@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n"-"POT-Creation-Date: 2015-12-22 20:35+0100\n"+"POT-Creation-Date: 2016-01-06 12:06+0100\n" "PO-Revision-Date: 2015-11-20 08:49+0000\n" "Last-Translator: Anonymous Pootle User\n" "Language-Team: LANGUAGE <LL@li.org>\n"@@ -105,16 +105,16 @@ msgstr "File" msgid "Parts" msgstr "Parti" -#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2421+#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2462 #: libbirdfont/LigatureList.vala:106 libbirdfont/OtfFeatureTable.vala:181 msgid "Add" msgstr "Aggiungi" -#: libbirdfont/BackgroundTools.vala:122+#: libbirdfont/BackgroundTools.vala:123 msgid "Select Glyph" msgstr "Seleziona glifo" -#: libbirdfont/BackgroundTools.vala:231 libbirdfont/LoadCallback.vala:102+#: libbirdfont/BackgroundTools.vala:233 libbirdfont/LoadCallback.vala:102 #: libbirdfont/Menu.vala:50 msgid "Open" msgstr "Apri"@@ -188,18 +188,18 @@ msgid "Thai" msgstr "Tailandese"  #. / All lower case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:420+#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:433 msgid "a b c d e f g h i j k l m n o p q r s t u v w x y z" msgstr "a b c d e f g h i j k l m n o p q r s t u v w x y z"  #. / All upper case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:421+#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:434 msgid "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z" msgstr "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z"  #: libbirdfont/DescriptionDisplay.vala:66 #: libbirdfont/DescriptionDisplay.vala:277 libbirdfont/ExportSettings.vala:133-#: libbirdfont/Menu.vala:497 libbirdfont/TableLayout.vala:203+#: libbirdfont/Menu.vala:499 libbirdfont/TableLayout.vala:203 msgid "Name and Description" msgstr "Nome e descrizione" @@ -237,7 +237,7 @@ msgid "Unique Identifier" msgstr "Identificativo univoco"  #: libbirdfont/DescriptionDisplay.vala:150 libbirdfont/ImportUtils.vala:161-#: libbirdfont/Menu.vala:504 libbirdfont/Menu.vala:506+#: libbirdfont/Menu.vala:506 libbirdfont/Menu.vala:508 #: libbirdfont/VersionList.vala:265 msgid "Version" msgstr "Versione"@@ -322,212 +322,221 @@ msgstr "Linee guida e griglia" msgid "Grid Size" msgstr "Dimensione della griglia" -#: libbirdfont/DrawingTools.vala:194+#: libbirdfont/DrawingTools.vala:195 msgid "Move canvas" msgstr "Sposta area di lavoro" -#: libbirdfont/DrawingTools.vala:202+#: libbirdfont/DrawingTools.vala:196+msgid "Press space and click to move the canvas."+msgstr ""++#: libbirdfont/DrawingTools.vala:204 msgid "Delete" msgstr "Cancella" -#: libbirdfont/DrawingTools.vala:209+#: libbirdfont/DrawingTools.vala:211 msgid "Select all points or paths" msgstr "Seleziona tutti i punti o i percorsi" -#: libbirdfont/DrawingTools.vala:225 libbirdfont/Menu.vala:99+#: libbirdfont/DrawingTools.vala:227 libbirdfont/Menu.vala:99 msgid "Undo" msgstr "Annulla" -#: libbirdfont/DrawingTools.vala:232+#: libbirdfont/DrawingTools.vala:234 msgid "Insert new points on path" msgstr "Inserisci nuovi punti sul percorso" -#: libbirdfont/DrawingTools.vala:241+#: libbirdfont/DrawingTools.vala:244 msgid "Create quadratic Bézier curves" msgstr "Crea curve quadratiche di Bézier" -#: libbirdfont/DrawingTools.vala:250+#: libbirdfont/DrawingTools.vala:245+msgid ""+"All control points will be converted to quadratic points in the TTF format."+msgstr ""++#: libbirdfont/DrawingTools.vala:255 msgid "Create cubic Bézier curves" msgstr "Crea curve cubiche di Bézier" -#: libbirdfont/DrawingTools.vala:259+#: libbirdfont/DrawingTools.vala:264 msgid "Quadratic path with two line handles" msgstr "Tracciato quadrato con due linee maniglia" -#: libbirdfont/DrawingTools.vala:268+#: libbirdfont/DrawingTools.vala:273 msgid "Convert selected points" msgstr "Converti i punti selezionati" -#: libbirdfont/DrawingTools.vala:279+#: libbirdfont/DrawingTools.vala:284 msgid "X coordinate" msgstr "coordinata X" -#: libbirdfont/DrawingTools.vala:323+#: libbirdfont/DrawingTools.vala:328 msgid "Y coordinate" msgstr "coordinata Y" -#: libbirdfont/DrawingTools.vala:366+#: libbirdfont/DrawingTools.vala:371 msgid "Rotation" msgstr "Rotazione" -#: libbirdfont/DrawingTools.vala:405+#: libbirdfont/DrawingTools.vala:410 msgid "Width" msgstr "Larghezza" -#: libbirdfont/DrawingTools.vala:430+#: libbirdfont/DrawingTools.vala:435 msgid "Height" msgstr "Peso" -#: libbirdfont/DrawingTools.vala:473+#: libbirdfont/DrawingTools.vala:478 msgid "Tie curve handles for the selected edit point" msgstr "Lega le maniglie della curva al punto di modifica selezionato" -#: libbirdfont/DrawingTools.vala:524+#: libbirdfont/DrawingTools.vala:529 msgid "Symmetrical handles" msgstr "Maniglie simmetriche" -#: libbirdfont/DrawingTools.vala:554+#: libbirdfont/DrawingTools.vala:559 msgid "Convert segment to line." msgstr "Converti il segmento in linea." -#: libbirdfont/DrawingTools.vala:562+#: libbirdfont/DrawingTools.vala:567 msgid "Create counter from outline" msgstr "Crea sagoma personalizzata" -#: libbirdfont/DrawingTools.vala:565+#: libbirdfont/DrawingTools.vala:570 msgid "Scale object to font top/baseline" msgstr "" -#: libbirdfont/DrawingTools.vala:574+#: libbirdfont/DrawingTools.vala:579 msgid "Close path" msgstr "Chiudi il percorso" -#: libbirdfont/DrawingTools.vala:596+#: libbirdfont/DrawingTools.vala:601 msgid "Move to path to the bottom of the layer" msgstr "Muovi dal percorso al livello in fondo" -#: libbirdfont/DrawingTools.vala:610+#: libbirdfont/DrawingTools.vala:615 msgid "Flip path vertically" msgstr "Ribalta tracciato verticalmente" -#: libbirdfont/DrawingTools.vala:618+#: libbirdfont/DrawingTools.vala:623 msgid "Flip path horizontally" msgstr "Ribalta tracciato orizzontalmente" -#: libbirdfont/DrawingTools.vala:627+#: libbirdfont/DrawingTools.vala:632 msgid "Set size for background image" msgstr "Imposta le dimensioni per l'immagine di sfondo" -#: libbirdfont/DrawingTools.vala:665+#: libbirdfont/DrawingTools.vala:670 msgid "Show/hide background image" msgstr "Mostra/nascondi l'immagine di sfondo" -#: libbirdfont/DrawingTools.vala:676+#: libbirdfont/DrawingTools.vala:681 msgid "Insert a new background image" msgstr "Inserisci una nuova immagine di sfondo" -#: libbirdfont/DrawingTools.vala:690 libbirdfont/ThemeTab.vala:151+#: libbirdfont/DrawingTools.vala:695 libbirdfont/ThemeTab.vala:151 msgid "High contrast" msgstr "Alto contrasto" -#: libbirdfont/DrawingTools.vala:704+#: libbirdfont/DrawingTools.vala:709 msgid "Set background threshold" msgstr "Stabilisci soglia di sfondo" -#: libbirdfont/DrawingTools.vala:723+#: libbirdfont/DrawingTools.vala:728 msgid "Amount of autotrace details" msgstr "Numero di dettagli automatici" -#: libbirdfont/DrawingTools.vala:742+#: libbirdfont/DrawingTools.vala:747 msgid "Autotrace simplification" msgstr "Semplificazione automatica" -#: libbirdfont/DrawingTools.vala:752+#: libbirdfont/DrawingTools.vala:757 msgid "Autotrace background image" msgstr "Immagine di sfondo automatica" -#: libbirdfont/DrawingTools.vala:760+#: libbirdfont/DrawingTools.vala:765 msgid "Delete background image" msgstr "Elimina l'immagine di sfondo" -#: libbirdfont/DrawingTools.vala:767+#: libbirdfont/DrawingTools.vala:772 msgid "Add layer" msgstr "Aggiungi livello" -#: libbirdfont/DrawingTools.vala:777+#: libbirdfont/DrawingTools.vala:782 msgid "Show layers" msgstr "Mostra i livelli" -#: libbirdfont/DrawingTools.vala:787+#: libbirdfont/DrawingTools.vala:792 msgid "Apply stroke" msgstr "Applica tratto" -#: libbirdfont/DrawingTools.vala:821 libbirdfont/SettingsTab.vala:34+#: libbirdfont/DrawingTools.vala:826 libbirdfont/SettingsTab.vala:34 msgid "Stroke width" msgstr "Larghezza contorno" -#: libbirdfont/DrawingTools.vala:863+#: libbirdfont/DrawingTools.vala:872 msgid "Create outline form stroke" msgstr "Crea contorno dal tratto" -#: libbirdfont/DrawingTools.vala:872+#: libbirdfont/DrawingTools.vala:881 msgid "Butt line cap" msgstr "Estremità troncata" -#: libbirdfont/DrawingTools.vala:896+#: libbirdfont/DrawingTools.vala:908 msgid "Round line cap" msgstr "Estremità arrotondata" -#: libbirdfont/DrawingTools.vala:921+#: libbirdfont/DrawingTools.vala:936 msgid "Square line cap" msgstr "Estremità quadrata" -#: libbirdfont/DrawingTools.vala:990+#: libbirdfont/DrawingTools.vala:1008 msgid "Show guidelines" msgstr "Mostra linee guida" -#: libbirdfont/DrawingTools.vala:1002+#: libbirdfont/DrawingTools.vala:1020 msgid "Show more guidelines" msgstr "Mostra più linee guida" -#: libbirdfont/DrawingTools.vala:1018+#: libbirdfont/DrawingTools.vala:1036 msgid "Show guidelines at top and bottom margin" msgstr "Mostra linee guida al margine superiore e inferiore" -#: libbirdfont/DrawingTools.vala:1042+#: libbirdfont/DrawingTools.vala:1060 msgid "Lock guides and grid" msgstr "Blocca le guide e la griglia" -#: libbirdfont/DrawingTools.vala:1084+#: libbirdfont/DrawingTools.vala:1102 msgid "Zoom Out More" msgstr "Ingrandisci ancora" -#: libbirdfont/DrawingTools.vala:1093+#: libbirdfont/DrawingTools.vala:1111 msgid "Show full glyph" msgstr "Mostra glifo completo" -#: libbirdfont/DrawingTools.vala:1100+#: libbirdfont/DrawingTools.vala:1118 msgid "Fit in view" msgstr "Adatta alla finestra" -#: libbirdfont/DrawingTools.vala:1107+#: libbirdfont/DrawingTools.vala:1125 msgid "Zoom in on background image" msgstr "Ingrandisci su immagine dello sfondo" -#: libbirdfont/DrawingTools.vala:1117+#: libbirdfont/DrawingTools.vala:1135 msgid "Previous view" msgstr "Articolo precedente" -#: libbirdfont/DrawingTools.vala:1123+#: libbirdfont/DrawingTools.vala:1141 msgid "Next view" msgstr "Vista successiva" -#: libbirdfont/DrawingTools.vala:1525+#: libbirdfont/DrawingTools.vala:1543 msgid "Set size for grid" msgstr "Imposta la dimensione della griglia"  #: libbirdfont/ExportSettings.vala:41 libbirdfont/ExportSettings.vala:185-#: libbirdfont/Menu.vala:327+#: libbirdfont/Menu.vala:329 msgid "Export Settings" msgstr "Esporta impostazioni" @@ -551,13 +560,13 @@ msgstr "Formati" msgid "Export" msgstr "Esportare" -#: libbirdfont/ExportTool.vala:209 libbirdfont/Menu.vala:64-#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:68+#: libbirdfont/ExportTool.vala:222 libbirdfont/Menu.vala:64+#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:69 #: libbirdfont/SaveDialog.vala:38 libbirdfont/SaveDialogListener.vala:29 msgid "Save" msgstr "Salva" -#: libbirdfont/ExportTool.vala:419+#: libbirdfont/ExportTool.vala:432 msgid "Alphabet" msgstr "Alfabeto" @@ -606,7 +615,7 @@ msgstr "Apri carattere" msgid "Save font" msgstr "Salva il carattere" -#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:490+#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:492 #: libbirdfont/SettingsDisplay.vala:225 libbirdfont/SettingsTab.vala:31 #: libbirdfont/SettingsTab.vala:159 msgid "Settings"@@ -617,39 +626,39 @@ msgstr "Impostazioni" msgid "Themes" msgstr "Temi" -#: libbirdfont/Glyph.vala:550+#: libbirdfont/Glyph.vala:602 msgid "top margin" msgstr "margine superiore" -#: libbirdfont/Glyph.vala:557+#: libbirdfont/Glyph.vala:609 msgid "top" msgstr "alto" -#: libbirdfont/Glyph.vala:564+#: libbirdfont/Glyph.vala:616 msgid "x-height" msgstr "x-altezza" -#: libbirdfont/Glyph.vala:573+#: libbirdfont/Glyph.vala:625 msgid "baseline" msgstr "linea di base" -#: libbirdfont/Glyph.vala:580+#: libbirdfont/Glyph.vala:632 msgid "bottom" msgstr "basso" -#: libbirdfont/Glyph.vala:586+#: libbirdfont/Glyph.vala:638 msgid "bottom margin" msgstr "margine inferiore" -#: libbirdfont/Glyph.vala:592+#: libbirdfont/Glyph.vala:644 msgid "left" msgstr "sinistro/a" -#: libbirdfont/Glyph.vala:601+#: libbirdfont/Glyph.vala:653 msgid "right" msgstr "destra" -#: libbirdfont/Glyph.vala:2421+#: libbirdfont/Glyph.vala:2462 msgid "Guide" msgstr "Guida" @@ -661,6 +670,10 @@ msgstr "Mostra la griglia" msgid "Guides" msgstr "Guide" +#: libbirdfont/Help.vala:29+msgid "BirdFont is a font editor."+msgstr ""+ #: libbirdfont/HiddenTools.vala:33 msgid "Zoom in" msgstr "Aumenta ingrandimento"@@ -726,35 +739,41 @@ msgstr "a" msgid "Glyph" msgstr "Glifo" -#: libbirdfont/KerningDisplay.vala:97 libbirdfont/KerningDisplay.vala:877+#: libbirdfont/KerningDisplay.vala:60+msgid ""+"Kerning is the process of adjusting the space between two letters. You can "+"cahnge the space between one letter and all other letters in the spacing tab."+msgstr ""++#: libbirdfont/KerningDisplay.vala:101 libbirdfont/KerningDisplay.vala:882 msgid "Kerning" msgstr "Crenatura" -#: libbirdfont/KerningDisplay.vala:105+#: libbirdfont/KerningDisplay.vala:109 msgid "The current kerning class is malformed." msgstr "La classe di crenatura corrente è deforme" -#: libbirdfont/KerningDisplay.vala:106+#: libbirdfont/KerningDisplay.vala:110 msgid "Add single characters separated by space and ranges on the form A-Z." msgstr "" "Aggiungi caratteri singoli separati da spazio e intervalli nella forma A-Z." -#: libbirdfont/KerningDisplay.vala:107+#: libbirdfont/KerningDisplay.vala:111 msgid "Type “space” to kern the space character and “divis” to kern -." msgstr "" "Digita \"space\" per la crenatura del carattere spazio e \"divis\" per la " "crenatura del carattere -." -#: libbirdfont/KerningDisplay.vala:678 libbirdfont/OverviewTools.vala:78+#: libbirdfont/KerningDisplay.vala:683 libbirdfont/OverviewTools.vala:78 msgid "Unicode" msgstr "Unicode" -#: libbirdfont/KerningDisplay.vala:678+#: libbirdfont/KerningDisplay.vala:683 msgid "Insert" msgstr "Inserisci" -#: libbirdfont/KerningDisplay.vala:877 libbirdfont/MainWindow.vala:235-#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:208+#: libbirdfont/KerningDisplay.vala:882 libbirdfont/MainWindow.vala:241+#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:231 msgid "Close" msgstr "Chiudi" @@ -770,11 +789,11 @@ msgstr "Non sono state create coppie di crenatura." msgid "Kerning class" msgstr "Classe di crenatura" -#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:144+#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:166 #: libbirdfont/Ligatures.vala:118 libbirdfont/Ligatures.vala:141 #: libbirdfont/Ligatures.vala:164 libbirdfont/Ligatures.vala:196 #: libbirdfont/SpacingClass.vala:45 libbirdfont/SpacingTab.vala:232-#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:208+#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:231 #: libbirdfont/Theme.vala:687 msgid "Set" msgstr "Imposta"@@ -839,7 +858,11 @@ msgstr "Tipi di carattere" msgid "Character Set" msgstr "Set caratteri" -#: libbirdfont/LayerLabel.vala:144+#: libbirdfont/LayerLabel.vala:101+msgid "Hide the layer."+msgstr ""++#: libbirdfont/LayerLabel.vala:166 msgid "Layer" msgstr "Livello" @@ -880,7 +903,7 @@ msgid "Contextual Substitutions" msgstr "Sostituzioni contestuali"  #: libbirdfont/LigatureList.vala:126 libbirdfont/LigatureList.vala:140-#: libbirdfont/Menu.vala:445+#: libbirdfont/Menu.vala:447 msgid "Ligatures" msgstr "Legature" @@ -926,7 +949,7 @@ msgstr "" msgid "You need an older version of Birdfont to open it." msgstr "Dovresti avere una versione meno recente di Birdfont per aprirlo." -#: libbirdfont/MainWindow.vala:235+#: libbirdfont/MainWindow.vala:241 msgid "Glyph sequence" msgstr "Sequenza glifi" @@ -986,8 +1009,8 @@ msgstr "Seleziona tutti i glifi" msgid "Move To Baseline" msgstr "Muovi alla linea di base" -#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:250-#: libbirdfont/OverView.vala:269 libbirdfont/OverviewTools.vala:154+#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:257+#: libbirdfont/OverView.vala:276 libbirdfont/OverviewTools.vala:154 msgid "Search" msgstr "Cerca" @@ -1059,102 +1082,106 @@ msgstr "Esporta caratteri" msgid "Export Glyph as SVG" msgstr "Esporta il Glifo come SVG" -#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:303+#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:304 msgid "Import SVG file" msgstr "Importa un file SVG" -#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:313 msgid "Import SVG folder" msgstr "Importa una cartella SVG" -#: libbirdfont/Menu.vala:303 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:304 libbirdfont/Menu.vala:313 msgid "color" msgstr "" -#: libbirdfont/Menu.vala:320+#: libbirdfont/Menu.vala:322 msgid "Import Background Image" msgstr "Importa un'immagine di sfondo" -#: libbirdfont/Menu.vala:334 libbirdfont/Preview.vala:27+#: libbirdfont/Menu.vala:336 libbirdfont/Preview.vala:27 msgid "Preview" msgstr "Anteprima" -#: libbirdfont/Menu.vala:342+#: libbirdfont/Menu.vala:344 msgid "Tab" msgstr "Tabulazione" -#: libbirdfont/Menu.vala:348+#: libbirdfont/Menu.vala:350 msgid "Next Tab" msgstr "Scheda successiva" -#: libbirdfont/Menu.vala:355+#: libbirdfont/Menu.vala:357 msgid "Previous Tab" msgstr "Scheda precedente" -#: libbirdfont/Menu.vala:362+#: libbirdfont/Menu.vala:364 msgid "Close Tab" msgstr "Chiudi la scheda" -#: libbirdfont/Menu.vala:369+#: libbirdfont/Menu.vala:371 msgid "Close All Tabs" msgstr "Chiudi tutte le schede" -#: libbirdfont/Menu.vala:377+#: libbirdfont/Menu.vala:379 msgid "Spacing and Kerning" msgstr "Spaziatura e crenatura" -#: libbirdfont/Menu.vala:383+#: libbirdfont/Menu.vala:385 msgid "Show Spacing Tab" msgstr "Mostra il tabulatore della spaziatura" -#: libbirdfont/Menu.vala:390+#: libbirdfont/Menu.vala:392 msgid "Show Kerning Tab" msgstr "Mostra il tabulatore della crenatura" -#: libbirdfont/Menu.vala:397+#: libbirdfont/Menu.vala:399 msgid "List Kerning Pairs" msgstr "Lista coppie di crenatura" -#: libbirdfont/Menu.vala:404 libbirdfont/SpacingClassTab.vala:80+#: libbirdfont/Menu.vala:406 libbirdfont/SpacingClassTab.vala:80 msgid "Spacing Classes" msgstr "Classi di spaziatura" -#: libbirdfont/Menu.vala:411+#: libbirdfont/Menu.vala:413 msgid "Select Next Kerning Pair" msgstr "Seleziona la coppia di crenatura successiva" -#: libbirdfont/Menu.vala:420+#: libbirdfont/Menu.vala:422 msgid "Select Previous Kerning Pair" msgstr "Seleziona la coppia di crenatura precedente" -#: libbirdfont/Menu.vala:429+#: libbirdfont/Menu.vala:431 msgid "Load Kerning Strings" msgstr "Carica le stringhe di crenatura" -#: libbirdfont/Menu.vala:436+#: libbirdfont/Menu.vala:438 msgid "Reload Kerning Strings" msgstr "Ricarica le stringhe di crenatura" -#: libbirdfont/Menu.vala:451+#: libbirdfont/Menu.vala:453 msgid "Show Ligatures" msgstr "Mostra le legature" -#: libbirdfont/Menu.vala:458+#: libbirdfont/Menu.vala:460 msgid "Add Ligature" msgstr "Aggiungi la legatura" -#: libbirdfont/Menu.vala:467+#: libbirdfont/Menu.vala:469 msgid "Git" msgstr "Git" -#: libbirdfont/Menu.vala:473+#: libbirdfont/Menu.vala:475 msgid "Save As .bfp" msgstr "Salva come .bfp" -#: libbirdfont/Menu.vala:482 libbirdfont/OverView.vala:471+#: libbirdfont/Menu.vala:484 libbirdfont/OverView.vala:478 msgid "Overview" msgstr "Panoramica" +#: libbirdfont/Menu.vala:513+msgid "Help"+msgstr ""+ #: libbirdfont/MenuItem.vala:82 msgid "UP" msgstr "SU"@@ -1238,16 +1265,11 @@ msgstr "Maiuscole a Maiuscoletto" msgid "Swashes" msgstr "ornature" -#: libbirdfont/OverView.vala:250 libbirdfont/OverView.vala:269+#: libbirdfont/OverView.vala:257 libbirdfont/OverView.vala:276 msgid "Filter" msgstr "Filtro" -# May be better to use vista or schermata-#: libbirdfont/OverView.vala:673-msgid "No glyphs in this view."-msgstr "Nessun glifo in questa vista."--#: libbirdfont/OverView.vala:1484+#: libbirdfont/OverView.vala:1498 msgid "See also:" msgstr "Vedi anche:" @@ -1424,10 +1446,6 @@ msgstr "Sinistra" msgid "Right" msgstr "Destra" -#: libbirdfont/SvgParser.vala:62 libbirdfont/SvgParser.vala:121-msgid "Import"-msgstr "Importa"- #: libbirdfont/Theme.vala:421 msgid "Canvas Background" msgstr "Sfondo della tela"@@ -1712,7 +1730,7 @@ msgstr "Personalizzata" msgid "Color" msgstr "Colore" -#: libbirdfont/ToolItem.vala:44+#: libbirdfont/ToolItem.vala:66 msgid "Shift" msgstr "Maiusc" @@ -1756,6 +1774,13 @@ msgstr "Formato non riconosciuto." msgid "Writing" msgstr "In Scrittura" +# May be better to use vista or schermata+#~ msgid "No glyphs in this view."+#~ msgstr "Nessun glifo in questa vista."++#~ msgid "Import"+#~ msgstr "Importa"+ #~ msgid "Full name (name and style)" #~ msgstr "Nome completo (nome e stile)" diff --git a/po/nb.po b/po/nb.poindex 7398145..5ddf5b7 100644--- a/po/nb.po+++ b/po/nb.po@@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n"-"POT-Creation-Date: 2015-12-22 20:35+0100\n"+"POT-Creation-Date: 2016-01-06 12:06+0100\n" "PO-Revision-Date: 2015-09-08 19:57+0000\n" "Last-Translator: Anonymous Pootle User\n" "Language-Team: LANGUAGE <LL@li.org>\n"@@ -106,16 +106,16 @@ msgstr "Filer" msgid "Parts" msgstr "Deler" -#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2421+#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2462 #: libbirdfont/LigatureList.vala:106 libbirdfont/OtfFeatureTable.vala:181 msgid "Add" msgstr "Legg til" -#: libbirdfont/BackgroundTools.vala:122+#: libbirdfont/BackgroundTools.vala:123 msgid "Select Glyph" msgstr "Velg type" -#: libbirdfont/BackgroundTools.vala:231 libbirdfont/LoadCallback.vala:102+#: libbirdfont/BackgroundTools.vala:233 libbirdfont/LoadCallback.vala:102 #: libbirdfont/Menu.vala:50 msgid "Open" msgstr "Åpne"@@ -192,18 +192,18 @@ msgid "Thai" msgstr ""  #. / All lower case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:420+#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:433 msgid "a b c d e f g h i j k l m n o p q r s t u v w x y z" msgstr "a b c d e f g h i j k l m n o p q r s t u v w x y z æ ø å"  #. / All upper case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:421+#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:434 msgid "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z" msgstr "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Æ Ø Å"  #: libbirdfont/DescriptionDisplay.vala:66 #: libbirdfont/DescriptionDisplay.vala:277 libbirdfont/ExportSettings.vala:133-#: libbirdfont/Menu.vala:497 libbirdfont/TableLayout.vala:203+#: libbirdfont/Menu.vala:499 libbirdfont/TableLayout.vala:203 #, fuzzy msgid "Name and Description" msgstr "Navn og _Beskrivelse"@@ -245,7 +245,7 @@ msgid "Unique Identifier" msgstr "Unik identifikator"  #: libbirdfont/DescriptionDisplay.vala:150 libbirdfont/ImportUtils.vala:161-#: libbirdfont/Menu.vala:504 libbirdfont/Menu.vala:506+#: libbirdfont/Menu.vala:506 libbirdfont/Menu.vala:508 #: libbirdfont/VersionList.vala:265 msgid "Version" msgstr "Versjon"@@ -331,219 +331,228 @@ msgstr "" msgid "Grid Size" msgstr "" -#: libbirdfont/DrawingTools.vala:194+#: libbirdfont/DrawingTools.vala:195 msgid "Move canvas" msgstr "" -#: libbirdfont/DrawingTools.vala:202+#: libbirdfont/DrawingTools.vala:196+msgid "Press space and click to move the canvas."+msgstr ""++#: libbirdfont/DrawingTools.vala:204 msgid "Delete" msgstr "" -#: libbirdfont/DrawingTools.vala:209+#: libbirdfont/DrawingTools.vala:211 msgid "Select all points or paths" msgstr "" -#: libbirdfont/DrawingTools.vala:225 libbirdfont/Menu.vala:99+#: libbirdfont/DrawingTools.vala:227 libbirdfont/Menu.vala:99 #, fuzzy msgid "Undo" msgstr "_Angre" -#: libbirdfont/DrawingTools.vala:232+#: libbirdfont/DrawingTools.vala:234 msgid "Insert new points on path" msgstr "" -#: libbirdfont/DrawingTools.vala:241+#: libbirdfont/DrawingTools.vala:244 msgid "Create quadratic Bézier curves" msgstr "" -#: libbirdfont/DrawingTools.vala:250+#: libbirdfont/DrawingTools.vala:245+msgid ""+"All control points will be converted to quadratic points in the TTF format."+msgstr ""++#: libbirdfont/DrawingTools.vala:255 msgid "Create cubic Bézier curves" msgstr "" -#: libbirdfont/DrawingTools.vala:259+#: libbirdfont/DrawingTools.vala:264 msgid "Quadratic path with two line handles" msgstr "" -#: libbirdfont/DrawingTools.vala:268+#: libbirdfont/DrawingTools.vala:273 msgid "Convert selected points" msgstr "Konverter markerte punkter" -#: libbirdfont/DrawingTools.vala:279+#: libbirdfont/DrawingTools.vala:284 msgid "X coordinate" msgstr "" -#: libbirdfont/DrawingTools.vala:323+#: libbirdfont/DrawingTools.vala:328 msgid "Y coordinate" msgstr "" -#: libbirdfont/DrawingTools.vala:366+#: libbirdfont/DrawingTools.vala:371 msgid "Rotation" msgstr "" -#: libbirdfont/DrawingTools.vala:405+#: libbirdfont/DrawingTools.vala:410 msgid "Width" msgstr "" -#: libbirdfont/DrawingTools.vala:430+#: libbirdfont/DrawingTools.vala:435 #, fuzzy msgid "Height" msgstr "Vekt" -#: libbirdfont/DrawingTools.vala:473+#: libbirdfont/DrawingTools.vala:478 msgid "Tie curve handles for the selected edit point" msgstr "Bind sammen kurvehåndtak for det valgte endrepunktet" -#: libbirdfont/DrawingTools.vala:524+#: libbirdfont/DrawingTools.vala:529 msgid "Symmetrical handles" msgstr "" -#: libbirdfont/DrawingTools.vala:554+#: libbirdfont/DrawingTools.vala:559 msgid "Convert segment to line." msgstr "" -#: libbirdfont/DrawingTools.vala:562+#: libbirdfont/DrawingTools.vala:567 msgid "Create counter from outline" msgstr "Lag en en innvendig fra omriss" -#: libbirdfont/DrawingTools.vala:565+#: libbirdfont/DrawingTools.vala:570 msgid "Scale object to font top/baseline" msgstr "" -#: libbirdfont/DrawingTools.vala:574+#: libbirdfont/DrawingTools.vala:579 #, fuzzy msgid "Close path" msgstr "Lukk _Filsti" -#: libbirdfont/DrawingTools.vala:596+#: libbirdfont/DrawingTools.vala:601 #, fuzzy msgid "Move to path to the bottom of the layer" msgstr "Flytt linjeformen til det nederste laget" -#: libbirdfont/DrawingTools.vala:610+#: libbirdfont/DrawingTools.vala:615 msgid "Flip path vertically" msgstr "" -#: libbirdfont/DrawingTools.vala:618+#: libbirdfont/DrawingTools.vala:623 msgid "Flip path horizontally" msgstr "" -#: libbirdfont/DrawingTools.vala:627+#: libbirdfont/DrawingTools.vala:632 msgid "Set size for background image" msgstr "Angi størrelse for bakgrunnsbilde" -#: libbirdfont/DrawingTools.vala:665+#: libbirdfont/DrawingTools.vala:670 msgid "Show/hide background image" msgstr "Vis/skjul bakgrunnsbilde" -#: libbirdfont/DrawingTools.vala:676+#: libbirdfont/DrawingTools.vala:681 msgid "Insert a new background image" msgstr "Sett inn ett nytt bakgrunnsbilde" -#: libbirdfont/DrawingTools.vala:690 libbirdfont/ThemeTab.vala:151+#: libbirdfont/DrawingTools.vala:695 libbirdfont/ThemeTab.vala:151 msgid "High contrast" msgstr "" -#: libbirdfont/DrawingTools.vala:704+#: libbirdfont/DrawingTools.vala:709 msgid "Set background threshold" msgstr "" -#: libbirdfont/DrawingTools.vala:723+#: libbirdfont/DrawingTools.vala:728 msgid "Amount of autotrace details" msgstr "" -#: libbirdfont/DrawingTools.vala:742+#: libbirdfont/DrawingTools.vala:747 msgid "Autotrace simplification" msgstr "" -#: libbirdfont/DrawingTools.vala:752+#: libbirdfont/DrawingTools.vala:757 msgid "Autotrace background image" msgstr "" -#: libbirdfont/DrawingTools.vala:760+#: libbirdfont/DrawingTools.vala:765 #, fuzzy msgid "Delete background image" msgstr "Velg bakgrunnsbilde" -#: libbirdfont/DrawingTools.vala:767+#: libbirdfont/DrawingTools.vala:772 msgid "Add layer" msgstr "" -#: libbirdfont/DrawingTools.vala:777+#: libbirdfont/DrawingTools.vala:782 msgid "Show layers" msgstr "" -#: libbirdfont/DrawingTools.vala:787+#: libbirdfont/DrawingTools.vala:792 msgid "Apply stroke" msgstr "" -#: libbirdfont/DrawingTools.vala:821 libbirdfont/SettingsTab.vala:34+#: libbirdfont/DrawingTools.vala:826 libbirdfont/SettingsTab.vala:34 msgid "Stroke width" msgstr "Kantlinje bredde" -#: libbirdfont/DrawingTools.vala:863+#: libbirdfont/DrawingTools.vala:872 msgid "Create outline form stroke" msgstr "" -#: libbirdfont/DrawingTools.vala:872+#: libbirdfont/DrawingTools.vala:881 msgid "Butt line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:896+#: libbirdfont/DrawingTools.vala:908 msgid "Round line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:921+#: libbirdfont/DrawingTools.vala:936 msgid "Square line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:990+#: libbirdfont/DrawingTools.vala:1008 msgid "Show guidelines" msgstr "Vis rettningslinjer" -#: libbirdfont/DrawingTools.vala:1002+#: libbirdfont/DrawingTools.vala:1020 #, fuzzy msgid "Show more guidelines" msgstr "Vis rettningslinjer" -#: libbirdfont/DrawingTools.vala:1018+#: libbirdfont/DrawingTools.vala:1036 msgid "Show guidelines at top and bottom margin" msgstr "Vis hjelpelinjer på topp- og bunnmarginen" -#: libbirdfont/DrawingTools.vala:1042+#: libbirdfont/DrawingTools.vala:1060 msgid "Lock guides and grid" msgstr "" -#: libbirdfont/DrawingTools.vala:1084+#: libbirdfont/DrawingTools.vala:1102 msgid "Zoom Out More" msgstr "" -#: libbirdfont/DrawingTools.vala:1093+#: libbirdfont/DrawingTools.vala:1111 msgid "Show full glyph" msgstr "Vis hele tegnet" -#: libbirdfont/DrawingTools.vala:1100+#: libbirdfont/DrawingTools.vala:1118 msgid "Fit in view" msgstr "" -#: libbirdfont/DrawingTools.vala:1107+#: libbirdfont/DrawingTools.vala:1125 #, fuzzy msgid "Zoom in on background image" msgstr "Zoom inn bakgrunnsbildet" -#: libbirdfont/DrawingTools.vala:1117+#: libbirdfont/DrawingTools.vala:1135 msgid "Previous view" msgstr "Forrige visning" -#: libbirdfont/DrawingTools.vala:1123+#: libbirdfont/DrawingTools.vala:1141 msgid "Next view" msgstr "Neste visning" -#: libbirdfont/DrawingTools.vala:1525+#: libbirdfont/DrawingTools.vala:1543 msgid "Set size for grid" msgstr "Angi størrelse for rutenett"  #: libbirdfont/ExportSettings.vala:41 libbirdfont/ExportSettings.vala:185-#: libbirdfont/Menu.vala:327+#: libbirdfont/Menu.vala:329 msgid "Export Settings" msgstr "" @@ -567,13 +576,13 @@ msgstr "" msgid "Export" msgstr "Eksporter" -#: libbirdfont/ExportTool.vala:209 libbirdfont/Menu.vala:64-#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:68+#: libbirdfont/ExportTool.vala:222 libbirdfont/Menu.vala:64+#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:69 #: libbirdfont/SaveDialog.vala:38 libbirdfont/SaveDialogListener.vala:29 msgid "Save" msgstr "Lagre" -#: libbirdfont/ExportTool.vala:419+#: libbirdfont/ExportTool.vala:432 msgid "Alphabet" msgstr "" @@ -626,7 +635,7 @@ msgstr "" msgid "Save font" msgstr "" -#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:490+#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:492 #: libbirdfont/SettingsDisplay.vala:225 libbirdfont/SettingsTab.vala:31 #: libbirdfont/SettingsTab.vala:159 msgid "Settings"@@ -637,39 +646,39 @@ msgstr "" msgid "Themes" msgstr "" -#: libbirdfont/Glyph.vala:550+#: libbirdfont/Glyph.vala:602 msgid "top margin" msgstr "" -#: libbirdfont/Glyph.vala:557+#: libbirdfont/Glyph.vala:609 msgid "top" msgstr "" -#: libbirdfont/Glyph.vala:564+#: libbirdfont/Glyph.vala:616 msgid "x-height" msgstr "" -#: libbirdfont/Glyph.vala:573+#: libbirdfont/Glyph.vala:625 msgid "baseline" msgstr "" -#: libbirdfont/Glyph.vala:580+#: libbirdfont/Glyph.vala:632 msgid "bottom" msgstr "" -#: libbirdfont/Glyph.vala:586+#: libbirdfont/Glyph.vala:638 msgid "bottom margin" msgstr "" -#: libbirdfont/Glyph.vala:592+#: libbirdfont/Glyph.vala:644 msgid "left" msgstr "" -#: libbirdfont/Glyph.vala:601+#: libbirdfont/Glyph.vala:653 msgid "right" msgstr "" -#: libbirdfont/Glyph.vala:2421+#: libbirdfont/Glyph.vala:2462 msgid "Guide" msgstr "" @@ -681,6 +690,10 @@ msgstr "Vis rutenett" msgid "Guides" msgstr "" +#: libbirdfont/Help.vala:29+msgid "BirdFont is a font editor."+msgstr ""+ #: libbirdfont/HiddenTools.vala:33 msgid "Zoom in" msgstr "Zoom inn"@@ -746,32 +759,38 @@ msgstr "for" msgid "Glyph" msgstr "Tegn" -#: libbirdfont/KerningDisplay.vala:97 libbirdfont/KerningDisplay.vala:877+#: libbirdfont/KerningDisplay.vala:60+msgid ""+"Kerning is the process of adjusting the space between two letters. You can "+"cahnge the space between one letter and all other letters in the spacing tab."+msgstr ""++#: libbirdfont/KerningDisplay.vala:101 libbirdfont/KerningDisplay.vala:882 msgid "Kerning" msgstr "Kniping (tegnavstand)" -#: libbirdfont/KerningDisplay.vala:105+#: libbirdfont/KerningDisplay.vala:109 msgid "The current kerning class is malformed." msgstr "" -#: libbirdfont/KerningDisplay.vala:106+#: libbirdfont/KerningDisplay.vala:110 msgid "Add single characters separated by space and ranges on the form A-Z." msgstr "" -#: libbirdfont/KerningDisplay.vala:107+#: libbirdfont/KerningDisplay.vala:111 msgid "Type “space” to kern the space character and “divis” to kern -." msgstr "" -#: libbirdfont/KerningDisplay.vala:678 libbirdfont/OverviewTools.vala:78+#: libbirdfont/KerningDisplay.vala:683 libbirdfont/OverviewTools.vala:78 msgid "Unicode" msgstr "" -#: libbirdfont/KerningDisplay.vala:678+#: libbirdfont/KerningDisplay.vala:683 msgid "Insert" msgstr "" -#: libbirdfont/KerningDisplay.vala:877 libbirdfont/MainWindow.vala:235-#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:208+#: libbirdfont/KerningDisplay.vala:882 libbirdfont/MainWindow.vala:241+#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:231 msgid "Close" msgstr "Lukk" @@ -787,11 +806,11 @@ msgstr "" msgid "Kerning class" msgstr "" -#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:144+#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:166 #: libbirdfont/Ligatures.vala:118 libbirdfont/Ligatures.vala:141 #: libbirdfont/Ligatures.vala:164 libbirdfont/Ligatures.vala:196 #: libbirdfont/SpacingClass.vala:45 libbirdfont/SpacingTab.vala:232-#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:208+#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:231 #: libbirdfont/Theme.vala:687 msgid "Set" msgstr ""@@ -858,7 +877,11 @@ msgstr "Tegnsett" msgid "Character Set" msgstr "Tegnsett" -#: libbirdfont/LayerLabel.vala:144+#: libbirdfont/LayerLabel.vala:101+msgid "Hide the layer."+msgstr ""++#: libbirdfont/LayerLabel.vala:166 msgid "Layer" msgstr "" @@ -899,7 +922,7 @@ msgid "Contextual Substitutions" msgstr ""  #: libbirdfont/LigatureList.vala:126 libbirdfont/LigatureList.vala:140-#: libbirdfont/Menu.vala:445+#: libbirdfont/Menu.vala:447 msgid "Ligatures" msgstr "" @@ -944,7 +967,7 @@ msgstr "" msgid "You need an older version of Birdfont to open it." msgstr "" -#: libbirdfont/MainWindow.vala:235+#: libbirdfont/MainWindow.vala:241 msgid "Glyph sequence" msgstr "Tegnsekvens" @@ -1015,8 +1038,8 @@ msgstr "Velg Alle St_ier" msgid "Move To Baseline" msgstr "" -#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:250-#: libbirdfont/OverView.vala:269 libbirdfont/OverviewTools.vala:154+#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:257+#: libbirdfont/OverView.vala:276 libbirdfont/OverviewTools.vala:154 msgid "Search" msgstr "" @@ -1095,108 +1118,112 @@ msgstr "" msgid "Export Glyph as SVG" msgstr "_Eksportér tegn som SVG" -#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:303+#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:304 msgid "Import SVG file" msgstr "" -#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:313 msgid "Import SVG folder" msgstr "" -#: libbirdfont/Menu.vala:303 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:304 libbirdfont/Menu.vala:313 msgid "color" msgstr "" -#: libbirdfont/Menu.vala:320+#: libbirdfont/Menu.vala:322 #, fuzzy msgid "Import Background Image" msgstr "Velg Bakgrunnsbilde" -#: libbirdfont/Menu.vala:334 libbirdfont/Preview.vala:27+#: libbirdfont/Menu.vala:336 libbirdfont/Preview.vala:27 msgid "Preview" msgstr "Forhåndsvis" -#: libbirdfont/Menu.vala:342+#: libbirdfont/Menu.vala:344 #, fuzzy msgid "Tab" msgstr "_Fane" -#: libbirdfont/Menu.vala:348+#: libbirdfont/Menu.vala:350 #, fuzzy msgid "Next Tab" msgstr "_Neste fane" -#: libbirdfont/Menu.vala:355+#: libbirdfont/Menu.vala:357 #, fuzzy msgid "Previous Tab" msgstr "_Forrige fane" -#: libbirdfont/Menu.vala:362+#: libbirdfont/Menu.vala:364 #, fuzzy msgid "Close Tab" msgstr "_Lukk fane" -#: libbirdfont/Menu.vala:369+#: libbirdfont/Menu.vala:371 #, fuzzy msgid "Close All Tabs" msgstr "Lukk _alle faner" -#: libbirdfont/Menu.vala:377+#: libbirdfont/Menu.vala:379 msgid "Spacing and Kerning" msgstr "" -#: libbirdfont/Menu.vala:383+#: libbirdfont/Menu.vala:385 msgid "Show Spacing Tab" msgstr "" -#: libbirdfont/Menu.vala:390+#: libbirdfont/Menu.vala:392 msgid "Show Kerning Tab" msgstr "" -#: libbirdfont/Menu.vala:397+#: libbirdfont/Menu.vala:399 msgid "List Kerning Pairs" msgstr "" -#: libbirdfont/Menu.vala:404 libbirdfont/SpacingClassTab.vala:80+#: libbirdfont/Menu.vala:406 libbirdfont/SpacingClassTab.vala:80 msgid "Spacing Classes" msgstr "" -#: libbirdfont/Menu.vala:411+#: libbirdfont/Menu.vala:413 msgid "Select Next Kerning Pair" msgstr "" -#: libbirdfont/Menu.vala:420+#: libbirdfont/Menu.vala:422 msgid "Select Previous Kerning Pair" msgstr "" -#: libbirdfont/Menu.vala:429+#: libbirdfont/Menu.vala:431 msgid "Load Kerning Strings" msgstr "" -#: libbirdfont/Menu.vala:436+#: libbirdfont/Menu.vala:438 msgid "Reload Kerning Strings" msgstr "" -#: libbirdfont/Menu.vala:451+#: libbirdfont/Menu.vala:453 msgid "Show Ligatures" msgstr "" -#: libbirdfont/Menu.vala:458+#: libbirdfont/Menu.vala:460 msgid "Add Ligature" msgstr "" -#: libbirdfont/Menu.vala:467+#: libbirdfont/Menu.vala:469 msgid "Git" msgstr "" -#: libbirdfont/Menu.vala:473+#: libbirdfont/Menu.vala:475 msgid "Save As .bfp" msgstr "" -#: libbirdfont/Menu.vala:482 libbirdfont/OverView.vala:471+#: libbirdfont/Menu.vala:484 libbirdfont/OverView.vala:478 msgid "Overview" msgstr "Oversikt" +#: libbirdfont/Menu.vala:513+msgid "Help"+msgstr ""+ #: libbirdfont/MenuItem.vala:82 msgid "UP" msgstr ""@@ -1278,15 +1305,11 @@ msgstr "" msgid "Swashes" msgstr "" -#: libbirdfont/OverView.vala:250 libbirdfont/OverView.vala:269+#: libbirdfont/OverView.vala:257 libbirdfont/OverView.vala:276 msgid "Filter" msgstr "" -#: libbirdfont/OverView.vala:673-msgid "No glyphs in this view."-msgstr "Ingen tegn i dette bildet"--#: libbirdfont/OverView.vala:1484+#: libbirdfont/OverView.vala:1498 msgid "See also:" msgstr "Se også:" @@ -1464,10 +1487,6 @@ msgstr "" msgid "Right" msgstr "" -#: libbirdfont/SvgParser.vala:62 libbirdfont/SvgParser.vala:121-msgid "Import"-msgstr "Importer"- #: libbirdfont/Theme.vala:421 msgid "Canvas Background" msgstr ""@@ -1754,7 +1773,7 @@ msgstr "" msgid "Color" msgstr "" -#: libbirdfont/ToolItem.vala:44+#: libbirdfont/ToolItem.vala:66 msgid "Shift" msgstr "" @@ -1799,6 +1818,12 @@ msgstr "" msgid "Writing" msgstr "Skriver" +#~ msgid "No glyphs in this view."+#~ msgstr "Ingen tegn i dette bildet"++#~ msgid "Import"+#~ msgstr "Importer"+ #, fuzzy #~ msgid "Full name (name and style)" #~ msgstr "Fullt navn (navn og stil)"diff --git a/po/nl.po b/po/nl.poindex a7fce5e..2022ca5 100644--- a/po/nl.po+++ b/po/nl.po@@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n"-"POT-Creation-Date: 2015-12-22 20:35+0100\n"-"PO-Revision-Date: 2015-12-01 08:47+0000\n"+"POT-Creation-Date: 2016-01-06 12:06+0100\n"+"PO-Revision-Date: 2015-12-27 03:31+0000\n" "Last-Translator: Anonymous Pootle User\n" "Language-Team: LANGUAGE <LL@li.org>\n" "Language: nl\n"@@ -16,7 +16,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Pootle 2.5.1-rc1\n"-"X-POOTLE-MTIME: 1448959643.000000\n"+"X-POOTLE-MTIME: 1451187107.000000\n"  # Please, fix the capitalization errors #: libbirdfont/Argument.vala:277@@ -87,15 +87,15 @@ msgstr "Achtergrondafbeelding"  #: libbirdfont/BackgroundTool.vala:44 msgid "Move, resize and rotate background image"-msgstr "Achtergrondafbeelding manipuleren"+msgstr "Achtergrondafbeelding verplaatsen, vergroten/verkleinen en draaien"  #: libbirdfont/BackgroundTool.vala:246 msgid "Select background image"-msgstr "Selecteer achtergrondafbeelding"+msgstr "Achtergrondafbeelding selecteren"  #: libbirdfont/BackgroundTools.vala:27 msgid "Images"-msgstr "afbeeldingen"+msgstr "Afbeeldingen"  #: libbirdfont/BackgroundTools.vala:34 libbirdfont/FileDialogTab.vala:94 #: libbirdfont/RecentFiles.vala:106@@ -106,27 +106,27 @@ msgstr "Bestanden" msgid "Parts" msgstr "Delen" -#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2421+#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2462 #: libbirdfont/LigatureList.vala:106 libbirdfont/OtfFeatureTable.vala:181 msgid "Add" msgstr "Toevoegen" -#: libbirdfont/BackgroundTools.vala:122+#: libbirdfont/BackgroundTools.vala:123 msgid "Select Glyph"-msgstr "kies symbool"+msgstr "Symbool selecteren" -#: libbirdfont/BackgroundTools.vala:231 libbirdfont/LoadCallback.vala:102+#: libbirdfont/BackgroundTools.vala:233 libbirdfont/LoadCallback.vala:102 #: libbirdfont/Menu.vala:50 msgid "Open"-msgstr "open"+msgstr "Openen"  #: libbirdfont/BezierTool.vala:91 msgid "Create Beziér curves"-msgstr "maak Bézier-curves"+msgstr "Bézier-curven maken"  #: libbirdfont/BezierTool.vala:95 msgid "line"-msgstr "regel"+msgstr "lijn"  #: libbirdfont/BezierTool.vala:99 msgid "corner"@@ -138,19 +138,19 @@ msgstr "op as"  #: libbirdfont/CircleTool.vala:36 msgid "Circle"-msgstr "cirkel"+msgstr "Cirkel"  #: libbirdfont/CutBackgroundTool.vala:38 msgid "Crop background image"-msgstr "achtergrondafbeelding bijsnijden"+msgstr "Achtergrondafbeelding bijsnijden"  #: libbirdfont/DefaultCharactersSet.vala:25 msgid "Default Language"-msgstr "standaardtaal"+msgstr "Standaardtaal"  #: libbirdfont/DefaultCharactersSet.vala:26 msgid "Private Use Area"-msgstr "gebied voor privégebruik"+msgstr "Gebied voor privégebruik"  #: libbirdfont/DefaultCharactersSet.vala:28 msgid "Chinese"@@ -189,20 +189,20 @@ msgid "Thai" msgstr "Thais"  #. / All lower case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:420+#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:433 msgid "a b c d e f g h i j k l m n o p q r s t u v w x y z" msgstr "a b c d e f g h i j k l m n o p q r s t u v w x y z"  #. / All upper case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:421+#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:434 msgid "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z" msgstr "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z"  #: libbirdfont/DescriptionDisplay.vala:66 #: libbirdfont/DescriptionDisplay.vala:277 libbirdfont/ExportSettings.vala:133-#: libbirdfont/Menu.vala:497 libbirdfont/TableLayout.vala:203+#: libbirdfont/Menu.vala:499 libbirdfont/TableLayout.vala:203 msgid "Name and Description"-msgstr "naam en beschrijving"+msgstr "Naam en beschrijving"  #: libbirdfont/DescriptionDisplay.vala:70 libbirdfont/MenuTab.vala:98 msgid "PostScript Name"@@ -211,481 +211,489 @@ msgstr "PostScript-naam" #: libbirdfont/DescriptionDisplay.vala:80 libbirdfont/MenuTab.vala:103 #: libbirdfont/MenuTab.vala:696 msgid "Name"-msgstr "naam"+msgstr "Naam"  #: libbirdfont/DescriptionDisplay.vala:90 libbirdfont/MenuTab.vala:108 msgid "Style"-msgstr "stijl"+msgstr "Stijl"  #: libbirdfont/DescriptionDisplay.vala:100 msgid "Bold"-msgstr "vet"+msgstr "Vet"  #: libbirdfont/DescriptionDisplay.vala:109 msgid "Italic"-msgstr "cursief"+msgstr "Cursief"  #: libbirdfont/DescriptionDisplay.vala:119 msgid "Weight"-msgstr "lijndikte"+msgstr "Lijndikte"  #: libbirdfont/DescriptionDisplay.vala:129 libbirdfont/MenuTab.vala:113 msgid "Full Name (Name and Style)"-msgstr "volledige naam (naam en stijl)"+msgstr "Volledige naam (naam en stijl)"  #: libbirdfont/DescriptionDisplay.vala:140 libbirdfont/MenuTab.vala:118 msgid "Unique Identifier"-msgstr "unieke id"+msgstr "Unieke id"  #: libbirdfont/DescriptionDisplay.vala:150 libbirdfont/ImportUtils.vala:161-#: libbirdfont/Menu.vala:504 libbirdfont/Menu.vala:506+#: libbirdfont/Menu.vala:506 libbirdfont/Menu.vala:508 #: libbirdfont/VersionList.vala:265 msgid "Version"-msgstr "versie"+msgstr "Versie"  #: libbirdfont/DescriptionDisplay.vala:160 msgid "Description"-msgstr "beschrijving"+msgstr "Beschrijving"  #: libbirdfont/DescriptionDisplay.vala:171 msgid "Copyright"-msgstr "auteursrecht"+msgstr "Auteursrecht"  #: libbirdfont/DescriptionDisplay.vala:183 msgid "License"-msgstr "licentie"+msgstr "Licentie"  #: libbirdfont/DescriptionDisplay.vala:195 msgid "License URL"-msgstr "licentie URI:"+msgstr "Licentie-URL"  #: libbirdfont/DescriptionDisplay.vala:207 msgid "Trademark"-msgstr "trademark"+msgstr "Handelsmerk"  #: libbirdfont/DescriptionDisplay.vala:219 msgid "Manufacturer"-msgstr "maker"+msgstr "Producent"  #: libbirdfont/DescriptionDisplay.vala:230 msgid "Designer"-msgstr "ontwerper"+msgstr "Ontwerper"  #: libbirdfont/DescriptionDisplay.vala:241 msgid "Vendor URL"-msgstr "verkoper URL"+msgstr "Leverancier-URL"  #: libbirdfont/DescriptionDisplay.vala:252 msgid "Designer URL"-msgstr "ontwerper URL"+msgstr "Ontwerper-URL"  #: libbirdfont/DrawingTools.vala:112 msgid "Background Tools"-msgstr "achtergrond gereedschap"+msgstr "Achtergrondhulpmiddelen"  #: libbirdfont/DrawingTools.vala:113 msgid "Control Points"-msgstr "controlepunten"+msgstr "Controlepunten"  #: libbirdfont/DrawingTools.vala:114 msgid "Object Tools"-msgstr "Objectgereedschap"+msgstr "Objecthulpmiddelen"  #: libbirdfont/DrawingTools.vala:123 msgid "Drawing Tools"-msgstr "tekengereedschap"+msgstr "Tekenhulpmiddelen"  #: libbirdfont/DrawingTools.vala:124 msgid "Control Point"-msgstr "controlepunt"+msgstr "Controlepunt"  #: libbirdfont/DrawingTools.vala:126 libbirdfont/Menu.vala:247 msgid "Layers"-msgstr "lagen"+msgstr "Lagen"  #: libbirdfont/DrawingTools.vala:127 msgid "Stroke"-msgstr "streek"+msgstr "Streek"  #: libbirdfont/DrawingTools.vala:128 msgid "Geometrical Shapes"-msgstr "geometrische vormen"+msgstr "Geometrische vormen"  #: libbirdfont/DrawingTools.vala:129 libbirdfont/OverviewTools.vala:40 msgid "Zoom"-msgstr "zoomen"+msgstr "Zoomen"  #: libbirdfont/DrawingTools.vala:130 msgid "Guidelines & Grid"-msgstr "richtlijnen & grid"+msgstr "Richtlijnen & raster"  #: libbirdfont/DrawingTools.vala:135 msgid "Grid Size"-msgstr "gridgrootte"+msgstr "Rastergrootte" -#: libbirdfont/DrawingTools.vala:194+#: libbirdfont/DrawingTools.vala:195 msgid "Move canvas"-msgstr "verplaats canvas"+msgstr "Papier verplaatsen" -#: libbirdfont/DrawingTools.vala:202+#: libbirdfont/DrawingTools.vala:196+msgid "Press space and click to move the canvas."+msgstr ""++#: libbirdfont/DrawingTools.vala:204 msgid "Delete"-msgstr "verwijder"+msgstr "Verwijderen" -#: libbirdfont/DrawingTools.vala:209+#: libbirdfont/DrawingTools.vala:211 msgid "Select all points or paths"-msgstr "kies alle punten op paden"+msgstr "Alle punten of paden selecteren" -#: libbirdfont/DrawingTools.vala:225 libbirdfont/Menu.vala:99+#: libbirdfont/DrawingTools.vala:227 libbirdfont/Menu.vala:99 msgid "Undo"-msgstr "terug"+msgstr "Ongedaan maken" -#: libbirdfont/DrawingTools.vala:232+#: libbirdfont/DrawingTools.vala:234 msgid "Insert new points on path"-msgstr "nieuwe punten op pad"+msgstr "Nieuwe punten op pad invoegen" -#: libbirdfont/DrawingTools.vala:241+#: libbirdfont/DrawingTools.vala:244 msgid "Create quadratic Bézier curves"-msgstr "maak kwadratische Bézier-curves"+msgstr "Kwadratische Bézier-curven maken"++#: libbirdfont/DrawingTools.vala:245+msgid ""+"All control points will be converted to quadratic points in the TTF format."+msgstr "" -#: libbirdfont/DrawingTools.vala:250+#: libbirdfont/DrawingTools.vala:255 msgid "Create cubic Bézier curves"-msgstr "maak kubieke Bézier-curves"+msgstr "Kubieke Bézier-curven maken" -#: libbirdfont/DrawingTools.vala:259+#: libbirdfont/DrawingTools.vala:264 msgid "Quadratic path with two line handles"-msgstr "kwadratisch pad met twee lijngrepen"+msgstr "Kwadratisch pad met twee lijngrepen" -#: libbirdfont/DrawingTools.vala:268+#: libbirdfont/DrawingTools.vala:273 msgid "Convert selected points"-msgstr "verander geselecteerde punten"+msgstr "Geselecteerde punten converteren" -#: libbirdfont/DrawingTools.vala:279+#: libbirdfont/DrawingTools.vala:284 msgid "X coordinate" msgstr "X-coördinaat" -#: libbirdfont/DrawingTools.vala:323+#: libbirdfont/DrawingTools.vala:328 msgid "Y coordinate" msgstr "Y-coördinaat" -#: libbirdfont/DrawingTools.vala:366+#: libbirdfont/DrawingTools.vala:371 msgid "Rotation"-msgstr "draai"+msgstr "Draaiing" -#: libbirdfont/DrawingTools.vala:405+#: libbirdfont/DrawingTools.vala:410 msgid "Width"-msgstr "breedte"+msgstr "Breedte" -#: libbirdfont/DrawingTools.vala:430+#: libbirdfont/DrawingTools.vala:435 msgid "Height"-msgstr "hoogte"+msgstr "Hoogte" -#: libbirdfont/DrawingTools.vala:473+#: libbirdfont/DrawingTools.vala:478 msgid "Tie curve handles for the selected edit point"-msgstr "Bindt curve-grepen voor geselecteerd bewerkingspunt "+msgstr "Gebogen grepen voor het geselecteerde bewerkingspunt binden" -#: libbirdfont/DrawingTools.vala:524+#: libbirdfont/DrawingTools.vala:529 msgid "Symmetrical handles"-msgstr "symmetrische grepen"+msgstr "Symmetrische grepen" -#: libbirdfont/DrawingTools.vala:554+#: libbirdfont/DrawingTools.vala:559 msgid "Convert segment to line."-msgstr "verander segment in lijn"+msgstr "Segment converteren naar lijn" -#: libbirdfont/DrawingTools.vala:562+#: libbirdfont/DrawingTools.vala:567 msgid "Create counter from outline"-msgstr "maak contra-omlijning"+msgstr "Tegenstelling van omlijning maken" -#: libbirdfont/DrawingTools.vala:565+#: libbirdfont/DrawingTools.vala:570 msgid "Scale object to font top/baseline"-msgstr ""+msgstr "Object schalen naar bovenkant/basislijn" -#: libbirdfont/DrawingTools.vala:574+#: libbirdfont/DrawingTools.vala:579 msgid "Close path"-msgstr " &sluit pad"+msgstr "Pad sluiten" -#: libbirdfont/DrawingTools.vala:596-#, fuzzy+#: libbirdfont/DrawingTools.vala:601 msgid "Move to path to the bottom of the layer"-msgstr "verplaats pad naar onderste laag"+msgstr "Verplaatsen naar pad aan onderkant van de laag" -#: libbirdfont/DrawingTools.vala:610+#: libbirdfont/DrawingTools.vala:615 msgid "Flip path vertically"-msgstr "spiegel pad verticaal"+msgstr "Pad verticaal spiegelen" -#: libbirdfont/DrawingTools.vala:618+#: libbirdfont/DrawingTools.vala:623 msgid "Flip path horizontally"-msgstr "spiegel pad horizontaal"+msgstr "Pad horizontaal spiegelen" -#: libbirdfont/DrawingTools.vala:627+#: libbirdfont/DrawingTools.vala:632 msgid "Set size for background image"-msgstr "instellen grootte achtergrondafbeelding"+msgstr "Grootte voor achtergrondafbeelding instellen" -#: libbirdfont/DrawingTools.vala:665+#: libbirdfont/DrawingTools.vala:670 msgid "Show/hide background image"-msgstr "aan/uit achtergrondafbeelding"+msgstr "Achtergrondafbeelding tonen/verbergen" -#: libbirdfont/DrawingTools.vala:676+#: libbirdfont/DrawingTools.vala:681 msgid "Insert a new background image"-msgstr "nieuwe achtergrondafbeelding"+msgstr "Nieuwe achtergrondafbeelding invoegen" -#: libbirdfont/DrawingTools.vala:690 libbirdfont/ThemeTab.vala:151+#: libbirdfont/DrawingTools.vala:695 libbirdfont/ThemeTab.vala:151 msgid "High contrast"-msgstr "hoog contrast"+msgstr "Hoog contrast" -#: libbirdfont/DrawingTools.vala:704+#: libbirdfont/DrawingTools.vala:709 msgid "Set background threshold"-msgstr "instellen achtergronddrempel"+msgstr "Achtergronddrempel instellen" -#: libbirdfont/DrawingTools.vala:723+#: libbirdfont/DrawingTools.vala:728 msgid "Amount of autotrace details"-msgstr "instellen autotrace-detail"+msgstr "Hoeveelheid autotrace-details" -#: libbirdfont/DrawingTools.vala:742+#: libbirdfont/DrawingTools.vala:747 msgid "Autotrace simplification"-msgstr "vereenvoudigen Autotrace"+msgstr "Autotrace-vereenvoudiging" -#: libbirdfont/DrawingTools.vala:752+#: libbirdfont/DrawingTools.vala:757 msgid "Autotrace background image"-msgstr "Autotrace achtergrondafbeelding"+msgstr "Autotrace-achtergrondafbeelding" -#: libbirdfont/DrawingTools.vala:760+#: libbirdfont/DrawingTools.vala:765 msgid "Delete background image"-msgstr "verwijderen achtergrondafbeelding"+msgstr "Achtergrondafbeelding verwijderen" -#: libbirdfont/DrawingTools.vala:767+#: libbirdfont/DrawingTools.vala:772 msgid "Add layer"-msgstr "toevoegen laag"+msgstr "Laag toevoegen" -#: libbirdfont/DrawingTools.vala:777+#: libbirdfont/DrawingTools.vala:782 msgid "Show layers"-msgstr "toon lagen"+msgstr "Lagen tonen" -#: libbirdfont/DrawingTools.vala:787-#, fuzzy+#: libbirdfont/DrawingTools.vala:792 msgid "Apply stroke"-msgstr "maak streek"+msgstr "Streek toepassen" -#: libbirdfont/DrawingTools.vala:821 libbirdfont/SettingsTab.vala:34+#: libbirdfont/DrawingTools.vala:826 libbirdfont/SettingsTab.vala:34 msgid "Stroke width"-msgstr "lijndikte"+msgstr "Lijndikte" -#: libbirdfont/DrawingTools.vala:863+#: libbirdfont/DrawingTools.vala:872 msgid "Create outline form stroke"-msgstr "maak contour van streek"+msgstr "Overzichtsstreek maken" -#: libbirdfont/DrawingTools.vala:872+#: libbirdfont/DrawingTools.vala:881 msgid "Butt line cap"-msgstr "lijneinde"+msgstr "Stomp lijneinde" -#: libbirdfont/DrawingTools.vala:896+#: libbirdfont/DrawingTools.vala:908 msgid "Round line cap"-msgstr "lijneinde rond"+msgstr "Rond lijneinde" -#: libbirdfont/DrawingTools.vala:921+#: libbirdfont/DrawingTools.vala:936 msgid "Square line cap"-msgstr "lijneinde recht"+msgstr "Recht lijneinde" -#: libbirdfont/DrawingTools.vala:990+#: libbirdfont/DrawingTools.vala:1008 msgid "Show guidelines"-msgstr "toon hulplijnen"+msgstr "Hulplijnen tonen" -#: libbirdfont/DrawingTools.vala:1002-#, fuzzy+#: libbirdfont/DrawingTools.vala:1020 msgid "Show more guidelines"-msgstr "toon hulplijnen"+msgstr "Meer hulplijnen tonen" -#: libbirdfont/DrawingTools.vala:1018+#: libbirdfont/DrawingTools.vala:1036 msgid "Show guidelines at top and bottom margin"-msgstr "toon hulplijnen voor boven- en ondermarge"+msgstr "Hulplijnen bij boven- en ondermarge tonen" -#: libbirdfont/DrawingTools.vala:1042+#: libbirdfont/DrawingTools.vala:1060 msgid "Lock guides and grid"-msgstr "fixeer hulplijnen en grid"+msgstr "Hulplijnen en raster vergrendelen" -#: libbirdfont/DrawingTools.vala:1084+#: libbirdfont/DrawingTools.vala:1102 msgid "Zoom Out More"-msgstr "zoom meer uit"+msgstr "Meer uitzoomen" -#: libbirdfont/DrawingTools.vala:1093+#: libbirdfont/DrawingTools.vala:1111 msgid "Show full glyph"-msgstr "toon volledig symbool"+msgstr "Volledig symbool tonen" -#: libbirdfont/DrawingTools.vala:1100+#: libbirdfont/DrawingTools.vala:1118 msgid "Fit in view"-msgstr "pas in weergave"+msgstr "Passend in weergave" -#: libbirdfont/DrawingTools.vala:1107+#: libbirdfont/DrawingTools.vala:1125 msgid "Zoom in on background image"-msgstr "zoom in op achtergrondafbeelding"+msgstr "Inzoomen op achtergrondafbeelding" -#: libbirdfont/DrawingTools.vala:1117+#: libbirdfont/DrawingTools.vala:1135 msgid "Previous view"-msgstr "vorige weergave"+msgstr "Vorige weergave" -#: libbirdfont/DrawingTools.vala:1123+#: libbirdfont/DrawingTools.vala:1141 msgid "Next view"-msgstr "volgende weergave"+msgstr "Volgende weergave" -#: libbirdfont/DrawingTools.vala:1525+#: libbirdfont/DrawingTools.vala:1543 msgid "Set size for grid"-msgstr "instellen gridmaat"+msgstr "Grootte voor raster instellen"  #: libbirdfont/ExportSettings.vala:41 libbirdfont/ExportSettings.vala:185-#: libbirdfont/Menu.vala:327+#: libbirdfont/Menu.vala:329 msgid "Export Settings"-msgstr "instellingen exporteren"+msgstr "Instellingen exporteren"  #: libbirdfont/ExportSettings.vala:45 libbirdfont/ExportSettings.vala:60 msgid "File Name"-msgstr "bestandsnaam"+msgstr "Bestandsnaam"  #: libbirdfont/ExportSettings.vala:75 msgid "Units Per Em"-msgstr "units per Em"+msgstr "Eenheden per Em"  #: libbirdfont/ExportSettings.vala:94 libbirdfont/RecentFiles.vala:73 msgid "Folder"-msgstr "map"+msgstr "Map"  #: libbirdfont/ExportSettings.vala:98 msgid "Formats"-msgstr "formats"+msgstr "Indelingen"  #: libbirdfont/ExportSettings.vala:139 msgid "Export"-msgstr "exporteer"+msgstr "Exporteren" -#: libbirdfont/ExportTool.vala:209 libbirdfont/Menu.vala:64-#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:68+#: libbirdfont/ExportTool.vala:222 libbirdfont/Menu.vala:64+#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:69 #: libbirdfont/SaveDialog.vala:38 libbirdfont/SaveDialogListener.vala:29 msgid "Save"-msgstr "opslaan"+msgstr "Opslaan" -#: libbirdfont/ExportTool.vala:419+#: libbirdfont/ExportTool.vala:432 msgid "Alphabet" msgstr "Alfabet"  #: libbirdfont/ExportUtils.vala:17 libbirdfont/ImportUtils.vala:17 #: birdfont-autotrace/AutoTrace.vala:66 msgid "Usage:"-msgstr "gebruik:"+msgstr "Gebruik:"  #: libbirdfont/ExportUtils.vala:20 birdfont-autotrace/AutoTrace.vala:71 msgid "print this message"-msgstr "print dit bericht"+msgstr "dit bericht afdrukken"  #: libbirdfont/ExportUtils.vala:21 msgid "write files to this directory"-msgstr "schrijf bestanden naar deze map"+msgstr "bestanden naar deze map schrijven"  #: libbirdfont/ExportUtils.vala:22-#, fuzzy msgid "write svg file"-msgstr "schrijf svg-bestand"+msgstr "svg-bestand schrijven"  #: libbirdfont/ExportUtils.vala:23-#, fuzzy msgid "write ttf and eot file"-msgstr "schrijf ttf- en eot-bestanden"+msgstr "ttf- en eot-bestand schrijven"  #: libbirdfont/ExportUtils.vala:130 msgid "Can't find output directory"-msgstr "kan uitvoermap niet vinden"+msgstr "Kan uitvoermap niet vinden"  #: libbirdfont/FileDialogTab.vala:79 msgid "Select a Folder"-msgstr "Kies een map"+msgstr "Map selecteren"  #: libbirdfont/FileDialogTab.vala:83 msgid "Folders"-msgstr "mappen"+msgstr "Mappen"  #: libbirdfont/FileTools.vala:31 msgid "New font"-msgstr "nieuw font"+msgstr "Nieuw lettertype"  #: libbirdfont/FileTools.vala:37 msgid "Open font"-msgstr "font openen"+msgstr "Lettertype openen"  #: libbirdfont/FileTools.vala:43 msgid "Save font"-msgstr "font bewaren"+msgstr "Lettertype opslaan" -#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:490+#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:492 #: libbirdfont/SettingsDisplay.vala:225 libbirdfont/SettingsTab.vala:31 #: libbirdfont/SettingsTab.vala:159 msgid "Settings"-msgstr "instellingen"+msgstr "Instellingen"  #: libbirdfont/FileTools.vala:55 libbirdfont/ThemeTab.vala:42 #: libbirdfont/ThemeTab.vala:162 msgid "Themes"-msgstr "thema's"+msgstr "Thema's" -#: libbirdfont/Glyph.vala:550+#: libbirdfont/Glyph.vala:602 msgid "top margin" msgstr "bovenmarge" -#: libbirdfont/Glyph.vala:557+#: libbirdfont/Glyph.vala:609 msgid "top" msgstr "boven" -#: libbirdfont/Glyph.vala:564+#: libbirdfont/Glyph.vala:616 msgid "x-height"-msgstr "X-hoogte"+msgstr "x-hoogte" -#: libbirdfont/Glyph.vala:573+#: libbirdfont/Glyph.vala:625 msgid "baseline"-msgstr "basis"+msgstr "basislijn" -#: libbirdfont/Glyph.vala:580+#: libbirdfont/Glyph.vala:632 msgid "bottom"-msgstr "onderkant"+msgstr "onder" -#: libbirdfont/Glyph.vala:586+#: libbirdfont/Glyph.vala:638 msgid "bottom margin"-msgstr "onderrand"+msgstr "ondermarge" -#: libbirdfont/Glyph.vala:592+#: libbirdfont/Glyph.vala:644 msgid "left" msgstr "links" -#: libbirdfont/Glyph.vala:601+#: libbirdfont/Glyph.vala:653 msgid "right" msgstr "rechts" -#: libbirdfont/Glyph.vala:2421+#: libbirdfont/Glyph.vala:2462 msgid "Guide"-msgstr "hulplijn"+msgstr "Hulplijn"  #: libbirdfont/GridTool.vala:38 msgid "Show grid"-msgstr "grid weergeven"+msgstr "Raster tonen"  #: libbirdfont/GuideTab.vala:46 libbirdfont/GuideTab.vala:57 msgid "Guides"-msgstr "hulplijnen"+msgstr "Hulplijnen"++#: libbirdfont/Help.vala:29+msgid "BirdFont is a font editor."+msgstr ""  #: libbirdfont/HiddenTools.vala:33 msgid "Zoom in"-msgstr "zoom in"+msgstr "Inzoomen"  #: libbirdfont/HiddenTools.vala:40 msgid "Zoom out"-msgstr "zoom uit"+msgstr "Uitzoomen"  #: libbirdfont/HiddenTools.vala:47 msgid "Convert the last segment to a straight line"-msgstr "verander laatste segment in rechte lijn"+msgstr "Laatste segment naar rechte lijn converteren"  #: libbirdfont/HiddenTools.vala:55 msgid "Convert the last control point to a corner node"-msgstr "verander laatste controlepunten in hoekpunt"+msgstr "Laatste controlepunt naar hoekpunt converteren"  #: libbirdfont/HiddenTools.vala:63 msgid "Move handle along axis"-msgstr "verplaats handle langs as"+msgstr "Lijngreep langs as verplaatsen"  #: libbirdfont/ImportUtils.vala:19 msgid "BF-FILE"@@ -701,27 +709,27 @@ msgstr "bestaat niet."  #: libbirdfont/ImportUtils.vala:68 msgid "A new font will be created."-msgstr "een nieuw font wordt aangemaakt."+msgstr "Er wordt een nieuw lettertype gemaakt."  #: libbirdfont/ImportUtils.vala:90 msgid "Failed to import"-msgstr "importeren mislukt"+msgstr "Importeren mislukt"  #: libbirdfont/ImportUtils.vala:91 msgid "Aborting"-msgstr "breekt af"+msgstr "Afbreken"  #: libbirdfont/ImportUtils.vala:124 msgid "is not the name of a glyph or a Unicode value."-msgstr "is geen naam van een symbool of Unicode-waarde."+msgstr "is geen naam van een symbool of een Unicode-waarde."  #: libbirdfont/ImportUtils.vala:125 msgid "Unicode values must start with U+."-msgstr "Unicode-waarden moeten met U+. beginnen."+msgstr "Unicode-waarden moeten met U+ beginnen."  #: libbirdfont/ImportUtils.vala:151 msgid "Adding"-msgstr "voegt toe"+msgstr "Voegt toe:"  #: libbirdfont/ImportUtils.vala:155 msgid "to"@@ -730,123 +738,132 @@ msgstr "aan" #: libbirdfont/ImportUtils.vala:157 libbirdfont/OtfFeatureTable.vala:105 #: libbirdfont/OverviewTools.vala:42 msgid "Glyph"-msgstr "symbool"+msgstr "Symbool" -#: libbirdfont/KerningDisplay.vala:97 libbirdfont/KerningDisplay.vala:877+#: libbirdfont/KerningDisplay.vala:60+msgid ""+"Kerning is the process of adjusting the space between two letters. You can "+"cahnge the space between one letter and all other letters in the spacing tab."+msgstr ""++#: libbirdfont/KerningDisplay.vala:101 libbirdfont/KerningDisplay.vala:882 msgid "Kerning"-msgstr "kerning"+msgstr "Afspatiëring" -#: libbirdfont/KerningDisplay.vala:105+#: libbirdfont/KerningDisplay.vala:109 msgid "The current kerning class is malformed."-msgstr "huidige kerningklasse is onjuist gevormd."+msgstr "De huidige afspatiëringsklasse is onjuist gevormd." -#: libbirdfont/KerningDisplay.vala:106+#: libbirdfont/KerningDisplay.vala:110 msgid "Add single characters separated by space and ranges on the form A-Z." msgstr ""-"voeg enkele tekens toe, gescheiden door spaties en bereik in de vorm A-Z."+"Voeg enkele tekens toe, gescheiden door spaties en bereik in de vorm A-Z." -#: libbirdfont/KerningDisplay.vala:107+#: libbirdfont/KerningDisplay.vala:111 msgid "Type “space” to kern the space character and “divis” to kern -."-msgstr "typ “spatie”om spatieteken en “divis” om -. te kernen"+msgstr "Typ ‘spatie’ voor afspatiëren van het spatieteken en ‘divis’ voor -." -#: libbirdfont/KerningDisplay.vala:678 libbirdfont/OverviewTools.vala:78+#: libbirdfont/KerningDisplay.vala:683 libbirdfont/OverviewTools.vala:78 msgid "Unicode" msgstr "Unicode" -#: libbirdfont/KerningDisplay.vala:678+#: libbirdfont/KerningDisplay.vala:683 msgid "Insert"-msgstr "toevoegen"+msgstr "Invoegen" -#: libbirdfont/KerningDisplay.vala:877 libbirdfont/MainWindow.vala:235-#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:208+#: libbirdfont/KerningDisplay.vala:882 libbirdfont/MainWindow.vala:241+#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:231 msgid "Close"-msgstr "sluit"+msgstr "Sluiten"  #: libbirdfont/KerningList.vala:54 libbirdfont/KerningList.vala:111 msgid "Kerning Pairs"-msgstr "kerning-paren"+msgstr "Afspatiëringscombinaties"  #: libbirdfont/KerningList.vala:57 msgid "No kerning pairs created."-msgstr "geen kerning-paren gemaakt"+msgstr "Geen afspatiëringscombinaties gemaakt."  #: libbirdfont/KerningRange.vala:113 libbirdfont/KerningTools.vala:85 msgid "Kerning class"-msgstr "kerning-klasse"+msgstr "Afspatiëringsklasse" -#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:144+#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:166 #: libbirdfont/Ligatures.vala:118 libbirdfont/Ligatures.vala:141 #: libbirdfont/Ligatures.vala:164 libbirdfont/Ligatures.vala:196 #: libbirdfont/SpacingClass.vala:45 libbirdfont/SpacingTab.vala:232-#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:208+#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:231 #: libbirdfont/Theme.vala:687 msgid "Set"-msgstr "stel in"+msgstr "Instellen"  #: libbirdfont/KerningStrings.vala:65 msgid "Load kerning strings"-msgstr "laad kerning-strings"+msgstr "Afspatiëringsstrings laden"  #: libbirdfont/KerningTools.vala:56 msgid "Kerning Tools"-msgstr "kerning gereedschap"+msgstr "Afspatiëringshulpmiddelen"  #: libbirdfont/KerningTools.vala:63 libbirdfont/SpacingTools.vala:31-#, fuzzy msgid "Font Size"-msgstr "font grootte"+msgstr "Lettergrootte"  #: libbirdfont/KerningTools.vala:82 msgid "Create new kerning class."-msgstr "maak nieuwe kerning-klasse"+msgstr "Nieuwe afspatiëringsklasse maken"  #: libbirdfont/KerningTools.vala:93 msgid "Use text input to enter kerning values."-msgstr "Gebruik tekstinvoer voor kerning-waarden."+msgstr "Gebruik tekstinvoer om afspatiëringswaarden in te voeren."  #: libbirdfont/KerningTools.vala:101 libbirdfont/SpacingTools.vala:52 msgid "Insert glyph from overview"-msgstr "voeg symbool toe van overzicht"+msgstr "Symbool van overzicht toevoegen"  #: libbirdfont/KerningTools.vala:116 libbirdfont/SpacingTools.vala:67 msgid "Insert character by unicode value"-msgstr "voeg teken toe met Unicode-waarde"+msgstr "Teken invoegen op Unicode-waarde"  #: libbirdfont/KerningTools.vala:124 msgid "Open a text file with kerning strings first."-msgstr "open eerst een tekst met kerning-strings."+msgstr "Open eerst een tekstbestand met afspatiëringsstrings."  #: libbirdfont/KerningTools.vala:126 msgid "Previous kerning string"-msgstr "voorgaande kerning-string"+msgstr "Vorige afspatiëringsstring"  #: libbirdfont/KerningTools.vala:136 msgid "You have reached the beginning of the list."-msgstr "het begin van de lijst is bereikt"+msgstr "U hebt het begin van de lijst bereikt."  #: libbirdfont/KerningTools.vala:145 msgid "Next kerning string"-msgstr "volgende kerning-string"+msgstr "Volgende afspatiëringsstring"  #: libbirdfont/KerningTools.vala:155 msgid "You have reached the end of the list."-msgstr "het eind van de lijst is bereikt"+msgstr "U hebt het einde van de lijst bereikt."  #: libbirdfont/KerningTools.vala:164 msgid "Substitutions"-msgstr "subsistuten"+msgstr "Vervangingen"  #: libbirdfont/LanguageSelectionTab.vala:28 libbirdfont/OverviewTools.vala:39 msgid "Character Sets"-msgstr "tekensets"+msgstr "Tekensets"  #: libbirdfont/LanguageSelectionTab.vala:68 msgid "Character Set"-msgstr "tekenset"+msgstr "Tekenset" -#: libbirdfont/LayerLabel.vala:144+#: libbirdfont/LayerLabel.vala:101+msgid "Hide the layer."+msgstr ""++#: libbirdfont/LayerLabel.vala:166 msgid "Layer"-msgstr "laag"+msgstr "Laag"  #: libbirdfont/LigatureList.vala:53 msgid "character sequence"@@ -854,11 +871,11 @@ msgstr "tekenreeks"  #: libbirdfont/LigatureList.vala:53 msgid "ligature"-msgstr "leesteken"+msgstr "ligatuur"  #: libbirdfont/LigatureList.vala:56 msgid "substitution"-msgstr "subsistutie"+msgstr "vervanging"  #: libbirdfont/LigatureList.vala:56 msgid "beginning"@@ -874,62 +891,62 @@ msgstr "einde"  #: libbirdfont/LigatureList.vala:109 msgid "New Ligature"-msgstr "nieuw leesteken"+msgstr "Nieuwe ligatuur"  #: libbirdfont/LigatureList.vala:109 msgid "New Contextual Substitution"-msgstr "nieuwe contextuele subsistutie"+msgstr "Nieuwe contextuele vervanging"  #: libbirdfont/LigatureList.vala:115 msgid "Contextual Substitutions"-msgstr "contextuele subsistuties"+msgstr "Contextuele vervangingen"  #: libbirdfont/LigatureList.vala:126 libbirdfont/LigatureList.vala:140-#: libbirdfont/Menu.vala:445+#: libbirdfont/Menu.vala:447 msgid "Ligatures"-msgstr "Leestekens"+msgstr "Ligaturen"  #: libbirdfont/Ligatures.vala:118 msgid "Beginning"-msgstr "begin"+msgstr "Begin"  #: libbirdfont/Ligatures.vala:141 msgid "Middle"-msgstr "midden"+msgstr "Midden"  #: libbirdfont/Ligatures.vala:164 msgid "End"-msgstr "einde"+msgstr "Einde"  #: libbirdfont/Ligatures.vala:196 msgid "Ligature"-msgstr "leesteken"+msgstr "Ligatuur"  #: libbirdfont/Line.vala:157 msgid "Position"-msgstr "positie"+msgstr "Positie"  #: libbirdfont/Line.vala:157 msgid "Move"-msgstr "verplaats"+msgstr "Verplaatsen"  #: libbirdfont/LoadCallback.vala:29 msgid "This font was made with a newer version of Birdfont."-msgstr "dit font was gemaakt met een nieuwere versie van Birdfont"+msgstr "Dit lettertype is met een nieuwere versie van Birdfont gemaakt."  #: libbirdfont/LoadCallback.vala:30 msgid "You need to upgrade your version of Birdfont."-msgstr "U moet Birdfont upgraden"+msgstr "U dient uw versie van Birdfont te upgraden."  #: libbirdfont/LoadCallback.vala:34 msgid "This font was made with an old version of Birdfont."-msgstr "dit font was gemaakt met een oude versie van Birdfont"+msgstr "Dit lettertype is met een oude versie van Birdfont gemaakt."  #: libbirdfont/LoadCallback.vala:35 msgid "You need an older version of Birdfont to open it."-msgstr "allen een oudere versie van Birdfont kan dit openen."+msgstr "U hebt een oudere versie van Birdfont nodig om het te openen." -#: libbirdfont/MainWindow.vala:235+#: libbirdfont/MainWindow.vala:241 msgid "Glyph sequence" msgstr "Symboolvolgorde" @@ -982,16 +999,15 @@ msgid "Select All Paths" msgstr "Alle paden selecteren"  #: libbirdfont/Menu.vala:141-#, fuzzy msgid "Select All Glyphs"-msgstr "alle symbolen selecteren"+msgstr "Alle symbolen selecteren"  #: libbirdfont/Menu.vala:148 msgid "Move To Baseline" msgstr "Verplaatsen naar basislijn" -#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:250-#: libbirdfont/OverView.vala:269 libbirdfont/OverviewTools.vala:154+#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:257+#: libbirdfont/OverView.vala:276 libbirdfont/OverviewTools.vala:154 msgid "Search" msgstr "Zoeken" @@ -1001,7 +1017,7 @@ msgstr "Pad vereenvoudigen"  #: libbirdfont/Menu.vala:169 msgid "Merge Paths"-msgstr "meng paden"+msgstr "Paden samenvoegen"  #: libbirdfont/Menu.vala:176 msgid "Close Path"@@ -1021,11 +1037,11 @@ msgstr "Achtergrondsymbool verwijderen"  #: libbirdfont/Menu.vala:204 msgid "Create Guide"-msgstr "maak hulplijn"+msgstr "Hulplijn maken"  #: libbirdfont/Menu.vala:211 msgid "List Guides"-msgstr "lijst hulplijnen"+msgstr "Hulplijnen tonen"  #: libbirdfont/Menu.vala:218 msgid "Select Point Above"@@ -1045,150 +1061,153 @@ msgstr "Onderstaande punt selecteren"  #: libbirdfont/Menu.vala:253 msgid "Move Layer Up"-msgstr "laag omhoog"+msgstr "Laag omhoog verplaatsen"  #: libbirdfont/Menu.vala:260 msgid "Move Layer Down"-msgstr "laag omlaag"+msgstr "Laag omlaag verplaatsen"  #: libbirdfont/Menu.vala:268 msgid "Import and Export"-msgstr "import en export"+msgstr "Importeren en exporteren"  #: libbirdfont/Menu.vala:274-#, fuzzy msgid "Export Fonts"-msgstr "exporteer fonts"+msgstr "Lettertypen exporteren"  #: libbirdfont/Menu.vala:281 msgid "Export Glyph as SVG" msgstr "Symbool exporteren als SVG" -#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:303+#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:304 msgid "Import SVG file" msgstr "SVG-bestand importeren" -#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:312-#, fuzzy+#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:313 msgid "Import SVG folder"-msgstr "importeer SVG-bestand "+msgstr "SVG-map importeren" -#: libbirdfont/Menu.vala:303 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:304 libbirdfont/Menu.vala:313 msgid "color"-msgstr ""+msgstr "kleur" -#: libbirdfont/Menu.vala:320+#: libbirdfont/Menu.vala:322 msgid "Import Background Image" msgstr "Achtergrondafbeelding importeren" -#: libbirdfont/Menu.vala:334 libbirdfont/Preview.vala:27+#: libbirdfont/Menu.vala:336 libbirdfont/Preview.vala:27 msgid "Preview" msgstr "Voorbeeld" -#: libbirdfont/Menu.vala:342+#: libbirdfont/Menu.vala:344 msgid "Tab" msgstr "Tabblad" -#: libbirdfont/Menu.vala:348+#: libbirdfont/Menu.vala:350 msgid "Next Tab" msgstr "Volgende tabblad" -#: libbirdfont/Menu.vala:355+#: libbirdfont/Menu.vala:357 msgid "Previous Tab" msgstr "Vorige tabblad" -#: libbirdfont/Menu.vala:362+#: libbirdfont/Menu.vala:364 msgid "Close Tab" msgstr "Tabblad sluiten" -#: libbirdfont/Menu.vala:369+#: libbirdfont/Menu.vala:371 msgid "Close All Tabs" msgstr "Alle tabbladen sluiten" -#: libbirdfont/Menu.vala:377+#: libbirdfont/Menu.vala:379 msgid "Spacing and Kerning"-msgstr "spatiëring en kerning"+msgstr "Spatiëring en afspatiëring" -#: libbirdfont/Menu.vala:383+#: libbirdfont/Menu.vala:385 msgid "Show Spacing Tab"-msgstr "Spatiëringstab tonen"+msgstr "Spatiëringstabblad tonen" -#: libbirdfont/Menu.vala:390+#: libbirdfont/Menu.vala:392 msgid "Show Kerning Tab"-msgstr "Afspatieertabblad tonen"+msgstr "Afspatiëringstabblad tonen" -#: libbirdfont/Menu.vala:397+#: libbirdfont/Menu.vala:399 msgid "List Kerning Pairs"-msgstr "Afspatieercombinaties tonen"+msgstr "Afspatiëringscombinaties tonen" -#: libbirdfont/Menu.vala:404 libbirdfont/SpacingClassTab.vala:80+#: libbirdfont/Menu.vala:406 libbirdfont/SpacingClassTab.vala:80 msgid "Spacing Classes" msgstr "Spatiëringsklassen" -#: libbirdfont/Menu.vala:411+#: libbirdfont/Menu.vala:413 msgid "Select Next Kerning Pair"-msgstr "Volgende afspatieercombinatie selecteren"+msgstr "Volgende afspatiëringscombinatie selecteren" -#: libbirdfont/Menu.vala:420+#: libbirdfont/Menu.vala:422 msgid "Select Previous Kerning Pair"-msgstr "Vorige afspatieercombinatie selecteren"+msgstr "Vorige afspatiëringscombinatie selecteren" -#: libbirdfont/Menu.vala:429+#: libbirdfont/Menu.vala:431 msgid "Load Kerning Strings"-msgstr "laad kerning-strings"+msgstr "Afspatiëringsstrings laden" -#: libbirdfont/Menu.vala:436+#: libbirdfont/Menu.vala:438 msgid "Reload Kerning Strings"-msgstr "herlaad kerning-strings"+msgstr "Afspatiëringsstrings opnieuw laden" -#: libbirdfont/Menu.vala:451+#: libbirdfont/Menu.vala:453 msgid "Show Ligatures" msgstr "Ligaturen tonen" -#: libbirdfont/Menu.vala:458+#: libbirdfont/Menu.vala:460 msgid "Add Ligature" msgstr "Ligatuur toevoegen" -#: libbirdfont/Menu.vala:467+#: libbirdfont/Menu.vala:469 msgid "Git" msgstr "Git" -#: libbirdfont/Menu.vala:473+#: libbirdfont/Menu.vala:475 msgid "Save As .bfp" msgstr "Opslaan als .bfp" -#: libbirdfont/Menu.vala:482 libbirdfont/OverView.vala:471+#: libbirdfont/Menu.vala:484 libbirdfont/OverView.vala:478 msgid "Overview" msgstr "Overzicht" +#: libbirdfont/Menu.vala:513+msgid "Help"+msgstr ""+ #: libbirdfont/MenuItem.vala:82 msgid "UP"-msgstr ""+msgstr "OMHOOG"  #: libbirdfont/MenuItem.vala:85 msgid "DOWN"-msgstr ""+msgstr "OMLAAG"  #: libbirdfont/MenuItem.vala:88 msgid "LEFT"-msgstr ""+msgstr "LINKS"  #: libbirdfont/MenuItem.vala:91 msgid "RIGHT"-msgstr ""+msgstr "RECHTS"  #: libbirdfont/MenuTab.vala:95 msgid "Missing metadata in font:"-msgstr "metadata missen in font"+msgstr "Ontbrekende metagegevens in lettertype:"  #: libbirdfont/MenuTab.vala:128 msgid "" "You need to choose a different name for the TTF file with Mac adjustmets."-msgstr "kies andere naam voor TTF bestand met Mac aanpassingen"+msgstr ""+"U dient een andere naam te kiezen voor het TTF-bestand met Mac-aanpassingen."  #: libbirdfont/MenuTab.vala:146 msgid "You need to save your font before exporting it."-msgstr "bewaar font eerst, dan export"+msgstr "U dient uw lettertype op te slaan voor het exporteren."  #: libbirdfont/MenuTab.vala:189 msgid "Menu"@@ -1204,53 +1223,49 @@ msgstr "Paden verplaatsen"  #: libbirdfont/OtfFeatureTable.vala:102 libbirdfont/OtfFeatureTable.vala:167 msgid "Glyph Substitutions"-msgstr "symbool subsistuties"+msgstr "Symboolvervangingen"  #: libbirdfont/OtfFeatureTable.vala:108 msgid "New glyph"-msgstr "nieuw symbool"+msgstr "Nieuw symbool"  #: libbirdfont/OtfFeatureTable.vala:115 msgid "Replacement"-msgstr "vervanging"+msgstr "Vervanging"  #: libbirdfont/OtfFeatureTable.vala:120 msgid "Tag"-msgstr "tag"+msgstr "Label"  #: libbirdfont/OtfFeatureTable.vala:181 msgid "Glyph name"-msgstr "symbool naam"+msgstr "Symboolnaam"  #: libbirdfont/OtfFeatureTable.vala:200 msgid "All glyphs must have unique names."-msgstr "alle symbolen oeten unieke namen hebben"+msgstr "Alle symbolen moeten unieke namen hebben."  #: libbirdfont/OtfLabel.vala:47 msgid "Stylistic Alternate"-msgstr "wissel stylistisch"+msgstr "Stilistisch wisselen"  #: libbirdfont/OtfLabel.vala:49 msgid "Small Caps"-msgstr ""+msgstr "Kleine hoofdletters"  #: libbirdfont/OtfLabel.vala:51 msgid "Capitals to Small Caps"-msgstr ""+msgstr "Hoofdletters naar kleine hoofdletters"  #: libbirdfont/OtfLabel.vala:53 msgid "Swashes"-msgstr ""+msgstr "Swashes" -#: libbirdfont/OverView.vala:250 libbirdfont/OverView.vala:269+#: libbirdfont/OverView.vala:257 libbirdfont/OverView.vala:276 msgid "Filter"-msgstr "Filter"+msgstr "Filteren" -#: libbirdfont/OverView.vala:673-msgid "No glyphs in this view."-msgstr "Geen symbolen in deze weergave."--#: libbirdfont/OverView.vala:1484+#: libbirdfont/OverView.vala:1498 msgid "See also:" msgstr "Zie ook:" @@ -1273,11 +1288,11 @@ msgstr "Ja, niet meer vragen."  #: libbirdfont/OverviewTools.vala:41 libbirdfont/OverviewTools.vala:119 msgid "Transform"-msgstr ""+msgstr "Transformeren"  #: libbirdfont/OverviewTools.vala:43 msgid "Multi-Master"-msgstr ""+msgstr "Multi-Master"  #: libbirdfont/OverviewTools.vala:56 msgid "All Glyphs"@@ -1289,35 +1304,36 @@ msgstr "Standaard"  #: libbirdfont/OverviewTools.vala:93 msgid "Skew"-msgstr "hellen"+msgstr "Hellen"  #: libbirdfont/OverviewTools.vala:106 msgid "Resize"-msgstr ""+msgstr "Grootte wijzigen"  #: libbirdfont/OverviewTools.vala:134+#, fuzzy msgid "Create alternate"-msgstr ""+msgstr "Alternatief maken"  #: libbirdfont/OverviewTools.vala:138 msgid "Set curve orientation"-msgstr ""+msgstr "Curveoriëntatie instellen"  #: libbirdfont/OverviewTools.vala:160 msgid "Master Size"-msgstr ""+msgstr "Mastergrootte"  #: libbirdfont/OverviewTools.vala:175 msgid "Create new master font"-msgstr ""+msgstr "Nieuw masterlettertype maken"  #: libbirdfont/OverwriteBfFile.vala:25 msgid "This file already exists. Do you want to replace it?"-msgstr ""+msgstr "Dit bestand bestaat al. Wilt u het vervangen?"  #: libbirdfont/OverwriteBfFile.vala:27 msgid "Replace"-msgstr "vervang"+msgstr "Vervangen"  #: libbirdfont/PenTool.vala:82 msgid "Add new points"@@ -1341,21 +1357,19 @@ msgstr "Html-document genereren"  #: libbirdfont/RecentFiles.vala:62 msgid "No fonts created yet"-msgstr "nog geen fonts gemaakt"+msgstr "Nog geen lettertypen gemaakt"  #: libbirdfont/RecentFiles.vala:65 msgid "Create a New Font"-msgstr "nieuw font"+msgstr "Nieuw lettertype maken"  #: libbirdfont/RecentFiles.vala:76-#, fuzzy msgid "Glyphs"-msgstr "symbool"+msgstr "Symbolen"  #: libbirdfont/RecentFiles.vala:92-#, fuzzy msgid "Backups"-msgstr "back-up"+msgstr "Back-ups"  #: libbirdfont/RectangleTool.vala:30 msgid "Rectangle"@@ -1367,7 +1381,7 @@ msgstr "Afmetingen wijzigen en paden draaien"  #: libbirdfont/SaveDialog.vala:36 msgid "Save changes?"-msgstr "wijzigingen opslaan?"+msgstr "Wijzigingen opslaan?"  #: libbirdfont/SaveDialog.vala:44 libbirdfont/SaveDialogListener.vala:30 msgid "Discard"@@ -1419,310 +1433,303 @@ msgstr "Nieuwe spatiëringsklasse"  #: libbirdfont/SpacingTab.vala:36 msgid "Spacing"-msgstr "spatiëring"+msgstr "Spatiëring"  #: libbirdfont/SpacingTab.vala:232 msgid "Left"-msgstr "links"+msgstr "Links"  #: libbirdfont/SpacingTab.vala:276 msgid "Right"-msgstr "rechts"--#: libbirdfont/SvgParser.vala:62 libbirdfont/SvgParser.vala:121-msgid "Import"-msgstr "Importeren"+msgstr "Rechts"  #: libbirdfont/Theme.vala:421 msgid "Canvas Background"-msgstr ""+msgstr "Papierachtergrond"  #: libbirdfont/Theme.vala:422 msgid "Filled Stroke"-msgstr ""+msgstr "Opgevulde streek"  #: libbirdfont/Theme.vala:423-#, fuzzy msgid "Stroke Color" msgstr "Streekkleur"  #: libbirdfont/Theme.vala:424-#, fuzzy msgid "Handle Color" msgstr "Kleur van greep"  #: libbirdfont/Theme.vala:425 msgid "Fill Color"-msgstr ""+msgstr "Opvulkleur"  #: libbirdfont/Theme.vala:426 msgid "Selected Objects"-msgstr ""+msgstr "Geselecteerde objecten"  #: libbirdfont/Theme.vala:428 msgid "Background 1"-msgstr ""+msgstr "Achtergrond 1"  #: libbirdfont/Theme.vala:429 msgid "Dialog Background"-msgstr ""+msgstr "Dialoogachtergrond"  #: libbirdfont/Theme.vala:430 msgid "Menu Background"-msgstr ""+msgstr "Menuachtergrond"  #: libbirdfont/Theme.vala:431 msgid "Default Background"-msgstr ""+msgstr "Standaardachtergrond"  #: libbirdfont/Theme.vala:433 msgid "Checkbox Background"-msgstr "checkbox-achtergrond"+msgstr "Selectievakachtergrond"  #: libbirdfont/Theme.vala:435 msgid "Foreground 1"-msgstr "voorgrond 1"+msgstr "Voorgrond 1"  #: libbirdfont/Theme.vala:436 msgid "Text Foreground"-msgstr "voorgrond tekst "+msgstr "Tekstvoorgrond"  #: libbirdfont/Theme.vala:437 msgid "Table Border"-msgstr "tabel border"+msgstr "Tabelrand"  #: libbirdfont/Theme.vala:438 msgid "Selection Border"-msgstr ""+msgstr "Selectierand"  #: libbirdfont/Theme.vala:439 msgid "Overview Glyph"-msgstr ""+msgstr "Overzichtssymbool"  #: libbirdfont/Theme.vala:440 msgid "Foreground Inverted"-msgstr ""+msgstr "Voorgrond omgekeerd"  #: libbirdfont/Theme.vala:441 msgid "Menu Foreground"-msgstr ""+msgstr "Menuvoorgrond"  #: libbirdfont/Theme.vala:442 msgid "Selected Tab Foreground"-msgstr ""+msgstr "Voorgrond van geselecteerd tabblad"  #: libbirdfont/Theme.vala:443 msgid "Tab Separator"-msgstr ""+msgstr "Tabbladscheiding"  #: libbirdfont/Theme.vala:445 msgid "Highlighted 1"-msgstr ""+msgstr "Geaccentueerd 1"  #: libbirdfont/Theme.vala:446 msgid "Highlighted Guide"-msgstr ""+msgstr "Geaccentueerde hulplijn"  #: libbirdfont/Theme.vala:448 msgid "Grid"-msgstr ""+msgstr "Raster"  #: libbirdfont/Theme.vala:450 msgid "Guide 1"-msgstr ""+msgstr "Hulplijn 1"  #: libbirdfont/Theme.vala:451 msgid "Guide 2"-msgstr ""+msgstr "Hulplijn 2"  #: libbirdfont/Theme.vala:452 msgid "Guide 3"-msgstr ""+msgstr "Hulplijn 3"  #: libbirdfont/Theme.vala:454 msgid "Button Border 1"-msgstr ""+msgstr "Knoprand 1"  #: libbirdfont/Theme.vala:455 msgid "Button Background 1"-msgstr ""+msgstr "Knopachtergrond 1"  #: libbirdfont/Theme.vala:456 msgid "Button Border 2"-msgstr ""+msgstr "Knoprand 2"  #: libbirdfont/Theme.vala:457 msgid "Button Background 2"-msgstr ""+msgstr "Knopachtergrond 2"  #: libbirdfont/Theme.vala:458 msgid "Button Border 3"-msgstr ""+msgstr "Knoprand 3"  #: libbirdfont/Theme.vala:459 msgid "Button Background 3"-msgstr ""+msgstr "Knopachtergrond 3"  #: libbirdfont/Theme.vala:460 msgid "Button Border 4"-msgstr ""+msgstr "Knoprand 4"  #: libbirdfont/Theme.vala:461 msgid "Button Background 4"-msgstr ""+msgstr "Knopachtergrond 4"  #: libbirdfont/Theme.vala:463 msgid "Button Foreground"-msgstr ""+msgstr "Knopvoorgrond"  #: libbirdfont/Theme.vala:464 msgid "Selected Button Foreground"-msgstr ""+msgstr "Voorgrond van geselecteerde knop"  #: libbirdfont/Theme.vala:466 msgid "Tool Foreground"-msgstr ""+msgstr "Voorgrond van hulpmiddel"  #: libbirdfont/Theme.vala:467 msgid "Selected Tool Foreground"-msgstr ""+msgstr "Voorgrond van geselecteerd hulpmiddel"  #: libbirdfont/Theme.vala:469 msgid "Text Area Background"-msgstr ""+msgstr "Achtergrond van tekstgebied"  #: libbirdfont/Theme.vala:471 msgid "Overview Item Border"-msgstr ""+msgstr "Rand van overzichtsitem"  #: libbirdfont/Theme.vala:473 msgid "Selected Overview Item"-msgstr ""+msgstr "Geselecteerd overzichtsitem"  #: libbirdfont/Theme.vala:474 msgid "Overview Item 1"-msgstr ""+msgstr "Overzichtsitem 1"  #: libbirdfont/Theme.vala:475 msgid "Overview Item 2"-msgstr ""+msgstr "Overzichtsitem 2"  #: libbirdfont/Theme.vala:477 msgid "Overview Selected Foreground"-msgstr ""+msgstr "Voorgrond van geselecteerd overzicht"  #: libbirdfont/Theme.vala:478 msgid "Overview Foreground"-msgstr ""+msgstr "Voorgrond van overzicht"  #: libbirdfont/Theme.vala:480 msgid "Glyph Count Background 1"-msgstr ""+msgstr "Achtergrond van symboolteller 1"  #: libbirdfont/Theme.vala:481 msgid "Glyph Count Background 2"-msgstr ""+msgstr "Achtergrond van symboolteller 2"  #: libbirdfont/Theme.vala:483 msgid "Dialog Shadow"-msgstr ""+msgstr "Dialoogschaduw"  #: libbirdfont/Theme.vala:485 msgid "Selected Active Cubic Control Point"-msgstr ""+msgstr "Geselecteerd actief kubiek controlepunt"  #: libbirdfont/Theme.vala:486 msgid "Selected Cubic Control Point"-msgstr ""+msgstr "Geselecteerd kubiek controlepunt"  #: libbirdfont/Theme.vala:487 msgid "Active Cubic Control Point"-msgstr ""+msgstr "Actief kubiek controlepunt"  #: libbirdfont/Theme.vala:488 msgid "Cubic Control Point"-msgstr ""+msgstr "Kubiek controlepunt"  #: libbirdfont/Theme.vala:490 msgid "Selected Active Quadratic Control Point"-msgstr ""+msgstr "Geselecteerd actief kwadratisch controlepunt"  #: libbirdfont/Theme.vala:491 msgid "Selected Quadratic Control Point"-msgstr ""+msgstr "Geselecteerd kwadratisch controlepunt"  #: libbirdfont/Theme.vala:492 msgid "Active Quadratic Control Point"-msgstr ""+msgstr "Actief kwadratisch controlepunt"  #: libbirdfont/Theme.vala:493 msgid "Cubic Quadratic Point"-msgstr ""+msgstr "Kubiek kwadratisch punt"  #: libbirdfont/Theme.vala:495 msgid "Selected Control Point Handle"-msgstr ""+msgstr "Geselecteerde controlepuntgreep"  #: libbirdfont/Theme.vala:496 msgid "Active Handle"-msgstr ""+msgstr "Actieve greep"  #: libbirdfont/Theme.vala:497-#, fuzzy msgid "Control Point Handle"-msgstr "Controlepunthulpmiddelen"+msgstr "Controlepuntgreep"  #: libbirdfont/Theme.vala:499 msgid "Merge"-msgstr ""+msgstr "Samenvoegen"  #: libbirdfont/Theme.vala:500 msgid "Spin Button"-msgstr ""+msgstr "Draaiknop"  #: libbirdfont/Theme.vala:501 msgid "Active Spin Button"-msgstr ""+msgstr "Actieve draaiknop"  #: libbirdfont/Theme.vala:502 msgid "Zoom Bar Border"-msgstr ""+msgstr "Rand van zoombalk"  #: libbirdfont/Theme.vala:503 msgid "Font Name"-msgstr ""+msgstr "Lettertypenaam"  #: libbirdfont/Theme.vala:687 msgid "New theme"-msgstr ""+msgstr "Nieuw thema"  #: libbirdfont/ThemeTab.vala:118 msgid "Add new theme"-msgstr ""+msgstr "Nieuw thema toevoegen"  #: libbirdfont/ThemeTab.vala:120 msgid "Colors"-msgstr ""+msgstr "Kleuren"  #: libbirdfont/ThemeTab.vala:147 msgid "Dark"-msgstr ""+msgstr "Donker"  #: libbirdfont/ThemeTab.vala:149 msgid "Bright"-msgstr ""+msgstr "Helder"  #: libbirdfont/ThemeTab.vala:153 msgid "Custom"-msgstr ""+msgstr "Aangepast"  #: libbirdfont/ThemeTools.vala:30 msgid "Color"-msgstr ""+msgstr "Kleur" -#: libbirdfont/ToolItem.vala:44+#: libbirdfont/ToolItem.vala:66 msgid "Shift"-msgstr ""+msgstr "Shift"  #: libbirdfont/TrackTool.vala:57 msgid "Freehand drawing"@@ -1730,39 +1737,45 @@ msgstr "Tekenen uit de vrije hand"  #: libbirdfont/VersionList.vala:51 msgid "New version"-msgstr "nieuwe versie"+msgstr "Nieuwe versie"  #: birdfont/GtkWindow.vala:531 msgid "Your fonts have been exported."-msgstr "uw fonts zijn geëxporteerd."+msgstr "Uw lettertypen zijn geëxporteerd."  #: birdfont-autotrace/AutoTrace.vala:69 msgid "brighness cutoff, from 0.001 to 2, the default value is 1"-msgstr "helderheidsgrens, van 0,001 tot 2, standaardwaarde is 1"+msgstr "helderheidsgrens, van 0,001 tot 2, de standaardwaarde is 1"  #: birdfont-autotrace/AutoTrace.vala:70 msgid "details, from 0.001 to 9.999, the default value is 1"-msgstr "detail, van 0,001 tot 9,999, standaardwaarde is 1"+msgstr "details, van 0,001 tot 9,999, de standaardwaarde is 1"  #: birdfont-autotrace/AutoTrace.vala:72 msgid "use quadratic control points"-msgstr "gebruik kwadratische controlepunten"+msgstr "kwadratische controlepunten gebruiken"  #: birdfont-autotrace/AutoTrace.vala:73 msgid "simplification, from 0.001 to 1, the default value is 0.5"-msgstr "vereenvoudiging, van 0,001 tot 1, standaardwaarde is 0,5"+msgstr "vereenvoudiging, van 0,001 tot 1, de standaardwaarde is 0,5"  #: birdfont-autotrace/AutoTrace.vala:92 msgid "File does not exist."-msgstr "bestand bestaat niet."+msgstr "Bestand bestaat niet."  #: birdfont-autotrace/AutoTrace.vala:98 msgid "Unknown file format."-msgstr "onbekende bestandsindeling."+msgstr "Onbekende bestandsindeling."  #: birdfont-autotrace/AutoTrace.vala:114 msgid "Writing"-msgstr "schrift"+msgstr "Schrijven"++#~ msgid "No glyphs in this view."+#~ msgstr "Geen symbolen in deze weergave."++#~ msgid "Import"+#~ msgstr "Importeren"  #~ msgid "Full name (name and style)" #~ msgstr "Volledige naam (naam en stijl)"diff --git a/po/oc.po b/po/oc.poindex d4b58c2..280d7bf 100644--- a/po/oc.po+++ b/po/oc.po@@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n"-"POT-Creation-Date: 2015-12-22 20:35+0100\n"+"POT-Creation-Date: 2016-01-06 12:06+0100\n" "PO-Revision-Date: 2015-03-26 20:40+0000\n" "Last-Translator: Cédric <cvalmary@yahoo.fr>\n" "Language-Team: LANGUAGE <LL@li.org>\n"@@ -105,16 +105,16 @@ msgstr "Fichièrs" msgid "Parts" msgstr "Partidas" -#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2421+#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2462 #: libbirdfont/LigatureList.vala:106 libbirdfont/OtfFeatureTable.vala:181 msgid "Add" msgstr "Apondre" -#: libbirdfont/BackgroundTools.vala:122+#: libbirdfont/BackgroundTools.vala:123 msgid "Select Glyph" msgstr "" -#: libbirdfont/BackgroundTools.vala:231 libbirdfont/LoadCallback.vala:102+#: libbirdfont/BackgroundTools.vala:233 libbirdfont/LoadCallback.vala:102 #: libbirdfont/Menu.vala:50 msgid "Open" msgstr "Dobrir"@@ -190,18 +190,18 @@ msgid "Thai" msgstr ""  #. / All lower case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:420+#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:433 msgid "a b c d e f g h i j k l m n o p q r s t u v w x y z" msgstr "a b c d e f g h i j k l m n o p q r s t u v w x y z"  #. / All upper case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:421+#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:434 msgid "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z" msgstr "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z"  #: libbirdfont/DescriptionDisplay.vala:66 #: libbirdfont/DescriptionDisplay.vala:277 libbirdfont/ExportSettings.vala:133-#: libbirdfont/Menu.vala:497 libbirdfont/TableLayout.vala:203+#: libbirdfont/Menu.vala:499 libbirdfont/TableLayout.vala:203 #, fuzzy msgid "Name and Description" msgstr "Nom e _Descripcion"@@ -242,7 +242,7 @@ msgid "Unique Identifier" msgstr "Identificant unic"  #: libbirdfont/DescriptionDisplay.vala:150 libbirdfont/ImportUtils.vala:161-#: libbirdfont/Menu.vala:504 libbirdfont/Menu.vala:506+#: libbirdfont/Menu.vala:506 libbirdfont/Menu.vala:508 #: libbirdfont/VersionList.vala:265 msgid "Version" msgstr "Version"@@ -328,215 +328,224 @@ msgstr "" msgid "Grid Size" msgstr "" -#: libbirdfont/DrawingTools.vala:194+#: libbirdfont/DrawingTools.vala:195 msgid "Move canvas" msgstr "" -#: libbirdfont/DrawingTools.vala:202+#: libbirdfont/DrawingTools.vala:196+msgid "Press space and click to move the canvas."+msgstr ""++#: libbirdfont/DrawingTools.vala:204 msgid "Delete" msgstr "" -#: libbirdfont/DrawingTools.vala:209+#: libbirdfont/DrawingTools.vala:211 msgid "Select all points or paths" msgstr "" -#: libbirdfont/DrawingTools.vala:225 libbirdfont/Menu.vala:99+#: libbirdfont/DrawingTools.vala:227 libbirdfont/Menu.vala:99 #, fuzzy msgid "Undo" msgstr "_Anullar" -#: libbirdfont/DrawingTools.vala:232+#: libbirdfont/DrawingTools.vala:234 msgid "Insert new points on path" msgstr "" -#: libbirdfont/DrawingTools.vala:241+#: libbirdfont/DrawingTools.vala:244 msgid "Create quadratic Bézier curves" msgstr "Crear de corbas de Bézier qüadraticas" -#: libbirdfont/DrawingTools.vala:250+#: libbirdfont/DrawingTools.vala:245+msgid ""+"All control points will be converted to quadratic points in the TTF format."+msgstr ""++#: libbirdfont/DrawingTools.vala:255 msgid "Create cubic Bézier curves" msgstr "Crear de corbas de Bézier cubicas" -#: libbirdfont/DrawingTools.vala:259+#: libbirdfont/DrawingTools.vala:264 msgid "Quadratic path with two line handles" msgstr "Camin qüadratic amb doas punhadas de contraròtle" -#: libbirdfont/DrawingTools.vala:268+#: libbirdfont/DrawingTools.vala:273 msgid "Convert selected points" msgstr "Convertir los punts seleccionats" -#: libbirdfont/DrawingTools.vala:279+#: libbirdfont/DrawingTools.vala:284 msgid "X coordinate" msgstr "" -#: libbirdfont/DrawingTools.vala:323+#: libbirdfont/DrawingTools.vala:328 msgid "Y coordinate" msgstr "" -#: libbirdfont/DrawingTools.vala:366+#: libbirdfont/DrawingTools.vala:371 msgid "Rotation" msgstr "" -#: libbirdfont/DrawingTools.vala:405+#: libbirdfont/DrawingTools.vala:410 msgid "Width" msgstr "" -#: libbirdfont/DrawingTools.vala:430+#: libbirdfont/DrawingTools.vala:435 #, fuzzy msgid "Height" msgstr "Grais" -#: libbirdfont/DrawingTools.vala:473+#: libbirdfont/DrawingTools.vala:478 msgid "Tie curve handles for the selected edit point" msgstr "Crear un punt de corba per la linha seleccionada." -#: libbirdfont/DrawingTools.vala:524+#: libbirdfont/DrawingTools.vala:529 msgid "Symmetrical handles" msgstr "Punhadas simetricas" -#: libbirdfont/DrawingTools.vala:554+#: libbirdfont/DrawingTools.vala:559 msgid "Convert segment to line." msgstr "Convertir lo segment en linha." -#: libbirdfont/DrawingTools.vala:562+#: libbirdfont/DrawingTools.vala:567 msgid "Create counter from outline" msgstr "Crear un comptador dempuèi la linha exteriora" -#: libbirdfont/DrawingTools.vala:565+#: libbirdfont/DrawingTools.vala:570 msgid "Scale object to font top/baseline" msgstr "" -#: libbirdfont/DrawingTools.vala:574+#: libbirdfont/DrawingTools.vala:579 msgid "Close path" msgstr "" -#: libbirdfont/DrawingTools.vala:596+#: libbirdfont/DrawingTools.vala:601 msgid "Move to path to the bottom of the layer" msgstr "" -#: libbirdfont/DrawingTools.vala:610+#: libbirdfont/DrawingTools.vala:615 msgid "Flip path vertically" msgstr "Revirar verticalament lo camin" -#: libbirdfont/DrawingTools.vala:618+#: libbirdfont/DrawingTools.vala:623 msgid "Flip path horizontally" msgstr "Revirar orizontalament lo camin" -#: libbirdfont/DrawingTools.vala:627+#: libbirdfont/DrawingTools.vala:632 msgid "Set size for background image" msgstr "Definir la talha de l'imatge de rèire plan." -#: libbirdfont/DrawingTools.vala:665+#: libbirdfont/DrawingTools.vala:670 msgid "Show/hide background image" msgstr "Afichar / amagar l'imatge de rèire plan." -#: libbirdfont/DrawingTools.vala:676+#: libbirdfont/DrawingTools.vala:681 msgid "Insert a new background image" msgstr "Inserir un novèl imatge de fons" -#: libbirdfont/DrawingTools.vala:690 libbirdfont/ThemeTab.vala:151+#: libbirdfont/DrawingTools.vala:695 libbirdfont/ThemeTab.vala:151 msgid "High contrast" msgstr "" -#: libbirdfont/DrawingTools.vala:704+#: libbirdfont/DrawingTools.vala:709 msgid "Set background threshold" msgstr "" -#: libbirdfont/DrawingTools.vala:723+#: libbirdfont/DrawingTools.vala:728 msgid "Amount of autotrace details" msgstr "" -#: libbirdfont/DrawingTools.vala:742+#: libbirdfont/DrawingTools.vala:747 msgid "Autotrace simplification" msgstr "" -#: libbirdfont/DrawingTools.vala:752+#: libbirdfont/DrawingTools.vala:757 msgid "Autotrace background image" msgstr "" -#: libbirdfont/DrawingTools.vala:760+#: libbirdfont/DrawingTools.vala:765 msgid "Delete background image" msgstr "" -#: libbirdfont/DrawingTools.vala:767+#: libbirdfont/DrawingTools.vala:772 msgid "Add layer" msgstr "" -#: libbirdfont/DrawingTools.vala:777+#: libbirdfont/DrawingTools.vala:782 msgid "Show layers" msgstr "" -#: libbirdfont/DrawingTools.vala:787+#: libbirdfont/DrawingTools.vala:792 msgid "Apply stroke" msgstr "" -#: libbirdfont/DrawingTools.vala:821 libbirdfont/SettingsTab.vala:34+#: libbirdfont/DrawingTools.vala:826 libbirdfont/SettingsTab.vala:34 msgid "Stroke width" msgstr "Espessor de trach" -#: libbirdfont/DrawingTools.vala:863+#: libbirdfont/DrawingTools.vala:872 msgid "Create outline form stroke" msgstr "" -#: libbirdfont/DrawingTools.vala:872+#: libbirdfont/DrawingTools.vala:881 msgid "Butt line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:896+#: libbirdfont/DrawingTools.vala:908 msgid "Round line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:921+#: libbirdfont/DrawingTools.vala:936 msgid "Square line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:990+#: libbirdfont/DrawingTools.vala:1008 msgid "Show guidelines" msgstr "Afichar lo guida" -#: libbirdfont/DrawingTools.vala:1002+#: libbirdfont/DrawingTools.vala:1020 #, fuzzy msgid "Show more guidelines" msgstr "Afichar lo guida" -#: libbirdfont/DrawingTools.vala:1018+#: libbirdfont/DrawingTools.vala:1036 msgid "Show guidelines at top and bottom margin" msgstr "Afichar lo guida als marges d'amont e d'aval" -#: libbirdfont/DrawingTools.vala:1042+#: libbirdfont/DrawingTools.vala:1060 msgid "Lock guides and grid" msgstr "" -#: libbirdfont/DrawingTools.vala:1084+#: libbirdfont/DrawingTools.vala:1102 msgid "Zoom Out More" msgstr "" -#: libbirdfont/DrawingTools.vala:1093+#: libbirdfont/DrawingTools.vala:1111 msgid "Show full glyph" msgstr "Afichar lo glyph complet" -#: libbirdfont/DrawingTools.vala:1100+#: libbirdfont/DrawingTools.vala:1118 msgid "Fit in view" msgstr "" -#: libbirdfont/DrawingTools.vala:1107+#: libbirdfont/DrawingTools.vala:1125 msgid "Zoom in on background image" msgstr "Zoom sus l'imatge de rèire plan" -#: libbirdfont/DrawingTools.vala:1117+#: libbirdfont/DrawingTools.vala:1135 msgid "Previous view" msgstr "Visualizacion precedenta" -#: libbirdfont/DrawingTools.vala:1123+#: libbirdfont/DrawingTools.vala:1141 msgid "Next view" msgstr "Visualizacion seguenta" -#: libbirdfont/DrawingTools.vala:1525+#: libbirdfont/DrawingTools.vala:1543 msgid "Set size for grid" msgstr "Definir las dimensions de la grasilha."  #: libbirdfont/ExportSettings.vala:41 libbirdfont/ExportSettings.vala:185-#: libbirdfont/Menu.vala:327+#: libbirdfont/Menu.vala:329 msgid "Export Settings" msgstr "" @@ -560,13 +569,13 @@ msgstr "" msgid "Export" msgstr "Exportar" -#: libbirdfont/ExportTool.vala:209 libbirdfont/Menu.vala:64-#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:68+#: libbirdfont/ExportTool.vala:222 libbirdfont/Menu.vala:64+#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:69 #: libbirdfont/SaveDialog.vala:38 libbirdfont/SaveDialogListener.vala:29 msgid "Save" msgstr "Enregistrar" -#: libbirdfont/ExportTool.vala:419+#: libbirdfont/ExportTool.vala:432 msgid "Alphabet" msgstr "" @@ -615,7 +624,7 @@ msgstr "" msgid "Save font" msgstr "" -#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:490+#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:492 #: libbirdfont/SettingsDisplay.vala:225 libbirdfont/SettingsTab.vala:31 #: libbirdfont/SettingsTab.vala:159 msgid "Settings"@@ -626,39 +635,39 @@ msgstr "" msgid "Themes" msgstr "" -#: libbirdfont/Glyph.vala:550+#: libbirdfont/Glyph.vala:602 msgid "top margin" msgstr "" -#: libbirdfont/Glyph.vala:557+#: libbirdfont/Glyph.vala:609 msgid "top" msgstr "" -#: libbirdfont/Glyph.vala:564+#: libbirdfont/Glyph.vala:616 msgid "x-height" msgstr "" -#: libbirdfont/Glyph.vala:573+#: libbirdfont/Glyph.vala:625 msgid "baseline" msgstr "" -#: libbirdfont/Glyph.vala:580+#: libbirdfont/Glyph.vala:632 msgid "bottom" msgstr "" -#: libbirdfont/Glyph.vala:586+#: libbirdfont/Glyph.vala:638 msgid "bottom margin" msgstr "" -#: libbirdfont/Glyph.vala:592+#: libbirdfont/Glyph.vala:644 msgid "left" msgstr "" -#: libbirdfont/Glyph.vala:601+#: libbirdfont/Glyph.vala:653 msgid "right" msgstr "" -#: libbirdfont/Glyph.vala:2421+#: libbirdfont/Glyph.vala:2462 msgid "Guide" msgstr "" @@ -670,6 +679,10 @@ msgstr "Afichar la grasilha" msgid "Guides" msgstr "" +#: libbirdfont/Help.vala:29+msgid "BirdFont is a font editor."+msgstr ""+ #: libbirdfont/HiddenTools.vala:33 msgid "Zoom in" msgstr "Zoom avant"@@ -735,32 +748,38 @@ msgstr "" msgid "Glyph" msgstr "" -#: libbirdfont/KerningDisplay.vala:97 libbirdfont/KerningDisplay.vala:877+#: libbirdfont/KerningDisplay.vala:60+msgid ""+"Kerning is the process of adjusting the space between two letters. You can "+"cahnge the space between one letter and all other letters in the spacing tab."+msgstr ""++#: libbirdfont/KerningDisplay.vala:101 libbirdfont/KerningDisplay.vala:882 msgid "Kerning" msgstr "Interletratge" -#: libbirdfont/KerningDisplay.vala:105+#: libbirdfont/KerningDisplay.vala:109 msgid "The current kerning class is malformed." msgstr "La classa de crenatge actuala es malformada" -#: libbirdfont/KerningDisplay.vala:106+#: libbirdfont/KerningDisplay.vala:110 msgid "Add single characters separated by space and ranges on the form A-Z." msgstr "" -#: libbirdfont/KerningDisplay.vala:107+#: libbirdfont/KerningDisplay.vala:111 msgid "Type “space” to kern the space character and “divis” to kern -." msgstr "" -#: libbirdfont/KerningDisplay.vala:678 libbirdfont/OverviewTools.vala:78+#: libbirdfont/KerningDisplay.vala:683 libbirdfont/OverviewTools.vala:78 msgid "Unicode" msgstr "" -#: libbirdfont/KerningDisplay.vala:678+#: libbirdfont/KerningDisplay.vala:683 msgid "Insert" msgstr "" -#: libbirdfont/KerningDisplay.vala:877 libbirdfont/MainWindow.vala:235-#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:208+#: libbirdfont/KerningDisplay.vala:882 libbirdfont/MainWindow.vala:241+#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:231 msgid "Close" msgstr "Tampar" @@ -776,11 +795,11 @@ msgstr "" msgid "Kerning class" msgstr "Tipe d'apròchi" -#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:144+#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:166 #: libbirdfont/Ligatures.vala:118 libbirdfont/Ligatures.vala:141 #: libbirdfont/Ligatures.vala:164 libbirdfont/Ligatures.vala:196 #: libbirdfont/SpacingClass.vala:45 libbirdfont/SpacingTab.vala:232-#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:208+#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:231 #: libbirdfont/Theme.vala:687 msgid "Set" msgstr "Atribuir"@@ -847,7 +866,11 @@ msgstr "Jòc de caractèrs" msgid "Character Set" msgstr "Jòc de caractèrs" -#: libbirdfont/LayerLabel.vala:144+#: libbirdfont/LayerLabel.vala:101+msgid "Hide the layer."+msgstr ""++#: libbirdfont/LayerLabel.vala:166 msgid "Layer" msgstr "" @@ -888,7 +911,7 @@ msgid "Contextual Substitutions" msgstr ""  #: libbirdfont/LigatureList.vala:126 libbirdfont/LigatureList.vala:140-#: libbirdfont/Menu.vala:445+#: libbirdfont/Menu.vala:447 msgid "Ligatures" msgstr "" @@ -933,7 +956,7 @@ msgstr "" msgid "You need an older version of Birdfont to open it." msgstr "" -#: libbirdfont/MainWindow.vala:235+#: libbirdfont/MainWindow.vala:241 msgid "Glyph sequence" msgstr "Sequéncia del glyph" @@ -1004,8 +1027,8 @@ msgstr "" msgid "Move To Baseline" msgstr "" -#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:250-#: libbirdfont/OverView.vala:269 libbirdfont/OverviewTools.vala:154+#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:257+#: libbirdfont/OverView.vala:276 libbirdfont/OverviewTools.vala:154 msgid "Search" msgstr "Recercar" @@ -1084,110 +1107,114 @@ msgstr "" msgid "Export Glyph as SVG" msgstr "_Exportar lo glyph al format SVG" -#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:303+#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:304 msgid "Import SVG file" msgstr "" -#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:313 msgid "Import SVG folder" msgstr "" -#: libbirdfont/Menu.vala:303 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:304 libbirdfont/Menu.vala:313 msgid "color" msgstr "" -#: libbirdfont/Menu.vala:320+#: libbirdfont/Menu.vala:322 msgid "Import Background Image" msgstr "" -#: libbirdfont/Menu.vala:334 libbirdfont/Preview.vala:27+#: libbirdfont/Menu.vala:336 libbirdfont/Preview.vala:27 msgid "Preview" msgstr "Apercebut" -#: libbirdfont/Menu.vala:342+#: libbirdfont/Menu.vala:344 #, fuzzy msgid "Tab" msgstr "_Onglet" -#: libbirdfont/Menu.vala:348+#: libbirdfont/Menu.vala:350 #, fuzzy msgid "Next Tab" msgstr "Onglet _seguent" -#: libbirdfont/Menu.vala:355+#: libbirdfont/Menu.vala:357 #, fuzzy msgid "Previous Tab" msgstr "Onglet _precedent" -#: libbirdfont/Menu.vala:362+#: libbirdfont/Menu.vala:364 #, fuzzy msgid "Close Tab" msgstr "_Tampar l'onglet" -#: libbirdfont/Menu.vala:369+#: libbirdfont/Menu.vala:371 #, fuzzy msgid "Close All Tabs" msgstr "_Tampar totes los onglets" -#: libbirdfont/Menu.vala:377+#: libbirdfont/Menu.vala:379 msgid "Spacing and Kerning" msgstr "" -#: libbirdfont/Menu.vala:383+#: libbirdfont/Menu.vala:385 #, fuzzy msgid "Show Spacing Tab" msgstr "Far veire l'onglet de crenatge" -#: libbirdfont/Menu.vala:390+#: libbirdfont/Menu.vala:392 #, fuzzy msgid "Show Kerning Tab" msgstr "Far veire l'onglet de crenatge" -#: libbirdfont/Menu.vala:397+#: libbirdfont/Menu.vala:399 #, fuzzy msgid "List Kerning Pairs" msgstr "_Enumerar las paras de kerning" -#: libbirdfont/Menu.vala:404 libbirdfont/SpacingClassTab.vala:80+#: libbirdfont/Menu.vala:406 libbirdfont/SpacingClassTab.vala:80 msgid "Spacing Classes" msgstr "" -#: libbirdfont/Menu.vala:411+#: libbirdfont/Menu.vala:413 msgid "Select Next Kerning Pair" msgstr "" -#: libbirdfont/Menu.vala:420+#: libbirdfont/Menu.vala:422 msgid "Select Previous Kerning Pair" msgstr "" -#: libbirdfont/Menu.vala:429+#: libbirdfont/Menu.vala:431 msgid "Load Kerning Strings" msgstr "" -#: libbirdfont/Menu.vala:436+#: libbirdfont/Menu.vala:438 msgid "Reload Kerning Strings" msgstr "" -#: libbirdfont/Menu.vala:451+#: libbirdfont/Menu.vala:453 msgid "Show Ligatures" msgstr "" -#: libbirdfont/Menu.vala:458+#: libbirdfont/Menu.vala:460 msgid "Add Ligature" msgstr "" -#: libbirdfont/Menu.vala:467+#: libbirdfont/Menu.vala:469 msgid "Git" msgstr "" -#: libbirdfont/Menu.vala:473+#: libbirdfont/Menu.vala:475 msgid "Save As .bfp" msgstr "" -#: libbirdfont/Menu.vala:482 libbirdfont/OverView.vala:471+#: libbirdfont/Menu.vala:484 libbirdfont/OverView.vala:478 msgid "Overview" msgstr "Resumit" +#: libbirdfont/Menu.vala:513+msgid "Help"+msgstr ""+ #: libbirdfont/MenuItem.vala:82 msgid "UP" msgstr ""@@ -1269,15 +1296,11 @@ msgstr "" msgid "Swashes" msgstr "" -#: libbirdfont/OverView.vala:250 libbirdfont/OverView.vala:269+#: libbirdfont/OverView.vala:257 libbirdfont/OverView.vala:276 msgid "Filter" msgstr "Filtrar" -#: libbirdfont/OverView.vala:673-msgid "No glyphs in this view."-msgstr "Pas cap de glyph dins aqueste apercebut."--#: libbirdfont/OverView.vala:1484+#: libbirdfont/OverView.vala:1498 msgid "See also:" msgstr "Vejatz tanben :" @@ -1454,10 +1477,6 @@ msgstr "" msgid "Right" msgstr "" -#: libbirdfont/SvgParser.vala:62 libbirdfont/SvgParser.vala:121-msgid "Import"-msgstr "Importar"- #: libbirdfont/Theme.vala:421 msgid "Canvas Background" msgstr ""@@ -1744,7 +1763,7 @@ msgstr "" msgid "Color" msgstr "" -#: libbirdfont/ToolItem.vala:44+#: libbirdfont/ToolItem.vala:66 msgid "Shift" msgstr "" @@ -1788,6 +1807,12 @@ msgstr "" msgid "Writing" msgstr "Escritura" +#~ msgid "No glyphs in this view."+#~ msgstr "Pas cap de glyph dins aqueste apercebut."++#~ msgid "Import"+#~ msgstr "Importar"+ #~ msgid "Full name (name and style)" #~ msgstr "Nom complet (nom e estil)" diff --git a/po/pl.po b/po/pl.poindex d4fdbc9..d691641 100644--- a/po/pl.po+++ b/po/pl.po@@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n"-"POT-Creation-Date: 2015-12-22 20:35+0100\n"+"POT-Creation-Date: 2016-01-06 12:06+0100\n" "PO-Revision-Date: 2015-11-05 19:53+0000\n" "Last-Translator: Anonymous Pootle User\n" "Language-Team: LANGUAGE <LL@li.org>\n"@@ -106,16 +106,16 @@ msgstr "Pliki" msgid "Parts" msgstr "Części" -#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2421+#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2462 #: libbirdfont/LigatureList.vala:106 libbirdfont/OtfFeatureTable.vala:181 msgid "Add" msgstr "Dodaj" -#: libbirdfont/BackgroundTools.vala:122+#: libbirdfont/BackgroundTools.vala:123 msgid "Select Glyph" msgstr "Wybierz glif" -#: libbirdfont/BackgroundTools.vala:231 libbirdfont/LoadCallback.vala:102+#: libbirdfont/BackgroundTools.vala:233 libbirdfont/LoadCallback.vala:102 #: libbirdfont/Menu.vala:50 msgid "Open" msgstr "Otwórz"@@ -189,18 +189,18 @@ msgid "Thai" msgstr "Tajski"  #. / All lower case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:420+#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:433 msgid "a b c d e f g h i j k l m n o p q r s t u v w x y z" msgstr "a b c d e f g h i j k l m n o p q r s t u v w x y z"  #. / All upper case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:421+#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:434 msgid "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z" msgstr "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z"  #: libbirdfont/DescriptionDisplay.vala:66 #: libbirdfont/DescriptionDisplay.vala:277 libbirdfont/ExportSettings.vala:133-#: libbirdfont/Menu.vala:497 libbirdfont/TableLayout.vala:203+#: libbirdfont/Menu.vala:499 libbirdfont/TableLayout.vala:203 msgid "Name and Description" msgstr "Nazwa i opis" @@ -238,7 +238,7 @@ msgid "Unique Identifier" msgstr "Unikalny identyfikator"  #: libbirdfont/DescriptionDisplay.vala:150 libbirdfont/ImportUtils.vala:161-#: libbirdfont/Menu.vala:504 libbirdfont/Menu.vala:506+#: libbirdfont/Menu.vala:506 libbirdfont/Menu.vala:508 #: libbirdfont/VersionList.vala:265 msgid "Version" msgstr "Wersja"@@ -324,215 +324,224 @@ msgstr "Linie pomocnicze i Siatka" msgid "Grid Size" msgstr "Rozmiar siatki" -#: libbirdfont/DrawingTools.vala:194+#: libbirdfont/DrawingTools.vala:195 msgid "Move canvas" msgstr "Przenieś obszar roboczy" -#: libbirdfont/DrawingTools.vala:202+#: libbirdfont/DrawingTools.vala:196+msgid "Press space and click to move the canvas."+msgstr ""++#: libbirdfont/DrawingTools.vala:204 msgid "Delete" msgstr "Usuń" -#: libbirdfont/DrawingTools.vala:209+#: libbirdfont/DrawingTools.vala:211 msgid "Select all points or paths" msgstr "Wybierz wszystkie punkty albo ścieżki" -#: libbirdfont/DrawingTools.vala:225 libbirdfont/Menu.vala:99+#: libbirdfont/DrawingTools.vala:227 libbirdfont/Menu.vala:99 msgid "Undo" msgstr "Cofnij" -#: libbirdfont/DrawingTools.vala:232+#: libbirdfont/DrawingTools.vala:234 msgid "Insert new points on path" msgstr "Wstaw nowe punkty na ścieżce" -#: libbirdfont/DrawingTools.vala:241+#: libbirdfont/DrawingTools.vala:244 msgid "Create quadratic Bézier curves" msgstr "Stwórz kwadratowe krzywe Beziera" -#: libbirdfont/DrawingTools.vala:250+#: libbirdfont/DrawingTools.vala:245+msgid ""+"All control points will be converted to quadratic points in the TTF format."+msgstr ""++#: libbirdfont/DrawingTools.vala:255 msgid "Create cubic Bézier curves" msgstr "Stwórz sześcienne krzywe Beziera" -#: libbirdfont/DrawingTools.vala:259+#: libbirdfont/DrawingTools.vala:264 msgid "Quadratic path with two line handles" msgstr "Kwadratowa ścieżka z dwoma punktami" -#: libbirdfont/DrawingTools.vala:268+#: libbirdfont/DrawingTools.vala:273 msgid "Convert selected points" msgstr "Konwertuj wybrane punkty" -#: libbirdfont/DrawingTools.vala:279+#: libbirdfont/DrawingTools.vala:284 msgid "X coordinate" msgstr "Współrzędna X" -#: libbirdfont/DrawingTools.vala:323+#: libbirdfont/DrawingTools.vala:328 msgid "Y coordinate" msgstr "Współrzędna Y" -#: libbirdfont/DrawingTools.vala:366+#: libbirdfont/DrawingTools.vala:371 msgid "Rotation" msgstr "Obrót" -#: libbirdfont/DrawingTools.vala:405+#: libbirdfont/DrawingTools.vala:410 msgid "Width" msgstr "Szerokość" -#: libbirdfont/DrawingTools.vala:430+#: libbirdfont/DrawingTools.vala:435 msgid "Height" msgstr "Wysokość" -#: libbirdfont/DrawingTools.vala:473+#: libbirdfont/DrawingTools.vala:478 msgid "Tie curve handles for the selected edit point" msgstr "Połącz uchwyty krzywej dla zaznaczonego punktu edycji" -#: libbirdfont/DrawingTools.vala:524+#: libbirdfont/DrawingTools.vala:529 msgid "Symmetrical handles" msgstr "Uchwyty symetryczne" -#: libbirdfont/DrawingTools.vala:554+#: libbirdfont/DrawingTools.vala:559 msgid "Convert segment to line." msgstr "Konwertuj odcinek na linie" -#: libbirdfont/DrawingTools.vala:562+#: libbirdfont/DrawingTools.vala:567 msgid "Create counter from outline" msgstr "Zamień na krzywe" -#: libbirdfont/DrawingTools.vala:565+#: libbirdfont/DrawingTools.vala:570 msgid "Scale object to font top/baseline" msgstr "" -#: libbirdfont/DrawingTools.vala:574+#: libbirdfont/DrawingTools.vala:579 #, fuzzy msgid "Close path" msgstr "Zamknij ścieżkę" -#: libbirdfont/DrawingTools.vala:596+#: libbirdfont/DrawingTools.vala:601 #, fuzzy msgid "Move to path to the bottom of the layer" msgstr "Przenieś do ścieżki na dolnej warstwie" -#: libbirdfont/DrawingTools.vala:610+#: libbirdfont/DrawingTools.vala:615 msgid "Flip path vertically" msgstr "Odbij ścieżkę pionowo" -#: libbirdfont/DrawingTools.vala:618+#: libbirdfont/DrawingTools.vala:623 msgid "Flip path horizontally" msgstr "Odbij ścieżkę poziomo" -#: libbirdfont/DrawingTools.vala:627+#: libbirdfont/DrawingTools.vala:632 msgid "Set size for background image" msgstr "Ustaw rozmiar dla tła" -#: libbirdfont/DrawingTools.vala:665+#: libbirdfont/DrawingTools.vala:670 msgid "Show/hide background image" msgstr "Pokaż/ukryj tło" -#: libbirdfont/DrawingTools.vala:676+#: libbirdfont/DrawingTools.vala:681 msgid "Insert a new background image" msgstr "Wstaw nowe tło" -#: libbirdfont/DrawingTools.vala:690 libbirdfont/ThemeTab.vala:151+#: libbirdfont/DrawingTools.vala:695 libbirdfont/ThemeTab.vala:151 msgid "High contrast" msgstr "Wysoki kontrast" -#: libbirdfont/DrawingTools.vala:704+#: libbirdfont/DrawingTools.vala:709 msgid "Set background threshold" msgstr "Ustaw wartość progową tła" -#: libbirdfont/DrawingTools.vala:723+#: libbirdfont/DrawingTools.vala:728 msgid "Amount of autotrace details" msgstr "Ilość szczegółów przy trasowaniu" -#: libbirdfont/DrawingTools.vala:742+#: libbirdfont/DrawingTools.vala:747 msgid "Autotrace simplification" msgstr "Uproszczenia trasowania" -#: libbirdfont/DrawingTools.vala:752+#: libbirdfont/DrawingTools.vala:757 msgid "Autotrace background image" msgstr "Obraz tła do trasowania" -#: libbirdfont/DrawingTools.vala:760+#: libbirdfont/DrawingTools.vala:765 msgid "Delete background image" msgstr "Usuń obraz tła" -#: libbirdfont/DrawingTools.vala:767+#: libbirdfont/DrawingTools.vala:772 msgid "Add layer" msgstr "Dodaj warstwę" -#: libbirdfont/DrawingTools.vala:777+#: libbirdfont/DrawingTools.vala:782 msgid "Show layers" msgstr "Pokaż warstwy" -#: libbirdfont/DrawingTools.vala:787+#: libbirdfont/DrawingTools.vala:792 msgid "Apply stroke" msgstr "Zastosuj obrys" -#: libbirdfont/DrawingTools.vala:821 libbirdfont/SettingsTab.vala:34+#: libbirdfont/DrawingTools.vala:826 libbirdfont/SettingsTab.vala:34 msgid "Stroke width" msgstr "Szerokość pociągnięcia" -#: libbirdfont/DrawingTools.vala:863+#: libbirdfont/DrawingTools.vala:872 msgid "Create outline form stroke" msgstr "Stwórz krzywe z obrysu" -#: libbirdfont/DrawingTools.vala:872+#: libbirdfont/DrawingTools.vala:881 msgid "Butt line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:896+#: libbirdfont/DrawingTools.vala:908 msgid "Round line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:921+#: libbirdfont/DrawingTools.vala:936 msgid "Square line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:990+#: libbirdfont/DrawingTools.vala:1008 msgid "Show guidelines" msgstr "Pokaż linie siatki" -#: libbirdfont/DrawingTools.vala:1002+#: libbirdfont/DrawingTools.vala:1020 #, fuzzy msgid "Show more guidelines" msgstr "Pokaż więcej linii siatki" -#: libbirdfont/DrawingTools.vala:1018+#: libbirdfont/DrawingTools.vala:1036 msgid "Show guidelines at top and bottom margin" msgstr "Pokaż linijki na górnym i dolnym marginesie" -#: libbirdfont/DrawingTools.vala:1042+#: libbirdfont/DrawingTools.vala:1060 msgid "Lock guides and grid" msgstr "Zablokuj linie pomocnicze i siatkę" -#: libbirdfont/DrawingTools.vala:1084+#: libbirdfont/DrawingTools.vala:1102 msgid "Zoom Out More" msgstr "Pomniejsz bardziej" -#: libbirdfont/DrawingTools.vala:1093+#: libbirdfont/DrawingTools.vala:1111 msgid "Show full glyph" msgstr "Pokaż pełny glif" -#: libbirdfont/DrawingTools.vala:1100+#: libbirdfont/DrawingTools.vala:1118 msgid "Fit in view" msgstr "Dopasuj do widoku" -#: libbirdfont/DrawingTools.vala:1107+#: libbirdfont/DrawingTools.vala:1125 msgid "Zoom in on background image" msgstr "Powiększ na obrazie tła" -#: libbirdfont/DrawingTools.vala:1117+#: libbirdfont/DrawingTools.vala:1135 msgid "Previous view" msgstr "Poprzedni widok" -#: libbirdfont/DrawingTools.vala:1123+#: libbirdfont/DrawingTools.vala:1141 msgid "Next view" msgstr "Następny widok" -#: libbirdfont/DrawingTools.vala:1525+#: libbirdfont/DrawingTools.vala:1543 msgid "Set size for grid" msgstr "Ustaw rozmiar siatki"  #: libbirdfont/ExportSettings.vala:41 libbirdfont/ExportSettings.vala:185-#: libbirdfont/Menu.vala:327+#: libbirdfont/Menu.vala:329 msgid "Export Settings" msgstr "Ustawienia eksportu" @@ -556,13 +565,13 @@ msgstr "Formaty" msgid "Export" msgstr "Eksportuj" -#: libbirdfont/ExportTool.vala:209 libbirdfont/Menu.vala:64-#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:68+#: libbirdfont/ExportTool.vala:222 libbirdfont/Menu.vala:64+#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:69 #: libbirdfont/SaveDialog.vala:38 libbirdfont/SaveDialogListener.vala:29 msgid "Save" msgstr "Zapisz" -#: libbirdfont/ExportTool.vala:419+#: libbirdfont/ExportTool.vala:432 msgid "Alphabet" msgstr "Alfabet" @@ -614,7 +623,7 @@ msgstr "Otwórz font" msgid "Save font" msgstr "Zapisz font" -#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:490+#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:492 #: libbirdfont/SettingsDisplay.vala:225 libbirdfont/SettingsTab.vala:31 #: libbirdfont/SettingsTab.vala:159 msgid "Settings"@@ -625,39 +634,39 @@ msgstr "Ustawienia" msgid "Themes" msgstr "Motywy" -#: libbirdfont/Glyph.vala:550+#: libbirdfont/Glyph.vala:602 msgid "top margin" msgstr "" -#: libbirdfont/Glyph.vala:557+#: libbirdfont/Glyph.vala:609 msgid "top" msgstr "" -#: libbirdfont/Glyph.vala:564+#: libbirdfont/Glyph.vala:616 msgid "x-height" msgstr "" -#: libbirdfont/Glyph.vala:573+#: libbirdfont/Glyph.vala:625 msgid "baseline" msgstr "" -#: libbirdfont/Glyph.vala:580+#: libbirdfont/Glyph.vala:632 msgid "bottom" msgstr "" -#: libbirdfont/Glyph.vala:586+#: libbirdfont/Glyph.vala:638 msgid "bottom margin" msgstr "" -#: libbirdfont/Glyph.vala:592+#: libbirdfont/Glyph.vala:644 msgid "left" msgstr "" -#: libbirdfont/Glyph.vala:601+#: libbirdfont/Glyph.vala:653 msgid "right" msgstr "" -#: libbirdfont/Glyph.vala:2421+#: libbirdfont/Glyph.vala:2462 msgid "Guide" msgstr "Prowadnica" @@ -669,6 +678,10 @@ msgstr "Pokaż siatkę" msgid "Guides" msgstr "Prowadnice" +#: libbirdfont/Help.vala:29+msgid "BirdFont is a font editor."+msgstr ""+ #: libbirdfont/HiddenTools.vala:33 msgid "Zoom in" msgstr "Przybliż"@@ -734,32 +747,38 @@ msgstr "do" msgid "Glyph" msgstr "Glif" -#: libbirdfont/KerningDisplay.vala:97 libbirdfont/KerningDisplay.vala:877+#: libbirdfont/KerningDisplay.vala:60+msgid ""+"Kerning is the process of adjusting the space between two letters. You can "+"cahnge the space between one letter and all other letters in the spacing tab."+msgstr ""++#: libbirdfont/KerningDisplay.vala:101 libbirdfont/KerningDisplay.vala:882 msgid "Kerning" msgstr "Kerning" -#: libbirdfont/KerningDisplay.vala:105+#: libbirdfont/KerningDisplay.vala:109 msgid "The current kerning class is malformed." msgstr "" -#: libbirdfont/KerningDisplay.vala:106+#: libbirdfont/KerningDisplay.vala:110 msgid "Add single characters separated by space and ranges on the form A-Z." msgstr "Dodaj pojedyncze znaki rozdzielone spacją i w zakresie formy A-Z." -#: libbirdfont/KerningDisplay.vala:107+#: libbirdfont/KerningDisplay.vala:111 msgid "Type “space” to kern the space character and “divis” to kern -." msgstr "" -#: libbirdfont/KerningDisplay.vala:678 libbirdfont/OverviewTools.vala:78+#: libbirdfont/KerningDisplay.vala:683 libbirdfont/OverviewTools.vala:78 msgid "Unicode" msgstr "Unicode" -#: libbirdfont/KerningDisplay.vala:678+#: libbirdfont/KerningDisplay.vala:683 msgid "Insert" msgstr "Wstaw" -#: libbirdfont/KerningDisplay.vala:877 libbirdfont/MainWindow.vala:235-#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:208+#: libbirdfont/KerningDisplay.vala:882 libbirdfont/MainWindow.vala:241+#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:231 msgid "Close" msgstr "Zamknij" @@ -775,11 +794,11 @@ msgstr "" msgid "Kerning class" msgstr "" -#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:144+#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:166 #: libbirdfont/Ligatures.vala:118 libbirdfont/Ligatures.vala:141 #: libbirdfont/Ligatures.vala:164 libbirdfont/Ligatures.vala:196 #: libbirdfont/SpacingClass.vala:45 libbirdfont/SpacingTab.vala:232-#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:208+#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:231 #: libbirdfont/Theme.vala:687 msgid "Set" msgstr "Ustaw"@@ -845,7 +864,11 @@ msgstr "Zestaw znaków" msgid "Character Set" msgstr "Zestaw znaków" -#: libbirdfont/LayerLabel.vala:144+#: libbirdfont/LayerLabel.vala:101+msgid "Hide the layer."+msgstr ""++#: libbirdfont/LayerLabel.vala:166 #, fuzzy msgid "Layer" msgstr "Warstwy"@@ -887,7 +910,7 @@ msgid "Contextual Substitutions" msgstr ""  #: libbirdfont/LigatureList.vala:126 libbirdfont/LigatureList.vala:140-#: libbirdfont/Menu.vala:445+#: libbirdfont/Menu.vala:447 msgid "Ligatures" msgstr "Ligatury" @@ -932,7 +955,7 @@ msgstr "" msgid "You need an older version of Birdfont to open it." msgstr "" -#: libbirdfont/MainWindow.vala:235+#: libbirdfont/MainWindow.vala:241 msgid "Glyph sequence" msgstr "Kolejność glifów" @@ -993,8 +1016,8 @@ msgstr "Zaznacz wszystkie ścieżki" msgid "Move To Baseline" msgstr "Przenieś do linii bazowej" -#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:250-#: libbirdfont/OverView.vala:269 libbirdfont/OverviewTools.vala:154+#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:257+#: libbirdfont/OverView.vala:276 libbirdfont/OverviewTools.vala:154 msgid "Search" msgstr "Wyszukaj" @@ -1067,103 +1090,107 @@ msgstr "Eksport czcionek" msgid "Export Glyph as SVG" msgstr "Eksport glifu jako SVG" -#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:303+#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:304 msgid "Import SVG file" msgstr "Import pliku SVG" -#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:313 #, fuzzy msgid "Import SVG folder" msgstr "Import pliku SVG" -#: libbirdfont/Menu.vala:303 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:304 libbirdfont/Menu.vala:313 msgid "color" msgstr "" -#: libbirdfont/Menu.vala:320+#: libbirdfont/Menu.vala:322 msgid "Import Background Image" msgstr "Import obrazu tła" -#: libbirdfont/Menu.vala:334 libbirdfont/Preview.vala:27+#: libbirdfont/Menu.vala:336 libbirdfont/Preview.vala:27 msgid "Preview" msgstr "Podgląd" -#: libbirdfont/Menu.vala:342+#: libbirdfont/Menu.vala:344 msgid "Tab" msgstr "Karta" -#: libbirdfont/Menu.vala:348+#: libbirdfont/Menu.vala:350 msgid "Next Tab" msgstr "Następna karta" -#: libbirdfont/Menu.vala:355+#: libbirdfont/Menu.vala:357 msgid "Previous Tab" msgstr "Poprzednia karta" -#: libbirdfont/Menu.vala:362+#: libbirdfont/Menu.vala:364 msgid "Close Tab" msgstr "Zamknij kartę" -#: libbirdfont/Menu.vala:369+#: libbirdfont/Menu.vala:371 msgid "Close All Tabs" msgstr "Zamknij wszystkie karty" -#: libbirdfont/Menu.vala:377+#: libbirdfont/Menu.vala:379 msgid "Spacing and Kerning" msgstr "" -#: libbirdfont/Menu.vala:383+#: libbirdfont/Menu.vala:385 msgid "Show Spacing Tab" msgstr "" -#: libbirdfont/Menu.vala:390+#: libbirdfont/Menu.vala:392 msgid "Show Kerning Tab" msgstr "" -#: libbirdfont/Menu.vala:397+#: libbirdfont/Menu.vala:399 msgid "List Kerning Pairs" msgstr "" -#: libbirdfont/Menu.vala:404 libbirdfont/SpacingClassTab.vala:80+#: libbirdfont/Menu.vala:406 libbirdfont/SpacingClassTab.vala:80 msgid "Spacing Classes" msgstr "" -#: libbirdfont/Menu.vala:411+#: libbirdfont/Menu.vala:413 msgid "Select Next Kerning Pair" msgstr "" -#: libbirdfont/Menu.vala:420+#: libbirdfont/Menu.vala:422 msgid "Select Previous Kerning Pair" msgstr "" -#: libbirdfont/Menu.vala:429+#: libbirdfont/Menu.vala:431 msgid "Load Kerning Strings" msgstr "" -#: libbirdfont/Menu.vala:436+#: libbirdfont/Menu.vala:438 msgid "Reload Kerning Strings" msgstr "" -#: libbirdfont/Menu.vala:451+#: libbirdfont/Menu.vala:453 msgid "Show Ligatures" msgstr "Pokaż ligatury" -#: libbirdfont/Menu.vala:458+#: libbirdfont/Menu.vala:460 msgid "Add Ligature" msgstr "Dodaj ligaturę" -#: libbirdfont/Menu.vala:467+#: libbirdfont/Menu.vala:469 msgid "Git" msgstr "Git" -#: libbirdfont/Menu.vala:473+#: libbirdfont/Menu.vala:475 msgid "Save As .bfp" msgstr "Zapisz jako .bfp" -#: libbirdfont/Menu.vala:482 libbirdfont/OverView.vala:471+#: libbirdfont/Menu.vala:484 libbirdfont/OverView.vala:478 msgid "Overview" msgstr "Przegląd" +#: libbirdfont/Menu.vala:513+msgid "Help"+msgstr ""+ #: libbirdfont/MenuItem.vala:82 msgid "UP" msgstr ""@@ -1245,15 +1272,11 @@ msgstr "" msgid "Swashes" msgstr "" -#: libbirdfont/OverView.vala:250 libbirdfont/OverView.vala:269+#: libbirdfont/OverView.vala:257 libbirdfont/OverView.vala:276 msgid "Filter" msgstr "Filtr" -#: libbirdfont/OverView.vala:673-msgid "No glyphs in this view."-msgstr "W tym widoku nie ma glifów."--#: libbirdfont/OverView.vala:1484+#: libbirdfont/OverView.vala:1498 msgid "See also:" msgstr "Zobacz także:" @@ -1432,10 +1455,6 @@ msgstr "" msgid "Right" msgstr "" -#: libbirdfont/SvgParser.vala:62 libbirdfont/SvgParser.vala:121-msgid "Import"-msgstr "Importuj"- #: libbirdfont/Theme.vala:421 msgid "Canvas Background" msgstr ""@@ -1723,7 +1742,7 @@ msgstr "" msgid "Color" msgstr "" -#: libbirdfont/ToolItem.vala:44+#: libbirdfont/ToolItem.vala:66 msgid "Shift" msgstr "" @@ -1767,6 +1786,12 @@ msgstr "Nieznany format pliku." msgid "Writing" msgstr "Pisanie" +#~ msgid "No glyphs in this view."+#~ msgstr "W tym widoku nie ma glifów."++#~ msgid "Import"+#~ msgstr "Importuj"+ #~ msgid "Manufakturer" #~ msgstr "Produkcja" diff --git a/po/pt.po b/po/pt.poindex 65f60f6..5d4aee8 100644--- a/po/pt.po+++ b/po/pt.po@@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n"-"POT-Creation-Date: 2015-12-22 20:35+0100\n"+"POT-Creation-Date: 2016-01-06 12:06+0100\n" "PO-Revision-Date: 2015-09-22 23:15+0000\n" "Last-Translator: Anonymous Pootle User\n" "Language-Team: LANGUAGE <LL@li.org>\n"@@ -112,17 +112,17 @@ msgstr "_Ficheiro" msgid "Parts" msgstr "Partes" -#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2421+#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2462 #: libbirdfont/LigatureList.vala:106 libbirdfont/OtfFeatureTable.vala:181 msgid "Add" msgstr "Adicionar" -#: libbirdfont/BackgroundTools.vala:122+#: libbirdfont/BackgroundTools.vala:123 #, fuzzy msgid "Select Glyph" msgstr "Escolher Símbolo" -#: libbirdfont/BackgroundTools.vala:231 libbirdfont/LoadCallback.vala:102+#: libbirdfont/BackgroundTools.vala:233 libbirdfont/LoadCallback.vala:102 #: libbirdfont/Menu.vala:50 msgid "Open" msgstr "Abrir"@@ -198,18 +198,18 @@ msgid "Thai" msgstr "Tailandês"  #. / All lower case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:420+#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:433 msgid "a b c d e f g h i j k l m n o p q r s t u v w x y z" msgstr "a b c d e f g h i j k l m n o p q r s t u v w x y z"  #. / All upper case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:421+#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:434 msgid "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z" msgstr "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z"  #: libbirdfont/DescriptionDisplay.vala:66 #: libbirdfont/DescriptionDisplay.vala:277 libbirdfont/ExportSettings.vala:133-#: libbirdfont/Menu.vala:497 libbirdfont/TableLayout.vala:203+#: libbirdfont/Menu.vala:499 libbirdfont/TableLayout.vala:203 msgid "Name and Description" msgstr "Nome e Descrição" @@ -247,7 +247,7 @@ msgid "Unique Identifier" msgstr "Identificador Único"  #: libbirdfont/DescriptionDisplay.vala:150 libbirdfont/ImportUtils.vala:161-#: libbirdfont/Menu.vala:504 libbirdfont/Menu.vala:506+#: libbirdfont/Menu.vala:506 libbirdfont/Menu.vala:508 #: libbirdfont/VersionList.vala:265 msgid "Version" msgstr "Versão"@@ -336,225 +336,234 @@ msgstr "Orientações & Grelha" msgid "Grid Size" msgstr "Tamanho da Grelha" -#: libbirdfont/DrawingTools.vala:194+#: libbirdfont/DrawingTools.vala:195 msgid "Move canvas" msgstr "" -#: libbirdfont/DrawingTools.vala:202+#: libbirdfont/DrawingTools.vala:196+msgid "Press space and click to move the canvas."+msgstr ""++#: libbirdfont/DrawingTools.vala:204 msgid "Delete" msgstr "Eliminar" -#: libbirdfont/DrawingTools.vala:209+#: libbirdfont/DrawingTools.vala:211 msgid "Select all points or paths" msgstr "" -#: libbirdfont/DrawingTools.vala:225 libbirdfont/Menu.vala:99+#: libbirdfont/DrawingTools.vala:227 libbirdfont/Menu.vala:99 #, fuzzy msgid "Undo" msgstr "Desfazer" -#: libbirdfont/DrawingTools.vala:232+#: libbirdfont/DrawingTools.vala:234 msgid "Insert new points on path" msgstr "" -#: libbirdfont/DrawingTools.vala:241+#: libbirdfont/DrawingTools.vala:244 msgid "Create quadratic Bézier curves" msgstr "Criar curvas de bezier quadráticas" -#: libbirdfont/DrawingTools.vala:250+#: libbirdfont/DrawingTools.vala:245+msgid ""+"All control points will be converted to quadratic points in the TTF format."+msgstr ""++#: libbirdfont/DrawingTools.vala:255 msgid "Create cubic Bézier curves" msgstr "Criar curvas de bezier cúbicas" -#: libbirdfont/DrawingTools.vala:259+#: libbirdfont/DrawingTools.vala:264 msgid "Quadratic path with two line handles" msgstr "Endereço quadrático com duas linhas" -#: libbirdfont/DrawingTools.vala:268+#: libbirdfont/DrawingTools.vala:273 msgid "Convert selected points" msgstr "" -#: libbirdfont/DrawingTools.vala:279+#: libbirdfont/DrawingTools.vala:284 msgid "X coordinate" msgstr "Coordenada X" -#: libbirdfont/DrawingTools.vala:323+#: libbirdfont/DrawingTools.vala:328 msgid "Y coordinate" msgstr "Coordenada Y" -#: libbirdfont/DrawingTools.vala:366+#: libbirdfont/DrawingTools.vala:371 msgid "Rotation" msgstr "Rotação" -#: libbirdfont/DrawingTools.vala:405+#: libbirdfont/DrawingTools.vala:410 msgid "Width" msgstr "Largura" -#: libbirdfont/DrawingTools.vala:430+#: libbirdfont/DrawingTools.vala:435 msgid "Height" msgstr "Altura" -#: libbirdfont/DrawingTools.vala:473+#: libbirdfont/DrawingTools.vala:478 msgid "Tie curve handles for the selected edit point" msgstr "" -#: libbirdfont/DrawingTools.vala:524+#: libbirdfont/DrawingTools.vala:529 msgid "Symmetrical handles" msgstr "" -#: libbirdfont/DrawingTools.vala:554+#: libbirdfont/DrawingTools.vala:559 #, fuzzy msgid "Convert segment to line." msgstr "Converter segmento para linha." -#: libbirdfont/DrawingTools.vala:562+#: libbirdfont/DrawingTools.vala:567 msgid "Create counter from outline" msgstr "" -#: libbirdfont/DrawingTools.vala:565+#: libbirdfont/DrawingTools.vala:570 msgid "Scale object to font top/baseline" msgstr "" -#: libbirdfont/DrawingTools.vala:574+#: libbirdfont/DrawingTools.vala:579 #, fuzzy msgid "Close path" msgstr "Fechar _Caminho" -#: libbirdfont/DrawingTools.vala:596+#: libbirdfont/DrawingTools.vala:601 #, fuzzy msgid "Move to path to the bottom of the layer" msgstr "Mover para o caminho do fundo da camada" -#: libbirdfont/DrawingTools.vala:610+#: libbirdfont/DrawingTools.vala:615 #, fuzzy msgid "Flip path vertically" msgstr "Virar verticalmente o caminho" -#: libbirdfont/DrawingTools.vala:618+#: libbirdfont/DrawingTools.vala:623 msgid "Flip path horizontally" msgstr "Virar horizontalmente o caminho" -#: libbirdfont/DrawingTools.vala:627+#: libbirdfont/DrawingTools.vala:632 msgid "Set size for background image" msgstr "Definir o tamanho da imagem de fundo" -#: libbirdfont/DrawingTools.vala:665+#: libbirdfont/DrawingTools.vala:670 msgid "Show/hide background image" msgstr "Mostrar/Ocultar a imagem de fundo" -#: libbirdfont/DrawingTools.vala:676+#: libbirdfont/DrawingTools.vala:681 msgid "Insert a new background image" msgstr "Inserir uma nova imagem de fundo" -#: libbirdfont/DrawingTools.vala:690 libbirdfont/ThemeTab.vala:151+#: libbirdfont/DrawingTools.vala:695 libbirdfont/ThemeTab.vala:151 msgid "High contrast" msgstr "Alto contraste" -#: libbirdfont/DrawingTools.vala:704+#: libbirdfont/DrawingTools.vala:709 msgid "Set background threshold" msgstr "Definir limite do fundo" -#: libbirdfont/DrawingTools.vala:723+#: libbirdfont/DrawingTools.vala:728 msgid "Amount of autotrace details" msgstr "" -#: libbirdfont/DrawingTools.vala:742+#: libbirdfont/DrawingTools.vala:747 msgid "Autotrace simplification" msgstr "" -#: libbirdfont/DrawingTools.vala:752+#: libbirdfont/DrawingTools.vala:757 msgid "Autotrace background image" msgstr "" -#: libbirdfont/DrawingTools.vala:760+#: libbirdfont/DrawingTools.vala:765 #, fuzzy msgid "Delete background image" msgstr "Selecione a imagem de fundo" -#: libbirdfont/DrawingTools.vala:767+#: libbirdfont/DrawingTools.vala:772 msgid "Add layer" msgstr "Adicionar camada" -#: libbirdfont/DrawingTools.vala:777+#: libbirdfont/DrawingTools.vala:782 msgid "Show layers" msgstr "" -#: libbirdfont/DrawingTools.vala:787+#: libbirdfont/DrawingTools.vala:792 msgid "Apply stroke" msgstr "Aplicar contorno" -#: libbirdfont/DrawingTools.vala:821 libbirdfont/SettingsTab.vala:34+#: libbirdfont/DrawingTools.vala:826 libbirdfont/SettingsTab.vala:34 msgid "Stroke width" msgstr "Largura do contorno" -#: libbirdfont/DrawingTools.vala:863+#: libbirdfont/DrawingTools.vala:872 msgid "Create outline form stroke" msgstr "" -#: libbirdfont/DrawingTools.vala:872+#: libbirdfont/DrawingTools.vala:881 msgid "Butt line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:896+#: libbirdfont/DrawingTools.vala:908 msgid "Round line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:921+#: libbirdfont/DrawingTools.vala:936 msgid "Square line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:990+#: libbirdfont/DrawingTools.vala:1008 msgid "Show guidelines" msgstr "Mostrar diretrizes" -#: libbirdfont/DrawingTools.vala:1002+#: libbirdfont/DrawingTools.vala:1020 #, fuzzy msgid "Show more guidelines" msgstr "Mostrar diretrizes" -#: libbirdfont/DrawingTools.vala:1018+#: libbirdfont/DrawingTools.vala:1036 msgid "Show guidelines at top and bottom margin" msgstr "Mostrar guias na margem do topo e do fundo" -#: libbirdfont/DrawingTools.vala:1042+#: libbirdfont/DrawingTools.vala:1060 msgid "Lock guides and grid" msgstr "Bloquear guias e a grelha" -#: libbirdfont/DrawingTools.vala:1084+#: libbirdfont/DrawingTools.vala:1102 #, fuzzy msgid "Zoom Out More" msgstr "Reduzir Mais a Ampliação" -#: libbirdfont/DrawingTools.vala:1093+#: libbirdfont/DrawingTools.vala:1111 #, fuzzy msgid "Show full glyph" msgstr "Mostrar o símbolo completo" -#: libbirdfont/DrawingTools.vala:1100+#: libbirdfont/DrawingTools.vala:1118 #, fuzzy msgid "Fit in view" msgstr "Encaixar na vista" -#: libbirdfont/DrawingTools.vala:1107+#: libbirdfont/DrawingTools.vala:1125 #, fuzzy msgid "Zoom in on background image" msgstr "Cortar imagem de fundo" -#: libbirdfont/DrawingTools.vala:1117+#: libbirdfont/DrawingTools.vala:1135 #, fuzzy msgid "Previous view" msgstr "Önceki görünüm" -#: libbirdfont/DrawingTools.vala:1123+#: libbirdfont/DrawingTools.vala:1141 #, fuzzy msgid "Next view" msgstr "Sonraki görünüm" -#: libbirdfont/DrawingTools.vala:1525+#: libbirdfont/DrawingTools.vala:1543 msgid "Set size for grid" msgstr "Definir o tamanho para a grelha"  #: libbirdfont/ExportSettings.vala:41 libbirdfont/ExportSettings.vala:185-#: libbirdfont/Menu.vala:327+#: libbirdfont/Menu.vala:329 msgid "Export Settings" msgstr "" @@ -578,13 +587,13 @@ msgstr "" msgid "Export" msgstr "Exportar" -#: libbirdfont/ExportTool.vala:209 libbirdfont/Menu.vala:64-#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:68+#: libbirdfont/ExportTool.vala:222 libbirdfont/Menu.vala:64+#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:69 #: libbirdfont/SaveDialog.vala:38 libbirdfont/SaveDialogListener.vala:29 msgid "Save" msgstr "Guardar" -#: libbirdfont/ExportTool.vala:419+#: libbirdfont/ExportTool.vala:432 msgid "Alphabet" msgstr "Alfabeto" @@ -636,7 +645,7 @@ msgstr "Abrir tipo de letra" msgid "Save font" msgstr "Guardar tipo de letra" -#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:490+#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:492 #: libbirdfont/SettingsDisplay.vala:225 libbirdfont/SettingsTab.vala:31 #: libbirdfont/SettingsTab.vala:159 msgid "Settings"@@ -647,39 +656,39 @@ msgstr "Definições" msgid "Themes" msgstr "Temas" -#: libbirdfont/Glyph.vala:550+#: libbirdfont/Glyph.vala:602 msgid "top margin" msgstr "" -#: libbirdfont/Glyph.vala:557+#: libbirdfont/Glyph.vala:609 msgid "top" msgstr "" -#: libbirdfont/Glyph.vala:564+#: libbirdfont/Glyph.vala:616 msgid "x-height" msgstr "" -#: libbirdfont/Glyph.vala:573+#: libbirdfont/Glyph.vala:625 msgid "baseline" msgstr "" -#: libbirdfont/Glyph.vala:580+#: libbirdfont/Glyph.vala:632 msgid "bottom" msgstr "" -#: libbirdfont/Glyph.vala:586+#: libbirdfont/Glyph.vala:638 msgid "bottom margin" msgstr "" -#: libbirdfont/Glyph.vala:592+#: libbirdfont/Glyph.vala:644 msgid "left" msgstr "" -#: libbirdfont/Glyph.vala:601+#: libbirdfont/Glyph.vala:653 msgid "right" msgstr "" -#: libbirdfont/Glyph.vala:2421+#: libbirdfont/Glyph.vala:2462 msgid "Guide" msgstr "Guia" @@ -692,6 +701,10 @@ msgstr "Izgarayı göster" msgid "Guides" msgstr "Guias" +#: libbirdfont/Help.vala:29+msgid "BirdFont is a font editor."+msgstr ""+ #: libbirdfont/HiddenTools.vala:33 #, fuzzy msgid "Zoom in"@@ -760,32 +773,38 @@ msgstr "para" msgid "Glyph" msgstr "Símbolo" -#: libbirdfont/KerningDisplay.vala:97 libbirdfont/KerningDisplay.vala:877+#: libbirdfont/KerningDisplay.vala:60+msgid ""+"Kerning is the process of adjusting the space between two letters. You can "+"cahnge the space between one letter and all other letters in the spacing tab."+msgstr ""++#: libbirdfont/KerningDisplay.vala:101 libbirdfont/KerningDisplay.vala:882 msgid "Kerning" msgstr "Espaçamento" -#: libbirdfont/KerningDisplay.vala:105+#: libbirdfont/KerningDisplay.vala:109 msgid "The current kerning class is malformed." msgstr "" -#: libbirdfont/KerningDisplay.vala:106+#: libbirdfont/KerningDisplay.vala:110 msgid "Add single characters separated by space and ranges on the form A-Z." msgstr "" -#: libbirdfont/KerningDisplay.vala:107+#: libbirdfont/KerningDisplay.vala:111 msgid "Type “space” to kern the space character and “divis” to kern -." msgstr "" -#: libbirdfont/KerningDisplay.vala:678 libbirdfont/OverviewTools.vala:78+#: libbirdfont/KerningDisplay.vala:683 libbirdfont/OverviewTools.vala:78 msgid "Unicode" msgstr "" -#: libbirdfont/KerningDisplay.vala:678+#: libbirdfont/KerningDisplay.vala:683 msgid "Insert" msgstr "Inserir" -#: libbirdfont/KerningDisplay.vala:877 libbirdfont/MainWindow.vala:235-#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:208+#: libbirdfont/KerningDisplay.vala:882 libbirdfont/MainWindow.vala:241+#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:231 msgid "Close" msgstr "Fechar" @@ -801,11 +820,11 @@ msgstr "" msgid "Kerning class" msgstr "" -#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:144+#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:166 #: libbirdfont/Ligatures.vala:118 libbirdfont/Ligatures.vala:141 #: libbirdfont/Ligatures.vala:164 libbirdfont/Ligatures.vala:196 #: libbirdfont/SpacingClass.vala:45 libbirdfont/SpacingTab.vala:232-#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:208+#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:231 #: libbirdfont/Theme.vala:687 msgid "Set" msgstr "Definir"@@ -870,7 +889,11 @@ msgstr "" msgid "Character Set" msgstr "" -#: libbirdfont/LayerLabel.vala:144+#: libbirdfont/LayerLabel.vala:101+msgid "Hide the layer."+msgstr ""++#: libbirdfont/LayerLabel.vala:166 msgid "Layer" msgstr "" @@ -912,7 +935,7 @@ msgid "Contextual Substitutions" msgstr ""  #: libbirdfont/LigatureList.vala:126 libbirdfont/LigatureList.vala:140-#: libbirdfont/Menu.vala:445+#: libbirdfont/Menu.vala:447 msgid "Ligatures" msgstr "" @@ -960,7 +983,7 @@ msgstr "" "É necessário uma versão mais antiga do Birdfont para abrir este tipo de " "letra." -#: libbirdfont/MainWindow.vala:235+#: libbirdfont/MainWindow.vala:241 msgid "Glyph sequence" msgstr "Sequência de símbolos" @@ -1030,8 +1053,8 @@ msgstr "Se_lecionar Todos os Caminhos" msgid "Move To Baseline" msgstr "" -#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:250-#: libbirdfont/OverView.vala:269 libbirdfont/OverviewTools.vala:154+#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:257+#: libbirdfont/OverView.vala:276 libbirdfont/OverviewTools.vala:154 msgid "Search" msgstr "" @@ -1109,109 +1132,113 @@ msgstr "Exportar Tipos de Letra" msgid "Export Glyph as SVG" msgstr "_Exportar glyph como SVG" -#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:303+#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:304 msgid "Import SVG file" msgstr "Importar ficheiro SVG" -#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:313 msgid "Import SVG folder" msgstr "Importar pasta SVG" -#: libbirdfont/Menu.vala:303 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:304 libbirdfont/Menu.vala:313 msgid "color" msgstr "" -#: libbirdfont/Menu.vala:320+#: libbirdfont/Menu.vala:322 #, fuzzy msgid "Import Background Image" msgstr "Selecione a imagem de fundo" -#: libbirdfont/Menu.vala:334 libbirdfont/Preview.vala:27+#: libbirdfont/Menu.vala:336 libbirdfont/Preview.vala:27 #, fuzzy msgid "Preview" msgstr "Önizleme" -#: libbirdfont/Menu.vala:342+#: libbirdfont/Menu.vala:344 #, fuzzy msgid "Tab" msgstr "_Separador" -#: libbirdfont/Menu.vala:348+#: libbirdfont/Menu.vala:350 #, fuzzy msgid "Next Tab" msgstr "Separador Segui_nte" -#: libbirdfont/Menu.vala:355+#: libbirdfont/Menu.vala:357 #, fuzzy msgid "Previous Tab" msgstr "Separador An_terior" -#: libbirdfont/Menu.vala:362+#: libbirdfont/Menu.vala:364 #, fuzzy msgid "Close Tab" msgstr "_Fechar Separador" -#: libbirdfont/Menu.vala:369+#: libbirdfont/Menu.vala:371 #, fuzzy msgid "Close All Tabs" msgstr "Fechar _Todos os Separadores" -#: libbirdfont/Menu.vala:377+#: libbirdfont/Menu.vala:379 msgid "Spacing and Kerning" msgstr "" -#: libbirdfont/Menu.vala:383+#: libbirdfont/Menu.vala:385 msgid "Show Spacing Tab" msgstr "" -#: libbirdfont/Menu.vala:390+#: libbirdfont/Menu.vala:392 msgid "Show Kerning Tab" msgstr "" -#: libbirdfont/Menu.vala:397+#: libbirdfont/Menu.vala:399 msgid "List Kerning Pairs" msgstr "" -#: libbirdfont/Menu.vala:404 libbirdfont/SpacingClassTab.vala:80+#: libbirdfont/Menu.vala:406 libbirdfont/SpacingClassTab.vala:80 msgid "Spacing Classes" msgstr "" -#: libbirdfont/Menu.vala:411+#: libbirdfont/Menu.vala:413 msgid "Select Next Kerning Pair" msgstr "" -#: libbirdfont/Menu.vala:420+#: libbirdfont/Menu.vala:422 msgid "Select Previous Kerning Pair" msgstr "" -#: libbirdfont/Menu.vala:429+#: libbirdfont/Menu.vala:431 msgid "Load Kerning Strings" msgstr "" -#: libbirdfont/Menu.vala:436+#: libbirdfont/Menu.vala:438 msgid "Reload Kerning Strings" msgstr "" -#: libbirdfont/Menu.vala:451+#: libbirdfont/Menu.vala:453 msgid "Show Ligatures" msgstr "" -#: libbirdfont/Menu.vala:458+#: libbirdfont/Menu.vala:460 msgid "Add Ligature" msgstr "" -#: libbirdfont/Menu.vala:467+#: libbirdfont/Menu.vala:469 msgid "Git" msgstr "" -#: libbirdfont/Menu.vala:473+#: libbirdfont/Menu.vala:475 msgid "Save As .bfp" msgstr "Guardar Como .bfp" -#: libbirdfont/Menu.vala:482 libbirdfont/OverView.vala:471+#: libbirdfont/Menu.vala:484 libbirdfont/OverView.vala:478 msgid "Overview" msgstr "Resumo" +#: libbirdfont/Menu.vala:513+msgid "Help"+msgstr ""+ #: libbirdfont/MenuItem.vala:82 #, fuzzy msgid "UP"@@ -1296,15 +1323,11 @@ msgstr "" msgid "Swashes" msgstr "" -#: libbirdfont/OverView.vala:250 libbirdfont/OverView.vala:269+#: libbirdfont/OverView.vala:257 libbirdfont/OverView.vala:276 msgid "Filter" msgstr "" -#: libbirdfont/OverView.vala:673-msgid "No glyphs in this view."-msgstr ""--#: libbirdfont/OverView.vala:1484+#: libbirdfont/OverView.vala:1498 msgid "See also:" msgstr "Ayrıca bakınız:" @@ -1482,11 +1505,6 @@ msgstr "" msgid "Right" msgstr "" -#: libbirdfont/SvgParser.vala:62 libbirdfont/SvgParser.vala:121-#, fuzzy-msgid "Import"-msgstr "İçe Aktar"- #: libbirdfont/Theme.vala:421 msgid "Canvas Background" msgstr ""@@ -1773,7 +1791,7 @@ msgstr "Personalizado" msgid "Color" msgstr "Cor" -#: libbirdfont/ToolItem.vala:44+#: libbirdfont/ToolItem.vala:66 msgid "Shift" msgstr "" @@ -1818,6 +1836,10 @@ msgstr "" msgid "Writing" msgstr "Yazılıyor" +#, fuzzy+#~ msgid "Import"+#~ msgstr "İçe Aktar"+ #~ msgid "Unique identifier" #~ msgstr "Identificador único" diff --git a/po/pt_BR.po b/po/pt_BR.poindex a7dbb59..384d794 100644--- a/po/pt_BR.po+++ b/po/pt_BR.po@@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n"-"POT-Creation-Date: 2015-12-22 20:35+0100\n"+"POT-Creation-Date: 2016-01-06 12:06+0100\n" "PO-Revision-Date: 2015-09-01 22:40+0000\n" "Last-Translator: Anonymous Pootle User\n" "Language-Team: LANGUAGE <LL@li.org>\n"@@ -105,16 +105,16 @@ msgstr "Arquivos" msgid "Parts" msgstr "Partes" -#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2421+#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2462 #: libbirdfont/LigatureList.vala:106 libbirdfont/OtfFeatureTable.vala:181 msgid "Add" msgstr "Adicionar" -#: libbirdfont/BackgroundTools.vala:122+#: libbirdfont/BackgroundTools.vala:123 msgid "Select Glyph" msgstr "Selecionar Glifo" -#: libbirdfont/BackgroundTools.vala:231 libbirdfont/LoadCallback.vala:102+#: libbirdfont/BackgroundTools.vala:233 libbirdfont/LoadCallback.vala:102 #: libbirdfont/Menu.vala:50 msgid "Open" msgstr "Abrir"@@ -188,18 +188,18 @@ msgid "Thai" msgstr "Tailandês"  #. / All lower case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:420+#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:433 msgid "a b c d e f g h i j k l m n o p q r s t u v w x y z" msgstr "a b c d e f g h i j k l m n o p q r s t u v w x y z"  #. / All upper case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:421+#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:434 msgid "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z" msgstr "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z"  #: libbirdfont/DescriptionDisplay.vala:66 #: libbirdfont/DescriptionDisplay.vala:277 libbirdfont/ExportSettings.vala:133-#: libbirdfont/Menu.vala:497 libbirdfont/TableLayout.vala:203+#: libbirdfont/Menu.vala:499 libbirdfont/TableLayout.vala:203 msgid "Name and Description" msgstr "Nome e Descrição" @@ -237,7 +237,7 @@ msgid "Unique Identifier" msgstr "Identificador Exclusivo"  #: libbirdfont/DescriptionDisplay.vala:150 libbirdfont/ImportUtils.vala:161-#: libbirdfont/Menu.vala:504 libbirdfont/Menu.vala:506+#: libbirdfont/Menu.vala:506 libbirdfont/Menu.vala:508 #: libbirdfont/VersionList.vala:265 msgid "Version" msgstr "Versão"@@ -322,213 +322,222 @@ msgstr "Grade e Linhas de Guia" msgid "Grid Size" msgstr "Tamanho da Grade" -#: libbirdfont/DrawingTools.vala:194+#: libbirdfont/DrawingTools.vala:195 msgid "Move canvas" msgstr "Mover telas" -#: libbirdfont/DrawingTools.vala:202+#: libbirdfont/DrawingTools.vala:196+msgid "Press space and click to move the canvas."+msgstr ""++#: libbirdfont/DrawingTools.vala:204 msgid "Delete" msgstr "Apagar" -#: libbirdfont/DrawingTools.vala:209+#: libbirdfont/DrawingTools.vala:211 msgid "Select all points or paths" msgstr "Selecionar todos os pontos ou caminhos" -#: libbirdfont/DrawingTools.vala:225 libbirdfont/Menu.vala:99+#: libbirdfont/DrawingTools.vala:227 libbirdfont/Menu.vala:99 msgid "Undo" msgstr "Desfazer" -#: libbirdfont/DrawingTools.vala:232+#: libbirdfont/DrawingTools.vala:234 msgid "Insert new points on path" msgstr "Inserir novos pontos ao caminho" -#: libbirdfont/DrawingTools.vala:241+#: libbirdfont/DrawingTools.vala:244 msgid "Create quadratic Bézier curves" msgstr "Criar curvas de Bézier quadráticas" -#: libbirdfont/DrawingTools.vala:250+#: libbirdfont/DrawingTools.vala:245+msgid ""+"All control points will be converted to quadratic points in the TTF format."+msgstr ""++#: libbirdfont/DrawingTools.vala:255 msgid "Create cubic Bézier curves" msgstr "Criar curvas de Bézier cúbicas" -#: libbirdfont/DrawingTools.vala:259+#: libbirdfont/DrawingTools.vala:264 msgid "Quadratic path with two line handles" msgstr "Caminho quadrático com duas alças de controle" -#: libbirdfont/DrawingTools.vala:268+#: libbirdfont/DrawingTools.vala:273 msgid "Convert selected points" msgstr "Converter pontos selecionados" -#: libbirdfont/DrawingTools.vala:279+#: libbirdfont/DrawingTools.vala:284 msgid "X coordinate" msgstr "Coordenada X" -#: libbirdfont/DrawingTools.vala:323+#: libbirdfont/DrawingTools.vala:328 msgid "Y coordinate" msgstr "Coordenada Y" -#: libbirdfont/DrawingTools.vala:366+#: libbirdfont/DrawingTools.vala:371 msgid "Rotation" msgstr "Rotação" -#: libbirdfont/DrawingTools.vala:405+#: libbirdfont/DrawingTools.vala:410 msgid "Width" msgstr "Largura" -#: libbirdfont/DrawingTools.vala:430+#: libbirdfont/DrawingTools.vala:435 msgid "Height" msgstr "Altura" -#: libbirdfont/DrawingTools.vala:473+#: libbirdfont/DrawingTools.vala:478 msgid "Tie curve handles for the selected edit point" msgstr "Vincular alças de ajuste para o ponto selecionado" -#: libbirdfont/DrawingTools.vala:524+#: libbirdfont/DrawingTools.vala:529 msgid "Symmetrical handles" msgstr "Alavancas simétricas" -#: libbirdfont/DrawingTools.vala:554+#: libbirdfont/DrawingTools.vala:559 msgid "Convert segment to line." msgstr "Converter segmento em linha." -#: libbirdfont/DrawingTools.vala:562+#: libbirdfont/DrawingTools.vala:567 msgid "Create counter from outline" msgstr "Inverter caminho" -#: libbirdfont/DrawingTools.vala:565+#: libbirdfont/DrawingTools.vala:570 msgid "Scale object to font top/baseline" msgstr "" -#: libbirdfont/DrawingTools.vala:574+#: libbirdfont/DrawingTools.vala:579 msgid "Close path" msgstr "Fechar caminho" -#: libbirdfont/DrawingTools.vala:596+#: libbirdfont/DrawingTools.vala:601 #, fuzzy msgid "Move to path to the bottom of the layer" msgstr "Mover para caminho para camada inferior" -#: libbirdfont/DrawingTools.vala:610+#: libbirdfont/DrawingTools.vala:615 msgid "Flip path vertically" msgstr "Inverter caminho verticalmente" -#: libbirdfont/DrawingTools.vala:618+#: libbirdfont/DrawingTools.vala:623 msgid "Flip path horizontally" msgstr "Inverter caminho horizontalmente" -#: libbirdfont/DrawingTools.vala:627+#: libbirdfont/DrawingTools.vala:632 msgid "Set size for background image" msgstr "Definir tamanho da imagem de fundo" -#: libbirdfont/DrawingTools.vala:665+#: libbirdfont/DrawingTools.vala:670 msgid "Show/hide background image" msgstr "Exibir/ocultar a imagem de fundo" -#: libbirdfont/DrawingTools.vala:676+#: libbirdfont/DrawingTools.vala:681 msgid "Insert a new background image" msgstr "Inserir nova imagem de fundo" -#: libbirdfont/DrawingTools.vala:690 libbirdfont/ThemeTab.vala:151+#: libbirdfont/DrawingTools.vala:695 libbirdfont/ThemeTab.vala:151 msgid "High contrast" msgstr "Alto contraste" -#: libbirdfont/DrawingTools.vala:704+#: libbirdfont/DrawingTools.vala:709 msgid "Set background threshold" msgstr "Definir limite de fundo" -#: libbirdfont/DrawingTools.vala:723+#: libbirdfont/DrawingTools.vala:728 msgid "Amount of autotrace details" msgstr "Quantidade de detalhes do rastreio automático" -#: libbirdfont/DrawingTools.vala:742+#: libbirdfont/DrawingTools.vala:747 msgid "Autotrace simplification" msgstr "Simplificação do rastreio automático" -#: libbirdfont/DrawingTools.vala:752+#: libbirdfont/DrawingTools.vala:757 msgid "Autotrace background image" msgstr "Rastreio automático da imagem de fundo" -#: libbirdfont/DrawingTools.vala:760+#: libbirdfont/DrawingTools.vala:765 msgid "Delete background image" msgstr "Apagar imagem de fundo" -#: libbirdfont/DrawingTools.vala:767+#: libbirdfont/DrawingTools.vala:772 msgid "Add layer" msgstr "Adicionar camada" -#: libbirdfont/DrawingTools.vala:777+#: libbirdfont/DrawingTools.vala:782 msgid "Show layers" msgstr "Mostrar camadas" -#: libbirdfont/DrawingTools.vala:787+#: libbirdfont/DrawingTools.vala:792 msgid "Apply stroke" msgstr "Aplicar traço" -#: libbirdfont/DrawingTools.vala:821 libbirdfont/SettingsTab.vala:34+#: libbirdfont/DrawingTools.vala:826 libbirdfont/SettingsTab.vala:34 msgid "Stroke width" msgstr "Espessura do contorno" -#: libbirdfont/DrawingTools.vala:863+#: libbirdfont/DrawingTools.vala:872 msgid "Create outline form stroke" msgstr "Criar contorno a partir de traço" -#: libbirdfont/DrawingTools.vala:872+#: libbirdfont/DrawingTools.vala:881 msgid "Butt line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:896+#: libbirdfont/DrawingTools.vala:908 msgid "Round line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:921+#: libbirdfont/DrawingTools.vala:936 msgid "Square line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:990+#: libbirdfont/DrawingTools.vala:1008 msgid "Show guidelines" msgstr "Exibir guias" -#: libbirdfont/DrawingTools.vala:1002+#: libbirdfont/DrawingTools.vala:1020 msgid "Show more guidelines" msgstr "Mostrar mais linhas guia" -#: libbirdfont/DrawingTools.vala:1018+#: libbirdfont/DrawingTools.vala:1036 msgid "Show guidelines at top and bottom margin" msgstr "Exibir guias de margem superior e inferior" -#: libbirdfont/DrawingTools.vala:1042+#: libbirdfont/DrawingTools.vala:1060 msgid "Lock guides and grid" msgstr "" -#: libbirdfont/DrawingTools.vala:1084+#: libbirdfont/DrawingTools.vala:1102 msgid "Zoom Out More" msgstr "Diminuir Mais" -#: libbirdfont/DrawingTools.vala:1093+#: libbirdfont/DrawingTools.vala:1111 msgid "Show full glyph" msgstr "Exibir caractere completo" -#: libbirdfont/DrawingTools.vala:1100+#: libbirdfont/DrawingTools.vala:1118 msgid "Fit in view" msgstr "Ajustar na visualização" -#: libbirdfont/DrawingTools.vala:1107+#: libbirdfont/DrawingTools.vala:1125 msgid "Zoom in on background image" msgstr "Ampliar a imagem de fundo" -#: libbirdfont/DrawingTools.vala:1117+#: libbirdfont/DrawingTools.vala:1135 msgid "Previous view" msgstr "Visualização anterior" -#: libbirdfont/DrawingTools.vala:1123+#: libbirdfont/DrawingTools.vala:1141 msgid "Next view" msgstr "Próxima visualização" -#: libbirdfont/DrawingTools.vala:1525+#: libbirdfont/DrawingTools.vala:1543 msgid "Set size for grid" msgstr "Definir tamanho da grade"  #: libbirdfont/ExportSettings.vala:41 libbirdfont/ExportSettings.vala:185-#: libbirdfont/Menu.vala:327+#: libbirdfont/Menu.vala:329 msgid "Export Settings" msgstr "Exportar Ajustes" @@ -552,13 +561,13 @@ msgstr "Formatos" msgid "Export" msgstr "Exportar" -#: libbirdfont/ExportTool.vala:209 libbirdfont/Menu.vala:64-#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:68+#: libbirdfont/ExportTool.vala:222 libbirdfont/Menu.vala:64+#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:69 #: libbirdfont/SaveDialog.vala:38 libbirdfont/SaveDialogListener.vala:29 msgid "Save" msgstr "Salvar" -#: libbirdfont/ExportTool.vala:419+#: libbirdfont/ExportTool.vala:432 msgid "Alphabet" msgstr "" @@ -608,7 +617,7 @@ msgstr "Abrir Fonte" msgid "Save font" msgstr "Salvar Fonte" -#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:490+#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:492 #: libbirdfont/SettingsDisplay.vala:225 libbirdfont/SettingsTab.vala:31 #: libbirdfont/SettingsTab.vala:159 msgid "Settings"@@ -619,39 +628,39 @@ msgstr "Ajustes" msgid "Themes" msgstr "Temas" -#: libbirdfont/Glyph.vala:550+#: libbirdfont/Glyph.vala:602 msgid "top margin" msgstr "" -#: libbirdfont/Glyph.vala:557+#: libbirdfont/Glyph.vala:609 msgid "top" msgstr "" -#: libbirdfont/Glyph.vala:564+#: libbirdfont/Glyph.vala:616 msgid "x-height" msgstr "" -#: libbirdfont/Glyph.vala:573+#: libbirdfont/Glyph.vala:625 msgid "baseline" msgstr "" -#: libbirdfont/Glyph.vala:580+#: libbirdfont/Glyph.vala:632 msgid "bottom" msgstr "" -#: libbirdfont/Glyph.vala:586+#: libbirdfont/Glyph.vala:638 msgid "bottom margin" msgstr "" -#: libbirdfont/Glyph.vala:592+#: libbirdfont/Glyph.vala:644 msgid "left" msgstr "" -#: libbirdfont/Glyph.vala:601+#: libbirdfont/Glyph.vala:653 msgid "right" msgstr "" -#: libbirdfont/Glyph.vala:2421+#: libbirdfont/Glyph.vala:2462 msgid "Guide" msgstr "Guia" @@ -663,6 +672,10 @@ msgstr "Exibir grade" msgid "Guides" msgstr "Guias" +#: libbirdfont/Help.vala:29+msgid "BirdFont is a font editor."+msgstr ""+ #: libbirdfont/HiddenTools.vala:33 msgid "Zoom in" msgstr "Aumentar zoom"@@ -728,35 +741,41 @@ msgstr "para" msgid "Glyph" msgstr "Glifo" -#: libbirdfont/KerningDisplay.vala:97 libbirdfont/KerningDisplay.vala:877+#: libbirdfont/KerningDisplay.vala:60+msgid ""+"Kerning is the process of adjusting the space between two letters. You can "+"cahnge the space between one letter and all other letters in the spacing tab."+msgstr ""++#: libbirdfont/KerningDisplay.vala:101 libbirdfont/KerningDisplay.vala:882 msgid "Kerning" msgstr "Espacejamento" -#: libbirdfont/KerningDisplay.vala:105+#: libbirdfont/KerningDisplay.vala:109 msgid "The current kerning class is malformed." msgstr "A classe atual de espacejamento está irregular." -#: libbirdfont/KerningDisplay.vala:106+#: libbirdfont/KerningDisplay.vala:110 msgid "Add single characters separated by space and ranges on the form A-Z." msgstr "" "Adicionar caracteres, separados por espaços e variedades no formato A-Z." -#: libbirdfont/KerningDisplay.vala:107+#: libbirdfont/KerningDisplay.vala:111 msgid "Type “space” to kern the space character and “divis” to kern -." msgstr "" "Digite \"space\" para espacejamento no caractere espaço e \"divis\" para " "espaçar -." -#: libbirdfont/KerningDisplay.vala:678 libbirdfont/OverviewTools.vala:78+#: libbirdfont/KerningDisplay.vala:683 libbirdfont/OverviewTools.vala:78 msgid "Unicode" msgstr "Unicode" -#: libbirdfont/KerningDisplay.vala:678+#: libbirdfont/KerningDisplay.vala:683 msgid "Insert" msgstr "Inserir" -#: libbirdfont/KerningDisplay.vala:877 libbirdfont/MainWindow.vala:235-#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:208+#: libbirdfont/KerningDisplay.vala:882 libbirdfont/MainWindow.vala:241+#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:231 msgid "Close" msgstr "Fechar" @@ -772,11 +791,11 @@ msgstr "" msgid "Kerning class" msgstr "Classe de espacejamento" -#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:144+#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:166 #: libbirdfont/Ligatures.vala:118 libbirdfont/Ligatures.vala:141 #: libbirdfont/Ligatures.vala:164 libbirdfont/Ligatures.vala:196 #: libbirdfont/SpacingClass.vala:45 libbirdfont/SpacingTab.vala:232-#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:208+#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:231 #: libbirdfont/Theme.vala:687 msgid "Set" msgstr "Definir"@@ -841,7 +860,11 @@ msgstr "Conjuntos de Caracteres" msgid "Character Set" msgstr "Conjunto de caracteres" -#: libbirdfont/LayerLabel.vala:144+#: libbirdfont/LayerLabel.vala:101+msgid "Hide the layer."+msgstr ""++#: libbirdfont/LayerLabel.vala:166 msgid "Layer" msgstr "" @@ -882,7 +905,7 @@ msgid "Contextual Substitutions" msgstr "Substituições Contextual"  #: libbirdfont/LigatureList.vala:126 libbirdfont/LigatureList.vala:140-#: libbirdfont/Menu.vala:445+#: libbirdfont/Menu.vala:447 msgid "Ligatures" msgstr "Ligaduras" @@ -926,7 +949,7 @@ msgstr "" msgid "You need an older version of Birdfont to open it." msgstr "" -#: libbirdfont/MainWindow.vala:235+#: libbirdfont/MainWindow.vala:241 msgid "Glyph sequence" msgstr "Sequência de caracteres" @@ -987,8 +1010,8 @@ msgstr "Selecionar Todos os Caminhos" msgid "Move To Baseline" msgstr "Mover para Linha de Base" -#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:250-#: libbirdfont/OverView.vala:269 libbirdfont/OverviewTools.vala:154+#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:257+#: libbirdfont/OverView.vala:276 libbirdfont/OverviewTools.vala:154 msgid "Search" msgstr "Pesquisar" @@ -1061,103 +1084,107 @@ msgstr "Exportar fontes" msgid "Export Glyph as SVG" msgstr "Exportar Glifo Como SVG" -#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:303+#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:304 msgid "Import SVG file" msgstr "Exportar arquivo SVG" -#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:313 #, fuzzy msgid "Import SVG folder" msgstr "Exportar arquivo SVG" -#: libbirdfont/Menu.vala:303 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:304 libbirdfont/Menu.vala:313 msgid "color" msgstr "" -#: libbirdfont/Menu.vala:320+#: libbirdfont/Menu.vala:322 msgid "Import Background Image" msgstr "Importar Imagem de Fundo" -#: libbirdfont/Menu.vala:334 libbirdfont/Preview.vala:27+#: libbirdfont/Menu.vala:336 libbirdfont/Preview.vala:27 msgid "Preview" msgstr "Pré-visualização" -#: libbirdfont/Menu.vala:342+#: libbirdfont/Menu.vala:344 msgid "Tab" msgstr "Aba" -#: libbirdfont/Menu.vala:348+#: libbirdfont/Menu.vala:350 msgid "Next Tab" msgstr "Aba Seguinte" -#: libbirdfont/Menu.vala:355+#: libbirdfont/Menu.vala:357 msgid "Previous Tab" msgstr "Aba Anterior" -#: libbirdfont/Menu.vala:362+#: libbirdfont/Menu.vala:364 msgid "Close Tab" msgstr "Fechar Aba" -#: libbirdfont/Menu.vala:369+#: libbirdfont/Menu.vala:371 msgid "Close All Tabs" msgstr "Fechar Todas as Abas" -#: libbirdfont/Menu.vala:377+#: libbirdfont/Menu.vala:379 msgid "Spacing and Kerning" msgstr "Espaçamento e Espacejamento" -#: libbirdfont/Menu.vala:383+#: libbirdfont/Menu.vala:385 msgid "Show Spacing Tab" msgstr "Mostrar Espaçamento da Aba" -#: libbirdfont/Menu.vala:390+#: libbirdfont/Menu.vala:392 msgid "Show Kerning Tab" msgstr "Mostrar Espacejamento da Aba" -#: libbirdfont/Menu.vala:397+#: libbirdfont/Menu.vala:399 msgid "List Kerning Pairs" msgstr "Listar Pares de Espacejamento" -#: libbirdfont/Menu.vala:404 libbirdfont/SpacingClassTab.vala:80+#: libbirdfont/Menu.vala:406 libbirdfont/SpacingClassTab.vala:80 msgid "Spacing Classes" msgstr "Classes de Espaçamento" -#: libbirdfont/Menu.vala:411+#: libbirdfont/Menu.vala:413 msgid "Select Next Kerning Pair" msgstr "Selecionar Par de Espacejamento Seguinte" -#: libbirdfont/Menu.vala:420+#: libbirdfont/Menu.vala:422 msgid "Select Previous Kerning Pair" msgstr "Selecionar Par de Espacejamento Anterior" -#: libbirdfont/Menu.vala:429+#: libbirdfont/Menu.vala:431 msgid "Load Kerning Strings" msgstr "Carregar Strings de Espacejamento" -#: libbirdfont/Menu.vala:436+#: libbirdfont/Menu.vala:438 msgid "Reload Kerning Strings" msgstr "Recarregar Strings de Espacejamento" -#: libbirdfont/Menu.vala:451+#: libbirdfont/Menu.vala:453 msgid "Show Ligatures" msgstr "Mostrar Ligaduras" -#: libbirdfont/Menu.vala:458+#: libbirdfont/Menu.vala:460 msgid "Add Ligature" msgstr "Adicionar Ligadura" -#: libbirdfont/Menu.vala:467+#: libbirdfont/Menu.vala:469 msgid "Git" msgstr "Git" -#: libbirdfont/Menu.vala:473+#: libbirdfont/Menu.vala:475 msgid "Save As .bfp" msgstr "Salvar Como .bfp" -#: libbirdfont/Menu.vala:482 libbirdfont/OverView.vala:471+#: libbirdfont/Menu.vala:484 libbirdfont/OverView.vala:478 msgid "Overview" msgstr "Resumo" +#: libbirdfont/Menu.vala:513+msgid "Help"+msgstr ""+ #: libbirdfont/MenuItem.vala:82 msgid "UP" msgstr "SUPERIOR"@@ -1239,15 +1266,11 @@ msgstr "" msgid "Swashes" msgstr "" -#: libbirdfont/OverView.vala:250 libbirdfont/OverView.vala:269+#: libbirdfont/OverView.vala:257 libbirdfont/OverView.vala:276 msgid "Filter" msgstr "Filtrar" -#: libbirdfont/OverView.vala:673-msgid "No glyphs in this view."-msgstr "Nenhum caractere para exibição."--#: libbirdfont/OverView.vala:1484+#: libbirdfont/OverView.vala:1498 msgid "See also:" msgstr "Veja também:" @@ -1424,10 +1447,6 @@ msgstr "Esquerda" msgid "Right" msgstr "Direita" -#: libbirdfont/SvgParser.vala:62 libbirdfont/SvgParser.vala:121-msgid "Import"-msgstr "Importar"- #: libbirdfont/Theme.vala:421 msgid "Canvas Background" msgstr ""@@ -1718,7 +1737,7 @@ msgstr "" msgid "Color" msgstr "Cores" -#: libbirdfont/ToolItem.vala:44+#: libbirdfont/ToolItem.vala:66 msgid "Shift" msgstr "" @@ -1762,6 +1781,12 @@ msgstr "Formato de arquivo desconhecido." msgid "Writing" msgstr "Gravando" +#~ msgid "No glyphs in this view."+#~ msgstr "Nenhum caractere para exibição."++#~ msgid "Import"+#~ msgstr "Importar"+ #~ msgid "Full name (name and style)" #~ msgstr "Nome completo (nome e estilo)" diff --git a/po/ru.po b/po/ru.poindex 849f30f..29dbe22 100644--- a/po/ru.po+++ b/po/ru.po@@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n"-"POT-Creation-Date: 2015-12-22 20:35+0100\n"+"POT-Creation-Date: 2016-01-06 12:06+0100\n" "PO-Revision-Date: 2015-12-19 11:24+0000\n" "Last-Translator: Anonymous Pootle User\n" "Language-Team: LANGUAGE <LL@li.org>\n"@@ -108,16 +108,16 @@ msgstr "Файлы" msgid "Parts" msgstr "Части" -#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2421+#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2462 #: libbirdfont/LigatureList.vala:106 libbirdfont/OtfFeatureTable.vala:181 msgid "Add" msgstr "Добавить" -#: libbirdfont/BackgroundTools.vala:122+#: libbirdfont/BackgroundTools.vala:123 msgid "Select Glyph" msgstr "выбрать глифф" -#: libbirdfont/BackgroundTools.vala:231 libbirdfont/LoadCallback.vala:102+#: libbirdfont/BackgroundTools.vala:233 libbirdfont/LoadCallback.vala:102 #: libbirdfont/Menu.vala:50 msgid "Open" msgstr "Открыть"@@ -192,18 +192,18 @@ msgid "Thai" msgstr "Тайский"  #. / All lower case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:420+#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:433 msgid "a b c d e f g h i j k l m n o p q r s t u v w x y z" msgstr "а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я"  #. / All upper case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:421+#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:434 msgid "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z" msgstr "А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я"  #: libbirdfont/DescriptionDisplay.vala:66 #: libbirdfont/DescriptionDisplay.vala:277 libbirdfont/ExportSettings.vala:133-#: libbirdfont/Menu.vala:497 libbirdfont/TableLayout.vala:203+#: libbirdfont/Menu.vala:499 libbirdfont/TableLayout.vala:203 msgid "Name and Description" msgstr "Название и описание" @@ -241,7 +241,7 @@ msgid "Unique Identifier" msgstr "Уникальный идентификатор"  #: libbirdfont/DescriptionDisplay.vala:150 libbirdfont/ImportUtils.vala:161-#: libbirdfont/Menu.vala:504 libbirdfont/Menu.vala:506+#: libbirdfont/Menu.vala:506 libbirdfont/Menu.vala:508 #: libbirdfont/VersionList.vala:265 msgid "Version" msgstr "Версия"@@ -328,217 +328,226 @@ msgstr "Направляющие Линии" msgid "Grid Size" msgstr "Размер сетки" -#: libbirdfont/DrawingTools.vala:194+#: libbirdfont/DrawingTools.vala:195 msgid "Move canvas" msgstr "Перемещение холста" -#: libbirdfont/DrawingTools.vala:202+#: libbirdfont/DrawingTools.vala:196+msgid "Press space and click to move the canvas."+msgstr ""++#: libbirdfont/DrawingTools.vala:204 msgid "Delete" msgstr "Удалить" -#: libbirdfont/DrawingTools.vala:209+#: libbirdfont/DrawingTools.vala:211 msgid "Select all points or paths" msgstr "Выбрать все точки или пути" -#: libbirdfont/DrawingTools.vala:225 libbirdfont/Menu.vala:99+#: libbirdfont/DrawingTools.vala:227 libbirdfont/Menu.vala:99 msgid "Undo" msgstr "Отмена" -#: libbirdfont/DrawingTools.vala:232+#: libbirdfont/DrawingTools.vala:234 #, fuzzy msgid "Insert new points on path" msgstr "Вставить новые точки на путь" -#: libbirdfont/DrawingTools.vala:241+#: libbirdfont/DrawingTools.vala:244 msgid "Create quadratic Bézier curves" msgstr "Создать квадратную кривую Безье" -#: libbirdfont/DrawingTools.vala:250+#: libbirdfont/DrawingTools.vala:245+msgid ""+"All control points will be converted to quadratic points in the TTF format."+msgstr ""++#: libbirdfont/DrawingTools.vala:255 msgid "Create cubic Bézier curves" msgstr "Создать кубическую кривую Безье" -#: libbirdfont/DrawingTools.vala:259+#: libbirdfont/DrawingTools.vala:264 msgid "Quadratic path with two line handles" msgstr "Путь с двумя управляющими рычагами" -#: libbirdfont/DrawingTools.vala:268+#: libbirdfont/DrawingTools.vala:273 msgid "Convert selected points" msgstr "Преобразовать выбранные точки" -#: libbirdfont/DrawingTools.vala:279+#: libbirdfont/DrawingTools.vala:284 msgid "X coordinate" msgstr "Координата по X" -#: libbirdfont/DrawingTools.vala:323+#: libbirdfont/DrawingTools.vala:328 msgid "Y coordinate" msgstr "Координата по Y" -#: libbirdfont/DrawingTools.vala:366+#: libbirdfont/DrawingTools.vala:371 msgid "Rotation" msgstr "Вращение" -#: libbirdfont/DrawingTools.vala:405+#: libbirdfont/DrawingTools.vala:410 msgid "Width" msgstr "Ширина" -#: libbirdfont/DrawingTools.vala:430+#: libbirdfont/DrawingTools.vala:435 msgid "Height" msgstr "Высота" -#: libbirdfont/DrawingTools.vala:473+#: libbirdfont/DrawingTools.vala:478 msgid "Tie curve handles for the selected edit point" msgstr "Рычаги управления узла" -#: libbirdfont/DrawingTools.vala:524+#: libbirdfont/DrawingTools.vala:529 msgid "Symmetrical handles" msgstr "Симметричные рычаги" -#: libbirdfont/DrawingTools.vala:554+#: libbirdfont/DrawingTools.vala:559 msgid "Convert segment to line." msgstr "Конвертировать сегмент в линию" -#: libbirdfont/DrawingTools.vala:562+#: libbirdfont/DrawingTools.vala:567 msgid "Create counter from outline" msgstr "Создать контур из линии" -#: libbirdfont/DrawingTools.vala:565+#: libbirdfont/DrawingTools.vala:570 msgid "Scale object to font top/baseline" msgstr "" -#: libbirdfont/DrawingTools.vala:574+#: libbirdfont/DrawingTools.vala:579 #, fuzzy msgid "Close path" msgstr "_Замкнуть контур" -#: libbirdfont/DrawingTools.vala:596+#: libbirdfont/DrawingTools.vala:601 #, fuzzy msgid "Move to path to the bottom of the layer" msgstr "Переместить контур на слой ниже" -#: libbirdfont/DrawingTools.vala:610+#: libbirdfont/DrawingTools.vala:615 msgid "Flip path vertically" msgstr "Отразить путь по вертикали" -#: libbirdfont/DrawingTools.vala:618+#: libbirdfont/DrawingTools.vala:623 msgid "Flip path horizontally" msgstr "Отразить путь по горизонтали" -#: libbirdfont/DrawingTools.vala:627+#: libbirdfont/DrawingTools.vala:632 msgid "Set size for background image" msgstr "Установить размер фонового изображения" -#: libbirdfont/DrawingTools.vala:665+#: libbirdfont/DrawingTools.vala:670 msgid "Show/hide background image" msgstr "Показать/Спрятать фоновое изображение" -#: libbirdfont/DrawingTools.vala:676+#: libbirdfont/DrawingTools.vala:681 msgid "Insert a new background image" msgstr "Вставить новое фоновое изображение"  # Высокая контрастность is too long, maybe contrast “Contrast style” can work as a replacement.-#: libbirdfont/DrawingTools.vala:690 libbirdfont/ThemeTab.vala:151+#: libbirdfont/DrawingTools.vala:695 libbirdfont/ThemeTab.vala:151 msgid "High contrast" msgstr "Контрастный стиль" -#: libbirdfont/DrawingTools.vala:704+#: libbirdfont/DrawingTools.vala:709 msgid "Set background threshold" msgstr "Установить порог фона" -#: libbirdfont/DrawingTools.vala:723+#: libbirdfont/DrawingTools.vala:728 msgid "Amount of autotrace details" msgstr "Детализация автотрассировки" -#: libbirdfont/DrawingTools.vala:742+#: libbirdfont/DrawingTools.vala:747 msgid "Autotrace simplification" msgstr "Упрощение результата автотрассировки" -#: libbirdfont/DrawingTools.vala:752+#: libbirdfont/DrawingTools.vala:757 msgid "Autotrace background image" msgstr "Автотрасcировка фонового изображения" -#: libbirdfont/DrawingTools.vala:760+#: libbirdfont/DrawingTools.vala:765 msgid "Delete background image" msgstr "Удалить фоновую картинку" -#: libbirdfont/DrawingTools.vala:767+#: libbirdfont/DrawingTools.vala:772 msgid "Add layer" msgstr "Добавить слой" -#: libbirdfont/DrawingTools.vala:777+#: libbirdfont/DrawingTools.vala:782 msgid "Show layers" msgstr "Показать слои" -#: libbirdfont/DrawingTools.vala:787+#: libbirdfont/DrawingTools.vala:792 msgid "Apply stroke" msgstr "Применить" -#: libbirdfont/DrawingTools.vala:821 libbirdfont/SettingsTab.vala:34+#: libbirdfont/DrawingTools.vala:826 libbirdfont/SettingsTab.vala:34 msgid "Stroke width" msgstr "Толщина контура" -#: libbirdfont/DrawingTools.vala:863+#: libbirdfont/DrawingTools.vala:872 msgid "Create outline form stroke" msgstr "Создать линию контура" -#: libbirdfont/DrawingTools.vala:872+#: libbirdfont/DrawingTools.vala:881 msgid "Butt line cap" msgstr "верх линии полигона" -#: libbirdfont/DrawingTools.vala:896+#: libbirdfont/DrawingTools.vala:908 msgid "Round line cap" msgstr "Верх круга" -#: libbirdfont/DrawingTools.vala:921+#: libbirdfont/DrawingTools.vala:936 msgid "Square line cap" msgstr "Верх квадрата" -#: libbirdfont/DrawingTools.vala:990+#: libbirdfont/DrawingTools.vala:1008 msgid "Show guidelines" msgstr "Показать направляющие" -#: libbirdfont/DrawingTools.vala:1002+#: libbirdfont/DrawingTools.vala:1020 msgid "Show more guidelines" msgstr "Показать указания" -#: libbirdfont/DrawingTools.vala:1018+#: libbirdfont/DrawingTools.vala:1036 msgid "Show guidelines at top and bottom margin" msgstr "Показать ограничители верхних и нижних полей" -#: libbirdfont/DrawingTools.vala:1042+#: libbirdfont/DrawingTools.vala:1060 msgid "Lock guides and grid" msgstr "Заблокировать направляюшие и сеть" -#: libbirdfont/DrawingTools.vala:1084+#: libbirdfont/DrawingTools.vala:1102 msgid "Zoom Out More" msgstr "Уменьшить" -#: libbirdfont/DrawingTools.vala:1093+#: libbirdfont/DrawingTools.vala:1111 msgid "Show full glyph" msgstr "Показать глиф полностью" -#: libbirdfont/DrawingTools.vala:1100+#: libbirdfont/DrawingTools.vala:1118 msgid "Fit in view" msgstr "Уместить в окне" -#: libbirdfont/DrawingTools.vala:1107+#: libbirdfont/DrawingTools.vala:1125 #, fuzzy msgid "Zoom in on background image" msgstr "Увеличить фоновое изображение" -#: libbirdfont/DrawingTools.vala:1117+#: libbirdfont/DrawingTools.vala:1135 msgid "Previous view" msgstr "Предыдущая вкладка" -#: libbirdfont/DrawingTools.vala:1123+#: libbirdfont/DrawingTools.vala:1141 msgid "Next view" msgstr "Следующая вкладка" -#: libbirdfont/DrawingTools.vala:1525+#: libbirdfont/DrawingTools.vala:1543 msgid "Set size for grid" msgstr "Установить размер сетки"  #: libbirdfont/ExportSettings.vala:41 libbirdfont/ExportSettings.vala:185-#: libbirdfont/Menu.vala:327+#: libbirdfont/Menu.vala:329 msgid "Export Settings" msgstr "Настройки эксперта" @@ -562,13 +571,13 @@ msgstr "Форматы" msgid "Export" msgstr "Экспортировать" -#: libbirdfont/ExportTool.vala:209 libbirdfont/Menu.vala:64-#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:68+#: libbirdfont/ExportTool.vala:222 libbirdfont/Menu.vala:64+#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:69 #: libbirdfont/SaveDialog.vala:38 libbirdfont/SaveDialogListener.vala:29 msgid "Save" msgstr "Сохранить" -#: libbirdfont/ExportTool.vala:419+#: libbirdfont/ExportTool.vala:432 msgid "Alphabet" msgstr "Алфавит" @@ -621,7 +630,7 @@ msgstr "Открыть файл шрифта" msgid "Save font" msgstr "Сохранить файл шрифта" -#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:490+#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:492 #: libbirdfont/SettingsDisplay.vala:225 libbirdfont/SettingsTab.vala:31 #: libbirdfont/SettingsTab.vala:159 msgid "Settings"@@ -632,39 +641,39 @@ msgstr "Настройки" msgid "Themes" msgstr "Темы" -#: libbirdfont/Glyph.vala:550+#: libbirdfont/Glyph.vala:602 msgid "top margin" msgstr "Отступ сверху" -#: libbirdfont/Glyph.vala:557+#: libbirdfont/Glyph.vala:609 msgid "top" msgstr "верх" -#: libbirdfont/Glyph.vala:564+#: libbirdfont/Glyph.vala:616 msgid "x-height" msgstr "высота по Х" -#: libbirdfont/Glyph.vala:573+#: libbirdfont/Glyph.vala:625 msgid "baseline" msgstr "Базовая линия" -#: libbirdfont/Glyph.vala:580+#: libbirdfont/Glyph.vala:632 msgid "bottom" msgstr "низ" -#: libbirdfont/Glyph.vala:586+#: libbirdfont/Glyph.vala:638 msgid "bottom margin" msgstr "Отступ снизу:" -#: libbirdfont/Glyph.vala:592+#: libbirdfont/Glyph.vala:644 msgid "left" msgstr "влево" -#: libbirdfont/Glyph.vala:601+#: libbirdfont/Glyph.vala:653 msgid "right" msgstr "вправо" -#: libbirdfont/Glyph.vala:2421+#: libbirdfont/Glyph.vala:2462 msgid "Guide" msgstr "Гид" @@ -676,6 +685,10 @@ msgstr "Показать сетку" msgid "Guides" msgstr "Направляющие" +#: libbirdfont/Help.vala:29+msgid "BirdFont is a font editor."+msgstr ""+ #: libbirdfont/HiddenTools.vala:33 msgid "Zoom in" msgstr "Увеличить"@@ -741,32 +754,38 @@ msgstr "к" msgid "Glyph" msgstr "Глиф" -#: libbirdfont/KerningDisplay.vala:97 libbirdfont/KerningDisplay.vala:877+#: libbirdfont/KerningDisplay.vala:60+msgid ""+"Kerning is the process of adjusting the space between two letters. You can "+"cahnge the space between one letter and all other letters in the spacing tab."+msgstr ""++#: libbirdfont/KerningDisplay.vala:101 libbirdfont/KerningDisplay.vala:882 msgid "Kerning" msgstr "Кернинг" -#: libbirdfont/KerningDisplay.vala:105+#: libbirdfont/KerningDisplay.vala:109 msgid "The current kerning class is malformed." msgstr "Неверный формат текущего класса кернинга" -#: libbirdfont/KerningDisplay.vala:106+#: libbirdfont/KerningDisplay.vala:110 msgid "Add single characters separated by space and ranges on the form A-Z." msgstr "" -#: libbirdfont/KerningDisplay.vala:107+#: libbirdfont/KerningDisplay.vala:111 msgid "Type “space” to kern the space character and “divis” to kern -." msgstr "" -#: libbirdfont/KerningDisplay.vala:678 libbirdfont/OverviewTools.vala:78+#: libbirdfont/KerningDisplay.vala:683 libbirdfont/OverviewTools.vala:78 msgid "Unicode" msgstr "Юникод" -#: libbirdfont/KerningDisplay.vala:678+#: libbirdfont/KerningDisplay.vala:683 msgid "Insert" msgstr "Вставить" -#: libbirdfont/KerningDisplay.vala:877 libbirdfont/MainWindow.vala:235-#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:208+#: libbirdfont/KerningDisplay.vala:882 libbirdfont/MainWindow.vala:241+#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:231 msgid "Close" msgstr "Закрыть" @@ -782,11 +801,11 @@ msgstr "Кернинговые пары не были созданы" msgid "Kerning class" msgstr "Класс кернинга" -#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:144+#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:166 #: libbirdfont/Ligatures.vala:118 libbirdfont/Ligatures.vala:141 #: libbirdfont/Ligatures.vala:164 libbirdfont/Ligatures.vala:196 #: libbirdfont/SpacingClass.vala:45 libbirdfont/SpacingTab.vala:232-#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:208+#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:231 #: libbirdfont/Theme.vala:687 msgid "Set" msgstr "Набор"@@ -852,7 +871,11 @@ msgstr "Наборы символов" msgid "Character Set" msgstr "Набор символов" -#: libbirdfont/LayerLabel.vala:144+#: libbirdfont/LayerLabel.vala:101+msgid "Hide the layer."+msgstr ""++#: libbirdfont/LayerLabel.vala:166 #, fuzzy msgid "Layer" msgstr "Слой"@@ -899,7 +922,7 @@ msgid "Contextual Substitutions" msgstr "Контекстная подстановка"  #: libbirdfont/LigatureList.vala:126 libbirdfont/LigatureList.vala:140-#: libbirdfont/Menu.vala:445+#: libbirdfont/Menu.vala:447 msgid "Ligatures" msgstr "Лигатуры" @@ -946,7 +969,7 @@ msgstr "Этот шрифт сделан в старой версии Birdfont." msgid "You need an older version of Birdfont to open it." msgstr "Вам нужна более ранняя версия Birdfont чтобы открыть его." -#: libbirdfont/MainWindow.vala:235+#: libbirdfont/MainWindow.vala:241 msgid "Glyph sequence" msgstr "Последовательность глифов" @@ -1016,8 +1039,8 @@ msgstr "Выделить все контуры" msgid "Move To Baseline" msgstr "" -#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:250-#: libbirdfont/OverView.vala:269 libbirdfont/OverviewTools.vala:154+#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:257+#: libbirdfont/OverView.vala:276 libbirdfont/OverviewTools.vala:154 msgid "Search" msgstr "Поиск" @@ -1096,108 +1119,112 @@ msgstr "Экспортировать шрифты" msgid "Export Glyph as SVG" msgstr "Экспортировать глиф как SVG" -#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:303+#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:304 msgid "Import SVG file" msgstr "Импорт SVG файла" -#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:313 msgid "Import SVG folder" msgstr "Импорт SVG из каталога" -#: libbirdfont/Menu.vala:303 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:304 libbirdfont/Menu.vala:313 msgid "color" msgstr "" -#: libbirdfont/Menu.vala:320+#: libbirdfont/Menu.vala:322 #, fuzzy msgid "Import Background Image" msgstr "Импорт фонового изображения" -#: libbirdfont/Menu.vala:334 libbirdfont/Preview.vala:27+#: libbirdfont/Menu.vala:336 libbirdfont/Preview.vala:27 msgid "Preview" msgstr "Предпросмотр" -#: libbirdfont/Menu.vala:342+#: libbirdfont/Menu.vala:344 #, fuzzy msgid "Tab" msgstr "Вкладка" -#: libbirdfont/Menu.vala:348+#: libbirdfont/Menu.vala:350 #, fuzzy msgid "Next Tab" msgstr "Следующая вкладка" -#: libbirdfont/Menu.vala:355+#: libbirdfont/Menu.vala:357 #, fuzzy msgid "Previous Tab" msgstr "Предыдущая вкладка" -#: libbirdfont/Menu.vala:362+#: libbirdfont/Menu.vala:364 #, fuzzy msgid "Close Tab" msgstr "Закрыть вкладку" -#: libbirdfont/Menu.vala:369+#: libbirdfont/Menu.vala:371 #, fuzzy msgid "Close All Tabs" msgstr "Закрыть все вкладки" -#: libbirdfont/Menu.vala:377+#: libbirdfont/Menu.vala:379 msgid "Spacing and Kerning" msgstr "" -#: libbirdfont/Menu.vala:383+#: libbirdfont/Menu.vala:385 msgid "Show Spacing Tab" msgstr "" -#: libbirdfont/Menu.vala:390+#: libbirdfont/Menu.vala:392 msgid "Show Kerning Tab" msgstr "" -#: libbirdfont/Menu.vala:397+#: libbirdfont/Menu.vala:399 msgid "List Kerning Pairs" msgstr "" -#: libbirdfont/Menu.vala:404 libbirdfont/SpacingClassTab.vala:80+#: libbirdfont/Menu.vala:406 libbirdfont/SpacingClassTab.vala:80 msgid "Spacing Classes" msgstr "" -#: libbirdfont/Menu.vala:411+#: libbirdfont/Menu.vala:413 msgid "Select Next Kerning Pair" msgstr "" -#: libbirdfont/Menu.vala:420+#: libbirdfont/Menu.vala:422 msgid "Select Previous Kerning Pair" msgstr "" -#: libbirdfont/Menu.vala:429+#: libbirdfont/Menu.vala:431 msgid "Load Kerning Strings" msgstr "" -#: libbirdfont/Menu.vala:436+#: libbirdfont/Menu.vala:438 msgid "Reload Kerning Strings" msgstr "" -#: libbirdfont/Menu.vala:451+#: libbirdfont/Menu.vala:453 msgid "Show Ligatures" msgstr "" -#: libbirdfont/Menu.vala:458+#: libbirdfont/Menu.vala:460 msgid "Add Ligature" msgstr "Добавить компонент" -#: libbirdfont/Menu.vala:467+#: libbirdfont/Menu.vala:469 msgid "Git" msgstr "Git" -#: libbirdfont/Menu.vala:473+#: libbirdfont/Menu.vala:475 msgid "Save As .bfp" msgstr "Сохранить как .bfp" -#: libbirdfont/Menu.vala:482 libbirdfont/OverView.vala:471+#: libbirdfont/Menu.vala:484 libbirdfont/OverView.vala:478 msgid "Overview" msgstr "Обзор" +#: libbirdfont/Menu.vala:513+msgid "Help"+msgstr ""+ #: libbirdfont/MenuItem.vala:82 msgid "UP" msgstr ""@@ -1280,15 +1307,11 @@ msgstr "" msgid "Swashes" msgstr "" -#: libbirdfont/OverView.vala:250 libbirdfont/OverView.vala:269+#: libbirdfont/OverView.vala:257 libbirdfont/OverView.vala:276 msgid "Filter" msgstr "Фильтр" -#: libbirdfont/OverView.vala:673-msgid "No glyphs in this view."-msgstr "Не показывать глиф"--#: libbirdfont/OverView.vala:1484+#: libbirdfont/OverView.vala:1498 msgid "See also:" msgstr "" @@ -1468,10 +1491,6 @@ msgstr "" msgid "Right" msgstr "" -#: libbirdfont/SvgParser.vala:62 libbirdfont/SvgParser.vala:121-msgid "Import"-msgstr "Импортировать"- #: libbirdfont/Theme.vala:421 msgid "Canvas Background" msgstr ""@@ -1759,7 +1778,7 @@ msgstr "" msgid "Color" msgstr "" -#: libbirdfont/ToolItem.vala:44+#: libbirdfont/ToolItem.vala:66 msgid "Shift" msgstr "" @@ -1804,6 +1823,12 @@ msgstr "" msgid "Writing" msgstr "Запись" +#~ msgid "No glyphs in this view."+#~ msgstr "Не показывать глиф"++#~ msgid "Import"+#~ msgstr "Импортировать"+ #, fuzzy #~ msgid "Full name (name and style)" #~ msgstr "Полное Название(имя и стиль)"diff --git a/po/sk.po b/po/sk.poindex 80a7a11..782c299 100644--- a/po/sk.po+++ b/po/sk.po@@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n"-"POT-Creation-Date: 2015-12-22 20:35+0100\n"+"POT-Creation-Date: 2016-01-06 12:06+0100\n" "PO-Revision-Date: 2015-09-08 14:34+0000\n" "Last-Translator: Anonymous Pootle User\n" "Language-Team: LANGUAGE <LL@li.org>\n"@@ -109,16 +109,16 @@ msgstr "Súbor" msgid "Parts" msgstr "" -#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2421+#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2462 #: libbirdfont/LigatureList.vala:106 libbirdfont/OtfFeatureTable.vala:181 msgid "Add" msgstr "Pridať" -#: libbirdfont/BackgroundTools.vala:122+#: libbirdfont/BackgroundTools.vala:123 msgid "Select Glyph" msgstr "" -#: libbirdfont/BackgroundTools.vala:231 libbirdfont/LoadCallback.vala:102+#: libbirdfont/BackgroundTools.vala:233 libbirdfont/LoadCallback.vala:102 #: libbirdfont/Menu.vala:50 msgid "Open" msgstr "Otvoriť"@@ -194,14 +194,14 @@ msgid "Thai" msgstr ""  #. / All lower case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:420+#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:433 msgid "a b c d e f g h i j k l m n o p q r s t u v w x y z" msgstr "" "a á ä b c č d ď dz dž e é f g h ch i íj k l ĺľ m n ň o ó ô p q r ŕ s š t ť u " "ú v w x y ý z ž"  #. / All upper case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:421+#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:434 msgid "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z" msgstr "" "A Á Ä B C Č D Ď DZ DŽ E É F G H CH I Í J K L Ĺ Ľ M N Ň O Ó Ô P Q R Ŕ S Š T Ť "@@ -209,7 +209,7 @@ msgstr ""  #: libbirdfont/DescriptionDisplay.vala:66 #: libbirdfont/DescriptionDisplay.vala:277 libbirdfont/ExportSettings.vala:133-#: libbirdfont/Menu.vala:497 libbirdfont/TableLayout.vala:203+#: libbirdfont/Menu.vala:499 libbirdfont/TableLayout.vala:203 #, fuzzy msgid "Name and Description" msgstr "Názov a Popis"@@ -249,7 +249,7 @@ msgid "Unique Identifier" msgstr ""  #: libbirdfont/DescriptionDisplay.vala:150 libbirdfont/ImportUtils.vala:161-#: libbirdfont/Menu.vala:504 libbirdfont/Menu.vala:506+#: libbirdfont/Menu.vala:506 libbirdfont/Menu.vala:508 #: libbirdfont/VersionList.vala:265 msgid "Version" msgstr "Verzia"@@ -334,217 +334,226 @@ msgstr "" msgid "Grid Size" msgstr "" -#: libbirdfont/DrawingTools.vala:194+#: libbirdfont/DrawingTools.vala:195 msgid "Move canvas" msgstr "Posunúť plátno" -#: libbirdfont/DrawingTools.vala:202+#: libbirdfont/DrawingTools.vala:196+msgid "Press space and click to move the canvas."+msgstr ""++#: libbirdfont/DrawingTools.vala:204 msgid "Delete" msgstr "Zmazať" -#: libbirdfont/DrawingTools.vala:209+#: libbirdfont/DrawingTools.vala:211 msgid "Select all points or paths" msgstr "Vybrať všetky body alebo cesty" -#: libbirdfont/DrawingTools.vala:225 libbirdfont/Menu.vala:99+#: libbirdfont/DrawingTools.vala:227 libbirdfont/Menu.vala:99 msgid "Undo" msgstr "Späť" -#: libbirdfont/DrawingTools.vala:232+#: libbirdfont/DrawingTools.vala:234 msgid "Insert new points on path" msgstr "Pridať nové body na cestu" -#: libbirdfont/DrawingTools.vala:241+#: libbirdfont/DrawingTools.vala:244 msgid "Create quadratic Bézier curves" msgstr "Vytvoriť kvadratické Bézierove krivky" -#: libbirdfont/DrawingTools.vala:250+#: libbirdfont/DrawingTools.vala:245+msgid ""+"All control points will be converted to quadratic points in the TTF format."+msgstr ""++#: libbirdfont/DrawingTools.vala:255 #, fuzzy msgid "Create cubic Bézier curves" msgstr "Vytvoriť kvadratické Bézierove krivky" -#: libbirdfont/DrawingTools.vala:259+#: libbirdfont/DrawingTools.vala:264 msgid "Quadratic path with two line handles" msgstr "" -#: libbirdfont/DrawingTools.vala:268+#: libbirdfont/DrawingTools.vala:273 msgid "Convert selected points" msgstr "" -#: libbirdfont/DrawingTools.vala:279+#: libbirdfont/DrawingTools.vala:284 msgid "X coordinate" msgstr "" -#: libbirdfont/DrawingTools.vala:323+#: libbirdfont/DrawingTools.vala:328 msgid "Y coordinate" msgstr "" -#: libbirdfont/DrawingTools.vala:366+#: libbirdfont/DrawingTools.vala:371 msgid "Rotation" msgstr "" -#: libbirdfont/DrawingTools.vala:405+#: libbirdfont/DrawingTools.vala:410 msgid "Width" msgstr "" -#: libbirdfont/DrawingTools.vala:430+#: libbirdfont/DrawingTools.vala:435 msgid "Height" msgstr "Výška" -#: libbirdfont/DrawingTools.vala:473+#: libbirdfont/DrawingTools.vala:478 msgid "Tie curve handles for the selected edit point" msgstr "Spojiť úchyty krivky vybraného bodu" -#: libbirdfont/DrawingTools.vala:524+#: libbirdfont/DrawingTools.vala:529 msgid "Symmetrical handles" msgstr "Symetrické úchyty" -#: libbirdfont/DrawingTools.vala:554+#: libbirdfont/DrawingTools.vala:559 msgid "Convert segment to line." msgstr "Previesť segment na čiaru" -#: libbirdfont/DrawingTools.vala:562+#: libbirdfont/DrawingTools.vala:567 msgid "Create counter from outline" msgstr "" -#: libbirdfont/DrawingTools.vala:565+#: libbirdfont/DrawingTools.vala:570 msgid "Scale object to font top/baseline" msgstr "" -#: libbirdfont/DrawingTools.vala:574+#: libbirdfont/DrawingTools.vala:579 #, fuzzy msgid "Close path" msgstr "Uzavrieť cestu" -#: libbirdfont/DrawingTools.vala:596+#: libbirdfont/DrawingTools.vala:601 #, fuzzy msgid "Move to path to the bottom of the layer" msgstr "Presunúť cestu do spodnej vrstvy" -#: libbirdfont/DrawingTools.vala:610+#: libbirdfont/DrawingTools.vala:615 msgid "Flip path vertically" msgstr "Zrkadliť vertikálne" -#: libbirdfont/DrawingTools.vala:618+#: libbirdfont/DrawingTools.vala:623 msgid "Flip path horizontally" msgstr "Zrkadliť horizontálne" -#: libbirdfont/DrawingTools.vala:627+#: libbirdfont/DrawingTools.vala:632 msgid "Set size for background image" msgstr "" -#: libbirdfont/DrawingTools.vala:665+#: libbirdfont/DrawingTools.vala:670 msgid "Show/hide background image" msgstr "" -#: libbirdfont/DrawingTools.vala:676+#: libbirdfont/DrawingTools.vala:681 msgid "Insert a new background image" msgstr "" -#: libbirdfont/DrawingTools.vala:690 libbirdfont/ThemeTab.vala:151+#: libbirdfont/DrawingTools.vala:695 libbirdfont/ThemeTab.vala:151 msgid "High contrast" msgstr "" -#: libbirdfont/DrawingTools.vala:704+#: libbirdfont/DrawingTools.vala:709 msgid "Set background threshold" msgstr "" -#: libbirdfont/DrawingTools.vala:723+#: libbirdfont/DrawingTools.vala:728 msgid "Amount of autotrace details" msgstr "" -#: libbirdfont/DrawingTools.vala:742+#: libbirdfont/DrawingTools.vala:747 msgid "Autotrace simplification" msgstr "" -#: libbirdfont/DrawingTools.vala:752+#: libbirdfont/DrawingTools.vala:757 msgid "Autotrace background image" msgstr "" -#: libbirdfont/DrawingTools.vala:760+#: libbirdfont/DrawingTools.vala:765 #, fuzzy msgid "Delete background image" msgstr "Vybrať obrázok pozadia" -#: libbirdfont/DrawingTools.vala:767+#: libbirdfont/DrawingTools.vala:772 msgid "Add layer" msgstr "" -#: libbirdfont/DrawingTools.vala:777+#: libbirdfont/DrawingTools.vala:782 msgid "Show layers" msgstr "" -#: libbirdfont/DrawingTools.vala:787+#: libbirdfont/DrawingTools.vala:792 msgid "Apply stroke" msgstr "" -#: libbirdfont/DrawingTools.vala:821 libbirdfont/SettingsTab.vala:34+#: libbirdfont/DrawingTools.vala:826 libbirdfont/SettingsTab.vala:34 msgid "Stroke width" msgstr "Hrúbka ťahu" -#: libbirdfont/DrawingTools.vala:863+#: libbirdfont/DrawingTools.vala:872 msgid "Create outline form stroke" msgstr "" -#: libbirdfont/DrawingTools.vala:872+#: libbirdfont/DrawingTools.vala:881 msgid "Butt line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:896+#: libbirdfont/DrawingTools.vala:908 msgid "Round line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:921+#: libbirdfont/DrawingTools.vala:936 msgid "Square line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:990+#: libbirdfont/DrawingTools.vala:1008 msgid "Show guidelines" msgstr "Zobraziť vodítka" -#: libbirdfont/DrawingTools.vala:1002+#: libbirdfont/DrawingTools.vala:1020 #, fuzzy msgid "Show more guidelines" msgstr "Zobraziť vodítka" -#: libbirdfont/DrawingTools.vala:1018+#: libbirdfont/DrawingTools.vala:1036 msgid "Show guidelines at top and bottom margin" msgstr "Zobraziť vodítka na hornom a dolnom okraji" -#: libbirdfont/DrawingTools.vala:1042+#: libbirdfont/DrawingTools.vala:1060 msgid "Lock guides and grid" msgstr "" -#: libbirdfont/DrawingTools.vala:1084+#: libbirdfont/DrawingTools.vala:1102 msgid "Zoom Out More" msgstr "" -#: libbirdfont/DrawingTools.vala:1093+#: libbirdfont/DrawingTools.vala:1111 msgid "Show full glyph" msgstr "Ukázať celý znak" -#: libbirdfont/DrawingTools.vala:1100+#: libbirdfont/DrawingTools.vala:1118 msgid "Fit in view" msgstr "" -#: libbirdfont/DrawingTools.vala:1107+#: libbirdfont/DrawingTools.vala:1125 msgid "Zoom in on background image" msgstr "" -#: libbirdfont/DrawingTools.vala:1117+#: libbirdfont/DrawingTools.vala:1135 msgid "Previous view" msgstr "" -#: libbirdfont/DrawingTools.vala:1123+#: libbirdfont/DrawingTools.vala:1141 msgid "Next view" msgstr "" -#: libbirdfont/DrawingTools.vala:1525+#: libbirdfont/DrawingTools.vala:1543 msgid "Set size for grid" msgstr "Nastaviť veľkosť mriežky"  #: libbirdfont/ExportSettings.vala:41 libbirdfont/ExportSettings.vala:185-#: libbirdfont/Menu.vala:327+#: libbirdfont/Menu.vala:329 msgid "Export Settings" msgstr "" @@ -569,13 +578,13 @@ msgstr "" msgid "Export" msgstr "Export" -#: libbirdfont/ExportTool.vala:209 libbirdfont/Menu.vala:64-#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:68+#: libbirdfont/ExportTool.vala:222 libbirdfont/Menu.vala:64+#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:69 #: libbirdfont/SaveDialog.vala:38 libbirdfont/SaveDialogListener.vala:29 msgid "Save" msgstr "Uložiť" -#: libbirdfont/ExportTool.vala:419+#: libbirdfont/ExportTool.vala:432 msgid "Alphabet" msgstr "" @@ -628,7 +637,7 @@ msgstr "" msgid "Save font" msgstr "" -#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:490+#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:492 #: libbirdfont/SettingsDisplay.vala:225 libbirdfont/SettingsTab.vala:31 #: libbirdfont/SettingsTab.vala:159 msgid "Settings"@@ -639,39 +648,39 @@ msgstr "" msgid "Themes" msgstr "" -#: libbirdfont/Glyph.vala:550+#: libbirdfont/Glyph.vala:602 msgid "top margin" msgstr "" -#: libbirdfont/Glyph.vala:557+#: libbirdfont/Glyph.vala:609 msgid "top" msgstr "" -#: libbirdfont/Glyph.vala:564+#: libbirdfont/Glyph.vala:616 msgid "x-height" msgstr "" -#: libbirdfont/Glyph.vala:573+#: libbirdfont/Glyph.vala:625 msgid "baseline" msgstr "" -#: libbirdfont/Glyph.vala:580+#: libbirdfont/Glyph.vala:632 msgid "bottom" msgstr "" -#: libbirdfont/Glyph.vala:586+#: libbirdfont/Glyph.vala:638 msgid "bottom margin" msgstr "" -#: libbirdfont/Glyph.vala:592+#: libbirdfont/Glyph.vala:644 msgid "left" msgstr "" -#: libbirdfont/Glyph.vala:601+#: libbirdfont/Glyph.vala:653 msgid "right" msgstr "" -#: libbirdfont/Glyph.vala:2421+#: libbirdfont/Glyph.vala:2462 msgid "Guide" msgstr "" @@ -683,6 +692,10 @@ msgstr "" msgid "Guides" msgstr "" +#: libbirdfont/Help.vala:29+msgid "BirdFont is a font editor."+msgstr ""+ #: libbirdfont/HiddenTools.vala:33 msgid "Zoom in" msgstr "Priblížiť"@@ -749,35 +762,41 @@ msgstr "do" msgid "Glyph" msgstr "Znak" -#: libbirdfont/KerningDisplay.vala:97 libbirdfont/KerningDisplay.vala:877+#: libbirdfont/KerningDisplay.vala:60+msgid ""+"Kerning is the process of adjusting the space between two letters. You can "+"cahnge the space between one letter and all other letters in the spacing tab."+msgstr ""++#: libbirdfont/KerningDisplay.vala:101 libbirdfont/KerningDisplay.vala:882 #, fuzzy msgid "Kerning" msgstr "Veľkosť medzery za znakom:" -#: libbirdfont/KerningDisplay.vala:105+#: libbirdfont/KerningDisplay.vala:109 msgid "The current kerning class is malformed." msgstr "" -#: libbirdfont/KerningDisplay.vala:106+#: libbirdfont/KerningDisplay.vala:110 msgid "Add single characters separated by space and ranges on the form A-Z." msgstr "Pridať jednotlivé znaky oddelené medzerou v rozsahu A - Z" -#: libbirdfont/KerningDisplay.vala:107+#: libbirdfont/KerningDisplay.vala:111 msgid "Type “space” to kern the space character and “divis” to kern -." msgstr "" "Zadajte “space” pre upravenie kerningu medzery a “divis” pre upravenie " "kerningu -." -#: libbirdfont/KerningDisplay.vala:678 libbirdfont/OverviewTools.vala:78+#: libbirdfont/KerningDisplay.vala:683 libbirdfont/OverviewTools.vala:78 msgid "Unicode" msgstr "" -#: libbirdfont/KerningDisplay.vala:678+#: libbirdfont/KerningDisplay.vala:683 msgid "Insert" msgstr "" -#: libbirdfont/KerningDisplay.vala:877 libbirdfont/MainWindow.vala:235-#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:208+#: libbirdfont/KerningDisplay.vala:882 libbirdfont/MainWindow.vala:241+#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:231 msgid "Close" msgstr "Zavrieť" @@ -793,11 +812,11 @@ msgstr "" msgid "Kerning class" msgstr "Trieda kerningu" -#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:144+#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:166 #: libbirdfont/Ligatures.vala:118 libbirdfont/Ligatures.vala:141 #: libbirdfont/Ligatures.vala:164 libbirdfont/Ligatures.vala:196 #: libbirdfont/SpacingClass.vala:45 libbirdfont/SpacingTab.vala:232-#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:208+#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:231 #: libbirdfont/Theme.vala:687 msgid "Set" msgstr "Nastaviť"@@ -862,7 +881,11 @@ msgstr "" msgid "Character Set" msgstr "" -#: libbirdfont/LayerLabel.vala:144+#: libbirdfont/LayerLabel.vala:101+msgid "Hide the layer."+msgstr ""++#: libbirdfont/LayerLabel.vala:166 msgid "Layer" msgstr "" @@ -904,7 +927,7 @@ msgid "Contextual Substitutions" msgstr ""  #: libbirdfont/LigatureList.vala:126 libbirdfont/LigatureList.vala:140-#: libbirdfont/Menu.vala:445+#: libbirdfont/Menu.vala:447 msgid "Ligatures" msgstr "Ligatúry" @@ -948,7 +971,7 @@ msgstr "" msgid "You need an older version of Birdfont to open it." msgstr "" -#: libbirdfont/MainWindow.vala:235+#: libbirdfont/MainWindow.vala:241 msgid "Glyph sequence" msgstr "Poradie znakov" @@ -1013,8 +1036,8 @@ msgstr "" msgid "Move To Baseline" msgstr "" -#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:250-#: libbirdfont/OverView.vala:269 libbirdfont/OverviewTools.vala:154+#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:257+#: libbirdfont/OverView.vala:276 libbirdfont/OverviewTools.vala:154 #, fuzzy msgid "Search" msgstr "Hľadať"@@ -1093,105 +1116,109 @@ msgstr "Exportovať písma" msgid "Export Glyph as SVG" msgstr "Exportovať znaky ako SVG" -#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:303+#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:304 msgid "Import SVG file" msgstr "" -#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:313 msgid "Import SVG folder" msgstr "" -#: libbirdfont/Menu.vala:303 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:304 libbirdfont/Menu.vala:313 msgid "color" msgstr "" -#: libbirdfont/Menu.vala:320+#: libbirdfont/Menu.vala:322 #, fuzzy msgid "Import Background Image" msgstr "Vybrať obrázok pozadia" -#: libbirdfont/Menu.vala:334 libbirdfont/Preview.vala:27+#: libbirdfont/Menu.vala:336 libbirdfont/Preview.vala:27 msgid "Preview" msgstr "Náhľad" -#: libbirdfont/Menu.vala:342+#: libbirdfont/Menu.vala:344 #, fuzzy msgid "Tab" msgstr "Karta" -#: libbirdfont/Menu.vala:348+#: libbirdfont/Menu.vala:350 msgid "Next Tab" msgstr "" -#: libbirdfont/Menu.vala:355+#: libbirdfont/Menu.vala:357 msgid "Previous Tab" msgstr "" -#: libbirdfont/Menu.vala:362+#: libbirdfont/Menu.vala:364 msgid "Close Tab" msgstr "" -#: libbirdfont/Menu.vala:369+#: libbirdfont/Menu.vala:371 msgid "Close All Tabs" msgstr "" -#: libbirdfont/Menu.vala:377+#: libbirdfont/Menu.vala:379 msgid "Spacing and Kerning" msgstr "" -#: libbirdfont/Menu.vala:383+#: libbirdfont/Menu.vala:385 msgid "Show Spacing Tab" msgstr "" -#: libbirdfont/Menu.vala:390+#: libbirdfont/Menu.vala:392 msgid "Show Kerning Tab" msgstr "" -#: libbirdfont/Menu.vala:397+#: libbirdfont/Menu.vala:399 msgid "List Kerning Pairs" msgstr "" -#: libbirdfont/Menu.vala:404 libbirdfont/SpacingClassTab.vala:80+#: libbirdfont/Menu.vala:406 libbirdfont/SpacingClassTab.vala:80 msgid "Spacing Classes" msgstr "" -#: libbirdfont/Menu.vala:411+#: libbirdfont/Menu.vala:413 msgid "Select Next Kerning Pair" msgstr "" -#: libbirdfont/Menu.vala:420+#: libbirdfont/Menu.vala:422 msgid "Select Previous Kerning Pair" msgstr "" -#: libbirdfont/Menu.vala:429+#: libbirdfont/Menu.vala:431 msgid "Load Kerning Strings" msgstr "" -#: libbirdfont/Menu.vala:436+#: libbirdfont/Menu.vala:438 msgid "Reload Kerning Strings" msgstr "" -#: libbirdfont/Menu.vala:451+#: libbirdfont/Menu.vala:453 msgid "Show Ligatures" msgstr "" -#: libbirdfont/Menu.vala:458+#: libbirdfont/Menu.vala:460 #, fuzzy msgid "Add Ligature" msgstr "Nová ligatúra" -#: libbirdfont/Menu.vala:467+#: libbirdfont/Menu.vala:469 msgid "Git" msgstr "" -#: libbirdfont/Menu.vala:473+#: libbirdfont/Menu.vala:475 msgid "Save As .bfp" msgstr "" -#: libbirdfont/Menu.vala:482 libbirdfont/OverView.vala:471+#: libbirdfont/Menu.vala:484 libbirdfont/OverView.vala:478 msgid "Overview" msgstr "" +#: libbirdfont/Menu.vala:513+msgid "Help"+msgstr ""+ #: libbirdfont/MenuItem.vala:82 msgid "UP" msgstr ""@@ -1274,15 +1301,11 @@ msgstr "" msgid "Swashes" msgstr "" -#: libbirdfont/OverView.vala:250 libbirdfont/OverView.vala:269+#: libbirdfont/OverView.vala:257 libbirdfont/OverView.vala:276 msgid "Filter" msgstr "" -#: libbirdfont/OverView.vala:673-msgid "No glyphs in this view."-msgstr ""--#: libbirdfont/OverView.vala:1484+#: libbirdfont/OverView.vala:1498 msgid "See also:" msgstr "" @@ -1462,10 +1485,6 @@ msgstr "" msgid "Right" msgstr "" -#: libbirdfont/SvgParser.vala:62 libbirdfont/SvgParser.vala:121-msgid "Import"-msgstr ""- #: libbirdfont/Theme.vala:421 msgid "Canvas Background" msgstr ""@@ -1750,7 +1769,7 @@ msgstr "" msgid "Color" msgstr "" -#: libbirdfont/ToolItem.vala:44+#: libbirdfont/ToolItem.vala:66 msgid "Shift" msgstr "" diff --git a/po/sr.po b/po/sr.poindex 478bd05..c662ca7 100644--- a/po/sr.po+++ b/po/sr.po@@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n"-"POT-Creation-Date: 2015-12-22 20:35+0100\n"+"POT-Creation-Date: 2016-01-06 12:06+0100\n" "PO-Revision-Date: 2015-05-06 15:40+0000\n" "Last-Translator: Ђорђе <djordje.vasiljevich@gmail.com>\n" "Language-Team: LANGUAGE <LL@li.org>\n"@@ -106,16 +106,16 @@ msgstr "" msgid "Parts" msgstr "" -#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2421+#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2462 #: libbirdfont/LigatureList.vala:106 libbirdfont/OtfFeatureTable.vala:181 msgid "Add" msgstr "" -#: libbirdfont/BackgroundTools.vala:122+#: libbirdfont/BackgroundTools.vala:123 msgid "Select Glyph" msgstr "" -#: libbirdfont/BackgroundTools.vala:231 libbirdfont/LoadCallback.vala:102+#: libbirdfont/BackgroundTools.vala:233 libbirdfont/LoadCallback.vala:102 #: libbirdfont/Menu.vala:50 msgid "Open" msgstr ""@@ -189,18 +189,18 @@ msgid "Thai" msgstr ""  #. / All lower case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:420+#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:433 msgid "a b c d e f g h i j k l m n o p q r s t u v w x y z" msgstr ""  #. / All upper case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:421+#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:434 msgid "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z" msgstr ""  #: libbirdfont/DescriptionDisplay.vala:66 #: libbirdfont/DescriptionDisplay.vala:277 libbirdfont/ExportSettings.vala:133-#: libbirdfont/Menu.vala:497 libbirdfont/TableLayout.vala:203+#: libbirdfont/Menu.vala:499 libbirdfont/TableLayout.vala:203 msgid "Name and Description" msgstr "" @@ -238,7 +238,7 @@ msgid "Unique Identifier" msgstr ""  #: libbirdfont/DescriptionDisplay.vala:150 libbirdfont/ImportUtils.vala:161-#: libbirdfont/Menu.vala:504 libbirdfont/Menu.vala:506+#: libbirdfont/Menu.vala:506 libbirdfont/Menu.vala:508 #: libbirdfont/VersionList.vala:265 msgid "Version" msgstr ""@@ -323,212 +323,221 @@ msgstr "" msgid "Grid Size" msgstr "" -#: libbirdfont/DrawingTools.vala:194+#: libbirdfont/DrawingTools.vala:195 msgid "Move canvas" msgstr "" -#: libbirdfont/DrawingTools.vala:202+#: libbirdfont/DrawingTools.vala:196+msgid "Press space and click to move the canvas."+msgstr ""++#: libbirdfont/DrawingTools.vala:204 msgid "Delete" msgstr "" -#: libbirdfont/DrawingTools.vala:209+#: libbirdfont/DrawingTools.vala:211 msgid "Select all points or paths" msgstr "" -#: libbirdfont/DrawingTools.vala:225 libbirdfont/Menu.vala:99+#: libbirdfont/DrawingTools.vala:227 libbirdfont/Menu.vala:99 msgid "Undo" msgstr "" -#: libbirdfont/DrawingTools.vala:232+#: libbirdfont/DrawingTools.vala:234 msgid "Insert new points on path" msgstr "" -#: libbirdfont/DrawingTools.vala:241+#: libbirdfont/DrawingTools.vala:244 msgid "Create quadratic Bézier curves" msgstr "" -#: libbirdfont/DrawingTools.vala:250+#: libbirdfont/DrawingTools.vala:245+msgid ""+"All control points will be converted to quadratic points in the TTF format."+msgstr ""++#: libbirdfont/DrawingTools.vala:255 msgid "Create cubic Bézier curves" msgstr "" -#: libbirdfont/DrawingTools.vala:259+#: libbirdfont/DrawingTools.vala:264 msgid "Quadratic path with two line handles" msgstr "" -#: libbirdfont/DrawingTools.vala:268+#: libbirdfont/DrawingTools.vala:273 msgid "Convert selected points" msgstr "" -#: libbirdfont/DrawingTools.vala:279+#: libbirdfont/DrawingTools.vala:284 msgid "X coordinate" msgstr "" -#: libbirdfont/DrawingTools.vala:323+#: libbirdfont/DrawingTools.vala:328 msgid "Y coordinate" msgstr "" -#: libbirdfont/DrawingTools.vala:366+#: libbirdfont/DrawingTools.vala:371 msgid "Rotation" msgstr "" -#: libbirdfont/DrawingTools.vala:405+#: libbirdfont/DrawingTools.vala:410 msgid "Width" msgstr "" -#: libbirdfont/DrawingTools.vala:430+#: libbirdfont/DrawingTools.vala:435 msgid "Height" msgstr "" -#: libbirdfont/DrawingTools.vala:473+#: libbirdfont/DrawingTools.vala:478 msgid "Tie curve handles for the selected edit point" msgstr "" -#: libbirdfont/DrawingTools.vala:524+#: libbirdfont/DrawingTools.vala:529 msgid "Symmetrical handles" msgstr "" -#: libbirdfont/DrawingTools.vala:554+#: libbirdfont/DrawingTools.vala:559 msgid "Convert segment to line." msgstr "" -#: libbirdfont/DrawingTools.vala:562+#: libbirdfont/DrawingTools.vala:567 msgid "Create counter from outline" msgstr "" -#: libbirdfont/DrawingTools.vala:565+#: libbirdfont/DrawingTools.vala:570 msgid "Scale object to font top/baseline" msgstr "" -#: libbirdfont/DrawingTools.vala:574+#: libbirdfont/DrawingTools.vala:579 msgid "Close path" msgstr "" -#: libbirdfont/DrawingTools.vala:596+#: libbirdfont/DrawingTools.vala:601 msgid "Move to path to the bottom of the layer" msgstr "" -#: libbirdfont/DrawingTools.vala:610+#: libbirdfont/DrawingTools.vala:615 msgid "Flip path vertically" msgstr "" -#: libbirdfont/DrawingTools.vala:618+#: libbirdfont/DrawingTools.vala:623 msgid "Flip path horizontally" msgstr "" -#: libbirdfont/DrawingTools.vala:627+#: libbirdfont/DrawingTools.vala:632 msgid "Set size for background image" msgstr "" -#: libbirdfont/DrawingTools.vala:665+#: libbirdfont/DrawingTools.vala:670 msgid "Show/hide background image" msgstr "" -#: libbirdfont/DrawingTools.vala:676+#: libbirdfont/DrawingTools.vala:681 msgid "Insert a new background image" msgstr "" -#: libbirdfont/DrawingTools.vala:690 libbirdfont/ThemeTab.vala:151+#: libbirdfont/DrawingTools.vala:695 libbirdfont/ThemeTab.vala:151 msgid "High contrast" msgstr "" -#: libbirdfont/DrawingTools.vala:704+#: libbirdfont/DrawingTools.vala:709 msgid "Set background threshold" msgstr "" -#: libbirdfont/DrawingTools.vala:723+#: libbirdfont/DrawingTools.vala:728 msgid "Amount of autotrace details" msgstr "" -#: libbirdfont/DrawingTools.vala:742+#: libbirdfont/DrawingTools.vala:747 msgid "Autotrace simplification" msgstr "" -#: libbirdfont/DrawingTools.vala:752+#: libbirdfont/DrawingTools.vala:757 msgid "Autotrace background image" msgstr "" -#: libbirdfont/DrawingTools.vala:760+#: libbirdfont/DrawingTools.vala:765 msgid "Delete background image" msgstr "" -#: libbirdfont/DrawingTools.vala:767+#: libbirdfont/DrawingTools.vala:772 msgid "Add layer" msgstr "" -#: libbirdfont/DrawingTools.vala:777+#: libbirdfont/DrawingTools.vala:782 msgid "Show layers" msgstr "" -#: libbirdfont/DrawingTools.vala:787+#: libbirdfont/DrawingTools.vala:792 msgid "Apply stroke" msgstr "" -#: libbirdfont/DrawingTools.vala:821 libbirdfont/SettingsTab.vala:34+#: libbirdfont/DrawingTools.vala:826 libbirdfont/SettingsTab.vala:34 msgid "Stroke width" msgstr "" -#: libbirdfont/DrawingTools.vala:863+#: libbirdfont/DrawingTools.vala:872 msgid "Create outline form stroke" msgstr "" -#: libbirdfont/DrawingTools.vala:872+#: libbirdfont/DrawingTools.vala:881 msgid "Butt line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:896+#: libbirdfont/DrawingTools.vala:908 msgid "Round line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:921+#: libbirdfont/DrawingTools.vala:936 msgid "Square line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:990+#: libbirdfont/DrawingTools.vala:1008 msgid "Show guidelines" msgstr "" -#: libbirdfont/DrawingTools.vala:1002+#: libbirdfont/DrawingTools.vala:1020 msgid "Show more guidelines" msgstr "" -#: libbirdfont/DrawingTools.vala:1018+#: libbirdfont/DrawingTools.vala:1036 msgid "Show guidelines at top and bottom margin" msgstr "" -#: libbirdfont/DrawingTools.vala:1042+#: libbirdfont/DrawingTools.vala:1060 msgid "Lock guides and grid" msgstr "" -#: libbirdfont/DrawingTools.vala:1084+#: libbirdfont/DrawingTools.vala:1102 msgid "Zoom Out More" msgstr "" -#: libbirdfont/DrawingTools.vala:1093+#: libbirdfont/DrawingTools.vala:1111 msgid "Show full glyph" msgstr "" -#: libbirdfont/DrawingTools.vala:1100+#: libbirdfont/DrawingTools.vala:1118 msgid "Fit in view" msgstr "" -#: libbirdfont/DrawingTools.vala:1107+#: libbirdfont/DrawingTools.vala:1125 msgid "Zoom in on background image" msgstr "" -#: libbirdfont/DrawingTools.vala:1117+#: libbirdfont/DrawingTools.vala:1135 msgid "Previous view" msgstr "" -#: libbirdfont/DrawingTools.vala:1123+#: libbirdfont/DrawingTools.vala:1141 msgid "Next view" msgstr "" -#: libbirdfont/DrawingTools.vala:1525+#: libbirdfont/DrawingTools.vala:1543 msgid "Set size for grid" msgstr ""  #: libbirdfont/ExportSettings.vala:41 libbirdfont/ExportSettings.vala:185-#: libbirdfont/Menu.vala:327+#: libbirdfont/Menu.vala:329 msgid "Export Settings" msgstr "" @@ -552,13 +561,13 @@ msgstr "" msgid "Export" msgstr "" -#: libbirdfont/ExportTool.vala:209 libbirdfont/Menu.vala:64-#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:68+#: libbirdfont/ExportTool.vala:222 libbirdfont/Menu.vala:64+#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:69 #: libbirdfont/SaveDialog.vala:38 libbirdfont/SaveDialogListener.vala:29 msgid "Save" msgstr "" -#: libbirdfont/ExportTool.vala:419+#: libbirdfont/ExportTool.vala:432 msgid "Alphabet" msgstr "" @@ -608,7 +617,7 @@ msgstr "" msgid "Save font" msgstr "" -#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:490+#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:492 #: libbirdfont/SettingsDisplay.vala:225 libbirdfont/SettingsTab.vala:31 #: libbirdfont/SettingsTab.vala:159 msgid "Settings"@@ -619,39 +628,39 @@ msgstr "" msgid "Themes" msgstr "" -#: libbirdfont/Glyph.vala:550+#: libbirdfont/Glyph.vala:602 msgid "top margin" msgstr "" -#: libbirdfont/Glyph.vala:557+#: libbirdfont/Glyph.vala:609 msgid "top" msgstr "" -#: libbirdfont/Glyph.vala:564+#: libbirdfont/Glyph.vala:616 msgid "x-height" msgstr "" -#: libbirdfont/Glyph.vala:573+#: libbirdfont/Glyph.vala:625 msgid "baseline" msgstr "" -#: libbirdfont/Glyph.vala:580+#: libbirdfont/Glyph.vala:632 msgid "bottom" msgstr "" -#: libbirdfont/Glyph.vala:586+#: libbirdfont/Glyph.vala:638 msgid "bottom margin" msgstr "" -#: libbirdfont/Glyph.vala:592+#: libbirdfont/Glyph.vala:644 msgid "left" msgstr "" -#: libbirdfont/Glyph.vala:601+#: libbirdfont/Glyph.vala:653 msgid "right" msgstr "" -#: libbirdfont/Glyph.vala:2421+#: libbirdfont/Glyph.vala:2462 msgid "Guide" msgstr "" @@ -663,6 +672,10 @@ msgstr "" msgid "Guides" msgstr "" +#: libbirdfont/Help.vala:29+msgid "BirdFont is a font editor."+msgstr ""+ #: libbirdfont/HiddenTools.vala:33 msgid "Zoom in" msgstr ""@@ -728,32 +741,38 @@ msgstr "" msgid "Glyph" msgstr "" -#: libbirdfont/KerningDisplay.vala:97 libbirdfont/KerningDisplay.vala:877+#: libbirdfont/KerningDisplay.vala:60+msgid ""+"Kerning is the process of adjusting the space between two letters. You can "+"cahnge the space between one letter and all other letters in the spacing tab."+msgstr ""++#: libbirdfont/KerningDisplay.vala:101 libbirdfont/KerningDisplay.vala:882 msgid "Kerning" msgstr "" -#: libbirdfont/KerningDisplay.vala:105+#: libbirdfont/KerningDisplay.vala:109 msgid "The current kerning class is malformed." msgstr "" -#: libbirdfont/KerningDisplay.vala:106+#: libbirdfont/KerningDisplay.vala:110 msgid "Add single characters separated by space and ranges on the form A-Z." msgstr "" -#: libbirdfont/KerningDisplay.vala:107+#: libbirdfont/KerningDisplay.vala:111 msgid "Type “space” to kern the space character and “divis” to kern -." msgstr "" -#: libbirdfont/KerningDisplay.vala:678 libbirdfont/OverviewTools.vala:78+#: libbirdfont/KerningDisplay.vala:683 libbirdfont/OverviewTools.vala:78 msgid "Unicode" msgstr "" -#: libbirdfont/KerningDisplay.vala:678+#: libbirdfont/KerningDisplay.vala:683 msgid "Insert" msgstr "" -#: libbirdfont/KerningDisplay.vala:877 libbirdfont/MainWindow.vala:235-#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:208+#: libbirdfont/KerningDisplay.vala:882 libbirdfont/MainWindow.vala:241+#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:231 msgid "Close" msgstr "" @@ -769,11 +788,11 @@ msgstr "" msgid "Kerning class" msgstr "" -#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:144+#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:166 #: libbirdfont/Ligatures.vala:118 libbirdfont/Ligatures.vala:141 #: libbirdfont/Ligatures.vala:164 libbirdfont/Ligatures.vala:196 #: libbirdfont/SpacingClass.vala:45 libbirdfont/SpacingTab.vala:232-#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:208+#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:231 #: libbirdfont/Theme.vala:687 msgid "Set" msgstr ""@@ -838,7 +857,11 @@ msgstr "" msgid "Character Set" msgstr "" -#: libbirdfont/LayerLabel.vala:144+#: libbirdfont/LayerLabel.vala:101+msgid "Hide the layer."+msgstr ""++#: libbirdfont/LayerLabel.vala:166 msgid "Layer" msgstr "" @@ -879,7 +902,7 @@ msgid "Contextual Substitutions" msgstr ""  #: libbirdfont/LigatureList.vala:126 libbirdfont/LigatureList.vala:140-#: libbirdfont/Menu.vala:445+#: libbirdfont/Menu.vala:447 msgid "Ligatures" msgstr "" @@ -923,7 +946,7 @@ msgstr "" msgid "You need an older version of Birdfont to open it." msgstr "" -#: libbirdfont/MainWindow.vala:235+#: libbirdfont/MainWindow.vala:241 msgid "Glyph sequence" msgstr "" @@ -983,8 +1006,8 @@ msgstr "" msgid "Move To Baseline" msgstr "" -#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:250-#: libbirdfont/OverView.vala:269 libbirdfont/OverviewTools.vala:154+#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:257+#: libbirdfont/OverView.vala:276 libbirdfont/OverviewTools.vala:154 msgid "Search" msgstr "" @@ -1056,102 +1079,106 @@ msgstr "" msgid "Export Glyph as SVG" msgstr "" -#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:303+#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:304 msgid "Import SVG file" msgstr "" -#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:313 msgid "Import SVG folder" msgstr "" -#: libbirdfont/Menu.vala:303 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:304 libbirdfont/Menu.vala:313 msgid "color" msgstr "" -#: libbirdfont/Menu.vala:320+#: libbirdfont/Menu.vala:322 msgid "Import Background Image" msgstr "" -#: libbirdfont/Menu.vala:334 libbirdfont/Preview.vala:27+#: libbirdfont/Menu.vala:336 libbirdfont/Preview.vala:27 msgid "Preview" msgstr "" -#: libbirdfont/Menu.vala:342+#: libbirdfont/Menu.vala:344 msgid "Tab" msgstr "" -#: libbirdfont/Menu.vala:348+#: libbirdfont/Menu.vala:350 msgid "Next Tab" msgstr "" -#: libbirdfont/Menu.vala:355+#: libbirdfont/Menu.vala:357 msgid "Previous Tab" msgstr "" -#: libbirdfont/Menu.vala:362+#: libbirdfont/Menu.vala:364 msgid "Close Tab" msgstr "" -#: libbirdfont/Menu.vala:369+#: libbirdfont/Menu.vala:371 msgid "Close All Tabs" msgstr "" -#: libbirdfont/Menu.vala:377+#: libbirdfont/Menu.vala:379 msgid "Spacing and Kerning" msgstr "" -#: libbirdfont/Menu.vala:383+#: libbirdfont/Menu.vala:385 msgid "Show Spacing Tab" msgstr "" -#: libbirdfont/Menu.vala:390+#: libbirdfont/Menu.vala:392 msgid "Show Kerning Tab" msgstr "" -#: libbirdfont/Menu.vala:397+#: libbirdfont/Menu.vala:399 msgid "List Kerning Pairs" msgstr "" -#: libbirdfont/Menu.vala:404 libbirdfont/SpacingClassTab.vala:80+#: libbirdfont/Menu.vala:406 libbirdfont/SpacingClassTab.vala:80 msgid "Spacing Classes" msgstr "" -#: libbirdfont/Menu.vala:411+#: libbirdfont/Menu.vala:413 msgid "Select Next Kerning Pair" msgstr "" -#: libbirdfont/Menu.vala:420+#: libbirdfont/Menu.vala:422 msgid "Select Previous Kerning Pair" msgstr "" -#: libbirdfont/Menu.vala:429+#: libbirdfont/Menu.vala:431 msgid "Load Kerning Strings" msgstr "" -#: libbirdfont/Menu.vala:436+#: libbirdfont/Menu.vala:438 msgid "Reload Kerning Strings" msgstr "" -#: libbirdfont/Menu.vala:451+#: libbirdfont/Menu.vala:453 msgid "Show Ligatures" msgstr "" -#: libbirdfont/Menu.vala:458+#: libbirdfont/Menu.vala:460 msgid "Add Ligature" msgstr "" -#: libbirdfont/Menu.vala:467+#: libbirdfont/Menu.vala:469 msgid "Git" msgstr "" -#: libbirdfont/Menu.vala:473+#: libbirdfont/Menu.vala:475 msgid "Save As .bfp" msgstr "" -#: libbirdfont/Menu.vala:482 libbirdfont/OverView.vala:471+#: libbirdfont/Menu.vala:484 libbirdfont/OverView.vala:478 msgid "Overview" msgstr "" +#: libbirdfont/Menu.vala:513+msgid "Help"+msgstr ""+ #: libbirdfont/MenuItem.vala:82 msgid "UP" msgstr ""@@ -1233,15 +1260,11 @@ msgstr "" msgid "Swashes" msgstr "" -#: libbirdfont/OverView.vala:250 libbirdfont/OverView.vala:269+#: libbirdfont/OverView.vala:257 libbirdfont/OverView.vala:276 msgid "Filter" msgstr "" -#: libbirdfont/OverView.vala:673-msgid "No glyphs in this view."-msgstr ""--#: libbirdfont/OverView.vala:1484+#: libbirdfont/OverView.vala:1498 msgid "See also:" msgstr "" @@ -1418,10 +1441,6 @@ msgstr "" msgid "Right" msgstr "" -#: libbirdfont/SvgParser.vala:62 libbirdfont/SvgParser.vala:121-msgid "Import"-msgstr ""- #: libbirdfont/Theme.vala:421 msgid "Canvas Background" msgstr ""@@ -1706,7 +1725,7 @@ msgstr "" msgid "Color" msgstr "" -#: libbirdfont/ToolItem.vala:44+#: libbirdfont/ToolItem.vala:66 msgid "Shift" msgstr "" diff --git a/po/sv.po b/po/sv.poindex 96036ff..03bd98e 100644--- a/po/sv.po+++ b/po/sv.po@@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n"-"POT-Creation-Date: 2015-12-22 20:35+0100\n"+"POT-Creation-Date: 2016-01-06 12:06+0100\n" "PO-Revision-Date: 2015-12-22 19:35+0000\n" "Last-Translator: Johan <johan.mattsson.m@gmail.com>\n" "Language-Team: LANGUAGE <LL@li.org>\n"@@ -105,16 +105,16 @@ msgstr "Filer" msgid "Parts" msgstr "Delar" -#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2421+#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2462 #: libbirdfont/LigatureList.vala:106 libbirdfont/OtfFeatureTable.vala:181 msgid "Add" msgstr "Lägg till" -#: libbirdfont/BackgroundTools.vala:122+#: libbirdfont/BackgroundTools.vala:123 msgid "Select Glyph" msgstr "Välj tecken" -#: libbirdfont/BackgroundTools.vala:231 libbirdfont/LoadCallback.vala:102+#: libbirdfont/BackgroundTools.vala:233 libbirdfont/LoadCallback.vala:102 #: libbirdfont/Menu.vala:50 msgid "Open" msgstr "Öppna"@@ -188,18 +188,18 @@ msgid "Thai" msgstr "Thailändska"  #. / All lower case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:420+#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:433 msgid "a b c d e f g h i j k l m n o p q r s t u v w x y z" msgstr "a b c d e f g h i j k l m n o p q r s t u v w x y z å ä ö"  #. / All upper case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:421+#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:434 msgid "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z" msgstr "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Å Ä Ö"  #: libbirdfont/DescriptionDisplay.vala:66 #: libbirdfont/DescriptionDisplay.vala:277 libbirdfont/ExportSettings.vala:133-#: libbirdfont/Menu.vala:497 libbirdfont/TableLayout.vala:203+#: libbirdfont/Menu.vala:499 libbirdfont/TableLayout.vala:203 msgid "Name and Description" msgstr "Namn och beskrivning" @@ -237,7 +237,7 @@ msgid "Unique Identifier" msgstr "Unik identifikation"  #: libbirdfont/DescriptionDisplay.vala:150 libbirdfont/ImportUtils.vala:161-#: libbirdfont/Menu.vala:504 libbirdfont/Menu.vala:506+#: libbirdfont/Menu.vala:506 libbirdfont/Menu.vala:508 #: libbirdfont/VersionList.vala:265 msgid "Version" msgstr "Version"@@ -322,212 +322,221 @@ msgstr "Stödlinjer & rutnät" msgid "Grid Size" msgstr "Storlek på rutnätet" -#: libbirdfont/DrawingTools.vala:194+#: libbirdfont/DrawingTools.vala:195 msgid "Move canvas" msgstr "Flytta ritytan" -#: libbirdfont/DrawingTools.vala:202+#: libbirdfont/DrawingTools.vala:196+msgid "Press space and click to move the canvas."+msgstr ""++#: libbirdfont/DrawingTools.vala:204 msgid "Delete" msgstr "Radera" -#: libbirdfont/DrawingTools.vala:209+#: libbirdfont/DrawingTools.vala:211 msgid "Select all points or paths" msgstr "Markera alla punkter eller slingor" -#: libbirdfont/DrawingTools.vala:225 libbirdfont/Menu.vala:99+#: libbirdfont/DrawingTools.vala:227 libbirdfont/Menu.vala:99 msgid "Undo" msgstr "Ångra" -#: libbirdfont/DrawingTools.vala:232+#: libbirdfont/DrawingTools.vala:234 msgid "Insert new points on path" msgstr "Lägg till nya punkter på en slinga" -#: libbirdfont/DrawingTools.vala:241+#: libbirdfont/DrawingTools.vala:244 msgid "Create quadratic Bézier curves" msgstr "Skapa kvadratiska Bézier slingor" -#: libbirdfont/DrawingTools.vala:250+#: libbirdfont/DrawingTools.vala:245+msgid ""+"All control points will be converted to quadratic points in the TTF format."+msgstr ""++#: libbirdfont/DrawingTools.vala:255 msgid "Create cubic Bézier curves" msgstr "Skapa kubiska Bézier slingor" -#: libbirdfont/DrawingTools.vala:259+#: libbirdfont/DrawingTools.vala:264 msgid "Quadratic path with two line handles" msgstr "Kvadratisk slinga med två linjehandtag" -#: libbirdfont/DrawingTools.vala:268+#: libbirdfont/DrawingTools.vala:273 msgid "Convert selected points" msgstr "Konvertera markerade punkter" -#: libbirdfont/DrawingTools.vala:279+#: libbirdfont/DrawingTools.vala:284 msgid "X coordinate" msgstr "X-koordinat" -#: libbirdfont/DrawingTools.vala:323+#: libbirdfont/DrawingTools.vala:328 msgid "Y coordinate" msgstr "Y-koordinat" -#: libbirdfont/DrawingTools.vala:366+#: libbirdfont/DrawingTools.vala:371 msgid "Rotation" msgstr "Rotation" -#: libbirdfont/DrawingTools.vala:405+#: libbirdfont/DrawingTools.vala:410 msgid "Width" msgstr "Bredd" -#: libbirdfont/DrawingTools.vala:430+#: libbirdfont/DrawingTools.vala:435 msgid "Height" msgstr "Höjd" -#: libbirdfont/DrawingTools.vala:473+#: libbirdfont/DrawingTools.vala:478 msgid "Tie curve handles for the selected edit point" msgstr "Knyt handtagen för den markerade kontrollpunkten" -#: libbirdfont/DrawingTools.vala:524+#: libbirdfont/DrawingTools.vala:529 msgid "Symmetrical handles" msgstr "Symmetriska handtag" -#: libbirdfont/DrawingTools.vala:554+#: libbirdfont/DrawingTools.vala:559 msgid "Convert segment to line." msgstr "Konvertera segmentet till linje." -#: libbirdfont/DrawingTools.vala:562+#: libbirdfont/DrawingTools.vala:567 msgid "Create counter from outline" msgstr "Skapa insida från kontur" -#: libbirdfont/DrawingTools.vala:565+#: libbirdfont/DrawingTools.vala:570 msgid "Scale object to font top/baseline" msgstr "Skala objekt till typsnittets topp/baslinje" -#: libbirdfont/DrawingTools.vala:574+#: libbirdfont/DrawingTools.vala:579 msgid "Close path" msgstr "Stäng slinga" -#: libbirdfont/DrawingTools.vala:596+#: libbirdfont/DrawingTools.vala:601 msgid "Move to path to the bottom of the layer" msgstr "Flytta slingan till botten av lagret" -#: libbirdfont/DrawingTools.vala:610+#: libbirdfont/DrawingTools.vala:615 msgid "Flip path vertically" msgstr "Vänd slingan vertikalt" -#: libbirdfont/DrawingTools.vala:618+#: libbirdfont/DrawingTools.vala:623 msgid "Flip path horizontally" msgstr "Vänd slingan horisontellt" -#: libbirdfont/DrawingTools.vala:627+#: libbirdfont/DrawingTools.vala:632 msgid "Set size for background image" msgstr "Ställ in storleken på bakgrundsbilden" -#: libbirdfont/DrawingTools.vala:665+#: libbirdfont/DrawingTools.vala:670 msgid "Show/hide background image" msgstr "Visa/dölj bakgrundsbilden" -#: libbirdfont/DrawingTools.vala:676+#: libbirdfont/DrawingTools.vala:681 msgid "Insert a new background image" msgstr "Lägg till en ny bakgrundsbild" -#: libbirdfont/DrawingTools.vala:690 libbirdfont/ThemeTab.vala:151+#: libbirdfont/DrawingTools.vala:695 libbirdfont/ThemeTab.vala:151 msgid "High contrast" msgstr "Hög kontrast" -#: libbirdfont/DrawingTools.vala:704+#: libbirdfont/DrawingTools.vala:709 msgid "Set background threshold" msgstr "Ställ in tröskelvärde för bakgrundsbilden" -#: libbirdfont/DrawingTools.vala:723+#: libbirdfont/DrawingTools.vala:728 msgid "Amount of autotrace details" msgstr "Mängden genererade detaljer i autotrace" -#: libbirdfont/DrawingTools.vala:742+#: libbirdfont/DrawingTools.vala:747 msgid "Autotrace simplification" msgstr "Förenkling av genererade slingor" -#: libbirdfont/DrawingTools.vala:752+#: libbirdfont/DrawingTools.vala:757 msgid "Autotrace background image" msgstr "Automatisk konvertering från bakgrundsbild till vektorgrafik" -#: libbirdfont/DrawingTools.vala:760+#: libbirdfont/DrawingTools.vala:765 msgid "Delete background image" msgstr "Radera bakgrundsbild" -#: libbirdfont/DrawingTools.vala:767+#: libbirdfont/DrawingTools.vala:772 msgid "Add layer" msgstr "Lägg till lager" -#: libbirdfont/DrawingTools.vala:777+#: libbirdfont/DrawingTools.vala:782 msgid "Show layers" msgstr "Visa lager" -#: libbirdfont/DrawingTools.vala:787+#: libbirdfont/DrawingTools.vala:792 msgid "Apply stroke" msgstr "Använd sträck" -#: libbirdfont/DrawingTools.vala:821 libbirdfont/SettingsTab.vala:34+#: libbirdfont/DrawingTools.vala:826 libbirdfont/SettingsTab.vala:34 msgid "Stroke width" msgstr "Linjebredd" -#: libbirdfont/DrawingTools.vala:863+#: libbirdfont/DrawingTools.vala:872 msgid "Create outline form stroke" msgstr "Skapa kantlinje från streck" -#: libbirdfont/DrawingTools.vala:872+#: libbirdfont/DrawingTools.vala:881 msgid "Butt line cap" msgstr "Rak linjeavslutning" -#: libbirdfont/DrawingTools.vala:896+#: libbirdfont/DrawingTools.vala:908 msgid "Round line cap" msgstr "Rund linjeavslutning" -#: libbirdfont/DrawingTools.vala:921+#: libbirdfont/DrawingTools.vala:936 msgid "Square line cap" msgstr "Kvadratisk linjeavslutning" -#: libbirdfont/DrawingTools.vala:990+#: libbirdfont/DrawingTools.vala:1008 msgid "Show guidelines" msgstr "Visa stödlinjer" -#: libbirdfont/DrawingTools.vala:1002+#: libbirdfont/DrawingTools.vala:1020 msgid "Show more guidelines" msgstr "Visa fler stödlinjer" -#: libbirdfont/DrawingTools.vala:1018+#: libbirdfont/DrawingTools.vala:1036 msgid "Show guidelines at top and bottom margin" msgstr "Visa stödlinjer för botten- och toppmarginaler" -#: libbirdfont/DrawingTools.vala:1042+#: libbirdfont/DrawingTools.vala:1060 msgid "Lock guides and grid" msgstr "Lås stödlinjer och rutnät" -#: libbirdfont/DrawingTools.vala:1084+#: libbirdfont/DrawingTools.vala:1102 msgid "Zoom Out More" msgstr "Zooma ut ytterligare" -#: libbirdfont/DrawingTools.vala:1093+#: libbirdfont/DrawingTools.vala:1111 msgid "Show full glyph" msgstr "Visa hela" -#: libbirdfont/DrawingTools.vala:1100+#: libbirdfont/DrawingTools.vala:1118 msgid "Fit in view" msgstr "Anpassa till vy" -#: libbirdfont/DrawingTools.vala:1107+#: libbirdfont/DrawingTools.vala:1125 msgid "Zoom in on background image" msgstr "Visa hela bakgrundsbilden" -#: libbirdfont/DrawingTools.vala:1117+#: libbirdfont/DrawingTools.vala:1135 msgid "Previous view" msgstr "Föregående vy" -#: libbirdfont/DrawingTools.vala:1123+#: libbirdfont/DrawingTools.vala:1141 msgid "Next view" msgstr "Nästa vy" -#: libbirdfont/DrawingTools.vala:1525+#: libbirdfont/DrawingTools.vala:1543 msgid "Set size for grid" msgstr "Ställ in storleken på rutmönstret"  #: libbirdfont/ExportSettings.vala:41 libbirdfont/ExportSettings.vala:185-#: libbirdfont/Menu.vala:327+#: libbirdfont/Menu.vala:329 msgid "Export Settings" msgstr "Exportinställningar" @@ -551,13 +560,13 @@ msgstr "Format" msgid "Export" msgstr "Exportera" -#: libbirdfont/ExportTool.vala:209 libbirdfont/Menu.vala:64-#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:68+#: libbirdfont/ExportTool.vala:222 libbirdfont/Menu.vala:64+#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:69 #: libbirdfont/SaveDialog.vala:38 libbirdfont/SaveDialogListener.vala:29 msgid "Save" msgstr "Spara" -#: libbirdfont/ExportTool.vala:419+#: libbirdfont/ExportTool.vala:432 msgid "Alphabet" msgstr "Alfabetet" @@ -606,7 +615,7 @@ msgstr "Öppna ett typsnitt" msgid "Save font" msgstr "Spara typsnitt" -#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:490+#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:492 #: libbirdfont/SettingsDisplay.vala:225 libbirdfont/SettingsTab.vala:31 #: libbirdfont/SettingsTab.vala:159 msgid "Settings"@@ -617,39 +626,39 @@ msgstr "Inställningar" msgid "Themes" msgstr "Temata" -#: libbirdfont/Glyph.vala:550+#: libbirdfont/Glyph.vala:602 msgid "top margin" msgstr "övre marginal" -#: libbirdfont/Glyph.vala:557+#: libbirdfont/Glyph.vala:609 msgid "top" msgstr "överkant" -#: libbirdfont/Glyph.vala:564+#: libbirdfont/Glyph.vala:616 msgid "x-height" msgstr "x-höjd" -#: libbirdfont/Glyph.vala:573+#: libbirdfont/Glyph.vala:625 msgid "baseline" msgstr "baslinje" -#: libbirdfont/Glyph.vala:580+#: libbirdfont/Glyph.vala:632 msgid "bottom" msgstr "nederkant" -#: libbirdfont/Glyph.vala:586+#: libbirdfont/Glyph.vala:638 msgid "bottom margin" msgstr "undre marginal" -#: libbirdfont/Glyph.vala:592+#: libbirdfont/Glyph.vala:644 msgid "left" msgstr "vänster" -#: libbirdfont/Glyph.vala:601+#: libbirdfont/Glyph.vala:653 msgid "right" msgstr "höger" -#: libbirdfont/Glyph.vala:2421+#: libbirdfont/Glyph.vala:2462 msgid "Guide" msgstr "Hjälplinje" @@ -661,6 +670,10 @@ msgstr "Visa rutnät" msgid "Guides" msgstr "Hjälplinjer" +#: libbirdfont/Help.vala:29+msgid "BirdFont is a font editor."+msgstr ""+ #: libbirdfont/HiddenTools.vala:33 msgid "Zoom in" msgstr "Zooma in"@@ -726,36 +739,42 @@ msgstr "till" msgid "Glyph" msgstr "Tecken" -#: libbirdfont/KerningDisplay.vala:97 libbirdfont/KerningDisplay.vala:877+#: libbirdfont/KerningDisplay.vala:60+msgid ""+"Kerning is the process of adjusting the space between two letters. You can "+"cahnge the space between one letter and all other letters in the spacing tab."+msgstr ""++#: libbirdfont/KerningDisplay.vala:101 libbirdfont/KerningDisplay.vala:882 msgid "Kerning" msgstr "Kerning" -#: libbirdfont/KerningDisplay.vala:105+#: libbirdfont/KerningDisplay.vala:109 msgid "The current kerning class is malformed." msgstr "Klassen är inte i rätt format." -#: libbirdfont/KerningDisplay.vala:106+#: libbirdfont/KerningDisplay.vala:110 msgid "Add single characters separated by space and ranges on the form A-Z." msgstr "" "Lägg till enstaka tecken separerade av mellanslag och sekvenser av tecken på " "formen A-Z." -#: libbirdfont/KerningDisplay.vala:107+#: libbirdfont/KerningDisplay.vala:111 msgid "Type “space” to kern the space character and “divis” to kern -." msgstr "" "Skriv ”space” för att justera avståndet mot mellanslag och ”divis” för att " "justera avståndet mot -." -#: libbirdfont/KerningDisplay.vala:678 libbirdfont/OverviewTools.vala:78+#: libbirdfont/KerningDisplay.vala:683 libbirdfont/OverviewTools.vala:78 msgid "Unicode" msgstr "Unicode" -#: libbirdfont/KerningDisplay.vala:678+#: libbirdfont/KerningDisplay.vala:683 msgid "Insert" msgstr "Infoga" -#: libbirdfont/KerningDisplay.vala:877 libbirdfont/MainWindow.vala:235-#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:208+#: libbirdfont/KerningDisplay.vala:882 libbirdfont/MainWindow.vala:241+#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:231 msgid "Close" msgstr "Stäng" @@ -771,11 +790,11 @@ msgstr "Inga kerningpar är skapade." msgid "Kerning class" msgstr "Kerning klass" -#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:144+#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:166 #: libbirdfont/Ligatures.vala:118 libbirdfont/Ligatures.vala:141 #: libbirdfont/Ligatures.vala:164 libbirdfont/Ligatures.vala:196 #: libbirdfont/SpacingClass.vala:45 libbirdfont/SpacingTab.vala:232-#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:208+#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:231 #: libbirdfont/Theme.vala:687 msgid "Set" msgstr "Lägg till"@@ -840,7 +859,11 @@ msgstr "Teckenuppsättning" msgid "Character Set" msgstr "Teckenuppsättning" -#: libbirdfont/LayerLabel.vala:144+#: libbirdfont/LayerLabel.vala:101+msgid "Hide the layer."+msgstr ""++#: libbirdfont/LayerLabel.vala:166 msgid "Layer" msgstr "Lager" @@ -881,7 +904,7 @@ msgid "Contextual Substitutions" msgstr "Kontextuell ligatur"  #: libbirdfont/LigatureList.vala:126 libbirdfont/LigatureList.vala:140-#: libbirdfont/Menu.vala:445+#: libbirdfont/Menu.vala:447 msgid "Ligatures" msgstr "Ligaturer" @@ -925,7 +948,7 @@ msgstr "Det här typsnittet skapades med en gammal version av Birdfont." msgid "You need an older version of Birdfont to open it." msgstr "Du behöver en äldre version av Birdfont för att öppna det." -#: libbirdfont/MainWindow.vala:235+#: libbirdfont/MainWindow.vala:241 msgid "Glyph sequence" msgstr "Teckensekvens" @@ -985,8 +1008,8 @@ msgstr "Markera alla tecken" msgid "Move To Baseline" msgstr "Flytta till baslinjen" -#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:250-#: libbirdfont/OverView.vala:269 libbirdfont/OverviewTools.vala:154+#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:257+#: libbirdfont/OverView.vala:276 libbirdfont/OverviewTools.vala:154 msgid "Search" msgstr "Sök" @@ -1058,102 +1081,106 @@ msgstr "Exportera fonter" msgid "Export Glyph as SVG" msgstr "Exportera tecken som SVG" -#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:303+#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:304 msgid "Import SVG file" msgstr "Infoga en SVG fil" -#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:313 msgid "Import SVG folder" msgstr "Infoga en SVG mapp" -#: libbirdfont/Menu.vala:303 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:304 libbirdfont/Menu.vala:313 msgid "color" msgstr "färg" -#: libbirdfont/Menu.vala:320+#: libbirdfont/Menu.vala:322 msgid "Import Background Image" msgstr "Infoga en bakgrundsbild" -#: libbirdfont/Menu.vala:334 libbirdfont/Preview.vala:27+#: libbirdfont/Menu.vala:336 libbirdfont/Preview.vala:27 msgid "Preview" msgstr "Förhandsgranska" -#: libbirdfont/Menu.vala:342+#: libbirdfont/Menu.vala:344 msgid "Tab" msgstr "Flik" -#: libbirdfont/Menu.vala:348+#: libbirdfont/Menu.vala:350 msgid "Next Tab" msgstr "Nästa flik" -#: libbirdfont/Menu.vala:355+#: libbirdfont/Menu.vala:357 msgid "Previous Tab" msgstr "Föregående flik" -#: libbirdfont/Menu.vala:362+#: libbirdfont/Menu.vala:364 msgid "Close Tab" msgstr "Stäng flik" -#: libbirdfont/Menu.vala:369+#: libbirdfont/Menu.vala:371 msgid "Close All Tabs" msgstr "Stäng alla flikar" -#: libbirdfont/Menu.vala:377+#: libbirdfont/Menu.vala:379 msgid "Spacing and Kerning" msgstr "Teckenavstånd och Kerning" -#: libbirdfont/Menu.vala:383+#: libbirdfont/Menu.vala:385 msgid "Show Spacing Tab" msgstr "Visa teckenavstånd" -#: libbirdfont/Menu.vala:390+#: libbirdfont/Menu.vala:392 msgid "Show Kerning Tab" msgstr "Visa kerningflik" -#: libbirdfont/Menu.vala:397+#: libbirdfont/Menu.vala:399 msgid "List Kerning Pairs" msgstr "Lista alla kerningpar" -#: libbirdfont/Menu.vala:404 libbirdfont/SpacingClassTab.vala:80+#: libbirdfont/Menu.vala:406 libbirdfont/SpacingClassTab.vala:80 msgid "Spacing Classes" msgstr "Mellanrumsklasser" -#: libbirdfont/Menu.vala:411+#: libbirdfont/Menu.vala:413 msgid "Select Next Kerning Pair" msgstr "Välj nästa kerningpar" -#: libbirdfont/Menu.vala:420+#: libbirdfont/Menu.vala:422 msgid "Select Previous Kerning Pair" msgstr "Välj föregående kerningpar" -#: libbirdfont/Menu.vala:429+#: libbirdfont/Menu.vala:431 msgid "Load Kerning Strings" msgstr "Ladda kerning strängar" -#: libbirdfont/Menu.vala:436+#: libbirdfont/Menu.vala:438 msgid "Reload Kerning Strings" msgstr "Läs in kerning strängarna igen" -#: libbirdfont/Menu.vala:451+#: libbirdfont/Menu.vala:453 msgid "Show Ligatures" msgstr "Visa ligaturer" -#: libbirdfont/Menu.vala:458+#: libbirdfont/Menu.vala:460 msgid "Add Ligature" msgstr "Lägg till ligatur" -#: libbirdfont/Menu.vala:467+#: libbirdfont/Menu.vala:469 msgid "Git" msgstr "Git" -#: libbirdfont/Menu.vala:473+#: libbirdfont/Menu.vala:475 msgid "Save As .bfp" msgstr "Spara som .bfp" -#: libbirdfont/Menu.vala:482 libbirdfont/OverView.vala:471+#: libbirdfont/Menu.vala:484 libbirdfont/OverView.vala:478 msgid "Overview" msgstr "Översikt" +#: libbirdfont/Menu.vala:513+msgid "Help"+msgstr ""+ #: libbirdfont/MenuItem.vala:82 msgid "UP" msgstr "UPP"@@ -1235,15 +1262,11 @@ msgstr "Versaler till kapitäler" msgid "Swashes" msgstr "Swashes" -#: libbirdfont/OverView.vala:250 libbirdfont/OverView.vala:269+#: libbirdfont/OverView.vala:257 libbirdfont/OverView.vala:276 msgid "Filter" msgstr "Filtrera" -#: libbirdfont/OverView.vala:673-msgid "No glyphs in this view."-msgstr "Inga tecken att visa."--#: libbirdfont/OverView.vala:1484+#: libbirdfont/OverView.vala:1498 msgid "See also:" msgstr "Se även:" @@ -1420,10 +1443,6 @@ msgstr "Vänster" msgid "Right" msgstr "Höger" -#: libbirdfont/SvgParser.vala:62 libbirdfont/SvgParser.vala:121-msgid "Import"-msgstr "Importera"- #: libbirdfont/Theme.vala:421 msgid "Canvas Background" msgstr "Dukbakgrund"@@ -1708,7 +1727,7 @@ msgstr "Anpassad" msgid "Color" msgstr "Färg" -#: libbirdfont/ToolItem.vala:44+#: libbirdfont/ToolItem.vala:66 msgid "Shift" msgstr "Skift" @@ -1752,6 +1771,12 @@ msgstr "Okänt filformat." msgid "Writing" msgstr "Skriver" +#~ msgid "No glyphs in this view."+#~ msgstr "Inga tecken att visa."++#~ msgid "Import"+#~ msgstr "Importera"+ #~ msgid "Manufakturer" #~ msgstr "Tillverkare" diff --git a/po/tr.po b/po/tr.poindex 6957d24..3cc26d3 100644--- a/po/tr.po+++ b/po/tr.po@@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n"-"POT-Creation-Date: 2015-12-22 20:35+0100\n"+"POT-Creation-Date: 2016-01-06 12:06+0100\n" "PO-Revision-Date: 2015-12-19 09:15+0000\n" "Last-Translator: Anonymous Pootle User\n" "Language-Team: LANGUAGE <LL@li.org>\n"@@ -109,16 +109,16 @@ msgstr "Dosyalar" msgid "Parts" msgstr "Bölümler" -#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2421+#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2462 #: libbirdfont/LigatureList.vala:106 libbirdfont/OtfFeatureTable.vala:181 msgid "Add" msgstr "Ekle" -#: libbirdfont/BackgroundTools.vala:122+#: libbirdfont/BackgroundTools.vala:123 msgid "Select Glyph" msgstr "Glyph Seç" -#: libbirdfont/BackgroundTools.vala:231 libbirdfont/LoadCallback.vala:102+#: libbirdfont/BackgroundTools.vala:233 libbirdfont/LoadCallback.vala:102 #: libbirdfont/Menu.vala:50 msgid "Open" msgstr "Aç"@@ -194,18 +194,18 @@ msgid "Thai" msgstr "Tay Dili"  #. / All lower case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:420+#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:433 msgid "a b c d e f g h i j k l m n o p q r s t u v w x y z" msgstr ""  #. / All upper case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:421+#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:434 msgid "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z" msgstr ""  #: libbirdfont/DescriptionDisplay.vala:66 #: libbirdfont/DescriptionDisplay.vala:277 libbirdfont/ExportSettings.vala:133-#: libbirdfont/Menu.vala:497 libbirdfont/TableLayout.vala:203+#: libbirdfont/Menu.vala:499 libbirdfont/TableLayout.vala:203 msgid "Name and Description" msgstr "ad ve açıklama" @@ -244,7 +244,7 @@ msgid "Unique Identifier" msgstr "Özgün Tanımlayıcı"  #: libbirdfont/DescriptionDisplay.vala:150 libbirdfont/ImportUtils.vala:161-#: libbirdfont/Menu.vala:504 libbirdfont/Menu.vala:506+#: libbirdfont/Menu.vala:506 libbirdfont/Menu.vala:508 #: libbirdfont/VersionList.vala:265 msgid "Version" msgstr "Sürüm"@@ -330,214 +330,223 @@ msgstr "" msgid "Grid Size" msgstr "Izgara boyutu" -#: libbirdfont/DrawingTools.vala:194+#: libbirdfont/DrawingTools.vala:195 msgid "Move canvas" msgstr "Cizim alanini taşı" -#: libbirdfont/DrawingTools.vala:202+#: libbirdfont/DrawingTools.vala:196+msgid "Press space and click to move the canvas."+msgstr ""++#: libbirdfont/DrawingTools.vala:204 msgid "Delete" msgstr "Sil" -#: libbirdfont/DrawingTools.vala:209+#: libbirdfont/DrawingTools.vala:211 msgid "Select all points or paths" msgstr "Butun nokta ve cizgileri seç" -#: libbirdfont/DrawingTools.vala:225 libbirdfont/Menu.vala:99+#: libbirdfont/DrawingTools.vala:227 libbirdfont/Menu.vala:99 msgid "Undo" msgstr "Geri al" -#: libbirdfont/DrawingTools.vala:232+#: libbirdfont/DrawingTools.vala:234 msgid "Insert new points on path" msgstr "Yeni nokta ve cizgi (yol) ekle" -#: libbirdfont/DrawingTools.vala:241+#: libbirdfont/DrawingTools.vala:244 msgid "Create quadratic Bézier curves" msgstr "2. derece Bezier eğrisi oluştur" -#: libbirdfont/DrawingTools.vala:250+#: libbirdfont/DrawingTools.vala:245+msgid ""+"All control points will be converted to quadratic points in the TTF format."+msgstr ""++#: libbirdfont/DrawingTools.vala:255 msgid "Create cubic Bézier curves" msgstr "Kübik Bezier eğrisi oluştur" -#: libbirdfont/DrawingTools.vala:259+#: libbirdfont/DrawingTools.vala:264 #, fuzzy msgid "Quadratic path with two line handles" msgstr "4 kenarli bir yol ve iki tutaç" -#: libbirdfont/DrawingTools.vala:268+#: libbirdfont/DrawingTools.vala:273 msgid "Convert selected points" msgstr "Seçili noktaları dönüştür" -#: libbirdfont/DrawingTools.vala:279+#: libbirdfont/DrawingTools.vala:284 msgid "X coordinate" msgstr "X koordinatı" -#: libbirdfont/DrawingTools.vala:323+#: libbirdfont/DrawingTools.vala:328 msgid "Y coordinate" msgstr "Y koordinatı" -#: libbirdfont/DrawingTools.vala:366+#: libbirdfont/DrawingTools.vala:371 msgid "Rotation" msgstr "Döndürme" -#: libbirdfont/DrawingTools.vala:405+#: libbirdfont/DrawingTools.vala:410 msgid "Width" msgstr "Genişlik" -#: libbirdfont/DrawingTools.vala:430+#: libbirdfont/DrawingTools.vala:435 msgid "Height" msgstr "Yükseklik" -#: libbirdfont/DrawingTools.vala:473+#: libbirdfont/DrawingTools.vala:478 msgid "Tie curve handles for the selected edit point" msgstr "" -#: libbirdfont/DrawingTools.vala:524+#: libbirdfont/DrawingTools.vala:529 msgid "Symmetrical handles" msgstr "" -#: libbirdfont/DrawingTools.vala:554+#: libbirdfont/DrawingTools.vala:559 msgid "Convert segment to line." msgstr "Bir kismi, parçayi çizgi dönüştür" -#: libbirdfont/DrawingTools.vala:562+#: libbirdfont/DrawingTools.vala:567 msgid "Create counter from outline" msgstr "" -#: libbirdfont/DrawingTools.vala:565+#: libbirdfont/DrawingTools.vala:570 msgid "Scale object to font top/baseline" msgstr "" -#: libbirdfont/DrawingTools.vala:574+#: libbirdfont/DrawingTools.vala:579 msgid "Close path" msgstr "" -#: libbirdfont/DrawingTools.vala:596+#: libbirdfont/DrawingTools.vala:601 msgid "Move to path to the bottom of the layer" msgstr "" -#: libbirdfont/DrawingTools.vala:610+#: libbirdfont/DrawingTools.vala:615 msgid "Flip path vertically" msgstr "Dikey yönde çevir" -#: libbirdfont/DrawingTools.vala:618+#: libbirdfont/DrawingTools.vala:623 msgid "Flip path horizontally" msgstr "Yatay yönde çevir" -#: libbirdfont/DrawingTools.vala:627+#: libbirdfont/DrawingTools.vala:632 msgid "Set size for background image" msgstr "" -#: libbirdfont/DrawingTools.vala:665+#: libbirdfont/DrawingTools.vala:670 msgid "Show/hide background image" msgstr "" -#: libbirdfont/DrawingTools.vala:676+#: libbirdfont/DrawingTools.vala:681 msgid "Insert a new background image" msgstr "" -#: libbirdfont/DrawingTools.vala:690 libbirdfont/ThemeTab.vala:151+#: libbirdfont/DrawingTools.vala:695 libbirdfont/ThemeTab.vala:151 msgid "High contrast" msgstr "Koyu kontrast (karşıtlık)" -#: libbirdfont/DrawingTools.vala:704+#: libbirdfont/DrawingTools.vala:709 msgid "Set background threshold" msgstr "arkaplan ayar limiti" -#: libbirdfont/DrawingTools.vala:723+#: libbirdfont/DrawingTools.vala:728 msgid "Amount of autotrace details" msgstr "otomatik izleme miktari" -#: libbirdfont/DrawingTools.vala:742+#: libbirdfont/DrawingTools.vala:747 msgid "Autotrace simplification" msgstr "otomatik izleme basitlestirmesi" -#: libbirdfont/DrawingTools.vala:752+#: libbirdfont/DrawingTools.vala:757 msgid "Autotrace background image" msgstr "" -#: libbirdfont/DrawingTools.vala:760+#: libbirdfont/DrawingTools.vala:765 #, fuzzy msgid "Delete background image" msgstr "Arkaplan Resmi Seç" -#: libbirdfont/DrawingTools.vala:767+#: libbirdfont/DrawingTools.vala:772 msgid "Add layer" msgstr "" -#: libbirdfont/DrawingTools.vala:777+#: libbirdfont/DrawingTools.vala:782 msgid "Show layers" msgstr "" -#: libbirdfont/DrawingTools.vala:787+#: libbirdfont/DrawingTools.vala:792 msgid "Apply stroke" msgstr "vuruş, çarpma uygula" -#: libbirdfont/DrawingTools.vala:821 libbirdfont/SettingsTab.vala:34+#: libbirdfont/DrawingTools.vala:826 libbirdfont/SettingsTab.vala:34 msgid "Stroke width" msgstr "Çizgi kalınlığı" -#: libbirdfont/DrawingTools.vala:863+#: libbirdfont/DrawingTools.vala:872 msgid "Create outline form stroke" msgstr "" -#: libbirdfont/DrawingTools.vala:872+#: libbirdfont/DrawingTools.vala:881 msgid "Butt line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:896+#: libbirdfont/DrawingTools.vala:908 msgid "Round line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:921+#: libbirdfont/DrawingTools.vala:936 msgid "Square line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:990+#: libbirdfont/DrawingTools.vala:1008 msgid "Show guidelines" msgstr "" -#: libbirdfont/DrawingTools.vala:1002+#: libbirdfont/DrawingTools.vala:1020 msgid "Show more guidelines" msgstr "" -#: libbirdfont/DrawingTools.vala:1018+#: libbirdfont/DrawingTools.vala:1036 msgid "Show guidelines at top and bottom margin" msgstr "" -#: libbirdfont/DrawingTools.vala:1042+#: libbirdfont/DrawingTools.vala:1060 msgid "Lock guides and grid" msgstr "" -#: libbirdfont/DrawingTools.vala:1084+#: libbirdfont/DrawingTools.vala:1102 msgid "Zoom Out More" msgstr "" -#: libbirdfont/DrawingTools.vala:1093+#: libbirdfont/DrawingTools.vala:1111 msgid "Show full glyph" msgstr "" -#: libbirdfont/DrawingTools.vala:1100+#: libbirdfont/DrawingTools.vala:1118 msgid "Fit in view" msgstr "" -#: libbirdfont/DrawingTools.vala:1107+#: libbirdfont/DrawingTools.vala:1125 msgid "Zoom in on background image" msgstr "" -#: libbirdfont/DrawingTools.vala:1117+#: libbirdfont/DrawingTools.vala:1135 msgid "Previous view" msgstr "Önceki görünüm" -#: libbirdfont/DrawingTools.vala:1123+#: libbirdfont/DrawingTools.vala:1141 msgid "Next view" msgstr "Sonraki görünüm" -#: libbirdfont/DrawingTools.vala:1525+#: libbirdfont/DrawingTools.vala:1543 msgid "Set size for grid" msgstr ""  #: libbirdfont/ExportSettings.vala:41 libbirdfont/ExportSettings.vala:185-#: libbirdfont/Menu.vala:327+#: libbirdfont/Menu.vala:329 msgid "Export Settings" msgstr "" @@ -561,13 +570,13 @@ msgstr "" msgid "Export" msgstr "" -#: libbirdfont/ExportTool.vala:209 libbirdfont/Menu.vala:64-#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:68+#: libbirdfont/ExportTool.vala:222 libbirdfont/Menu.vala:64+#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:69 #: libbirdfont/SaveDialog.vala:38 libbirdfont/SaveDialogListener.vala:29 msgid "Save" msgstr "Kaydet" -#: libbirdfont/ExportTool.vala:419+#: libbirdfont/ExportTool.vala:432 msgid "Alphabet" msgstr "" @@ -620,7 +629,7 @@ msgstr "" msgid "Save font" msgstr "" -#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:490+#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:492 #: libbirdfont/SettingsDisplay.vala:225 libbirdfont/SettingsTab.vala:31 #: libbirdfont/SettingsTab.vala:159 msgid "Settings"@@ -631,39 +640,39 @@ msgstr "" msgid "Themes" msgstr "" -#: libbirdfont/Glyph.vala:550+#: libbirdfont/Glyph.vala:602 msgid "top margin" msgstr "" -#: libbirdfont/Glyph.vala:557+#: libbirdfont/Glyph.vala:609 msgid "top" msgstr "" -#: libbirdfont/Glyph.vala:564+#: libbirdfont/Glyph.vala:616 msgid "x-height" msgstr "" -#: libbirdfont/Glyph.vala:573+#: libbirdfont/Glyph.vala:625 msgid "baseline" msgstr "" -#: libbirdfont/Glyph.vala:580+#: libbirdfont/Glyph.vala:632 msgid "bottom" msgstr "" -#: libbirdfont/Glyph.vala:586+#: libbirdfont/Glyph.vala:638 msgid "bottom margin" msgstr "" -#: libbirdfont/Glyph.vala:592+#: libbirdfont/Glyph.vala:644 msgid "left" msgstr "" -#: libbirdfont/Glyph.vala:601+#: libbirdfont/Glyph.vala:653 msgid "right" msgstr "" -#: libbirdfont/Glyph.vala:2421+#: libbirdfont/Glyph.vala:2462 msgid "Guide" msgstr "" @@ -675,6 +684,10 @@ msgstr "Izgarayı göster" msgid "Guides" msgstr "" +#: libbirdfont/Help.vala:29+msgid "BirdFont is a font editor."+msgstr ""+ #: libbirdfont/HiddenTools.vala:33 msgid "Zoom in" msgstr "Yakınlaştır"@@ -740,32 +753,38 @@ msgstr "için" msgid "Glyph" msgstr "sembol" -#: libbirdfont/KerningDisplay.vala:97 libbirdfont/KerningDisplay.vala:877+#: libbirdfont/KerningDisplay.vala:60+msgid ""+"Kerning is the process of adjusting the space between two letters. You can "+"cahnge the space between one letter and all other letters in the spacing tab."+msgstr ""++#: libbirdfont/KerningDisplay.vala:101 libbirdfont/KerningDisplay.vala:882 msgid "Kerning" msgstr "Harf aralığı (Kerning)" -#: libbirdfont/KerningDisplay.vala:105+#: libbirdfont/KerningDisplay.vala:109 msgid "The current kerning class is malformed." msgstr "" -#: libbirdfont/KerningDisplay.vala:106+#: libbirdfont/KerningDisplay.vala:110 msgid "Add single characters separated by space and ranges on the form A-Z." msgstr "" -#: libbirdfont/KerningDisplay.vala:107+#: libbirdfont/KerningDisplay.vala:111 msgid "Type “space” to kern the space character and “divis” to kern -." msgstr "" -#: libbirdfont/KerningDisplay.vala:678 libbirdfont/OverviewTools.vala:78+#: libbirdfont/KerningDisplay.vala:683 libbirdfont/OverviewTools.vala:78 msgid "Unicode" msgstr "" -#: libbirdfont/KerningDisplay.vala:678+#: libbirdfont/KerningDisplay.vala:683 msgid "Insert" msgstr "" -#: libbirdfont/KerningDisplay.vala:877 libbirdfont/MainWindow.vala:235-#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:208+#: libbirdfont/KerningDisplay.vala:882 libbirdfont/MainWindow.vala:241+#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:231 msgid "Close" msgstr "" @@ -781,11 +800,11 @@ msgstr "" msgid "Kerning class" msgstr "" -#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:144+#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:166 #: libbirdfont/Ligatures.vala:118 libbirdfont/Ligatures.vala:141 #: libbirdfont/Ligatures.vala:164 libbirdfont/Ligatures.vala:196 #: libbirdfont/SpacingClass.vala:45 libbirdfont/SpacingTab.vala:232-#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:208+#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:231 #: libbirdfont/Theme.vala:687 msgid "Set" msgstr ""@@ -851,7 +870,11 @@ msgstr "Karakter seti" msgid "Character Set" msgstr "Karakter seti" -#: libbirdfont/LayerLabel.vala:144+#: libbirdfont/LayerLabel.vala:101+msgid "Hide the layer."+msgstr ""++#: libbirdfont/LayerLabel.vala:166 msgid "Layer" msgstr "" @@ -892,7 +915,7 @@ msgid "Contextual Substitutions" msgstr ""  #: libbirdfont/LigatureList.vala:126 libbirdfont/LigatureList.vala:140-#: libbirdfont/Menu.vala:445+#: libbirdfont/Menu.vala:447 msgid "Ligatures" msgstr "" @@ -936,7 +959,7 @@ msgstr "" msgid "You need an older version of Birdfont to open it." msgstr "" -#: libbirdfont/MainWindow.vala:235+#: libbirdfont/MainWindow.vala:241 msgid "Glyph sequence" msgstr "" @@ -998,8 +1021,8 @@ msgstr "" msgid "Move To Baseline" msgstr "" -#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:250-#: libbirdfont/OverView.vala:269 libbirdfont/OverviewTools.vala:154+#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:257+#: libbirdfont/OverView.vala:276 libbirdfont/OverviewTools.vala:154 msgid "Search" msgstr "Ara" @@ -1071,103 +1094,107 @@ msgstr "" msgid "Export Glyph as SVG" msgstr "" -#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:303+#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:304 msgid "Import SVG file" msgstr "" -#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:313 msgid "Import SVG folder" msgstr "" -#: libbirdfont/Menu.vala:303 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:304 libbirdfont/Menu.vala:313 msgid "color" msgstr "" -#: libbirdfont/Menu.vala:320+#: libbirdfont/Menu.vala:322 #, fuzzy msgid "Import Background Image" msgstr "Arkaplan Resmi Seç" -#: libbirdfont/Menu.vala:334 libbirdfont/Preview.vala:27+#: libbirdfont/Menu.vala:336 libbirdfont/Preview.vala:27 msgid "Preview" msgstr "Önizleme" -#: libbirdfont/Menu.vala:342+#: libbirdfont/Menu.vala:344 msgid "Tab" msgstr "" -#: libbirdfont/Menu.vala:348+#: libbirdfont/Menu.vala:350 msgid "Next Tab" msgstr "" -#: libbirdfont/Menu.vala:355+#: libbirdfont/Menu.vala:357 msgid "Previous Tab" msgstr "" -#: libbirdfont/Menu.vala:362+#: libbirdfont/Menu.vala:364 msgid "Close Tab" msgstr "" -#: libbirdfont/Menu.vala:369+#: libbirdfont/Menu.vala:371 msgid "Close All Tabs" msgstr "" -#: libbirdfont/Menu.vala:377+#: libbirdfont/Menu.vala:379 msgid "Spacing and Kerning" msgstr "" -#: libbirdfont/Menu.vala:383+#: libbirdfont/Menu.vala:385 msgid "Show Spacing Tab" msgstr "" -#: libbirdfont/Menu.vala:390+#: libbirdfont/Menu.vala:392 msgid "Show Kerning Tab" msgstr "" -#: libbirdfont/Menu.vala:397+#: libbirdfont/Menu.vala:399 msgid "List Kerning Pairs" msgstr "" -#: libbirdfont/Menu.vala:404 libbirdfont/SpacingClassTab.vala:80+#: libbirdfont/Menu.vala:406 libbirdfont/SpacingClassTab.vala:80 msgid "Spacing Classes" msgstr "" -#: libbirdfont/Menu.vala:411+#: libbirdfont/Menu.vala:413 msgid "Select Next Kerning Pair" msgstr "" -#: libbirdfont/Menu.vala:420+#: libbirdfont/Menu.vala:422 msgid "Select Previous Kerning Pair" msgstr "" -#: libbirdfont/Menu.vala:429+#: libbirdfont/Menu.vala:431 msgid "Load Kerning Strings" msgstr "" -#: libbirdfont/Menu.vala:436+#: libbirdfont/Menu.vala:438 msgid "Reload Kerning Strings" msgstr "" -#: libbirdfont/Menu.vala:451+#: libbirdfont/Menu.vala:453 msgid "Show Ligatures" msgstr "" -#: libbirdfont/Menu.vala:458+#: libbirdfont/Menu.vala:460 msgid "Add Ligature" msgstr "" -#: libbirdfont/Menu.vala:467+#: libbirdfont/Menu.vala:469 msgid "Git" msgstr "" -#: libbirdfont/Menu.vala:473+#: libbirdfont/Menu.vala:475 msgid "Save As .bfp" msgstr "" -#: libbirdfont/Menu.vala:482 libbirdfont/OverView.vala:471+#: libbirdfont/Menu.vala:484 libbirdfont/OverView.vala:478 msgid "Overview" msgstr "Gözden Geçirme" +#: libbirdfont/Menu.vala:513+msgid "Help"+msgstr ""+ #: libbirdfont/MenuItem.vala:82 msgid "UP" msgstr ""@@ -1249,15 +1276,11 @@ msgstr "" msgid "Swashes" msgstr "" -#: libbirdfont/OverView.vala:250 libbirdfont/OverView.vala:269+#: libbirdfont/OverView.vala:257 libbirdfont/OverView.vala:276 msgid "Filter" msgstr "Filtre" -#: libbirdfont/OverView.vala:673-msgid "No glyphs in this view."-msgstr ""--#: libbirdfont/OverView.vala:1484+#: libbirdfont/OverView.vala:1498 msgid "See also:" msgstr "Ayrıca bakınız:" @@ -1437,10 +1460,6 @@ msgstr "" msgid "Right" msgstr "" -#: libbirdfont/SvgParser.vala:62 libbirdfont/SvgParser.vala:121-msgid "Import"-msgstr "İçe Aktar"- #: libbirdfont/Theme.vala:421 msgid "Canvas Background" msgstr ""@@ -1725,7 +1744,7 @@ msgstr "" msgid "Color" msgstr "" -#: libbirdfont/ToolItem.vala:44+#: libbirdfont/ToolItem.vala:66 msgid "Shift" msgstr "" @@ -1770,6 +1789,9 @@ msgstr "" msgid "Writing" msgstr "Yazılıyor" +#~ msgid "Import"+#~ msgstr "İçe Aktar"+ #, fuzzy #~ msgid "Full name (name and style)" #~ msgstr "Ad ve soyad"diff --git a/po/uk.po b/po/uk.poindex 3d7eca6..2730500 100644--- a/po/uk.po+++ b/po/uk.po@@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n"-"POT-Creation-Date: 2015-12-22 20:35+0100\n"+"POT-Creation-Date: 2016-01-06 12:06+0100\n" "PO-Revision-Date: 2015-06-04 10:54+0000\n" "Last-Translator: Anonymous Pootle User\n" "Language-Team: LANGUAGE <LL@li.org>\n"@@ -111,16 +111,16 @@ msgstr "Файли" msgid "Parts" msgstr "" -#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2421+#: libbirdfont/BackgroundTools.vala:53 libbirdfont/Glyph.vala:2462 #: libbirdfont/LigatureList.vala:106 libbirdfont/OtfFeatureTable.vala:181 msgid "Add" msgstr "" -#: libbirdfont/BackgroundTools.vala:122+#: libbirdfont/BackgroundTools.vala:123 msgid "Select Glyph" msgstr "" -#: libbirdfont/BackgroundTools.vala:231 libbirdfont/LoadCallback.vala:102+#: libbirdfont/BackgroundTools.vala:233 libbirdfont/LoadCallback.vala:102 #: libbirdfont/Menu.vala:50 msgid "Open" msgstr "Відкрити"@@ -196,14 +196,14 @@ msgid "Thai" msgstr ""  #. / All lower case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:420+#: libbirdfont/DefaultCharactersSet.vala:118 libbirdfont/ExportTool.vala:433 msgid "a b c d e f g h i j k l m n o p q r s t u v w x y z" msgstr "" "а, б, в, г, ґ, д, е, є, ж, з, и, і, ї, й, к, л, м, н, о, п, р, с, т, у, ф, " "х, ц, ч, ш, щ, ь, ю, я"  #. / All upper case letters in alphabetic order separated by space. Letters with diacritical marks should be included.-#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:421+#: libbirdfont/DefaultCharactersSet.vala:121 libbirdfont/ExportTool.vala:434 msgid "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z" msgstr "" "А, Б, В, Г, Ґ, Д, Е, Є, Ж, З, И, І, Ї, Й, К, Л, М, Н, О, П, Р, С, Т, У, Ф, "@@ -211,7 +211,7 @@ msgstr ""  #: libbirdfont/DescriptionDisplay.vala:66 #: libbirdfont/DescriptionDisplay.vala:277 libbirdfont/ExportSettings.vala:133-#: libbirdfont/Menu.vala:497 libbirdfont/TableLayout.vala:203+#: libbirdfont/Menu.vala:499 libbirdfont/TableLayout.vala:203 #, fuzzy msgid "Name and Description" msgstr "Ім'я та _Опис"@@ -253,7 +253,7 @@ msgid "Unique Identifier" msgstr "Унікальний ідентифікатор"  #: libbirdfont/DescriptionDisplay.vala:150 libbirdfont/ImportUtils.vala:161-#: libbirdfont/Menu.vala:504 libbirdfont/Menu.vala:506+#: libbirdfont/Menu.vala:506 libbirdfont/Menu.vala:508 #: libbirdfont/VersionList.vala:265 msgid "Version" msgstr "Версія"@@ -340,215 +340,224 @@ msgstr "" msgid "Grid Size" msgstr "" -#: libbirdfont/DrawingTools.vala:194+#: libbirdfont/DrawingTools.vala:195 msgid "Move canvas" msgstr "" -#: libbirdfont/DrawingTools.vala:202+#: libbirdfont/DrawingTools.vala:196+msgid "Press space and click to move the canvas."+msgstr ""++#: libbirdfont/DrawingTools.vala:204 msgid "Delete" msgstr "" -#: libbirdfont/DrawingTools.vala:209+#: libbirdfont/DrawingTools.vala:211 msgid "Select all points or paths" msgstr "" -#: libbirdfont/DrawingTools.vala:225 libbirdfont/Menu.vala:99+#: libbirdfont/DrawingTools.vala:227 libbirdfont/Menu.vala:99 #, fuzzy msgid "Undo" msgstr "_Відмінити" -#: libbirdfont/DrawingTools.vala:232+#: libbirdfont/DrawingTools.vala:234 msgid "Insert new points on path" msgstr "" -#: libbirdfont/DrawingTools.vala:241+#: libbirdfont/DrawingTools.vala:244 msgid "Create quadratic Bézier curves" msgstr "Створити квадратну криву Безьє" -#: libbirdfont/DrawingTools.vala:250+#: libbirdfont/DrawingTools.vala:245+msgid ""+"All control points will be converted to quadratic points in the TTF format."+msgstr ""++#: libbirdfont/DrawingTools.vala:255 msgid "Create cubic Bézier curves" msgstr "Створити кубічну криву Безьє" -#: libbirdfont/DrawingTools.vala:259+#: libbirdfont/DrawingTools.vala:264 msgid "Quadratic path with two line handles" msgstr "Квадратичний шлях з двома лінійними держаками" -#: libbirdfont/DrawingTools.vala:268+#: libbirdfont/DrawingTools.vala:273 msgid "Convert selected points" msgstr "Перетворити вибрані точки" -#: libbirdfont/DrawingTools.vala:279+#: libbirdfont/DrawingTools.vala:284 msgid "X coordinate" msgstr "" -#: libbirdfont/DrawingTools.vala:323+#: libbirdfont/DrawingTools.vala:328 msgid "Y coordinate" msgstr "" -#: libbirdfont/DrawingTools.vala:366+#: libbirdfont/DrawingTools.vala:371 msgid "Rotation" msgstr "" -#: libbirdfont/DrawingTools.vala:405+#: libbirdfont/DrawingTools.vala:410 msgid "Width" msgstr "" -#: libbirdfont/DrawingTools.vala:430+#: libbirdfont/DrawingTools.vala:435 msgid "Height" msgstr "" -#: libbirdfont/DrawingTools.vala:473+#: libbirdfont/DrawingTools.vala:478 msgid "Tie curve handles for the selected edit point" msgstr "Круглові держаки кривої для виділеної точки правки" -#: libbirdfont/DrawingTools.vala:524+#: libbirdfont/DrawingTools.vala:529 msgid "Symmetrical handles" msgstr "Симетричні держаки" -#: libbirdfont/DrawingTools.vala:554+#: libbirdfont/DrawingTools.vala:559 msgid "Convert segment to line." msgstr "Конвертувати сегмент у лінію" -#: libbirdfont/DrawingTools.vala:562+#: libbirdfont/DrawingTools.vala:567 msgid "Create counter from outline" msgstr "Створити контур з лінії" -#: libbirdfont/DrawingTools.vala:565+#: libbirdfont/DrawingTools.vala:570 msgid "Scale object to font top/baseline" msgstr "" -#: libbirdfont/DrawingTools.vala:574+#: libbirdfont/DrawingTools.vala:579 #, fuzzy msgid "Close path" msgstr "Замкнути _контур" -#: libbirdfont/DrawingTools.vala:596+#: libbirdfont/DrawingTools.vala:601 msgid "Move to path to the bottom of the layer" msgstr "" -#: libbirdfont/DrawingTools.vala:610+#: libbirdfont/DrawingTools.vala:615 msgid "Flip path vertically" msgstr "Перевернути контур вертикально" -#: libbirdfont/DrawingTools.vala:618+#: libbirdfont/DrawingTools.vala:623 msgid "Flip path horizontally" msgstr "Перевернути контур горизонтально" -#: libbirdfont/DrawingTools.vala:627+#: libbirdfont/DrawingTools.vala:632 msgid "Set size for background image" msgstr "Встановити розмір фонового зображення" -#: libbirdfont/DrawingTools.vala:665+#: libbirdfont/DrawingTools.vala:670 msgid "Show/hide background image" msgstr "Показати/сховати зображення тла" -#: libbirdfont/DrawingTools.vala:676+#: libbirdfont/DrawingTools.vala:681 msgid "Insert a new background image" msgstr "Встановити нове зображення тла" -#: libbirdfont/DrawingTools.vala:690 libbirdfont/ThemeTab.vala:151+#: libbirdfont/DrawingTools.vala:695 libbirdfont/ThemeTab.vala:151 msgid "High contrast" msgstr "" -#: libbirdfont/DrawingTools.vala:704+#: libbirdfont/DrawingTools.vala:709 msgid "Set background threshold" msgstr "" -#: libbirdfont/DrawingTools.vala:723+#: libbirdfont/DrawingTools.vala:728 msgid "Amount of autotrace details" msgstr "" -#: libbirdfont/DrawingTools.vala:742+#: libbirdfont/DrawingTools.vala:747 msgid "Autotrace simplification" msgstr "" -#: libbirdfont/DrawingTools.vala:752+#: libbirdfont/DrawingTools.vala:757 msgid "Autotrace background image" msgstr "" -#: libbirdfont/DrawingTools.vala:760+#: libbirdfont/DrawingTools.vala:765 msgid "Delete background image" msgstr "" -#: libbirdfont/DrawingTools.vala:767+#: libbirdfont/DrawingTools.vala:772 msgid "Add layer" msgstr "" -#: libbirdfont/DrawingTools.vala:777+#: libbirdfont/DrawingTools.vala:782 msgid "Show layers" msgstr "" -#: libbirdfont/DrawingTools.vala:787+#: libbirdfont/DrawingTools.vala:792 msgid "Apply stroke" msgstr "" -#: libbirdfont/DrawingTools.vala:821 libbirdfont/SettingsTab.vala:34+#: libbirdfont/DrawingTools.vala:826 libbirdfont/SettingsTab.vala:34 msgid "Stroke width" msgstr "Товщина штриха" -#: libbirdfont/DrawingTools.vala:863+#: libbirdfont/DrawingTools.vala:872 msgid "Create outline form stroke" msgstr "" -#: libbirdfont/DrawingTools.vala:872+#: libbirdfont/DrawingTools.vala:881 msgid "Butt line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:896+#: libbirdfont/DrawingTools.vala:908 msgid "Round line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:921+#: libbirdfont/DrawingTools.vala:936 msgid "Square line cap" msgstr "" -#: libbirdfont/DrawingTools.vala:990+#: libbirdfont/DrawingTools.vala:1008 msgid "Show guidelines" msgstr "Показати орієнтири" -#: libbirdfont/DrawingTools.vala:1002+#: libbirdfont/DrawingTools.vala:1020 #, fuzzy msgid "Show more guidelines" msgstr "Показати орієнтири" -#: libbirdfont/DrawingTools.vala:1018+#: libbirdfont/DrawingTools.vala:1036 msgid "Show guidelines at top and bottom margin" msgstr "Показати орієнтири для верхньої і нижньої меж" -#: libbirdfont/DrawingTools.vala:1042+#: libbirdfont/DrawingTools.vala:1060 msgid "Lock guides and grid" msgstr "" -#: libbirdfont/DrawingTools.vala:1084+#: libbirdfont/DrawingTools.vala:1102 msgid "Zoom Out More" msgstr "" -#: libbirdfont/DrawingTools.vala:1093+#: libbirdfont/DrawingTools.vala:1111 msgid "Show full glyph" msgstr "Показати гліф повністю" -#: libbirdfont/DrawingTools.vala:1100+#: libbirdfont/DrawingTools.vala:1118 msgid "Fit in view" msgstr "" -#: libbirdfont/DrawingTools.vala:1107+#: libbirdfont/DrawingTools.vala:1125 msgid "Zoom in on background image" msgstr "Наблизити у межах фонового зображення" -#: libbirdfont/DrawingTools.vala:1117+#: libbirdfont/DrawingTools.vala:1135 msgid "Previous view" msgstr "Попередній вигляд" -#: libbirdfont/DrawingTools.vala:1123+#: libbirdfont/DrawingTools.vala:1141 msgid "Next view" msgstr "Наступний вигляд" -#: libbirdfont/DrawingTools.vala:1525+#: libbirdfont/DrawingTools.vala:1543 msgid "Set size for grid" msgstr "Установити розмір для сітки"  #: libbirdfont/ExportSettings.vala:41 libbirdfont/ExportSettings.vala:185-#: libbirdfont/Menu.vala:327+#: libbirdfont/Menu.vala:329 msgid "Export Settings" msgstr "" @@ -573,13 +582,13 @@ msgstr "" msgid "Export" msgstr "_Експорт" -#: libbirdfont/ExportTool.vala:209 libbirdfont/Menu.vala:64-#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:68+#: libbirdfont/ExportTool.vala:222 libbirdfont/Menu.vala:64+#: libbirdfont/MenuTab.vala:355 libbirdfont/SaveCallback.vala:69 #: libbirdfont/SaveDialog.vala:38 libbirdfont/SaveDialogListener.vala:29 msgid "Save" msgstr "Зберегти" -#: libbirdfont/ExportTool.vala:419+#: libbirdfont/ExportTool.vala:432 msgid "Alphabet" msgstr "" @@ -633,7 +642,7 @@ msgstr "" msgid "Save font" msgstr "" -#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:490+#: libbirdfont/FileTools.vala:49 libbirdfont/Menu.vala:492 #: libbirdfont/SettingsDisplay.vala:225 libbirdfont/SettingsTab.vala:31 #: libbirdfont/SettingsTab.vala:159 msgid "Settings"@@ -644,39 +653,39 @@ msgstr "" msgid "Themes" msgstr "" -#: libbirdfont/Glyph.vala:550+#: libbirdfont/Glyph.vala:602 msgid "top margin" msgstr "" -#: libbirdfont/Glyph.vala:557+#: libbirdfont/Glyph.vala:609 msgid "top" msgstr "" -#: libbirdfont/Glyph.vala:564+#: libbirdfont/Glyph.vala:616 msgid "x-height" msgstr "" -#: libbirdfont/Glyph.vala:573+#: libbirdfont/Glyph.vala:625 msgid "baseline" msgstr "" -#: libbirdfont/Glyph.vala:580+#: libbirdfont/Glyph.vala:632 msgid "bottom" msgstr "" -#: libbirdfont/Glyph.vala:586+#: libbirdfont/Glyph.vala:638 msgid "bottom margin" msgstr "" -#: libbirdfont/Glyph.vala:592+#: libbirdfont/Glyph.vala:644 msgid "left" msgstr "" -#: libbirdfont/Glyph.vala:601+#: libbirdfont/Glyph.vala:653 msgid "right" msgstr "" -#: libbirdfont/Glyph.vala:2421+#: libbirdfont/Glyph.vala:2462 msgid "Guide" msgstr "" @@ -688,6 +697,10 @@ msgstr "Показати сітку" msgid "Guides" msgstr "" +#: libbirdfont/Help.vala:29+msgid "BirdFont is a font editor."+msgstr ""+ #: libbirdfont/HiddenTools.vala:33 #, fuzzy msgid "Zoom in"@@ -755,33 +768,39 @@ msgstr "" msgid "Glyph" msgstr "" -#: libbirdfont/KerningDisplay.vala:97 libbirdfont/KerningDisplay.vala:877+#: libbirdfont/KerningDisplay.vala:60+msgid ""+"Kerning is the process of adjusting the space between two letters. You can "+"cahnge the space between one letter and all other letters in the spacing tab."+msgstr ""++#: libbirdfont/KerningDisplay.vala:101 libbirdfont/KerningDisplay.vala:882 msgid "Kerning" msgstr "Кернінг" -#: libbirdfont/KerningDisplay.vala:105+#: libbirdfont/KerningDisplay.vala:109 msgid "The current kerning class is malformed." msgstr "Поточний клас кернінгу спотворено." -#: libbirdfont/KerningDisplay.vala:106+#: libbirdfont/KerningDisplay.vala:110 msgid "Add single characters separated by space and ranges on the form A-Z." msgstr "" "Додати одиничні символи відокремлені пробілом та діапазонами у формі A-Z." -#: libbirdfont/KerningDisplay.vala:107+#: libbirdfont/KerningDisplay.vala:111 msgid "Type “space” to kern the space character and “divis” to kern -." msgstr "Ввести “space” для керну простору символів та “divis” для керну -." -#: libbirdfont/KerningDisplay.vala:678 libbirdfont/OverviewTools.vala:78+#: libbirdfont/KerningDisplay.vala:683 libbirdfont/OverviewTools.vala:78 msgid "Unicode" msgstr "" -#: libbirdfont/KerningDisplay.vala:678+#: libbirdfont/KerningDisplay.vala:683 msgid "Insert" msgstr "" -#: libbirdfont/KerningDisplay.vala:877 libbirdfont/MainWindow.vala:235-#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:208+#: libbirdfont/KerningDisplay.vala:882 libbirdfont/MainWindow.vala:241+#: libbirdfont/MessageDialog.vala:37 libbirdfont/SpinButton.vala:231 msgid "Close" msgstr "Закрити" @@ -797,11 +816,11 @@ msgstr "" msgid "Kerning class" msgstr "Клас кернінгу" -#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:144+#: libbirdfont/KerningRange.vala:113 libbirdfont/LayerLabel.vala:166 #: libbirdfont/Ligatures.vala:118 libbirdfont/Ligatures.vala:141 #: libbirdfont/Ligatures.vala:164 libbirdfont/Ligatures.vala:196 #: libbirdfont/SpacingClass.vala:45 libbirdfont/SpacingTab.vala:232-#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:208+#: libbirdfont/SpacingTab.vala:276 libbirdfont/SpinButton.vala:231 #: libbirdfont/Theme.vala:687 msgid "Set" msgstr "Встановити"@@ -868,7 +887,11 @@ msgstr "Кодування" msgid "Character Set" msgstr "Кодування" -#: libbirdfont/LayerLabel.vala:144+#: libbirdfont/LayerLabel.vala:101+msgid "Hide the layer."+msgstr ""++#: libbirdfont/LayerLabel.vala:166 msgid "Layer" msgstr "" @@ -909,7 +932,7 @@ msgid "Contextual Substitutions" msgstr ""  #: libbirdfont/LigatureList.vala:126 libbirdfont/LigatureList.vala:140-#: libbirdfont/Menu.vala:445+#: libbirdfont/Menu.vala:447 msgid "Ligatures" msgstr "" @@ -954,7 +977,7 @@ msgstr "" msgid "You need an older version of Birdfont to open it." msgstr "" -#: libbirdfont/MainWindow.vala:235+#: libbirdfont/MainWindow.vala:241 msgid "Glyph sequence" msgstr "Послідовність гліфів" @@ -1024,8 +1047,8 @@ msgstr "" msgid "Move To Baseline" msgstr "" -#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:250-#: libbirdfont/OverView.vala:269 libbirdfont/OverviewTools.vala:154+#: libbirdfont/Menu.vala:155 libbirdfont/OverView.vala:257+#: libbirdfont/OverView.vala:276 libbirdfont/OverviewTools.vala:154 msgid "Search" msgstr "Пошук" @@ -1105,108 +1128,112 @@ msgstr "Експортувати шрифти" msgid "Export Glyph as SVG" msgstr "_Експорт гліфа як SVG" -#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:303+#: libbirdfont/Menu.vala:288 libbirdfont/Menu.vala:304 msgid "Import SVG file" msgstr "" -#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:295 libbirdfont/Menu.vala:313 msgid "Import SVG folder" msgstr "" -#: libbirdfont/Menu.vala:303 libbirdfont/Menu.vala:312+#: libbirdfont/Menu.vala:304 libbirdfont/Menu.vala:313 msgid "color" msgstr "" -#: libbirdfont/Menu.vala:320+#: libbirdfont/Menu.vala:322 msgid "Import Background Image" msgstr "" -#: libbirdfont/Menu.vala:334 libbirdfont/Preview.vala:27+#: libbirdfont/Menu.vala:336 libbirdfont/Preview.vala:27 msgid "Preview" msgstr "Передпрогляд" -#: libbirdfont/Menu.vala:342+#: libbirdfont/Menu.vala:344 msgid "Tab" msgstr "" -#: libbirdfont/Menu.vala:348+#: libbirdfont/Menu.vala:350 #, fuzzy msgid "Next Tab" msgstr "_Наступна вкладка" -#: libbirdfont/Menu.vala:355+#: libbirdfont/Menu.vala:357 #, fuzzy msgid "Previous Tab" msgstr "_Попередня вкладка" -#: libbirdfont/Menu.vala:362+#: libbirdfont/Menu.vala:364 #, fuzzy msgid "Close Tab" msgstr "_Закрити вкладку" -#: libbirdfont/Menu.vala:369+#: libbirdfont/Menu.vala:371 #, fuzzy msgid "Close All Tabs" msgstr "Закрити _усі вкладки" -#: libbirdfont/Menu.vala:377+#: libbirdfont/Menu.vala:379 msgid "Spacing and Kerning" msgstr "" -#: libbirdfont/Menu.vala:383+#: libbirdfont/Menu.vala:385 #, fuzzy msgid "Show Spacing Tab" msgstr "Показати вкладку кернінгу" -#: libbirdfont/Menu.vala:390+#: libbirdfont/Menu.vala:392 #, fuzzy msgid "Show Kerning Tab" msgstr "Показати вкладку кернінгу" -#: libbirdfont/Menu.vala:397+#: libbirdfont/Menu.vala:399 msgid "List Kerning Pairs" msgstr "" -#: libbirdfont/Menu.vala:404 libbirdfont/SpacingClassTab.vala:80+#: libbirdfont/Menu.vala:406 libbirdfont/SpacingClassTab.vala:80 msgid "Spacing Classes" msgstr "" -#: libbirdfont/Menu.vala:411+#: libbirdfont/Menu.vala:413 msgid "Select Next Kerning Pair" msgstr "" -#: libbirdfont/Menu.vala:420+#: libbirdfont/Menu.vala:422 msgid "Select Previous Kerning Pair" msgstr "" -#: libbirdfont/Menu.vala:429+#: libbirdfont/Menu.vala:431 msgid "Load Kerning Strings" msgstr "" -#: libbirdfont/Menu.vala:436+#: libbirdfont/Menu.vala:438 msgid "Reload Kerning Strings" msgstr "" -#: libbirdfont/Menu.vala:451+#: libbirdfont/Menu.vala:453 msgid "Show Ligatures" msgstr "" -#: libbirdfont/Menu.vala:458+#: libbirdfont/Menu.vala:460 msgid "Add Ligature" msgstr "" -#: libbirdfont/Menu.vala:467+#: libbirdfont/Menu.vala:469 msgid "Git" msgstr "" -#: libbirdfont/Menu.vala:473+#: libbirdfont/Menu.vala:475 msgid "Save As .bfp" msgstr "" -#: libbirdfont/Menu.vala:482 libbirdfont/OverView.vala:471+#: libbirdfont/Menu.vala:484 libbirdfont/OverView.vala:478 msgid "Overview" msgstr "Огляд" +#: libbirdfont/Menu.vala:513+msgid "Help"+msgstr ""+ #: libbirdfont/MenuItem.vala:82 msgid "UP" msgstr ""@@ -1288,15 +1315,11 @@ msgstr "" msgid "Swashes" msgstr "" -#: libbirdfont/OverView.vala:250 libbirdfont/OverView.vala:269+#: libbirdfont/OverView.vala:257 libbirdfont/OverView.vala:276 msgid "Filter" msgstr "Фільтр" -#: libbirdfont/OverView.vala:673-msgid "No glyphs in this view."-msgstr "Не показувати гліф тут."--#: libbirdfont/OverView.vala:1484+#: libbirdfont/OverView.vala:1498 msgid "See also:" msgstr "Дивіться також:" @@ -1474,10 +1497,6 @@ msgstr "" msgid "Right" msgstr "" -#: libbirdfont/SvgParser.vala:62 libbirdfont/SvgParser.vala:121-msgid "Import"-msgstr "Імпорт"- #: libbirdfont/Theme.vala:421 msgid "Canvas Background" msgstr ""@@ -1764,7 +1783,7 @@ msgstr "" msgid "Color" msgstr "" -#: libbirdfont/ToolItem.vala:44+#: libbirdfont/ToolItem.vala:66 msgid "Shift" msgstr "" @@ -1808,6 +1827,12 @@ msgstr "" msgid "Writing" msgstr "Запис" +#~ msgid "No glyphs in this view."+#~ msgstr "Не показувати гліф тут."++#~ msgid "Import"+#~ msgstr "Імпорт"+ #, fuzzy #~ msgid "Full name (name and style)" #~ msgstr "Повне ім'я"diff --git a/resources/dark.theme b/resources/dark.themeindex 4eab6e8..5ccae44 100644--- a/resources/dark.theme+++ b/resources/dark.theme@@ -8,6 +8,7 @@ 	<color name="Guide 2" red="0.69999999999999996" green="0" blue="0" alpha="0.5"/> 	<color name="Guide 3" red="0.47058823529411764" green="0.26666666666666666" blue="0.47058823529411764" alpha="0.47058823529411764"/> 	<color name="Tab Separator" red="0.4823529411764706" green="0.49803921568627452" blue="0.51764705882352946" alpha="1"/>+	<color name="Objects" red="0" green="0" blue="0" alpha="1"/> 	<color name="Overview Glyph" red="0.85882352941176465" green="0.8666666666666667" blue="0.9137254901960784" alpha="1"/> 	<color name="Dialog Shadow" red="0" green="0" blue="0" alpha="0.29999999999999999"/> 	<color name="Selected Active Cubic Control Point" red="0.91764705882352937" green="0.30196078431372547" blue="0.10196078431372549" alpha="1"/>@@ -57,7 +58,6 @@ 	<color name="Spin Button" red="0.41960784313725491" green="0.4392156862745098" blue="0.47843137254901963" alpha="1"/> 	<color name="Text Tool Box" red="0.50196078431372548" green="0.50980392156862742" blue="0.53333333333333333" alpha="1"/> 	<color name="Overview Foreground" red="0.17647058823529413" green="0.17647058823529413" blue="0.17647058823529413" alpha="1"/>-	<color name="Selected Objects" red="0.13725490196078433" green="0.51372549019607838" blue="0.76078431372549016" alpha="1"/> 	<color name="Tool Foreground" red="0.4823529411764706" green="0.49803921568627452" blue="0.51764705882352946" alpha="1"/> 	<color name="Selected Quadratic Control Point" red="0.91764705882352937" green="0.30196078431372547" blue="0.10196078431372549" alpha="1"/> 	<color name="Checkbox Background" red="0.396078431372549" green="0.42352941176470588" blue="0.45490196078431372" alpha="1"/>diff --git a/resources/icons.bf b/resources/icons.bfindex 7443a06..2a3660b 100644--- a/resources/icons.bf+++ b/resources/icons.bf@@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" standalone="yes"?> <font>-<format>2.1</format>+<format>2.2</format>  <postscript_name>BirdfontIcons</postscript_name> <name>Birdfont Icons</name>@@ -503,6 +503,18 @@ GNU Lesser General Public License</copyright> 	</glyph> </collection> +<collection name="close">+	<selected id="0"/>+	<glyph id="0" left="-28" right="28.419182948490214">+		<layer name= "Layer" visible="true">+			<path data="B 28.0212870839,35.2058976055 C 28.0212870839,24.7263578602 19.4616696252,16.1667539275 8.9821366429,16.1667539275 C -1.4973902527,16.1667539275 -9.9805477504,24.7263578602 -9.9805477504,35.2058976055 C -9.9805477504,45.6854373507 -1.4973902527,54.1685522418 8.9821366429,54.1685522418 C 19.4616696252,54.1685522418 28.0212870839,45.6854373507 28.0212870839,35.2058976055" />+			<path data="B -7.5337498733,35.2058976055 C -7.5337498733,26.0487188078 -0.1750401258,18.6135240765 8.9821366429,18.6135240765 C 18.1393154406,18.6135240765 25.5744898830,26.0487188078 25.5744898830,35.2058976055 C 25.5744898830,44.3630764031 18.1393154406,51.7217820928 8.9821366429,51.7217820928 C -0.1750401258,51.7217820928 -7.5337498733,44.3630764031 -7.5337498733,35.2058976055" />+			<path data="B 1.5364891996,45.0349793170 M 19.5360480338,27.3782692224 M 17.2353252034,25.0328721622 M -0.7642336309,42.6895822568 M 1.5364891996,45.0349793170" />+			<path data="B -1.2533789606,26.9501777496 M 16.4033311340,44.9497365840 M 18.7487281942,42.6490137535 M 1.0920180996,24.6494549192 M -1.2533789606,26.9501777496" />+		</layer>+	</glyph>+</collection>+ <collection name="close_path"> 	<selected id="1"/> 	<glyph id="1" left="-28" right="28.419182948490214">@@ -1860,6 +1872,7 @@ GNU Lesser General Public License</copyright> <ligature sequence="c i r c l e" replacement="circle"/> <ligature sequence="r e s i z e" replacement="resize"/> <ligature sequence="h e i g h t" replacement="height"/>+<ligature sequence="c l o s e" replacement="close"/> <ligature sequence="t r a c k" replacement="track"/> <ligature sequence="w i d t h" replacement="width"/> <ligature sequence="t h e m e" replacement="theme"/>diff --git a/scripts/builder.py b/scripts/builder.pyindex ed258ab..708de12 100644--- a/scripts/builder.py+++ b/scripts/builder.py@@ -106,7 +106,7 @@ class Builder(object):             command = command.replace('OBJECT_FILE', object_path)             yield {                 'basename': 'compile ' + csource,-                'file_dep': [build_file, csource] + bindep + copied_cheader,+                'file_dep': [build_file, csource] + copied_cheader,                 'actions': [command],                 'targets': [path.join(build_directory, object_file)],             }@@ -114,7 +114,7 @@ class Builder(object):         object_paths = [path.join(build_directory, f) for f in object_files]          yield {             'basename': source_directory,-            'file_dep': object_paths + [build_file] + bindep,+            'file_dep': object_paths + [build_file],             'actions': [linker_command],             'targets': [path.join('build', 'bin', target_binary)]         }diff --git a/scripts/version.py b/scripts/version.pyindex 8097f14..16cb94a 100644--- a/scripts/version.py+++ b/scripts/version.py@@ -1,6 +1,6 @@ #!/usr/bin/python3 """-Copyright (C) 2013, 2014 Johan Mattsson+Copyright (C) 2013 2014 2016 Johan Mattsson  This library is free software; you can redistribute it and/or modify  it under the terms of the GNU Lesser General Public License as @@ -20,4 +20,8 @@ SO_VERSION = SO_VERSION_MAJOR + '.' + SO_VERSION_MINOR  LIBBIRDGEMS_SO_VERSION_MAJOR = '0' LIBBIRDGEMS_SO_VERSION_MINOR = '0'-LIBBIRDGEMS_SO_VERSION = LIBBIRDGEMS_SO_VERSION_MAJOR + '.' + LIBBIRDGEMS_SO_VERSION_MINOR;+LIBBIRDGEMS_SO_VERSION = LIBBIRDGEMS_SO_VERSION_MAJOR + '.' + LIBBIRDGEMS_SO_VERSION_MINOR++LIBSVGBIRD_SO_VERSION_MAJOR = '0'+LIBSVGBIRD_SO_VERSION_MINOR = '0'+LIBSVGBIRD_SO_VERSION = LIBBIRDGEMS_SO_VERSION_MAJOR + '.' + LIBBIRDGEMS_SO_VERSION_MINOR

Contact

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