summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--Makefile.defaults8
-rw-r--r--content/content_protected.h24
-rw-r--r--content/handlers/Makefile5
-rw-r--r--content/handlers/image/jpeg.c2
-rw-r--r--content/handlers/pdf/Makefile11
-rw-r--r--content/handlers/pdf/pdf.c122
-rw-r--r--content/handlers/pdf/pdf.h29
-rw-r--r--desktop/netsurf.c7
-rw-r--r--include/netsurf/content_type.h7
10 files changed, 205 insertions, 12 deletions
diff --git a/Makefile b/Makefile
index d8e3b1664..2c7f1b0e7 100644
--- a/Makefile
+++ b/Makefile
@@ -518,7 +518,6 @@ include Makefile.defaults
# libraries enabled by feature switch without pkgconfig file
$(eval $(call feature_switch,JPEG,JPEG (libjpeg),-DWITH_JPEG,-ljpeg,-UWITH_JPEG,))
-$(eval $(call feature_switch,HARU_PDF,PDF export (haru),-DWITH_PDF_EXPORT,-lhpdf -lpng,-UWITH_PDF_EXPORT,))
$(eval $(call feature_switch,LIBICONV_PLUG,glibc internal iconv,-DLIBICONV_PLUG,,-ULIBICONV_PLUG,-liconv))
$(eval $(call feature_switch,DUKTAPE,Javascript (Duktape),,,,,))
@@ -560,6 +559,7 @@ $(eval $(call pkg_config_find_and_add_enabled,NSSVG,libsvgtiny,SVG))
$(eval $(call pkg_config_find_and_add_enabled,ROSPRITE,librosprite,Sprite))
$(eval $(call pkg_config_find_and_add_enabled,NSPSL,libnspsl,PSL))
$(eval $(call pkg_config_find_and_add_enabled,NSLOG,libnslog,LOG))
+$(eval $(call pkg_config_find_and_add_enabled,NSPDF,libnspdf,PDF))
# List of directories in which headers are searched for
INCLUDE_DIRS :=. include $(OBJROOT)
diff --git a/Makefile.defaults b/Makefile.defaults
index edf491a6f..e1b350fc1 100644
--- a/Makefile.defaults
+++ b/Makefile.defaults
@@ -67,11 +67,9 @@ NETSURF_USE_WEBP := AUTO
# Valid options: YES, NO
NETSURF_USE_DUKTAPE := YES
-# Enable NetSurf's use of libharu for PDF export and GTK printing support.
-# There is no auto-detection available for this, as it does not have a
-# pkg-config file.
-# Valid options: YES, NO
-NETSURF_USE_HARU_PDF := NO
+# Enable the use of netsurf integrated pdf viewing
+# Valid options: YES, NO, AUTO
+NETSURF_USE_NSPDF := AUTO
# Enable the use of the Public suffix library to detect supercookies
# Valid options: YES, NO, AUTO (highly recommended)
diff --git a/content/content_protected.h b/content/content_protected.h
index fd0924d64..f8ecd42da 100644
--- a/content/content_protected.h
+++ b/content/content_protected.h
@@ -57,18 +57,36 @@ typedef struct content_handler content_handler;
* function table implementing a content type.
*/
struct content_handler {
+ /**
+ * content handler finalisation
+ */
void (*fini)(void);
+ /**
+ * create a content
+ */
nserror (*create)(const struct content_handler *handler,
lwc_string *imime_type,
const struct http_parameter *params,
struct llcache_handle *llcache,
- const char *fallback_charset, bool quirks,
+ const char *fallback_charset,
+ bool quirks,
struct content **c);
- bool (*process_data)(struct content *c,
- const char *data, unsigned int size);
+ /**
+ * ongoing fetch has received data
+ */
+ bool (*process_data)(struct content *c,
+ const char *data,
+ unsigned int size);
+
+ /**
+ * fetcher has completed retrieving all the data
+ *
+ * \param c The completed content.
+ */
bool (*data_complete)(struct content *c);
+
void (*reformat)(struct content *c, int width, int height);
void (*destroy)(struct content *c);
void (*stop)(struct content *c);
diff --git a/content/handlers/Makefile b/content/handlers/Makefile
index ea9d0c84d..b88f3cacd 100644
--- a/content/handlers/Makefile
+++ b/content/handlers/Makefile
@@ -23,5 +23,10 @@ include content/handlers/text/Makefile
S_CONTENT += $(addprefix handlers/text/,$(S_TEXT))
+# PDF content handler source
+include content/handlers/pdf/Makefile
+
+S_CONTENT += $(addprefix handlers/pdf/,$(S_PDF))
+
# extend the include search path
INCLUDE_DIRS += content/handlers
diff --git a/content/handlers/image/jpeg.c b/content/handlers/image/jpeg.c
index 549c2b674..6c0e289a5 100644
--- a/content/handlers/image/jpeg.c
+++ b/content/handlers/image/jpeg.c
@@ -19,7 +19,7 @@
/**
* \file
- * implementation of content handling for image/jpeg
+ * implementation of content handling for JPEG images.
*
* This implementation uses the IJG JPEG library.
*/
diff --git a/content/handlers/pdf/Makefile b/content/handlers/pdf/Makefile
new file mode 100644
index 000000000..32d6e27b2
--- /dev/null
+++ b/content/handlers/pdf/Makefile
@@ -0,0 +1,11 @@
+#
+# NetSurf pdf source file inclusion
+#
+# Included by content handlers Makefile
+#
+
+ifeq ($(NETSURF_USE_NSPDF),YES)
+S_PDF := pdf.c
+else
+S_PDF :=
+endif
diff --git a/content/handlers/pdf/pdf.c b/content/handlers/pdf/pdf.c
new file mode 100644
index 000000000..23457a26a
--- /dev/null
+++ b/content/handlers/pdf/pdf.c
@@ -0,0 +1,122 @@
+/*
+ * Copyright 2004 James Bursa <bursa@users.sourceforge.net>
+ * Copyright 2004 John M Bell <jmb202@ecs.soton.ac.uk>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * \file
+ * implementation of content handling for PDF.
+ *
+ * This implementation uses the netsurf pdf library.
+ */
+
+#include <stdbool.h>
+#include <stdlib.h>
+
+#include "utils/utils.h"
+#include "content/llcache.h"
+#include "content/content_protected.h"
+
+#include "pdf.h"
+
+/**
+ * Content create entry point.
+ */
+static nserror
+pdf_create(const content_handler *handler,
+ lwc_string *imime_type,
+ const struct http_parameter *params,
+ llcache_handle *llcache,
+ const char *fallback_charset,
+ bool quirks,
+ struct content **c)
+{
+ struct content *jpeg;
+ nserror error;
+
+ jpeg = calloc(1, sizeof(struct content));
+ if (jpeg == NULL)
+ return NSERROR_NOMEM;
+
+ error = content__init(jpeg, handler, imime_type, params,
+ llcache, fallback_charset, quirks);
+ if (error != NSERROR_OK) {
+ free(jpeg);
+ return error;
+ }
+
+ *c = jpeg;
+
+ return NSERROR_OK;
+}
+
+/* exported interface documented in image_cache.h */
+static void pdf_destroy(struct content *content)
+{
+}
+
+static bool pdf_convert(struct content *c)
+{
+ content_set_ready(c);
+ content_set_done(c);
+ return true;
+}
+
+/* exported interface documented in image_cache.h */
+static bool
+pdf_redraw(struct content *c,
+ struct content_redraw_data *data,
+ const struct rect *clip,
+ const struct redraw_context *ctx)
+{
+ return true;
+}
+
+/**
+ * Clone content.
+ */
+static nserror pdf_clone(const struct content *old, struct content **newc)
+{
+ return NSERROR_NOMEM;
+}
+
+static content_type pdf_content_type(void)
+{
+ return CONTENT_PDF;
+}
+
+
+static const content_handler nspdf_content_handler = {
+ .create = pdf_create,
+ .data_complete = pdf_convert,
+ .destroy = pdf_destroy,
+ .redraw = pdf_redraw,
+ .clone = pdf_clone,
+ .type = pdf_content_type,
+ .no_share = false,
+};
+
+static const char *nspdf_types[] = {
+ "application/pdf",
+ "application/x-pdf",
+ "application/acrobat",
+ "applications/vnd.pdf",
+ "text/pdf",
+ "text/x-pdf"
+};
+
+CONTENT_FACTORY_REGISTER_TYPES(nspdf, nspdf_types, nspdf_content_handler);
diff --git a/content/handlers/pdf/pdf.h b/content/handlers/pdf/pdf.h
new file mode 100644
index 000000000..2171b80c2
--- /dev/null
+++ b/content/handlers/pdf/pdf.h
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2018 Vincent Sanders <vince@netsurf-browser.org>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * NetSurf is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * \file
+ * Interface for PDF content handler.
+ */
+
+#ifndef NETSURF_PDF_PDF_H_
+#define NETSURF_PDF_PDF_H_
+
+nserror nspdf_init(void);
+
+#endif
diff --git a/desktop/netsurf.c b/desktop/netsurf.c
index 6cc3a118f..4b0655ed5 100644
--- a/desktop/netsurf.c
+++ b/desktop/netsurf.c
@@ -48,6 +48,7 @@
#include "javascript/js.h"
#include "html/html.h"
#include "text/textplain.h"
+#include "pdf/pdf.h"
#include "netsurf/browser_window.h"
#include "desktop/system_colour.h"
@@ -197,6 +198,12 @@ nserror netsurf_init(const char *store_path)
if (ret != NSERROR_OK)
return ret;
+#ifdef WITH_NSPDF
+ ret = nspdf_init();
+ if (ret != NSERROR_OK)
+ return ret;
+#endif
+
setlocale(LC_ALL, "");
/* initialise the fetchers */
diff --git a/include/netsurf/content_type.h b/include/netsurf/content_type.h
index 0a6b83009..c6c8478cd 100644
--- a/include/netsurf/content_type.h
+++ b/include/netsurf/content_type.h
@@ -1,5 +1,5 @@
/*
- * Copyright 2003 James Bursa <bursa@users.sourceforge.net>
+ * Copyright 2012 Vincent Sanders <vince@netsurf-browser.org>
*
* This file is part of NetSurf, http://www.netsurf-browser.org/
*
@@ -78,8 +78,11 @@ typedef enum {
/** All script types. */
CONTENT_SCRIPT = 0x40,
+ /** Portable Document Format. */
+ CONTENT_PDF = 0x80,
+
/** Any content matches */
- CONTENT_ANY = 0x7f
+ CONTENT_ANY = 0xff
} content_type;