[gnumeric] ssconvert: infer image format from output filename.



commit 3482f0f73e5e5d2f6e39aff872d1c4b66c6ad378
Author: Morten Welinder <terra gnome org>
Date:   Wed Apr 29 21:39:45 2020 -0400

    ssconvert: infer image format from output filename.
    
    From now on,
    
        ssconvert --export-graphs foo.gnumeric '/tmp/foo-%o.png'
    
    will export png files, not strangly named svg files.

 ChangeLog       |  5 +++++
 src/ssconvert.c | 28 +++++++++++++++++++++++++++-
 2 files changed, 32 insertions(+), 1 deletion(-)
---
diff --git a/ChangeLog b/ChangeLog
index 9fdf161b2..5c1602b0d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2020-04-29  Morten Welinder  <terra gnome org>
+
+       * src/ssconvert.c (convert): Infer image format from filename for
+       object export just as for regular conversion.
+
 2020-04-26  Morten Welinder  <terra gnome org>
 
        * src/sheet.c (sheet_clear_region): Fix type of clear_flags.
diff --git a/src/ssconvert.c b/src/ssconvert.c
index 13218e076..5a4093c43 100644
--- a/src/ssconvert.c
+++ b/src/ssconvert.c
@@ -49,6 +49,8 @@
 // Sheets user has specified as export options
 #define SSCONVERT_SHEET_SET_KEY "ssconvert-sheets"
 
+#define DEFAULT_IMAGE_FORMAT "svg"
+
 static gboolean ssconvert_show_version = FALSE;
 static gboolean ssconvert_verbose = FALSE;
 static gboolean ssconvert_list_exporters = FALSE;
@@ -70,7 +72,7 @@ static char *ssconvert_merge_target = NULL;
 static char **ssconvert_set_cells = NULL;
 static char **ssconvert_goal_seek = NULL;
 static char **ssconvert_tool_test = NULL;
-static const char *ssconvert_image_format = "svg";
+static const char *ssconvert_image_format = "auto";
 
 static const GOptionEntry ssconvert_options [] = {
        {
@@ -857,6 +859,25 @@ by_anchor (gconstpointer a_, gconstpointer b_)
        return 0;
 }
 
+static const char *
+infer_image_format (const char *url)
+{
+       const char *ext;
+       GOImageFormat imfmt;
+
+       if (!url)
+               return NULL;
+
+       ext = gsf_extension_pointer (url);
+       for (imfmt = (GOImageFormat)0; imfmt < GO_IMAGE_FORMAT_UNKNOWN; imfmt++) {
+               GOImageFormatInfo const *info = go_image_get_format_info (imfmt);
+               if (info->ext && g_ascii_strcasecmp (ext, info->ext) == 0)
+                       return info->name;
+       }
+       return NULL;
+}
+
+
 struct cb_image_export_options {
        double resolution;
 };
@@ -1079,6 +1100,11 @@ convert (char const *inarg, char const *outarg, char const *mergeargs[],
        if (ssconvert_object_export) {
                if (ssconvert_export_id)
                        ssconvert_image_format = ssconvert_export_id;
+               if (g_str_equal (ssconvert_image_format, "auto")) {
+                       ssconvert_image_format = infer_image_format (outfile);
+                       if (!ssconvert_image_format)
+                               ssconvert_image_format = DEFAULT_IMAGE_FORMAT;
+               }
        } else if (ssconvert_export_id != NULL) {
                fs = go_file_saver_for_id (ssconvert_export_id);
                if (fs == NULL) {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]