summaryrefslogtreecommitdiffstats
path: root/src/io/file-export-cmd.cpp
diff options
context:
space:
mode:
authorTavmjong Bah <tavmjong@free.fr>2018-11-22 12:02:10 +0000
committerTavmjong Bah <tavmjong@free.fr>2018-11-22 12:02:10 +0000
commitff90998e1316c65e1e2a72df6683b4564a54fb90 (patch)
tree873a2fe903fd40b7e3205b384718604ba1aa9ecf /src/io/file-export-cmd.cpp
parentAdd a few more command line options which should suppress GUI. (diff)
downloadinkscape-ff90998e1316c65e1e2a72df6683b4564a54fb90.tar.gz
inkscape-ff90998e1316c65e1e2a72df6683b4564a54fb90.zip
Fix command-line export logic.
Diffstat (limited to 'src/io/file-export-cmd.cpp')
-rw-r--r--src/io/file-export-cmd.cpp138
1 files changed, 69 insertions, 69 deletions
diff --git a/src/io/file-export-cmd.cpp b/src/io/file-export-cmd.cpp
index 8cc9c43fd..e635873b3 100644
--- a/src/io/file-export-cmd.cpp
+++ b/src/io/file-export-cmd.cpp
@@ -38,7 +38,6 @@
InkFileExportCmd::InkFileExportCmd()
: over_write(false)
- , export_type("svg")
, export_overwrite(false)
, export_area_drawing(false)
, export_area_page(false)
@@ -62,41 +61,83 @@ InkFileExportCmd::InkFileExportCmd()
void
InkFileExportCmd::do_export(SPDocument* doc, std::string filename_in)
{
- if (export_type == "svg") {
+ // Get type from filename.
+ std::string export_type_filename;
+ if (!export_filename.empty() && export_filename != "-") {
+
+ auto extension_pos = export_filename.find_last_of('.');
+
+ if (extension_pos == std::string::npos) {
+ std::cerr << "InkFileExportCmd::do_export: No export_filename extension: " << export_filename << std::endl;
+ return;
+ }
+
+ export_type_filename = export_filename.substr(extension_pos+1);
+ }
+
+ // Check for consistency between export_type and export_filename type.
+ if (!export_type.empty() && !export_type_filename.empty() && export_type != export_type_filename) {
+ std::cerr << "InkFileExportCmd::do_export: Mismatch between export_type and export_filename extension: "
+ << export_type << ", " << export_type_filename << std::endl;
+ return ;
+ }
+
+ // Determine type.
+ export_type_internal = "svg"; // Default
+ if (export_use_hints) {
+ if (export_type != "png" && !export_type.empty()) {
+ std::cerr << "InkFileExportCmd::do_export: --export-hints can only be used with PNG export!" << std::endl;
+ return;
+ }
+ if (!export_filename.empty()) {
+ std::cerr << "InkFileExportCmd::do_export: --export-filename cannot be used with --export-use-hints!" << std::endl;
+ return;
+ }
+ export_type_internal = "png"; // Hints only work with PNG export.
+ }
+ if (!export_type.empty()) {
+ export_type_internal = export_type;
+ }
+ if (!export_type_filename.empty()) {
+ export_type_internal = export_type_filename;
+ }
+
+ if (export_type_internal == "svg") {
do_export_svg(doc, filename_in);
- } else if (export_type == "png") {
+ } else if (export_type_internal == "png") {
do_export_png(doc, filename_in);
- } else if (export_type == "ps") {
+ } else if (export_type_internal == "ps") {
do_export_ps_pdf(doc, filename_in, "image/x-postscript");
- } else if (export_type == "eps") {
+ } else if (export_type_internal == "eps") {
do_export_ps_pdf(doc, filename_in, "image/x-e-postscript");
- } else if (export_type == "pdf") {
+ } else if (export_type_internal == "pdf") {
do_export_ps_pdf(doc, filename_in, "application/pdf");
- } else if (export_type == "emf") {
+ } else if (export_type_internal == "emf") {
do_export_win_metafile(doc, filename_in, "image/x-emf");
- } else if (export_type == "wmf") {
+ } else if (export_type_internal == "wmf") {
do_export_win_metafile(doc, filename_in, "image/x-wmf");
- } else if (export_type == "xaml") {
+ } else if (export_type_internal == "xaml") {
do_export_win_metafile(doc, filename_in, "text/xml+xaml");
} else {
- std::cerr << "InkFileExportCmd::export: Unknown export type: " << export_type << std::endl;
+ std::cerr << "InkFileExportCmd::export: Unknown export type: " << export_type_internal
+ << ". Allowed values: [svg,png,ps,eps,pdf,emf,wmf,xaml]." << std::endl;
}
}
@@ -105,44 +146,8 @@ InkFileExportCmd::do_export(SPDocument* doc, std::string filename_in)
std::string
InkFileExportCmd::get_filename_out(std::string filename_in, std::string object_id)
{
-
- if (export_type != "svg" &&
- export_type != "png" &&
- export_type != "ps" &&
- export_type != "eps" &&
- export_type != "pdf" &&
- export_type != "emf" &&
- export_type != "wmf" &&
- export_type != "xaml" &&
- export_type != "svg" ) {
- std::cerr << "InkFileExportCmd::get_filename_out: Invalid export-type: " << export_type
- << " Allowed values: [svg,png,ps,eps,pdf,emf,wmf,xaml]." << std::endl;
- return (std::string());
- }
-
- // Writing to pipe.
- if (export_filename == "-") {
- // No need to check if valid file name.
- return export_filename;
- }
-
// Use export_filename if given.
if (!export_filename.empty()) {
- // Check file extension matches file_type.
- auto extension_pos = export_filename.find_last_of('.');
-
- if (extension_pos == std::string::npos) {
- std::cerr << "InkFileExportCmd::get_filename_out: no export_filename extension: " << export_filename << std::endl;
- return (std::string());
- }
-
- std::string extension = export_filename.substr(extension_pos+1);
- if (export_type != extension) {
- std::cerr << "InkFileExportCmd::get_filename_out: mismatch between export_filename extension and export_type: "
- << extension << ", " << export_type << std::endl;
- return (std::string());
- }
-
return export_filename;
}
@@ -154,17 +159,17 @@ InkFileExportCmd::get_filename_out(std::string filename_in, std::string object_i
}
std::string extension = filename_in.substr(extension_pos+1);
- if (export_overwrite && export_type == extension) {
+ if (export_overwrite && export_type_internal == extension) {
return filename_in;
} else {
std::string tag;
- if (export_type == extension) {
+ if (export_type_internal == extension) {
tag = "_out";
}
if (!object_id.empty()) {
tag = "_" + object_id;
}
- return (filename_in.substr(0,extension_pos) + tag + "." + export_type);
+ return (filename_in.substr(0,extension_pos) + tag + "." + export_type_internal);
}
// We need a valid file name to write to unless we're using PNG export hints.
@@ -335,9 +340,9 @@ InkFileExportCmd::do_export_png(SPDocument *doc, std::string filename_in)
if (o) {
if (!SP_IS_ITEM (o)) {
std::cerr << "InkFileExportCmd::do_export_png: "
- << "Object with id=" << object
- << " is not a visible item. Nothing exported." << std::endl;
- return 1;
+ << "Object with id=\"" << object
+ << "\" is not a visible item. Skipping." << std::endl;
+ continue;
}
items.push_back(SP_ITEM(o));
@@ -352,17 +357,12 @@ InkFileExportCmd::do_export_png(SPDocument *doc, std::string filename_in)
// Retrieve export filename hint.
const gchar *fn_hint = o->getRepr()->attribute("inkscape:export-filename");
if (fn_hint) {
- if (!filename_out.empty()) {
- std::cerr << "InkFileExport::do_export_png: "
- << "Using export filename from the command line."
- << " Filename hint " << fn_hint << " is ignored.";
- } else {
- filename_out = fn_hint;
- filename_from_hint = true;
- }
+ filename_out = fn_hint;
+ filename_from_hint = true;
} else {
std::cerr << "InkFileExport::do_export_png: "
- << "Export filename hint not found for the object.";
+ << "Export filename hint not found for object " << object << ". Skipping." << std::endl;
+ continue;
}
// Retrieve export dpi hint. Only xdpi as ydpi is always the same now.
@@ -372,13 +372,13 @@ InkFileExportCmd::do_export_png(SPDocument *doc, std::string filename_in)
std::cerr << "InkFileExport::do_export_png: "
<< "Using bitmap dimensions from the command line "
<< "(--export-dpi, --export-width, or --export-height). "
- << "DPI hint " << dpi_hint << " is ignored.";
+ << "DPI hint " << dpi_hint << " is ignored." << std::endl;
} else {
dpi = atof(dpi_hint);
}
} else {
std::cerr << "InkFileExport::do_export_png: "
- << "Export DPI hint not found for the object.";
+ << "Export DPI hint not found for the object." << std::endl;
}
}
@@ -389,14 +389,14 @@ InkFileExportCmd::do_export_png(SPDocument *doc, std::string filename_in)
area = *areaMaybe;
} else {
std::cerr << "InkFileExport::do_export_png: "
- << "Unable to determine a valid bounding box. Nothing exported.";
- return 1;
+ << "Unable to determine a valid bounding box. Skipping." << std::endl;
+ continue;
}
} else {
std::cerr << "InkFileExport::do_export_png: "
<< "Object with id=\"" << object
- << "\" was not found in the document. Nothing exported.";
- return 1;
+ << "\" was not found in the document. Skipping." << std::endl;
+ continue;
}
}
@@ -422,8 +422,8 @@ InkFileExportCmd::do_export_png(SPDocument *doc, std::string filename_in)
// Check we have a filename.
if (filename_out.empty()) {
std::cerr << "InkFileExport::do_export_png: "
- << "No valid export filename given and no filename hint. Nothing exported.";
- return 1;
+ << "No valid export filename given and no filename hint. Skipping." << std::endl;
+ continue;
}
if (export_dpi != 0.0 && dpi == 0.0) {