Commit 95d7934
Move code from main class
Changed files (3)
modifiedlibbirdfont/BirdFont.valaaddedlibbirdfont/ExportUtils.valaaddedlibbirdfont/ImportUtils.vala
Diff
@@ -19,295 +19,15 @@ namespace BirdFont { public static string? settings_directory = null; -static void print_import_help (string[] arg) {- stdout.printf (t_("Usage:"));- stdout.printf (arg[0]);- stdout.printf (" " + t_("BF-FILE") + " " + t_("SVG-FILES ...") +"\n");- stdout.printf ("\n");-}--public static int run_import (string[] arg) {- string bf_file = "";- Gee.ArrayList<string> svg_files = new Gee.ArrayList<string> ();- File bf;- File svg;- Font font;- bool imported;- - Theme.set_default_colors ();- Preferences.load ();- BirdFont.args = new Argument ("");- BirdFont.current_font = new Font ();- BirdFont.current_glyph_collection = new GlyphCollection.with_glyph ('\0', "");- MainWindow.init ();-- if (arg.length < 3) {- print_import_help (arg);- return -1;- }- - bf_file = build_absoulute_path (arg[1]);- - for (int i = 2; i < arg.length; i++) {- svg_files.add (arg[i]);- }- - bf = File.new_for_path (bf_file);- foreach (string f in svg_files) {- svg = File.new_for_path (f);- - if (!svg.query_exists ()) {- stdout.printf (@"$f " + t_("does not exist.") + "\n");- return -1;- }- }- - font = BirdFont.get_current_font ();-- if (!bf.query_exists ()) {- stdout.printf (@"$bf_file " + t_("does not exist.") + " ");- stdout.printf (t_("A new font will be created.") + "\n");- font.set_file (bf_file);- } else {- font.set_file (bf_file);- if (!font.load ()) {- warning (@"Failed to load font $bf_file.\n");- - if (!bf_file.has_suffix (".bf")) {- warning (@"Is it a .bf file?\n");- }- - return -1;- }- }-- font.save_backup ();-- foreach (string f in svg_files) {- svg = File.new_for_path (f);- imported = import_svg_file (font, svg);- - if (!imported) {- stdout.printf (t_("Failed to import") + " " + f + "\n");- stdout.printf (t_("Aborting") + "\n");- return -1;- }- }- - font.save_bf ();- - return 0;-}- internal static string build_absoulute_path (string file_name) { File f = File.new_for_path (file_name); return (!) f.get_path (); } -static bool import_svg_file (Font font, File svg_file) {- string file_name = (!) svg_file.get_basename ();- string glyph_name;- StringBuilder n;- Glyph glyph;- GlyphCollection? gc = null;- GlyphCollection glyph_collection;- unichar character;- GlyphCanvas canvas;- - glyph_name = file_name.replace (".svg", "");- glyph_name = glyph_name.replace (".SVG", "");- - if (glyph_name.char_count () > 1) {- if (glyph_name.has_prefix ("U+")) {- n = new StringBuilder ();- n.append_unichar (Font.to_unichar (glyph_name));- glyph_name = n.str;- gc = font.get_glyph_collection (glyph_name);- } else {- gc = font.get_glyph_collection_by_name (glyph_name);- - if (gc == null) {- stdout.printf (file_name + " " + t_("is not the name of a glyph or a Unicode value.") + "\n");- stdout.printf (t_("Unicode values must start with U+.") + "\n");- return false;- }- } - } else {- gc = font.get_glyph_collection (glyph_name);- }-- if (gc != null) {- glyph_collection = (!) gc;- character = glyph_collection.get_unicode_character ();- glyph = new Glyph (glyph_collection.get_name (), character);- glyph.version_id = glyph_collection.get_last_id () + 1;- glyph_collection.insert_glyph (glyph, true);- } else {- return_val_if_fail (glyph_name.char_count () == 1, false);- character = glyph_name.get_char (0);- glyph_collection = new GlyphCollection (character, glyph_name);- glyph = new Glyph (glyph_name, character);- glyph_collection.insert_glyph (glyph, true);- font.add_glyph_collection (glyph_collection);- }-- canvas = MainWindow.get_glyph_canvas ();- canvas.set_current_glyph_collection (glyph_collection);-- stdout.printf (t_("Adding"));- stdout.printf (" ");- stdout.printf ((!) svg_file.get_basename ());- stdout.printf (" ");- stdout.printf (t_("to"));- stdout.printf (" ");- stdout.printf (t_("Glyph"));- stdout.printf (": ");- stdout.printf (glyph.get_name ());- stdout.printf (" ");- stdout.printf (t_("Version"));- stdout.printf (": ");- stdout.printf (@"$(glyph.version_id)");- stdout.printf ("\n");- - SvgParser.import_svg ((!) svg_file.get_path ());- - return true;-}--static void print_export_help (string[] arg) {- stdout.printf (t_("Usage:"));- stdout.printf (arg[0]);- stdout.printf (" [" + t_("OPTION") + "...] " + t_("FILE") +"\n");- stdout.printf ("-h, --help " + t_("print this message") + "\n");- stdout.printf ("-o, --output [DIRECTORY] " + t_("write files to this directory") + "\n");- stdout.printf ("-s, --svg " + t_("write svg file") + "\n");- stdout.printf ("-t, --ttf " + t_("write ttf and eot file") + "\n");- stdout.printf ("\n");-}- public static string get_version () { return VERSION; } -public static int run_export (string[] arg) {- string output_directory = ".";- string file_name = "";- bool specific_formats = false; - bool write_ttf = false;- bool write_svg = false; - File directory;- Font font;- MainWindow main_window;-- stdout.printf ("birdfont-export version %s\n", VERSION);-- if (arg.length < 2) {- print_export_help (arg);- return -1;- }-- Theme.set_default_colors ();- BirdFont.current_font = BirdFont.new_font ();- BirdFont.current_glyph_collection = new GlyphCollection.with_glyph ( '\0', "null");- main_window = new MainWindow ();- - // FIXME: create a option for this and add structure the log messages- - if (BirdFont.logging) {- init_logfile ();- }- - for (int i = 1; i < arg.length; i++) {-- if (arg[i] == "-f" || arg[i] == "--fatal-warnings") {- BirdFont.fatal_wanings = true;- return 0;- }-- if (arg[i] == "-h" || arg[i] == "--help") {- print_export_help (arg);- return 0;- }- - if ((arg[i] == "-o" || arg[i] == "--output") && i + 1 < arg.length) {- output_directory = arg[i + 1];- i++;- continue;- }-- if (arg[i] == "-s" || arg[i] == "--svg") {- write_svg = true;- specific_formats = true;- continue;- }- - if (arg[i] == "-t" || arg[i] == "--ttf") {- write_ttf = true;- specific_formats = true;- continue;- }- - if (arg[i].has_prefix ("-")) {- print_export_help (arg);- return 1;- }- - if (!arg[i].has_prefix ("-")) {- file_name = arg[i];- - if (i != arg.length - 1) {- print_export_help (arg);- return 1;- }- - break;- }- }-- if (BirdFont.fatal_wanings) {- LogLevelFlags levels = LogLevelFlags.LEVEL_ERROR | LogLevelFlags.LEVEL_CRITICAL | LogLevelFlags.LEVEL_WARNING;- Log.set_handler (null, levels, BirdFont.fatal_warning); - }- - Preferences.load ();- - BirdFont.args = new Argument ("");- BirdFont.current_glyph_collection = new GlyphCollection.with_glyph ('\0', "");- - file_name = build_absoulute_path (file_name);- - font = BirdFont.get_current_font ();- font.set_file (file_name);- if (!font.load ()) {- warning (@"Failed to load font $file_name.\n");- - if (!file_name.has_suffix (".bf")) {- warning (@"Is it a .bf file?\n");- }- - return 1;- }-- directory = File.new_for_path (output_directory);- - if (!directory.query_exists ()) {- stderr.printf (t_("Can't find output directory") + @"$((!)directory.get_path ())\n");- return 1;- }-- if (!specific_formats || write_svg) {- print (@"Writing $(ExportSettings.get_file_name (font)).svg to $output_directory\n");- ExportTool.export_svg_font_path (File.new_for_path (output_directory));- }-- if (!specific_formats || write_ttf) {- print (@"Writing $(ExportSettings.get_file_name (font)).ttf to $output_directory\n");- ExportTool.export_ttf_font_path (File.new_for_path (output_directory));- }- - return 0;-}- public static void set_logging (bool log) { BirdFont.logging = log; }new file mode 100644@@ -0,0 +1,149 @@+/*+ Copyright (C) 2012 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 BirdFont;++namespace BirdFont {++static void print_export_help (string[] arg) {+ stdout.printf (t_("Usage:"));+ stdout.printf (arg[0]);+ stdout.printf (" [" + t_("OPTION") + "...] " + t_("FILE") +"\n");+ stdout.printf ("-h, --help " + t_("print this message") + "\n");+ stdout.printf ("-o, --output [DIRECTORY] " + t_("write files to this directory") + "\n");+ stdout.printf ("-s, --svg " + t_("write svg file") + "\n");+ stdout.printf ("-t, --ttf " + t_("write ttf and eot file") + "\n");+ stdout.printf ("\n");+}+++public static int run_export (string[] arg) {+ string output_directory = ".";+ string file_name = "";+ bool specific_formats = false; + bool write_ttf = false;+ bool write_svg = false; + File directory;+ Font font;+ MainWindow main_window;++ stdout.printf ("birdfont-export version %s\n", VERSION);++ if (arg.length < 2) {+ print_export_help (arg);+ return -1;+ }++ Theme.set_default_colors ();+ BirdFont.current_font = BirdFont.new_font ();+ BirdFont.current_glyph_collection = new GlyphCollection.with_glyph ( '\0', "null");+ main_window = new MainWindow ();+ + // FIXME: create a option for this and add structure the log messages+ + if (BirdFont.logging) {+ init_logfile ();+ }+ + for (int i = 1; i < arg.length; i++) {++ if (arg[i] == "-f" || arg[i] == "--fatal-warnings") {+ BirdFont.fatal_wanings = true;+ return 0;+ }++ if (arg[i] == "-h" || arg[i] == "--help") {+ print_export_help (arg);+ return 0;+ }+ + if ((arg[i] == "-o" || arg[i] == "--output") && i + 1 < arg.length) {+ output_directory = arg[i + 1];+ i++;+ continue;+ }++ if (arg[i] == "-s" || arg[i] == "--svg") {+ write_svg = true;+ specific_formats = true;+ continue;+ }+ + if (arg[i] == "-t" || arg[i] == "--ttf") {+ write_ttf = true;+ specific_formats = true;+ continue;+ }+ + if (arg[i].has_prefix ("-")) {+ print_export_help (arg);+ return 1;+ }+ + if (!arg[i].has_prefix ("-")) {+ file_name = arg[i];+ + if (i != arg.length - 1) {+ print_export_help (arg);+ return 1;+ }+ + break;+ }+ }++ if (BirdFont.fatal_wanings) {+ LogLevelFlags levels = LogLevelFlags.LEVEL_ERROR | LogLevelFlags.LEVEL_CRITICAL | LogLevelFlags.LEVEL_WARNING;+ Log.set_handler (null, levels, BirdFont.fatal_warning); + }+ + Preferences.load ();+ + BirdFont.args = new Argument ("");+ BirdFont.current_glyph_collection = new GlyphCollection.with_glyph ('\0', "");+ + file_name = build_absoulute_path (file_name);+ + font = BirdFont.get_current_font ();+ font.set_file (file_name);+ if (!font.load ()) {+ warning (@"Failed to load font $file_name.\n");+ + if (!file_name.has_suffix (".bf")) {+ warning (@"Is it a .bf file?\n");+ }+ + return 1;+ }++ directory = File.new_for_path (output_directory);+ + if (!directory.query_exists ()) {+ stderr.printf (t_("Can't find output directory") + @"$((!)directory.get_path ())\n");+ return 1;+ }++ if (!specific_formats || write_svg) {+ print (@"Writing $(ExportSettings.get_file_name (font)).svg to $output_directory\n");+ ExportTool.export_svg_font_path (File.new_for_path (output_directory));+ }++ if (!specific_formats || write_ttf) {+ print (@"Writing $(ExportSettings.get_file_name (font)).ttf to $output_directory\n");+ ExportTool.export_ttf_font_path (File.new_for_path (output_directory));+ }+ + return 0;+}++}new file mode 100644@@ -0,0 +1,168 @@+/*+ Copyright (C) 2012 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 BirdFont;++namespace BirdFont {++static void print_import_help (string[] arg) {+ stdout.printf (t_("Usage:"));+ stdout.printf (arg[0]);+ stdout.printf (" " + t_("BF-FILE") + " " + t_("SVG-FILES ...") +"\n");+ stdout.printf ("\n");+}++public static int run_import (string[] arg) {+ string bf_file = "";+ Gee.ArrayList<string> svg_files = new Gee.ArrayList<string> ();+ File bf;+ File svg;+ Font font;+ bool imported;+ + Theme.set_default_colors ();+ Preferences.load ();+ BirdFont.args = new Argument ("");+ BirdFont.current_font = new Font ();+ BirdFont.current_glyph_collection = new GlyphCollection.with_glyph ('\0', "");+ MainWindow.init ();++ if (arg.length < 3) {+ print_import_help (arg);+ return -1;+ }+ + bf_file = build_absoulute_path (arg[1]);+ + for (int i = 2; i < arg.length; i++) {+ svg_files.add (arg[i]);+ }+ + bf = File.new_for_path (bf_file);+ foreach (string f in svg_files) {+ svg = File.new_for_path (f);+ + if (!svg.query_exists ()) {+ stdout.printf (@"$f " + t_("does not exist.") + "\n");+ return -1;+ }+ }+ + font = BirdFont.get_current_font ();++ if (!bf.query_exists ()) {+ stdout.printf (@"$bf_file " + t_("does not exist.") + " ");+ stdout.printf (t_("A new font will be created.") + "\n");+ font.set_file (bf_file);+ } else {+ font.set_file (bf_file);+ if (!font.load ()) {+ warning (@"Failed to load font $bf_file.\n");+ + if (!bf_file.has_suffix (".bf")) {+ warning (@"Is it a .bf file?\n");+ }+ + return -1;+ }+ }++ font.save_backup ();++ foreach (string f in svg_files) {+ svg = File.new_for_path (f);+ imported = import_svg_file (font, svg);+ + if (!imported) {+ stdout.printf (t_("Failed to import") + " " + f + "\n");+ stdout.printf (t_("Aborting") + "\n");+ return -1;+ }+ }+ + font.save_bf ();+ + return 0;+}++static bool import_svg_file (Font font, File svg_file) {+ string file_name = (!) svg_file.get_basename ();+ string glyph_name;+ StringBuilder n;+ Glyph glyph;+ GlyphCollection? gc = null;+ GlyphCollection glyph_collection;+ unichar character;+ GlyphCanvas canvas;+ + glyph_name = file_name.replace (".svg", "");+ glyph_name = glyph_name.replace (".SVG", "");+ + if (glyph_name.char_count () > 1) {+ if (glyph_name.has_prefix ("U+")) {+ n = new StringBuilder ();+ n.append_unichar (Font.to_unichar (glyph_name));+ glyph_name = n.str;+ gc = font.get_glyph_collection (glyph_name);+ } else {+ gc = font.get_glyph_collection_by_name (glyph_name);+ + if (gc == null) {+ stdout.printf (file_name + " " + t_("is not the name of a glyph or a Unicode value.") + "\n");+ stdout.printf (t_("Unicode values must start with U+.") + "\n");+ return false;+ }+ } + } else {+ gc = font.get_glyph_collection (glyph_name);+ }++ if (gc != null) {+ glyph_collection = (!) gc;+ character = glyph_collection.get_unicode_character ();+ glyph = new Glyph (glyph_collection.get_name (), character);+ glyph.version_id = glyph_collection.get_last_id () + 1;+ glyph_collection.insert_glyph (glyph, true);+ } else {+ return_val_if_fail (glyph_name.char_count () == 1, false);+ character = glyph_name.get_char (0);+ glyph_collection = new GlyphCollection (character, glyph_name);+ glyph = new Glyph (glyph_name, character);+ glyph_collection.insert_glyph (glyph, true);+ font.add_glyph_collection (glyph_collection);+ }++ canvas = MainWindow.get_glyph_canvas ();+ canvas.set_current_glyph_collection (glyph_collection);++ stdout.printf (t_("Adding"));+ stdout.printf (" ");+ stdout.printf ((!) svg_file.get_basename ());+ stdout.printf (" ");+ stdout.printf (t_("to"));+ stdout.printf (" ");+ stdout.printf (t_("Glyph"));+ stdout.printf (": ");+ stdout.printf (glyph.get_name ());+ stdout.printf (" ");+ stdout.printf (t_("Version"));+ stdout.printf (": ");+ stdout.printf (@"$(glyph.version_id)");+ stdout.printf ("\n");+ + SvgParser.import_svg ((!) svg_file.get_path ());+ + return true;+}++}