[util] Remove main_font_text_t class, use bare function

This commit is contained in:
Behdad Esfahbod 2021-08-07 11:04:46 -06:00
parent 58c223357b
commit 5545eea7e5
6 changed files with 55 additions and 64 deletions

View File

@ -113,6 +113,5 @@ struct shape_closure_consumer_t
int
main (int argc, char **argv)
{
main_font_text_t<shape_closure_consumer_t, font_options_t, text_options_t> driver;
return driver.main (argc, argv);
return main_font_text<shape_closure_consumer_t, font_options_t, text_options_t> (argc, argv);
}

View File

@ -159,7 +159,7 @@ struct output_buffer_t
int
main (int argc, char **argv)
{
using driver_t = main_font_text_t<shape_consumer_t<output_buffer_t>, font_options_t, text_options_t>;
auto main_func = main_font_text<shape_consumer_t<output_buffer_t>, font_options_t, text_options_t>;
if (argc == 2 && !strcmp (argv[1], "--batch"))
{
@ -185,13 +185,11 @@ main (int argc, char **argv)
start_offset = argc == 2 && p[0] != '\0' && p[0] != ':' && p[1] == ':' && (p[2] == '\\' || p[2] == '/') ? 2 : 0;
}
driver_t driver;
ret |= driver.main (argc, args, EOF);
ret |= main_func (argc, args, EOF);
fflush (stdout);
}
return ret;
}
driver_t driver;
return driver.main (argc, argv);
return main_func (argc, argv, '\n');
}

View File

@ -132,7 +132,7 @@ struct subset_consumer_t : subset_options_t
int
main (int argc, char **argv)
{
using driver_t = main_font_text_t<subset_consumer_t, face_options_t, text_options_t>;
auto main_func = main_font_text<subset_consumer_t, face_options_t, text_options_t>;
if (argc == 2 && !strcmp (argv[1], "--batch"))
{
@ -156,8 +156,7 @@ main (int argc, char **argv)
args[argc++] = p = e;
}
driver_t driver;
int result = driver.main (argc, args, EOF);
int result = main_func (argc, args, EOF);
fprintf (stdout, result == 0 ? "success\n" : "failure\n");
fflush (stdout);
ret |= result;
@ -165,6 +164,5 @@ main (int argc, char **argv)
return ret;
}
driver_t driver;
return driver.main (argc, argv);
return main_func (argc, argv, '\n');
}

View File

@ -35,6 +35,5 @@ const unsigned SUBPIXEL_BITS = 6;
int
main (int argc, char **argv)
{
main_font_text_t<shape_consumer_t<view_cairo_t>, font_options_t, text_options_t> driver;
return driver.main (argc, argv);
return main_font_text<shape_consumer_t<view_cairo_t>, font_options_t, text_options_t> (argc, argv);
}

View File

@ -31,59 +31,41 @@
/* main() body for utilities taking font and processing text.*/
static char *
locale_to_utf8 (char *s)
template <typename consumer_t, typename font_options_t, typename text_options_t>
int
main_font_text (int argc, char **argv, int eol = '\n')
{
char *t;
GError *error = nullptr;
t = g_locale_to_utf8 (s, -1, nullptr, nullptr, &error);
if (!t)
{
fail (true, "Failed converting text to UTF-8");
}
font_options_t font_opts;
text_options_t input;
consumer_t consumer;
return t;
option_parser_t options ("[FONT-FILE] [TEXT]");
font_opts.add_options (&options);
input.add_options (&options);
consumer.add_options (&options);
options.parse (&argc, &argv);
argc--, argv++;
if (argc && !font_opts.font_file) font_opts.font_file = locale_to_utf8 (argv[0]), argc--, argv++;
if (argc && !input.text && !input.text_file) input.text = locale_to_utf8 (argv[0]), argc--, argv++;
if (argc)
fail (true, "Too many arguments on the command line");
if (!font_opts.font_file)
options.usage ();
if (!input.text && !input.text_file)
input.text_file = g_strdup ("-");
consumer.init (&font_opts);
unsigned int text_len;
const char *text;
while ((text = input.get_line (&text_len, eol)))
consumer.consume_line (text, text_len, input.text_before, input.text_after);
consumer.finish (&font_opts);
return consumer.failed ? 1 : 0;
}
template <typename consumer_t, typename font_options_t, typename text_options_t>
struct main_font_text_t
{
int
main (int argc, char **argv, int eol = '\n')
{
font_options_t font_opts;
text_options_t input;
consumer_t consumer;
option_parser_t options ("[FONT-FILE] [TEXT]");
font_opts.add_options (&options);
input.add_options (&options);
consumer.add_options (&options);
options.parse (&argc, &argv);
argc--, argv++;
if (argc && !font_opts.font_file) font_opts.font_file = locale_to_utf8 (argv[0]), argc--, argv++;
if (argc && !input.text && !input.text_file) input.text = locale_to_utf8 (argv[0]), argc--, argv++;
if (argc)
fail (true, "Too many arguments on the command line");
if (!font_opts.font_file)
options.usage ();
if (!input.text && !input.text_file)
input.text_file = g_strdup ("-");
consumer.init (&font_opts);
unsigned int text_len;
const char *text;
while ((text = input.get_line (&text_len, eol)))
consumer.consume_line (text, text_len, input.text_before, input.text_after);
consumer.finish (&font_opts);
return consumer.failed ? 1 : 0;
}
};
#endif

View File

@ -70,6 +70,21 @@ fail (hb_bool_t suggest_help, const char *format, ...)
exit (1);
}
static inline char *
locale_to_utf8 (char *s)
{
char *t;
GError *error = nullptr;
t = g_locale_to_utf8 (s, -1, nullptr, nullptr, &error);
if (!t)
{
fail (true, "Failed converting text to UTF-8");
}
return t;
}
struct option_parser_t
{