diff --git a/src/main.cpp b/src/main.cpp
index f78b1f5ae47749a9d52fe90bc103aef7c757ffdd..b5ed8305dabff9207613b40face5782c951411cc 100644 (file)
--- a/src/main.cpp
+++ b/src/main.cpp
#ifdef HAVE_IEEEFP_H
#include <ieeefp.h>
#endif
-#include <string.h>
+#include <cstring>
+#include <string>
#include <locale.h>
#include <popt.h>
#include <gtk/gtkwindow.h>
#include <gtk/gtkbox.h>
-#include <gtk/gtkmain.h>
-
#include "gc-core.h"
#include "macros.h"
#include "sp-object.h"
#include "interface.h"
#include "print.h"
-#include "slideshow.h"
#include "color.h"
#include "sp-item.h"
#include "sp-root.h"
#include "unit-constants.h"
#include "svg/svg.h"
+#include "svg/svg-color.h"
#include "svg/stringstream.h"
#include "inkscape-private.h"
#include "io/sys.h"
#include "debug/logger.h"
+#include "debug/log-display-config.h"
+
+#include "helper/png-write.h"
#include <extension/extension.h>
#include <extension/system.h>
#include "application/application.h"
+#include "main-cmdlineact.h"
+
+#include <png.h>
+#include <errno.h>
+
enum {
SP_ARG_NONE,
SP_ARG_NOGUI,
SP_ARG_EXPORT_DPI,
SP_ARG_EXPORT_AREA,
SP_ARG_EXPORT_AREA_DRAWING,
+ SP_ARG_EXPORT_AREA_CANVAS,
SP_ARG_EXPORT_AREA_SNAP,
SP_ARG_EXPORT_WIDTH,
SP_ARG_EXPORT_HEIGHT,
SP_ARG_EXPORT_SVG,
SP_ARG_EXPORT_PS,
SP_ARG_EXPORT_EPS,
+ SP_ARG_EXPORT_PDF,
+#ifdef WIN32
+ SP_ARG_EXPORT_EMF,
+#endif //WIN32
SP_ARG_EXPORT_TEXT_TO_PATH,
+ SP_ARG_EXPORT_FONT,
SP_ARG_EXPORT_BBOX_PAGE,
SP_ARG_EXTENSIONDIR,
- SP_ARG_SLIDESHOW,
+ SP_ARG_FIT_PAGE_TO_DRAWING,
SP_ARG_QUERY_X,
SP_ARG_QUERY_Y,
SP_ARG_QUERY_WIDTH,
SP_ARG_QUERY_HEIGHT,
+ SP_ARG_QUERY_ALL,
SP_ARG_QUERY_ID,
SP_ARG_VERSION,
- SP_ARG_NEW_GUI,
SP_ARG_VACUUM_DEFS,
+ SP_ARG_VERB_LIST,
+ SP_ARG_VERB,
+ SP_ARG_SELECT,
SP_ARG_LAST
};
int sp_main_console(int argc, char const **argv);
static void sp_do_export_png(SPDocument *doc);
static void do_export_ps(SPDocument* doc, gchar const* uri, char const *mime);
+static void do_export_pdf(SPDocument* doc, gchar const* uri, char const *mime);
+#ifdef WIN32
+static void do_export_emf(SPDocument* doc, gchar const* uri, char const *mime);
+#endif //WIN32
static void do_query_dimension (SPDocument *doc, bool extent, NR::Dim2 const axis, const gchar *id);
-
+static void do_query_all (SPDocument *doc);
+static void do_query_all_recurse (SPObject *o);
static gchar *sp_global_printer = NULL;
-static gboolean sp_global_slideshow = FALSE;
static gchar *sp_export_png = NULL;
static gchar *sp_export_dpi = NULL;
static gchar *sp_export_area = NULL;
static gboolean sp_export_area_drawing = FALSE;
+static gboolean sp_export_area_canvas = FALSE;
static gchar *sp_export_width = NULL;
static gchar *sp_export_height = NULL;
static gchar *sp_export_id = NULL;
static gchar *sp_export_svg = NULL;
static gchar *sp_export_ps = NULL;
static gchar *sp_export_eps = NULL;
+static gchar *sp_export_pdf = NULL;
+#ifdef WIN32
+static gchar *sp_export_emf = NULL;
+#endif //WIN32
static gboolean sp_export_text_to_path = FALSE;
+static gboolean sp_export_font = FALSE;
static gboolean sp_export_bbox_page = FALSE;
static gboolean sp_query_x = FALSE;
static gboolean sp_query_y = FALSE;
static gboolean sp_query_width = FALSE;
static gboolean sp_query_height = FALSE;
+static gboolean sp_query_all = FALSE;
static gchar *sp_query_id = NULL;
static int sp_new_gui = FALSE;
static gboolean sp_vacuum_defs = FALSE;
N_("Exported area is the entire drawing (not canvas)"),
NULL},
+ {"export-area-canvas", 'C',
+ POPT_ARG_NONE, &sp_export_area_canvas, SP_ARG_EXPORT_AREA_CANVAS,
+ N_("Exported area is the entire canvas"),
+ NULL},
+
{"export-area-snap", 0,
POPT_ARG_NONE, &sp_export_area_snap, SP_ARG_EXPORT_AREA_SNAP,
N_("Snap the bitmap export area outwards to the nearest integer values (in SVG user units)"),
{"export-id", 'i',
POPT_ARG_STRING, &sp_export_id, SP_ARG_EXPORT_ID,
- N_("The ID of the object to export (overrides export-area)"),
+ N_("The ID of the object to export"),
N_("ID")},
{"export-id-only", 'j',
N_("Export document to an EPS file"),
N_("FILENAME")},
+ {"export-pdf", 'A',
+ POPT_ARG_STRING, &sp_export_pdf, SP_ARG_EXPORT_PDF,
+ N_("Export document to a PDF file"),
+ N_("FILENAME")},
+
+#ifdef WIN32
+ {"export-emf", 'M',
+ POPT_ARG_STRING, &sp_export_emf, SP_ARG_EXPORT_EMF,
+ N_("Export document to an Enhanced Metafile (EMF) File"),
+ N_("FILENAME")},
+#endif //WIN32
+
{"export-text-to-path", 'T',
POPT_ARG_NONE, &sp_export_text_to_path, SP_ARG_EXPORT_TEXT_TO_PATH,
N_("Convert text object to paths on export (EPS)"),
NULL},
+ {"export-embed-fonts", 'F',
+ POPT_ARG_NONE, &sp_export_font, SP_ARG_EXPORT_FONT,
+ N_("Embed fonts on export (Type 1 only) (EPS)"),
+ NULL},
+
{"export-bbox-page", 'B',
POPT_ARG_NONE, &sp_export_bbox_page, SP_ARG_EXPORT_BBOX_PAGE,
N_("Export files with the bounding box set to the page size (EPS)"),
N_("Query the height of the drawing or, if specified, of the object with --query-id"),
NULL},
+ {"query-all", 'S',
+ POPT_ARG_NONE, &sp_query_all, SP_ARG_QUERY_ALL,
+ N_("List id,x,y,w,h for all objects"),
+ NULL},
+
{"query-id", 'I',
POPT_ARG_STRING, &sp_query_id, SP_ARG_QUERY_ID,
N_("The ID of the object whose dimensions are queried"),
N_("Print out the extension directory and exit"),
NULL},
- {"slideshow", 's',
- POPT_ARG_NONE, &sp_global_slideshow, SP_ARG_SLIDESHOW,
- N_("Show given files one-by-one, switch to next on any key/mouse event"),
- NULL},
-
- {"new-gui", 'G',
- POPT_ARG_NONE, &sp_new_gui, SP_ARG_NEW_GUI,
- N_("Use the new Gtkmm GUI interface"),
- NULL},
-
{"vacuum-defs", 0,
POPT_ARG_NONE, &sp_vacuum_defs, SP_ARG_VACUUM_DEFS,
N_("Remove unused definitions from the defs section(s) of the document"),
NULL},
+ {"verb-list", 0,
+ POPT_ARG_NONE, NULL, SP_ARG_VERB_LIST,
+ N_("List the IDs of all the verbs in Inkscape"),
+ NULL},
+
+ {"verb", 0,
+ POPT_ARG_STRING, NULL, SP_ARG_VERB,
+ N_("Verb to call when Inkscape opens."),
+ N_("VERB-ID")},
+
+ {"select", 0,
+ POPT_ARG_STRING, NULL, SP_ARG_SELECT,
+ N_("Object ID to select when Inkscape opens."),
+ N_("OBJECT-ID")},
+
POPT_AUTOHELP POPT_TABLEEND
};
static bool needToRecodeParams = true;
gchar* blankParam = "";
+#ifdef WIN32
+static int _win32_set_inkscape_env(char *argv0)
+{
+ CHAR szFullPath[_MAX_PATH];
+
+ CHAR szDrive[_MAX_DRIVE];
+ CHAR szDir[_MAX_DIR];
+ CHAR szFile[_MAX_FNAME];
+ CHAR szExt[_MAX_EXT];
+
+ std::string tmp;
+
+ if (GetModuleFileName(NULL, szFullPath, sizeof(szFullPath)) == 0) {
+ strcpy(szFullPath, argv0);
+ }
+
+ _splitpath(szFullPath, szDrive, szDir, szFile, szExt);
+ strcpy(szFullPath, szDrive);
+ strcat(szFullPath, szDir);
+
+ char *oldenv = getenv("PATH");
+ tmp = "PATH=";
+ tmp += szFullPath;
+ tmp += ";";
+ tmp += szFullPath;
+ tmp += "python;";
+ tmp += szFullPath;
+ tmp += "perl";
+ if(oldenv != NULL) {
+ tmp += ";";
+ tmp += oldenv;
+ }
+ _putenv(tmp.c_str());
+
+ oldenv = getenv("PYTHONPATH");
+ tmp = "PYTHONPATH=";
+ tmp += szFullPath;
+ tmp += "python;";
+ tmp += szFullPath;
+ tmp += "python\\Lib;";
+ tmp += szFullPath;
+ tmp += "python\\DLLs";
+ if(oldenv != NULL) {
+ tmp += ";";
+ tmp += oldenv;
+ }
+ _putenv(tmp.c_str());
+
+ return 0;
+}
+#endif
+
int
main(int argc, char **argv)
{
#ifdef ENABLE_NLS
#ifdef WIN32
+ _win32_set_inkscape_env(argv[0]);
RegistryTool rt;
rt.setPathInfo();
gchar *pathBuf = g_strconcat(g_path_get_dirname(argv[0]), "\\", PACKAGE_LOCALE_DIR, NULL);
bindtextdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR);
#endif
#endif
+ // Allow the user to override the locale directory by setting
+ // the environment variable INKSCAPE_LOCALEDIR.
+ char *inkscape_localedir = getenv("INKSCAPE_LOCALEDIR");
+ if (inkscape_localedir != NULL) {
+ bindtextdomain(GETTEXT_PACKAGE, inkscape_localedir);
+ }
#endif
bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
|| !strcmp(argv[i], "-i")
|| !strncmp(argv[i], "--export-area-drawing", 21)
|| !strcmp(argv[i], "-D")
+ || !strncmp(argv[i], "--export-area-canvas", 20)
+ || !strcmp(argv[i], "-C")
|| !strncmp(argv[i], "--export-id", 12)
|| !strcmp(argv[i], "-P")
|| !strncmp(argv[i], "--export-ps", 11)
|| !strcmp(argv[i], "-E")
|| !strncmp(argv[i], "--export-eps", 12)
+ || !strcmp(argv[i], "-A")
+ || !strncmp(argv[i], "--export-pdf", 12)
+#ifdef WIN32
+ || !strcmp(argv[i], "-M")
+ || !strncmp(argv[i], "--export-emf", 12)
+#endif //WIN32
|| !strcmp(argv[i], "-W")
|| !strncmp(argv[i], "--query-width", 13)
|| !strcmp(argv[i], "-H")
|| !strncmp(argv[i], "--query-height", 14)
+ || !strcmp(argv[i], "-S")
+ || !strncmp(argv[i], "--query-all", 11)
|| !strcmp(argv[i], "-X")
|| !strncmp(argv[i], "--query-x", 13)
|| !strcmp(argv[i], "-Y")
} else if (!strcmp(argv[i], "-g") || !strcmp(argv[i], "--with-gui")) {
use_gui = TRUE;
break;
- } else if (!strcmp(argv[i], "-G") || !strcmp(argv[i], "--new-gui")) {
- sp_new_gui = TRUE;
- break;
}
}
return 0;
}
+static void
+snooper(GdkEvent *event, gpointer /*data*/) {
+ if(inkscape_mapalt()) /* returns the map of the keyboard modifier to map to Alt, zero if no mapping */
+ {
+ GdkModifierType mapping=(GdkModifierType)inkscape_mapalt();
+ switch (event->type) {
+ case GDK_MOTION_NOTIFY:
+ if(event->motion.state & mapping) {
+ event->motion.state|=GDK_MOD1_MASK;
+ }
+ break;
+ case GDK_BUTTON_PRESS:
+ if(event->button.state & mapping) {
+ event->button.state|=GDK_MOD1_MASK;
+ }
+ break;
+ case GDK_KEY_PRESS:
+ if(event->key.state & mapping) {
+ event->key.state|=GDK_MOD1_MASK;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ gtk_main_do_event (event);
+}
+
int
sp_main_gui(int argc, char const **argv)
{
inkscape_gtk_stock_init();
+ gdk_event_handler_set((GdkEventFunc)snooper, NULL, NULL);
+
+ Inkscape::Debug::log_display_config();
+
/* Set default icon */
gchar *filename = (gchar *) g_build_filename (INKSCAPE_APPICONDIR, "inkscape.png", NULL);
if (Inkscape::IO::file_test(filename, (GFileTest)(G_FILE_TEST_IS_REGULAR | G_FILE_TEST_IS_SYMLINK))) {
g_free (filename);
filename = 0;
- if (!sp_global_slideshow) {
- gboolean create_new = TRUE;
+ gboolean create_new = TRUE;
- /// \todo FIXME BROKEN - non-UTF-8 sneaks in here.
- inkscape_application_init(argv[0], true);
+ /// \todo FIXME BROKEN - non-UTF-8 sneaks in here.
+ inkscape_application_init(argv[0], true);
- while (fl) {
- if (sp_file_open((gchar *)fl->data,NULL)) {
- create_new=FALSE;
- }
- fl = g_slist_remove(fl, fl->data);
- }
- if (create_new) {
- sp_file_new_default();
- }
- } else {
- if (fl) {
- GtkWidget *ss;
- /// \todo FIXME BROKEN - non-UTF-8 sneaks in here.
- inkscape_application_init(argv[0], true);
- ss = sp_slideshow_new(fl);
- if (ss) gtk_widget_show(ss);
- } else {
- g_warning ("No slides to display");
- exit(0);
+ while (fl) {
+ if (sp_file_open((gchar *)fl->data,NULL)) {
+ create_new=FALSE;
}
+ fl = g_slist_remove(fl, fl->data);
+ }
+ if (create_new) {
+ sp_file_new_default();
}
+ Glib::signal_idle().connect(sigc::ptr_fun(&Inkscape::CmdLineAction::idle));
main_instance.run();
#ifdef WIN32
if (sp_global_printer) {
sp_print_document_to_file(doc, sp_global_printer);
}
- if (sp_export_png || sp_export_id || sp_export_area_drawing) {
+ if (sp_export_png) {
sp_do_export_png(doc);
}
if (sp_export_svg) {
if (sp_export_eps) {
do_export_ps(doc, sp_export_eps, "image/x-e-postscript");
}
- if (sp_query_width || sp_query_height) {
+ if (sp_export_pdf) {
+ do_export_pdf(doc, sp_export_pdf, "application/pdf");
+ }
+#ifdef WIN32
+ if (sp_export_emf) {
+ do_export_emf(doc, sp_export_emf, "image/x-emf");
+ }
+#endif //WIN32
+ if (sp_query_all) {
+ do_query_all (doc);
+ } else if (sp_query_width || sp_query_height) {
do_query_dimension (doc, true, sp_query_width? NR::X : NR::Y, sp_query_id);
} else if (sp_query_x || sp_query_y) {
do_query_dimension (doc, false, sp_query_x? NR::X : NR::Y, sp_query_id);
}
}
+
fl = g_slist_remove(fl, fl->data);
}
@@ -738,15 +894,58 @@ do_query_dimension (SPDocument *doc, bool extent, NR::Dim2 const axis, const gch
if (o) {
sp_document_ensure_up_to_date (doc);
- NR::Rect area = sp_item_bbox_desktop((SPItem *) o);
-
- Inkscape::SVGOStringStream os;
- if (extent) {
- os << area.extent(axis);
+ SPItem *item = ((SPItem *) o);
+
+ // "true" SVG bbox for scripting
+ NR::Maybe<NR::Rect> area = item->getBounds(sp_item_i2doc_affine(item));
+ if (area) {
+ Inkscape::SVGOStringStream os;
+ if (extent) {
+ os << area->extent(axis);
+ } else {
+ os << area->min()[axis];
+ }
+ g_print ("%s", os.str().c_str());
} else {
- os << area.min()[axis];
+ g_print("0");
}
- g_print ("%s\n", os.str().c_str());
+ }
+}
+
+static void
+do_query_all (SPDocument *doc)
+{
+ SPObject *o = NULL;
+
+ o = SP_DOCUMENT_ROOT(doc);
+
+ if (o) {
+ sp_document_ensure_up_to_date (doc);
+ do_query_all_recurse(o);
+ }
+}
+
+static void
+do_query_all_recurse (SPObject *o)
+{
+ SPItem *item = ((SPItem *) o);
+ if (o->id && SP_IS_ITEM(item)) {
+ NR::Maybe<NR::Rect> area = item->getBounds(sp_item_i2doc_affine(item));
+ if (area) {
+ Inkscape::SVGOStringStream os;
+ os << o->id;
+ os << "," << area->min()[NR::X];
+ os << "," << area->min()[NR::Y];
+ os << "," << area->extent(NR::X);
+ os << "," << area->extent(NR::Y);
+ g_print ("%s\n", os.str().c_str());
+ }
+ }
+
+ SPObject *child = o->children;
+ while (child) {
+ do_query_all_recurse (child);
+ child = child->next;
}
}
if (sp_export_id || sp_export_area_drawing) {
SPObject *o = NULL;
- if (sp_export_id) {
+ SPObject *o_area = NULL;
+ if (sp_export_id && sp_export_area_drawing) {
o = doc->getObjectById(sp_export_id);
+ o_area = SP_DOCUMENT_ROOT (doc);
+ } else if (sp_export_id) {
+ o = doc->getObjectById(sp_export_id);
+ o_area = o;
} else if (sp_export_area_drawing) {
o = SP_DOCUMENT_ROOT (doc);
+ o_area = o;
}
if (o) {
g_warning("Object with id=\"%s\" is not a visible item. Nothing exported.", sp_export_id);
return;
}
- if (sp_export_area) {
- g_warning ("Object with id=\"%s\" is being exported; --export-area is ignored.", sp_export_id);
- }
items = g_slist_prepend (items, SP_ITEM(o));
// write object bbox to area
sp_document_ensure_up_to_date (doc);
- sp_item_invoke_bbox((SPItem *) o, &area, sp_item_i2r_affine((SPItem *) o), TRUE);
+ sp_item_invoke_bbox((SPItem *) o_area, &area, sp_item_i2r_affine((SPItem *) o_area), TRUE);
} else {
g_warning("Object with id=\"%s\" was not found in the document. Nothing exported.", sp_export_id);
return;
}
- } else if (sp_export_area) {
+ }
+
+ if (sp_export_area) {
/* Try to parse area (given in SVG pixels) */
if (!sscanf(sp_export_area, "%lg:%lg:%lg:%lg", &area.x0, &area.y0, &area.x1, &area.y1) == 4) {
g_warning("Cannot parse export area '%s'; use 'x0:y0:x1:y1'. Nothing exported.", sp_export_area);
g_warning("Export area '%s' has negative width or height. Nothing exported.", sp_export_area);
return;
}
- } else {
+ } else if (sp_export_area_canvas || !(sp_export_id || sp_export_area_drawing)) {
/* Export the whole canvas */
sp_document_ensure_up_to_date (doc);
area.x0 = SP_ROOT(doc->root)->x.computed;
if (dpi == 0.0)
dpi = PX_PER_IN;
- gint width = 0;
- gint height = 0;
+ unsigned long int width = 0;
+ unsigned long int height = 0;
if (sp_export_width) {
- width = atoi(sp_export_width);
- if ((width < 1) || (width > 65536)) {
- g_warning("Export width %d out of range (1 - 65536). Nothing exported.", width);
+ width = strtoul(sp_export_width, NULL, 0);
+ if ((width < 1) || (width > PNG_UINT_31_MAX) || (errno == ERANGE) ) {
+ g_warning("Export width %lu out of range (1 - %lu). Nothing exported.", width, (unsigned long int)PNG_UINT_31_MAX);
return;
}
dpi = (gdouble) width * PX_PER_IN / (area.x1 - area.x0);
}
if (sp_export_height) {
- height = atoi(sp_export_height);
- if ((height < 1) || (height > 65536)) {
- g_warning("Export height %d out of range (1 - 65536). Nothing exported.", width);
+ height = strtoul(sp_export_height, NULL, 0);
+ if ((height < 1) || (height > PNG_UINT_31_MAX)) {
+ g_warning("Export height %lu out of range (1 - %lu). Nothing exported.", height, (unsigned long int)PNG_UINT_31_MAX);
return;
}
dpi = (gdouble) height * PX_PER_IN / (area.y1 - area.y0);
}
if (!sp_export_width) {
- width = (gint) ((area.x1 - area.x0) * dpi / PX_PER_IN + 0.5);
+ width = (unsigned long int) ((area.x1 - area.x0) * dpi / PX_PER_IN + 0.5);
}
if (!sp_export_height) {
- height = (gint) ((area.y1 - area.y0) * dpi / PX_PER_IN + 0.5);
+ height = (unsigned long int) ((area.y1 - area.y0) * dpi / PX_PER_IN + 0.5);
}
guint32 bgcolor = 0x00000000;
g_print("Background RRGGBBAA: %08x\n", bgcolor);
- g_print("Area %g:%g:%g:%g exported to %d x %d pixels (%g dpi)\n", area.x0, area.y0, area.x1, area.y1, width, height, dpi);
+ g_print("Area %g:%g:%g:%g exported to %lu x %lu pixels (%g dpi)\n", area.x0, area.y0, area.x1, area.y1, width, height, dpi);
g_print("Bitmap saved as: %s\n", filename);
- if ((width >= 1) && (height >= 1) && (width < 65536) && (height < 65536)) {
- sp_export_png_file(doc, filename, area.x0, area.y0, area.x1, area.y1, width, height, bgcolor, NULL, NULL, true, sp_export_id_only ? items : NULL);
+ if ((width >= 1) && (height >= 1) && (width <= PNG_UINT_31_MAX) && (height <= PNG_UINT_31_MAX)) {
+ sp_export_png_file(doc, filename, area.x0, area.y0, area.x1, area.y1, width, height, dpi, dpi, bgcolor, NULL, NULL, true, sp_export_id_only ? items : NULL);
} else {
- g_warning("Calculated bitmap dimensions %d %d are out of range (1 - 65535). Nothing exported.", width, height);
+ g_warning("Calculated bitmap dimensions %lu %lu are out of range (1 - %lu). Nothing exported.", width, height, (unsigned long int)PNG_UINT_31_MAX);
}
g_slist_free (items);
static void do_export_ps(SPDocument* doc, gchar const* uri, char const* mime)
{
- /** \todo
- * FIXME: I've no idea if this is the `proper' way to do this.
- * If anyone feels qualified to say that it is, perhaps they
- * could remove this comment.
- */
-
Inkscape::Extension::DB::OutputList o;
Inkscape::Extension::db.get_output_list(o);
Inkscape::Extension::DB::OutputList::const_iterator i = o.begin();
@@ -973,11 +1171,12 @@ static void do_export_ps(SPDocument* doc, gchar const* uri, char const* mime)
if (i == o.end())
{
- g_warning ("Could not find an extension to export this file.");
+ g_warning ("Could not find an extension to export to MIME type %s.", mime);
return;
}
bool old_text_to_path = false;
+ bool old_font_embedded = false;
bool old_bbox_page = false;
try {
g_warning ("Could not set export-text-to-path option for this export.");
}
+ try {
+ old_font_embedded = (*i)->get_param_bool("fontEmbedded");
+ (*i)->set_param_bool("fontEmbedded", sp_export_font);
+ }
+ catch (...) {
+ g_warning ("Could not set export-font option for this export.");
+ }
+
try {
old_bbox_page = (*i)->get_param_bool("pageBoundingBox");
(*i)->set_param_bool("pageBoundingBox", sp_export_bbox_page);
try {
(*i)->set_param_bool("textToPath", old_text_to_path);
+ (*i)->set_param_bool("fontEmbedded", old_font_embedded);
(*i)->set_param_bool("pageBoundingBox", old_bbox_page);
}
catch (...) {
@@ -1007,6 +1215,77 @@ static void do_export_ps(SPDocument* doc, gchar const* uri, char const* mime)
}
}
+/**
+ * Perform a PDF export
+ *
+ * \param doc Document to export.
+ * \param uri URI to export to.
+ * \param mime MIME type to export as.
+ */
+
+static void do_export_pdf(SPDocument* doc, gchar const* uri, char const* mime)
+{
+ Inkscape::Extension::DB::OutputList o;
+ Inkscape::Extension::db.get_output_list(o);
+ Inkscape::Extension::DB::OutputList::const_iterator i = o.begin();
+ while (i != o.end() && strcmp( (*i)->get_mimetype(), mime ) != 0) {
+ i++;
+ }
+
+ if (i == o.end())
+ {
+ g_warning ("Could not find an extension to export to MIME type %s.", mime);
+ return;
+ }
+
+ if (sp_export_id) {
+ SPObject *o = doc->getObjectById(sp_export_id);
+ if (o == NULL) {
+ g_warning("Object with id=\"%s\" was not found in the document. Nothing exported.", sp_export_id);
+ return;
+ }
+ (*i)->set_param_string ("exportId", sp_export_id);
+ } else {
+ (*i)->set_param_string ("exportId", "");
+ }
+
+ if (sp_export_area_drawing) {
+ (*i)->set_param_bool ("exportDrawing", TRUE);
+ } else {
+ (*i)->set_param_bool ("exportDrawing", FALSE);
+ }
+
+ (*i)->save(doc, uri);
+}
+
+#ifdef WIN32
+/**
+ * Export a document to EMF
+ *
+ * \param doc Document to export.
+ * \param uri URI to export to.
+ * \param mime MIME type to export as (should be "image/x-emf")
+ */
+
+static void do_export_emf(SPDocument* doc, gchar const* uri, char const* mime)
+{
+ Inkscape::Extension::DB::OutputList o;
+ Inkscape::Extension::db.get_output_list(o);
+ Inkscape::Extension::DB::OutputList::const_iterator i = o.begin();
+ while (i != o.end() && strcmp( (*i)->get_mimetype(), mime ) != 0) {
+ i++;
+ }
+
+ if (i == o.end())
+ {
+ g_warning ("Could not find an extension to export to MIME type %s.", mime);
+ return;
+ }
+
+ (*i)->save(doc, uri);
+}
+#endif //WIN32
+
#ifdef WIN32
bool replaceArgs( int& argc, char**& argv )
{
exit(0);
break;
}
+ case SP_ARG_VERB_LIST: {
+ // This really shouldn't go here, we should init the app.
+ // But, since we're just exiting in this path, there is
+ // no harm, and this is really a better place to put
+ // everything else.
+ Inkscape::Extension::init();
+ Inkscape::Verb::list();
+ exit(0);
+ break;
+ }
+ case SP_ARG_VERB:
+ case SP_ARG_SELECT: {
+ gchar const *arg = poptGetOptArg(ctx);
+ if (arg != NULL) {
+ // printf("Adding in: %s\n", arg);
+ new Inkscape::CmdLineAction((a == SP_ARG_VERB), arg);
+ }
+ break;
+ }
default: {
break;
}