diff --git a/util/Makefile.am b/util/Makefile.am index 82c14fd65..12041b5ae 100644 --- a/util/Makefile.am +++ b/util/Makefile.am @@ -51,6 +51,9 @@ endif # HAVE_CAIRO hb_shape_SOURCES = $(HB_SHAPE_sources) bin_PROGRAMS += hb-shape +hb_info_SOURCES = $(HB_INFO_sources) +bin_PROGRAMS += hb-info + hb_subset_SOURCES = $(HB_SUBSET_CLI_sources) hb_subset_LDADD = \ $(top_builddir)/src/libharfbuzz-subset.la \ diff --git a/util/Makefile.sources b/util/Makefile.sources index 70b704e1a..a64099e9f 100644 --- a/util/Makefile.sources +++ b/util/Makefile.sources @@ -31,6 +31,14 @@ HB_SHAPE_sources = \ text-options.hh \ $(NULL) +HB_INFO_sources = \ + batch.hh \ + face-options.hh \ + font-options.hh \ + hb-info.cc \ + options.hh \ + $(NULL) + HB_SUBSET_CLI_sources = \ batch.hh \ face-options.hh \ diff --git a/util/hb-info.cc b/util/hb-info.cc new file mode 100644 index 000000000..9bddb998d --- /dev/null +++ b/util/hb-info.cc @@ -0,0 +1,108 @@ +/* + * Copyright © 2010 Behdad Esfahbod + * Copyright © 2011,2012 Google, Inc. + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + * Google Author(s): Behdad Esfahbod + */ + +#include "batch.hh" +#include "font-options.hh" + +const unsigned DEFAULT_FONT_SIZE = FONT_SIZE_UPEM; +const unsigned SUBPIXEL_BITS = 0; + + +struct info_t +{ + void add_options (option_parser_t *parser) + { + } + + void operator () () + { + } +}; + + +template +struct main_font_t : + option_parser_t, + font_options_type, + consumer_t +{ + int operator () (int argc, char **argv) + { + add_options (); + parse (&argc, &argv); + + consumer_t::operator () (); + + return 0; + } + + protected: + + void add_options () + { + font_options_type::add_options (this); + consumer_t::add_options (this); + + GOptionEntry entries[] = + { + {G_OPTION_REMAINING, 0, G_OPTION_FLAG_IN_MAIN, + G_OPTION_ARG_CALLBACK, (gpointer) &collect_rest, nullptr, "[FONT-FILE]"}, + {nullptr} + }; + add_main_group (entries, this); + option_parser_t::add_options (); + } + + private: + + static gboolean + collect_rest (const char *name G_GNUC_UNUSED, + const char *arg, + gpointer data, + GError **error) + { + main_font_t *thiz = (main_font_t *) data; + + if (!thiz->font_file) + { + thiz->font_file = g_strdup (arg); + return true; + } + + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, + "Too many arguments on the command line"); + return false; + } +}; + +int +main (int argc, char **argv) +{ + using main_t = main_font_t; + return batch_main (argc, argv); +} diff --git a/util/meson.build b/util/meson.build index df48855a7..ff38bd635 100644 --- a/util/meson.build +++ b/util/meson.build @@ -6,6 +6,10 @@ hb_shape_sources = [ 'hb-shape.cc', ] +hb_info_sources = [ + 'hb-info.cc', +] + hb_ot_shape_closure_sources = [ 'hb-ot-shape-closure.cc', ] @@ -37,6 +41,15 @@ if conf.get('HAVE_GLIB', 0) == 1 ) meson.override_find_program('hb-shape', hb_shape) + hb_info = executable('hb-info', hb_info_sources, + cpp_args: cpp_args, + include_directories: [incconfig, incsrc], + dependencies: util_deps, + link_with: [libharfbuzz], + install: true, + ) + meson.override_find_program('hb-info', hb_info) + hb_subset = executable('hb-subset', hb_subset_cli_sources, cpp_args: cpp_args, include_directories: [incconfig, incsrc],