GdkColormap *cmap;
GdkPixbuf *pixbuf;
int width, height;
+
+ if (gs->pstarget == NULL)
+ return;
cmap = gdk_window_get_colormap (gs->pstarget);
gdk_drawable_get_size (gs->bpixmap, &width, &height);
GdkColormap *colormap;
double width, height;
int pixmap_width, pixmap_height;
+
+ if (gs->pstarget == NULL)
+ return;
ev_document_get_page_size (EV_DOCUMENT (gs), page, &width, &height);
#define NUM_GS_ARGS (NUM_ARGS - 20)
#define NUM_ALPHA_ARGS 10
- char *argv[NUM_ARGS], *dir, *gv_env;
+ char *argv[NUM_ARGS], *dir, *gv_env, *gs_path;
char **gs_args, **alpha_args = NULL;
int argc = 0, i;
stop_interpreter(gs);
/* set up the args... */
- gs_args = g_strsplit (gtk_gs_defaults_get_interpreter_cmd (), " ", NUM_GS_ARGS);
+ gs_path = g_find_program_in_path ("gs");
+ gs_args = g_strsplit (gs_path, " ", NUM_GS_ARGS);
+ g_free (gs_path);
for(i = 0; i < NUM_GS_ARGS && gs_args[i]; i++, argc++) {
argv[argc] = gs_args[i];
}
/* report error */
filename_dsp = g_filename_display_name (gs->gs_filename);
- msg = g_strdup_printf (_("Error while decompressing file %s:\n"), filename_dsp);
+ msg = g_strdup_printf (_("Error while decompressing file “%s”:\n"), filename_dsp);
g_free (filename_dsp);
interpreter_failed (gs, msg);
gchar *msg;
filename_dsp = g_filename_display_name (fname);
- msg = g_strdup_printf (_("Cannot open file %s.\n"), filename_dsp);
+ msg = g_strdup_printf (_("Cannot open file “%s”.\n"), filename_dsp);
g_free (filename_dsp);
interpreter_failed (gs, msg);
const char *uri,
GError **error)
{
- gboolean result;
char *filename;
+ char *gs_path;
+ gboolean result;
filename = g_filename_from_uri (uri, NULL, error);
if (!filename)
return FALSE;
- result = document_load (PS_DOCUMENT (document), filename);
- if (!result) {
- gchar *filename_dsp;
+ gs_path = g_find_program_in_path ("gs");
+ if (!gs_path) {
+ gchar *filename_dsp;
+ filename_dsp = g_filename_display_name (filename);
+ g_set_error(error,
+ G_FILE_ERROR,
+ G_FILE_ERROR_NOENT,
+ _("Failed to load document “%s”. Ghostscript interpreter was not found in path"),
+ filename);
+ g_free (filename_dsp);
+ result = FALSE;
+ } else {
+ result = document_load (PS_DOCUMENT (document), filename);
+ if (!result) {
+ gchar *filename_dsp;
+ filename_dsp = g_filename_display_name (filename);
+
+ g_set_error (error, G_FILE_ERROR,
+ G_FILE_ERROR_FAILED,
+ _("Failed to load document “%s”"),
+ filename_dsp);
+ g_free (filename_dsp);
+ }
+ g_free (gs_path);
+ }
+ g_free (filename);
+
+ return result;
+}
+
+static gboolean
+save_document (PSDocument *document, const char *filename)
+{
+ gboolean result = TRUE;
+ GtkGSDocSink *sink = gtk_gs_doc_sink_new ();
+ FILE *f, *src_file;
+ gchar *buf;
- filename_dsp = g_filename_display_name (filename);
+ src_file = fopen (PS_DOCUMENT_GET_PS_FILE(document), "r");
+ if (src_file) {
+ struct stat stat_rec;
- g_set_error (error, G_FILE_ERROR,
- G_FILE_ERROR_FAILED,
- _("Failed to load document '%s'"),
- filename_dsp);
+ if (stat (PS_DOCUMENT_GET_PS_FILE(document), &stat_rec) == 0) {
+ pscopy (src_file, sink, 0, stat_rec.st_size - 1);
+ }
- g_free (filename_dsp);
+ fclose (src_file);
+ }
+
+ buf = gtk_gs_doc_sink_get_buffer (sink);
+ if (buf == NULL) {
+ return FALSE;
+ }
+
+ f = fopen (filename, "w");
+ if (f) {
+ fputs (buf, f);
+ fclose (f);
+ } else {
+ result = FALSE;
}
- g_free (filename);
+ g_free (buf);
+ gtk_gs_doc_sink_free (sink);
+ g_free (sink);
return result;
}
GError **error)
{
PSDocument *ps = PS_DOCUMENT (document);
- int *page_list;
gboolean result;
- int i;
char *filename;
filename = g_filename_from_uri (uri, NULL, error);
if (!filename)
return FALSE;
- page_list = g_new0 (int, ps->doc->numpages);
- for (i = 0; i < ps->doc->numpages; i++) {
- page_list[i] = 1;
- }
-
- result = save_page_list (ps, page_list, filename);
+ result = save_document (ps, filename);
- g_free (page_list);
g_free (filename);
return result;
{
PSDocument *document = PS_DOCUMENT (exporter);
- g_free (document->ps_export_pagelist);
+ if (document->structured_doc) {
+ g_free (document->ps_export_pagelist);
- document->ps_export_pagelist = g_new0 (int, document->doc->numpages);
+ document->ps_export_pagelist = g_new0 (int, document->doc->numpages);
+ }
+
document->ps_export_filename = g_strdup (filename);
}
{
PSDocument *document = PS_DOCUMENT (exporter);
- document->ps_export_pagelist[rc->page] = 1;
+ if (document->structured_doc) {
+ document->ps_export_pagelist[rc->page] = 1;
+ }
}
static void
{
PSDocument *document = PS_DOCUMENT (exporter);
- save_page_list (document, document->ps_export_pagelist,
- document->ps_export_filename);
-
- g_free (document->ps_export_pagelist);
- g_free (document->ps_export_filename);
- document->ps_export_pagelist = NULL;
- document->ps_export_filename = NULL;
+ if (!document->structured_doc) {
+ save_document (document, document->ps_export_filename);
+ } else {
+ save_page_list (document, document->ps_export_pagelist,
+ document->ps_export_filename);
+ g_free (document->ps_export_pagelist);
+ g_free (document->ps_export_filename);
+ document->ps_export_pagelist = NULL;
+ document->ps_export_filename = NULL;
+ }
}
static void