diff options
Diffstat (limited to 'dvi/font.cc')
-rwxr-xr-x | dvi/font.cc | 173 |
1 files changed, 0 insertions, 173 deletions
diff --git a/dvi/font.cc b/dvi/font.cc deleted file mode 100755 index 4494b52..0000000 --- a/dvi/font.cc +++ /dev/null @@ -1,173 +0,0 @@ -#include "font.hh" - -#include "painter.hh" -#include "dl-pkfont.hh" -#include "dl-vffont.hh" - -using DviLib::FileLoader; -using DviLib::AbstractFont; -using DviLib::VfChar; -using DviLib::PkChar; -using DviLib::PkFont; -using DviLib::VfFont; - -static char * -do_run_program (const char *program, - GList *args, - GError **err) -{ - char **argv = g_new (char *, g_list_length (args) + 2); - GList *l; - int i; - char *result; - - i = 0; - argv[i++] = g_strdup (program); - for (l = args; l; l = l->next) - argv[i++] = g_strdup ((char *)l->data); - argv[i++] = NULL; - - g_list_free (args); - - - /* run it */ - g_spawn_sync (NULL, /* working directory */ - argv, /* arguments */ - NULL, /* environment */ - G_SPAWN_SEARCH_PATH, /* flags */ - NULL, /* child setup */ - NULL, /* user data for child setup */ - &result, /* stdout */ - NULL, /* stderr */ - NULL, /* exit status */ - err /* GError */); - - g_strfreev (argv); - - return result; -} - - -static char * -run_program (const char *program, - GError **err, - const char *arg1, - ...) -{ - va_list arg_list; - GList *arguments = NULL; - char *s; - - va_start (arg_list, arg1); - - arguments = g_list_append (arguments, (gpointer)arg1); - - s = va_arg (arg_list, gchar*); - while (s) - { - arguments = g_list_append (arguments, s); - s = va_arg (arg_list, gchar*); - } - - va_end (arg_list); - - return do_run_program (program, arguments, err); -} - -static char * -run_kpsewhich (int dpi, - string format, - string name) -{ - char *dpistr = g_strdup_printf ("--dpi=%d", dpi); - char *formatstr = g_strdup_printf ("--format=%s", format.c_str()); - char *namestr = g_strdup (name.c_str()); - GError *err = NULL; - char *result; - - result = run_program ("kpsewhich", &err, dpistr, formatstr, namestr, NULL); - - if (!result) - { - cout << err->message << endl; - } - else - { - g_strstrip (result); - - if (*result == '\0') - { - /* Nothing useful returned */ - g_free (result); - result = NULL; - } - } - - cout << "kpsewhich " << dpistr << " " << formatstr << " " << namestr << " " << endl; - - g_free (dpistr); - g_free (formatstr); - g_free (namestr); - - return result; -} - -static void -run_mktexpk (int dpi, string name) -{ - char *dpistr = g_strdup_printf ("--bdpi=%d", dpi); - char *bdpistr = g_strdup_printf ("--dpi=%d", dpi); - char *namestr = g_strdup (name.c_str()); - char *result; - - cout << "mktexpk " << bdpistr << " " << dpistr << " " << " " << namestr << " " << endl; - - result = run_program ("mktexpk", NULL, bdpistr, dpistr, namestr, NULL); - if (result) - g_free (result); - - g_free (dpistr); - g_free (bdpistr); - g_free (namestr); -} - -AbstractFont * -FontFactory::create_font (std::string name, - int dpi, - int at_size) -{ - char *filename; - - cout << "at size: " << at_size << endl; - - /* Find VF */ - filename = run_kpsewhich (dpi, "vf", name); - - if (filename) - return new VfFont (*new FileLoader (filename), at_size); - - /* Try PK */ - - filename = run_kpsewhich (dpi, "pk", name); - - if (filename) - return new PkFont (*new FileLoader (filename), at_size); - - /* Generate PK */ - - run_mktexpk (dpi, name); - - cout << "birnan" << endl; - - /* Try PK again */ - filename = run_kpsewhich (dpi, "pk", name); - - if (filename) - return new PkFont (*new FileLoader (filename), at_size); - - cout << "no luck" << endl; - - throw (string ("bad font")); - - return NULL; -} |