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