diff --git a/src/main.cpp b/src/main.cpp
index bf1662c3121e06a047d35907be7f04307f9b2fde..d6f0ae9e827a49c93d7257673ed8db6da96061dd 100644 (file)
--- a/src/main.cpp
+++ b/src/main.cpp
};
static bool needToRecodeParams = true;
-gchar* blankParam = "";
+gchar * blankParam = g_strdup("");
-#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;
+#ifdef WIN32
- if (GetModuleFileName(NULL, szFullPath, sizeof(szFullPath)) == 0) {
- strcpy(szFullPath, argv0);
- }
+/**
+ * Return the directory of the .exe that is currently running
+ */
+static Glib::ustring _win32_getExePath()
+{
+ char exeName[MAX_PATH+1];
+ GetModuleFileName(NULL, exeName, MAX_PATH);
+ char *slashPos = strrchr(exeName, '\\');
+ if (slashPos)
+ *slashPos = '\0';
+ Glib::ustring s = exeName;
+ return s;
+}
- _splitpath(szFullPath, szDrive, szDir, szFile, szExt);
- strcpy(szFullPath, szDrive);
- strcat(szFullPath, szDir);
+/**
+ * Set up the PATH and PYTHONPATH environment variables on
+ * win32
+ */
+static int _win32_set_inkscape_env(const Glib::ustring &exePath)
+{
char *oldenv = getenv("PATH");
- tmp = "PATH=";
- tmp += szFullPath;
+ Glib::ustring tmp = "PATH=";
+ tmp += exePath;
tmp += ";";
- tmp += szFullPath;
- tmp += "python;";
- tmp += szFullPath;
- tmp += "perl";
+ tmp += exePath;
+ tmp += "\\python;";
+ tmp += exePath;
+ tmp += "\\python\\Scripts;"; // for uniconv.cmd
+ tmp += exePath;
+ tmp += "\\perl";
if(oldenv != NULL) {
tmp += ";";
tmp += oldenv;
oldenv = getenv("PYTHONPATH");
tmp = "PYTHONPATH=";
- tmp += szFullPath;
- tmp += "python;";
- tmp += szFullPath;
- tmp += "python\\Lib;";
- tmp += szFullPath;
- tmp += "python\\DLLs";
+ tmp += exePath;
+ tmp += "\\python;";
+ tmp += exePath;
+ tmp += "\\python\\Lib;";
+ tmp += exePath;
+ tmp += "\\python\\DLLs";
if(oldenv != NULL) {
tmp += ";";
tmp += oldenv;
}
#endif
+
+
+/**
+ * This is the classic main() entry point of the program, though on some
+ * architectures it might be called by something else.
+ */
int
main(int argc, char **argv)
{
fpsetmask(fpgetmask() & ~(FP_X_DZ | FP_X_INV));
#endif
-#ifdef ENABLE_NLS
#ifdef WIN32
- _win32_set_inkscape_env(argv[0]);
+ /*
+ Set the current directory to the directory of the
+ executable. This seems redundant, but is needed for
+ when inkscape.exe is executed from another directory.
+ We use relative paths on win32.
+ HKCR\svgfile\shell\open\command is a good example
+ */
+ Glib::ustring homedir = _win32_getExePath();
+ SetCurrentDirectory(homedir.c_str());
+ _win32_set_inkscape_env(homedir);
RegistryTool rt;
rt.setPathInfo();
- gchar *pathBuf = g_strconcat(g_path_get_dirname(argv[0]), "\\", PACKAGE_LOCALE_DIR, NULL);
- bindtextdomain(GETTEXT_PACKAGE, pathBuf);
- g_free(pathBuf);
+#endif
+
+ /**
+ * Call bindtextdomain() for various machines's paths
+ */
+#ifdef ENABLE_NLS
+#ifdef WIN32
+ Glib::ustring localePath = homedir;
+ localePath += "\\";
+ localePath += PACKAGE_LOCALE_DIR;
+ bindtextdomain(GETTEXT_PACKAGE, localePath.c_str());
#else
#ifdef ENABLE_BINRELOC
bindtextdomain(GETTEXT_PACKAGE, BR_LOCALEDIR(""));
Inkscape::Debug::Logger::init();
gboolean use_gui;
+
#ifndef WIN32
use_gui = (getenv("DISPLAY") != NULL);
#else
- /*
- Set the current directory to the directory of the
- executable. This seems redundant, but is needed for
- when inkscape.exe is executed from another directory.
- We use relative paths on win32.
- HKCR\svgfile\shell\open\command is a good example
- */
- /// \todo FIXME BROKEN - non-UTF-8 sneaks in here.
- char *homedir = g_path_get_dirname(argv[0]);
- SetCurrentDirectory(homedir);
- g_free(homedir);
-
use_gui = TRUE;
#endif
/* Test whether with/without GUI is forced */
return app.run();
}
+
+
+
void fixupSingleFilename( gchar **orig, gchar **spare )
{
if ( orig && *orig && **orig ) {
}
}
+
+
GSList *fixupFilenameEncoding( GSList* fl )
{
GSList *newFl = NULL;
Inkscape::XML::Node *repr;
rdoc = sp_repr_document_new("svg:svg");
repr = rdoc->root();
- repr = sp_document_root(doc)->updateRepr(repr, SP_OBJECT_WRITE_BUILD);
+ repr = sp_document_root(doc)->updateRepr(rdoc, repr, SP_OBJECT_WRITE_BUILD);
sp_repr_save_file(repr->document(), sp_export_svg, SP_SVG_NS_URI);
}
if (sp_export_ps) {
@@ -897,7 +920,7 @@ do_query_dimension (SPDocument *doc, bool extent, NR::Dim2 const axis, const gch
SPItem *item = ((SPItem *) o);
// "true" SVG bbox for scripting
- NR::Maybe<NR::Rect> area = item->getBounds(sp_item_i2doc_affine(item));
+ boost::optional<NR::Rect> area = item->getBounds(from_2geom(sp_item_i2doc_affine(item)));
if (area) {
Inkscape::SVGOStringStream os;
if (extent) {
{
SPItem *item = ((SPItem *) o);
if (o->id && SP_IS_ITEM(item)) {
- NR::Maybe<NR::Rect> area = item->getBounds(sp_item_i2doc_affine(item));
+ boost::optional<NR::Rect> area = item->getBounds(from_2geom(sp_item_i2doc_affine(item)));
if (area) {
Inkscape::SVGOStringStream os;
os << o->id;
// write object bbox to area
sp_document_ensure_up_to_date (doc);
- sp_item_invoke_bbox((SPItem *) o_area, &area, sp_item_i2r_affine((SPItem *) o_area), TRUE);
+ sp_item_invoke_bbox((SPItem *) o_area, &area, from_2geom(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;
@@ -1261,6 +1284,12 @@ static void do_export_pdf(SPDocument* doc, gchar const* uri, char const* mime)
(*i)->set_param_bool ("exportCanvas", FALSE);
}
+ if (sp_export_text_to_path) {
+ (*i)->set_param_bool("textToPath", TRUE);
+ } else {
+ (*i)->set_param_bool("textToPath", FALSE);
+ }
+
(*i)->save(doc, uri);
}
if ( wildcarded )
{
#ifdef REPLACEARGS_ANSI
- WIN32_FIND_DATAA data = {0};
+ WIN32_FIND_DATAA data;
#else
- WIN32_FIND_DATAW data = {0};
+ WIN32_FIND_DATAW data;
#endif // REPLACEARGS_ANSI
+ memset((void *)&data, 0, sizeof(data));
+
int baseLen = wcslen(parsed[i1]) + 2;
wchar_t* base = new wchar_t[baseLen];
wcsncpy( base, parsed[i1], baseLen );