blob: ca39c5a474569114bdc5a568bb16cbf035622829 [file] [log] [blame]
Behdad Esfahbod8b8b1902011-09-19 16:41:17 -04001/*
Behdad Esfahbod45675e52012-05-15 23:10:39 -04002 * Copyright © 2011,2012 Google, Inc.
Behdad Esfahbod8b8b1902011-09-19 16:41:17 -04003 *
4 * This is part of HarfBuzz, a text shaping library.
5 *
6 * Permission is hereby granted, without written agreement and without
7 * license or royalty fees, to use, copy, modify, and distribute this
8 * software and its documentation for any purpose, provided that the
9 * above copyright notice and the following two paragraphs appear in
10 * all copies of this software.
11 *
12 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
13 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
14 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
15 * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
16 * DAMAGE.
17 *
18 * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
19 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20 * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
21 * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
22 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
23 *
24 * Google Author(s): Behdad Esfahbod
25 */
26
Behdad Esfahbod45675e52012-05-15 23:10:39 -040027#ifndef HB_MAIN_FONT_TEXT_HH
28#define HB_MAIN_FONT_TEXT_HH
Behdad Esfahbod8b8b1902011-09-19 16:41:17 -040029
Behdad Esfahbod17f40b72017-10-27 09:22:30 -060030#include "options.hh"
31
Behdad Esfahbod45675e52012-05-15 23:10:39 -040032/* main() body for utilities taking font and processing text.*/
33
Behdad Esfahbodc0b2f502022-02-18 12:29:14 -060034template <typename consumer_t,
35 typename font_options_type,
36 typename text_options_type>
37struct main_font_text_t :
38 option_parser_t,
39 font_options_type,
40 text_options_type,
41 consumer_t
Behdad Esfahbod8b8b1902011-09-19 16:41:17 -040042{
Behdad Esfahbodc0ea4e22021-08-11 18:30:08 -060043 int operator () (int argc, char **argv)
Behdad Esfahbod9d8bbe32021-08-11 11:53:32 -060044 {
Behdad Esfahbodc0ea4e22021-08-11 18:30:08 -060045 add_options ();
46 parse (&argc, &argv);
Behdad Esfahbod8b8b1902011-09-19 16:41:17 -040047
Behdad Esfahbod9d8bbe32021-08-11 11:53:32 -060048 this->init (this);
Behdad Esfahbod8b8b1902011-09-19 16:41:17 -040049
Behdad Esfahbod97a9e4e2021-08-11 19:28:16 -060050 while (this->consume_line (*this))
51 ;
Behdad Esfahbode6035052017-07-18 19:14:19 -070052
Behdad Esfahbod9d8bbe32021-08-11 11:53:32 -060053 this->finish (this);
Behdad Esfahbod8b8b1902011-09-19 16:41:17 -040054
Behdad Esfahbod9d8bbe32021-08-11 11:53:32 -060055 return this->failed ? 1 : 0;
56 }
Behdad Esfahbodc0ea4e22021-08-11 18:30:08 -060057
58 protected:
59
60 void add_options ()
61 {
Behdad Esfahbodc0b2f502022-02-18 12:29:14 -060062 font_options_type::add_options (this);
63 text_options_type::add_options (this);
Behdad Esfahbodc0ea4e22021-08-11 18:30:08 -060064 consumer_t::add_options (this);
65
66 GOptionEntry entries[] =
67 {
68 {G_OPTION_REMAINING, 0, G_OPTION_FLAG_IN_MAIN,
69 G_OPTION_ARG_CALLBACK, (gpointer) &collect_rest, nullptr, "[FONT-FILE] [TEXT]"},
70 {nullptr}
71 };
72 add_main_group (entries, this);
73 option_parser_t::add_options ();
74 }
75
76 private:
77
78 static gboolean
79 collect_rest (const char *name G_GNUC_UNUSED,
80 const char *arg,
81 gpointer data,
82 GError **error)
83 {
84 main_font_text_t *thiz = (main_font_text_t *) data;
85
86 if (!thiz->font_file)
87 {
88 thiz->font_file = g_strdup (arg);
89 return true;
90 }
91
92 if (!thiz->text && !thiz->text_file)
93 {
94 thiz->text = g_strdup (arg);
95 return true;
96 }
97
98 g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED,
99 "Too many arguments on the command line");
100 return false;
101 }
Behdad Esfahbod9d8bbe32021-08-11 11:53:32 -0600102};
Behdad Esfahbod8b8b1902011-09-19 16:41:17 -0400103
104#endif