From cfb2d6ad9e34f4b61ea3fedd27ac448a47ac4c09 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Fri, 6 Aug 2021 23:14:30 -0600 Subject: [PATCH] [util] Move view options into view-options.hh --- util/Makefile.sources | 15 +++--- util/options.cc | 64 ---------------------- util/options.hh | 25 --------- util/view-cairo.hh | 4 +- util/view-options.hh | 123 ++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 132 insertions(+), 99 deletions(-) create mode 100644 util/view-options.hh diff --git a/util/Makefile.sources b/util/Makefile.sources index 8a45f69b4..fc74e05fd 100644 --- a/util/Makefile.sources +++ b/util/Makefile.sources @@ -1,34 +1,35 @@ HB_VIEW_sources = \ + ansi-print.hh \ hb-view.cc \ + helper-cairo-ansi.hh \ + helper-cairo.hh \ + main-font-text.hh \ options.cc \ options.hh \ - main-font-text.hh \ shape-consumer.hh \ - ansi-print.hh \ - helper-cairo.hh \ - helper-cairo-ansi.hh \ view-cairo.hh \ + view-options.hh \ $(NULL) HB_SHAPE_sources = \ hb-shape.cc \ + main-font-text.hh \ options.cc \ options.hh \ - main-font-text.hh \ shape-consumer.hh \ $(NULL) HB_OT_SHAPE_CLOSURE_sources = \ hb-ot-shape-closure.cc \ + main-font-text.hh \ options.cc \ options.hh \ - main-font-text.hh \ $(NULL) HB_SUBSET_CLI_sources = \ hb-subset.cc \ + main-font-text.hh \ options.cc \ options.hh \ subset-options.hh \ - main-font-text.hh \ $(NULL) diff --git a/util/options.cc b/util/options.cc index 641376767..69013df81 100644 --- a/util/options.cc +++ b/util/options.cc @@ -127,50 +127,6 @@ option_parser_t::parse (int *argc, char ***argv) } -static gboolean -parse_font_extents (const char *name G_GNUC_UNUSED, - const char *arg, - gpointer data, - GError **error G_GNUC_UNUSED) -{ - view_options_t *view_opts = (view_options_t *) data; - view_options_t::font_extents_t &e = view_opts->font_extents; - switch (sscanf (arg, "%lf%*[ ,]%lf%*[ ,]%lf", &e.ascent, &e.descent, &e.line_gap)) { - case 1: HB_FALLTHROUGH; - case 2: HB_FALLTHROUGH; - case 3: - view_opts->have_font_extents = true; - return true; - default: - g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, - "%s argument should be one to three space-separated numbers", - name); - return false; - } -} - -static gboolean -parse_margin (const char *name G_GNUC_UNUSED, - const char *arg, - gpointer data, - GError **error G_GNUC_UNUSED) -{ - view_options_t *view_opts = (view_options_t *) data; - view_options_t::margin_t &m = view_opts->margin; - switch (sscanf (arg, "%lf%*[ ,]%lf%*[ ,]%lf%*[ ,]%lf", &m.t, &m.r, &m.b, &m.l)) { - case 1: m.r = m.t; HB_FALLTHROUGH; - case 2: m.b = m.t; HB_FALLTHROUGH; - case 3: m.l = m.r; HB_FALLTHROUGH; - case 4: return true; - default: - g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, - "%s argument should be one to four space-separated numbers", - name); - return false; - } -} - - static gboolean parse_shapers (const char *name G_GNUC_UNUSED, const char *arg, @@ -384,26 +340,6 @@ parse_unicodes (const char *name G_GNUC_UNUSED, } -void -view_options_t::add_options (option_parser_t *parser) -{ - GOptionEntry entries[] = - { - {"annotate", 0, 0, G_OPTION_ARG_NONE, &this->annotate, "Annotate output rendering", nullptr}, - {"background", 0, 0, G_OPTION_ARG_STRING, &this->back, "Set background color (default: " DEFAULT_BACK ")", "rrggbb/rrggbbaa"}, - {"foreground", 0, 0, G_OPTION_ARG_STRING, &this->fore, "Set foreground color (default: " DEFAULT_FORE ")", "rrggbb/rrggbbaa"}, - {"line-space", 0, 0, G_OPTION_ARG_DOUBLE, &this->line_space, "Set space between lines (default: 0)", "units"}, - {"font-extents", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_font_extents, "Set font ascent/descent/line-gap (default: auto)","one to three numbers"}, - {"margin", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_margin, "Margin around output (default: " G_STRINGIFY(DEFAULT_MARGIN) ")","one to four numbers"}, - {nullptr} - }; - parser->add_group (entries, - "view", - "View options:", - "Options for output rendering", - this); -} - void shape_options_t::add_options (option_parser_t *parser) { diff --git a/util/options.hh b/util/options.hh index e7a48f2f5..0b5c8b9a2 100644 --- a/util/options.hh +++ b/util/options.hh @@ -123,37 +123,12 @@ struct option_parser_t }; -#define DEFAULT_MARGIN 16 -#define DEFAULT_FORE "#000000" -#define DEFAULT_BACK "#FFFFFF" #define FONT_SIZE_UPEM 0x7FFFFFFF #define FONT_SIZE_NONE 0 extern const unsigned DEFAULT_FONT_SIZE; extern const unsigned SUBPIXEL_BITS; -struct view_options_t -{ - ~view_options_t () - { - g_free (fore); - g_free (back); - } - - void add_options (option_parser_t *parser); - - hb_bool_t annotate = false; - char *fore = nullptr; - char *back = nullptr; - double line_space = 0; - bool have_font_extents = false; - struct font_extents_t { - double ascent, descent, line_gap; - } font_extents = {0., 0., 0.}; - struct margin_t { - double t, r, b, l; - } margin = {DEFAULT_MARGIN, DEFAULT_MARGIN, DEFAULT_MARGIN, DEFAULT_MARGIN}; -}; struct shape_options_t diff --git a/util/view-cairo.hh b/util/view-cairo.hh index 2599eb4ae..d1915d0a5 100644 --- a/util/view-cairo.hh +++ b/util/view-cairo.hh @@ -27,11 +27,9 @@ #ifndef VIEW_CAIRO_HH #define VIEW_CAIRO_HH -#include "hb.hh" -#include "options.hh" +#include "view-options.hh" #include "helper-cairo.hh" - struct view_cairo_t : view_options_t { ~view_cairo_t () diff --git a/util/view-options.hh b/util/view-options.hh new file mode 100644 index 000000000..322009a1e --- /dev/null +++ b/util/view-options.hh @@ -0,0 +1,123 @@ +/* + * Copyright © 2011 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 + */ + +#ifndef VIEW_OPTIONS_HH +#define VIEW_OPTIONS_HH + +#include "options.hh" + +#define DEFAULT_MARGIN 16 +#define DEFAULT_FORE "#000000" +#define DEFAULT_BACK "#FFFFFF" + +struct view_options_t +{ + ~view_options_t () + { + g_free (fore); + g_free (back); + } + + void add_options (option_parser_t *parser); + + hb_bool_t annotate = false; + char *fore = nullptr; + char *back = nullptr; + double line_space = 0; + bool have_font_extents = false; + struct font_extents_t { + double ascent, descent, line_gap; + } font_extents = {0., 0., 0.}; + struct margin_t { + double t, r, b, l; + } margin = {DEFAULT_MARGIN, DEFAULT_MARGIN, DEFAULT_MARGIN, DEFAULT_MARGIN}; +}; + + +static gboolean +parse_font_extents (const char *name G_GNUC_UNUSED, + const char *arg, + gpointer data, + GError **error G_GNUC_UNUSED) +{ + view_options_t *view_opts = (view_options_t *) data; + view_options_t::font_extents_t &e = view_opts->font_extents; + switch (sscanf (arg, "%lf%*[ ,]%lf%*[ ,]%lf", &e.ascent, &e.descent, &e.line_gap)) { + case 1: HB_FALLTHROUGH; + case 2: HB_FALLTHROUGH; + case 3: + view_opts->have_font_extents = true; + return true; + default: + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, + "%s argument should be one to three space-separated numbers", + name); + return false; + } +} + +static gboolean +parse_margin (const char *name G_GNUC_UNUSED, + const char *arg, + gpointer data, + GError **error G_GNUC_UNUSED) +{ + view_options_t *view_opts = (view_options_t *) data; + view_options_t::margin_t &m = view_opts->margin; + switch (sscanf (arg, "%lf%*[ ,]%lf%*[ ,]%lf%*[ ,]%lf", &m.t, &m.r, &m.b, &m.l)) { + case 1: m.r = m.t; HB_FALLTHROUGH; + case 2: m.b = m.t; HB_FALLTHROUGH; + case 3: m.l = m.r; HB_FALLTHROUGH; + case 4: return true; + default: + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, + "%s argument should be one to four space-separated numbers", + name); + return false; + } +} + +void +view_options_t::add_options (option_parser_t *parser) +{ + GOptionEntry entries[] = + { + {"annotate", 0, 0, G_OPTION_ARG_NONE, &this->annotate, "Annotate output rendering", nullptr}, + {"background", 0, 0, G_OPTION_ARG_STRING, &this->back, "Set background color (default: " DEFAULT_BACK ")", "rrggbb/rrggbbaa"}, + {"foreground", 0, 0, G_OPTION_ARG_STRING, &this->fore, "Set foreground color (default: " DEFAULT_FORE ")", "rrggbb/rrggbbaa"}, + {"line-space", 0, 0, G_OPTION_ARG_DOUBLE, &this->line_space, "Set space between lines (default: 0)", "units"}, + {"font-extents", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_font_extents, "Set font ascent/descent/line-gap (default: auto)","one to three numbers"}, + {"margin", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_margin, "Margin around output (default: " G_STRINGIFY(DEFAULT_MARGIN) ")","one to four numbers"}, + {nullptr} + }; + parser->add_group (entries, + "view", + "View options:", + "Options for output rendering", + this); +} + +#endif