diff -u --recursive dia-vanilla/app/app_procs.c dia/app/app_procs.c --- dia-vanilla/app/app_procs.c 2003-07-19 11:35:27.000000000 -0500 +++ dia/app/app_procs.c 2003-09-11 20:01:01.000000000 -0500 @@ -149,9 +149,9 @@ gboolean do_convert(const char *infname, - const char *outfname) + const char *outfname, + DiaExportFilter *ef) { - DiaExportFilter *ef = NULL; DiaImportFilter *inf = NULL; DiagramData *diagdata = NULL; @@ -174,13 +174,6 @@ argv0,infname); exit(1); } - ef = filter_guess_export_filter(outfname); - if (!ef) { - fprintf(stderr, - _("%s error: don't know how to export into %s\n"), - argv0,outfname); - exit(1); - } ef->export(diagdata, outfname, infname, ef->user_data); /* if (!quiet) */ fprintf(stdout, _("%s --> %s\n"), @@ -313,13 +306,6 @@ exit(0); } - if (export_file_format && export_file_name) { - fprintf(stderr, - _("%s error: can specify only one of -f or -o."), - argv[0]); - exit(1); - } - } #endif #endif @@ -454,14 +440,38 @@ while (poptPeekArg(poptCtx)) { Diagram *diagram = NULL; DDisplay *ddisp = NULL; + DiaExportFilter *ef = NULL; char *in_file_name = (char *)poptGetArg(poptCtx); - if (export_file_name) { - made_conversions |= do_convert(in_file_name,export_file_name); + if (export_file_name && export_file_format) { + ef = filter_get_export_filter(export_file_format); + if (!ef) { + fprintf(stderr, + _("%s error: don't know how to export into %s (%s)\n"), + argv0,export_file_name,export_file_format); + exit(1); + } + made_conversions |= do_convert(in_file_name,export_file_name,ef); + } else if (export_file_name) { + ef = filter_guess_export_filter(export_file_name); + if (!ef) { + fprintf(stderr, + _("%s error: don't know how to export into %s\n"), + argv0,export_file_name); + exit(1); + } + made_conversions |= do_convert(in_file_name,export_file_name,ef); } else if (export_file_format) { export_file_name = build_output_file_name(in_file_name, export_file_format); - made_conversions |= do_convert(in_file_name,export_file_name); + ef = filter_guess_export_filter(export_file_name); + if (!ef) { + fprintf(stderr, + _("%s error: don't know how to export into %s\n"), + argv0,export_file_name); + exit(1); + } + made_conversions |= do_convert(in_file_name,export_file_name,ef); g_free(export_file_name); } else { if (g_file_test(in_file_name, G_FILE_TEST_EXISTS)) { @@ -499,13 +509,36 @@ continue; } } - - if (export_file_name) { - made_conversions |= do_convert(in_file_name,export_file_name); + + if (export_file_name && export_file_format) { + ef = filter_get_export_filter(export_file_format); + if (!ef) { + fprintf(stderr, + _("%s error: don't know how to export into %s (%s)\n"), + argv0,export_file_name,export_file_format); + exit(1); + } + made_conversions |= do_convert(in_file_name,export_file_name,ef); + } else if (export_file_name) { + ef = filter_guess_export_filter(export_file_name); + if (!ef) { + fprintf(stderr, + _("%s error: don't know how to export into %s\n"), + argv0,export_file_name); + exit(1); + } + made_conversions |= do_convert(in_file_name,export_file_name,ef); } else if (export_file_format) { export_file_name = build_output_file_name(in_file_name, export_file_format); - made_conversions |= do_convert(in_file_name,export_file_name); + ef = filter_guess_export_filter(export_file_name); + if (!ef) { + fprintf(stderr, + _("%s error: don't know how to export into %s\n"), + argv0,export_file_name); + exit(1); + } + made_conversions |= do_convert(in_file_name,export_file_name,ef); g_free(export_file_name); } else { diagram = diagram_load(in_file_name, NULL); diff -u --recursive dia-vanilla/app/diaconv.c dia/app/diaconv.c --- dia-vanilla/app/diaconv.c 2002-06-22 12:19:13.000000000 -0500 +++ dia/app/diaconv.c 2003-09-10 21:56:49.000000000 -0500 @@ -213,7 +213,13 @@ export_file_name = build_output_file_name(in_file_name, export_file_format); g_message("export_file_name = %s",export_file_name); - do_convert(in_file_name,export_file_name); + ef = filter_guess_export_filter(export_file_name); + if (!ef) { + fprintf(stderr, _("%s error: don't know how to export into %s\n"), + argv0,export_file_name); + exit(1); + } + do_convert(in_file_name,export_file_name,ef); g_free(export_file_name); in_file_name = poptGetArg(poptCtx); } @@ -226,7 +232,13 @@ argv[0]); exit(1); } - do_convert(in_file_name,export_file_name); + ef = filter_guess_export_filter(export_file_name); + if (!ef) { + fprintf(stderr, _("%s error: don't know how to export into %s\n"), + argv0,export_file_name); + exit(1); + } + do_convert(in_file_name,export_file_name,ef); } exit(0); } diff -u --recursive dia-vanilla/lib/filter.c dia/lib/filter.c --- dia-vanilla/lib/filter.c 2003-02-16 01:04:31.000000000 -0600 +++ dia/lib/filter.c 2003-09-10 22:00:18.000000000 -0500 @@ -78,19 +78,13 @@ return ret; } -/* guess the filter for a given filename. */ +/* return the filter for a given file extension. */ DiaExportFilter * -filter_guess_export_filter(const gchar *filename) +filter_get_export_filter(const gchar *ext) { GList *tmp; gchar *ext; - ext = strrchr(filename, '.'); - if (ext) - ext++; - else - ext = ""; - for (tmp = export_filters; tmp != NULL; tmp = tmp->next) { DiaExportFilter *ef = tmp->data; gint i; @@ -102,6 +96,22 @@ return NULL; } +/* guess the filter for a given filename. */ +DiaExportFilter * +filter_guess_export_filter(const gchar *filename) +{ + GList *tmp; + gchar *ext; + + ext = strrchr(filename, '.'); + if (ext) + ext++; + else + ext = ""; + + return filter_get_export_filter(ext) +} + static gint import_filter_compare(gconstpointer a, gconstpointer b) {