Gitweb links:

...log 
http://git.netsurf-browser.org/netsurf.git/shortlog/0d486a1ffe457478d4303ebc72fc000b853bfcb3
...commit 
http://git.netsurf-browser.org/netsurf.git/commit/0d486a1ffe457478d4303ebc72fc000b853bfcb3
...tree 
http://git.netsurf-browser.org/netsurf.git/tree/0d486a1ffe457478d4303ebc72fc000b853bfcb3

The branch, vince/pdf has been created
        at  0d486a1ffe457478d4303ebc72fc000b853bfcb3 (commit)

- Log -----------------------------------------------------------------
commitdiff 
http://git.netsurf-browser.org/netsurf.git/commit/?id=0d486a1ffe457478d4303ebc72fc000b853bfcb3
commit 0d486a1ffe457478d4303ebc72fc000b853bfcb3
Author: Vincent Sanders <[email protected]>
Commit: Vincent Sanders <[email protected]>

    Add initial content handler for PDF format

diff --git a/Makefile b/Makefile
index d6723e0..011fc1f 100644
--- a/Makefile
+++ b/Makefile
@@ -513,7 +513,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),,,,,))
 
@@ -538,6 +537,7 @@ NETSURF_FEATURE_OPENSSL_CFLAGS := -DWITH_OPENSSL
 NETSURF_FEATURE_ROSPRITE_CFLAGS := -DWITH_NSSPRITE
 NETSURF_FEATURE_NSPSL_CFLAGS := -DWITH_NSPSL
 NETSURF_FEATURE_NSLOG_CFLAGS := -DWITH_NSLOG
+NETSURF_FEATURE_NSPDF_CFLAGS := -DWITH_NSPDF
 
 # libcurl and openssl ordering matters as if libcurl requires ssl it
 #  needs to come first in link order to ensure its symbols can be
@@ -559,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 1f9ce5f..6bb82cb 100644
--- a/Makefile.defaults
+++ b/Makefile.defaults
@@ -63,11 +63,9 @@ NETSURF_USE_VIDEO := NO
 # 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 21b73a6..941b5a7 100644
--- a/content/content_protected.h
+++ b/content/content_protected.h
@@ -17,8 +17,9 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-/** \file
- * Content handling (interface).
+/**
+ * \file
+ * Content handling interface.
  *
  * The content functions manipulate struct contents, which correspond to URLs.
  */
@@ -36,17 +37,34 @@ struct content_redraw_data;
 struct http_parameter;
 
 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);
 
+       /**
+        * ongoing fetch has received data
+        */
        bool (*process_data)(struct content *c, 
-                       const char *data, unsigned int size);
+                            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);
@@ -82,10 +100,14 @@ struct content_handler {
        void (*add_user)(struct content *c);
        void (*remove_user)(struct content *c);
 
-        /** handler dependant content sensitive internal data interface. */
+        /**
+        * handler dependant content sensitive internal data interface.
+        */
        void * (*get_internal)(const struct content *c, void *context);
 
-       /** There must be one content per user for this type. */
+       /**
+        * There must be one content per user for this type.
+        */
        bool no_share;
 };
 
diff --git a/content/handlers/Makefile b/content/handlers/Makefile
index 2f2da3a..416969f 100644
--- a/content/handlers/Makefile
+++ b/content/handlers/Makefile
@@ -13,4 +13,9 @@ include content/handlers/javascript/Makefile
 
 S_CONTENT += $(addprefix handlers/javascript/,$(S_JAVASCRIPT))
 
+# PDF source
+include content/handlers/pdf/Makefile
+
+S_CONTENT += $(addprefix handlers/pdf/,$(S_PDF))
+
 INCLUDE_DIRS += content/handlers
diff --git a/content/handlers/image/jpeg.c b/content/handlers/image/jpeg.c
index 44b1c52..95b86cd 100644
--- a/content/handlers/image/jpeg.c
+++ b/content/handlers/image/jpeg.c
@@ -17,8 +17,9 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-/** \file
- * Content for image/jpeg (implementation).
+/**
+ * \file
+ * 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 0000000..32d6e27
--- /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 0000000..23457a2
--- /dev/null
+++ b/content/handlers/pdf/pdf.c
@@ -0,0 +1,122 @@
+/*
+ * Copyright 2004 James Bursa <[email protected]>
+ * Copyright 2004 John M Bell <[email protected]>
+ *
+ * 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 0000000..2171b80
--- /dev/null
+++ b/content/handlers/pdf/pdf.h
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2018 Vincent Sanders <[email protected]>
+ *
+ * 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 8aa949a..2904cdb 100644
--- a/desktop/netsurf.c
+++ b/desktop/netsurf.c
@@ -43,6 +43,7 @@
 #include "javascript/js.h"
 #include "render/html.h"
 #include "render/textplain.h"
+#include "pdf/pdf.h"
 
 #include "netsurf/browser_window.h"
 #include "desktop/system_colour.h"
@@ -214,6 +215,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 ef654cd..155db1f 100644
--- a/include/netsurf/content_type.h
+++ b/include/netsurf/content_type.h
@@ -1,5 +1,5 @@
 /*
- * Copyright 2003 James Bursa <[email protected]>
+ * Copyright 2012 Vincent Sanders <[email protected]>
  *
  * This file is part of NetSurf, http://www.netsurf-browser.org/
  *
@@ -68,8 +68,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;
 
 


-----------------------------------------------------------------------


-- 
NetSurf Browser

_______________________________________________
netsurf-commits mailing list
[email protected]
http://listmaster.pepperfish.net/cgi-bin/mailman/listinfo/netsurf-commits-netsurf-browser.org

Reply via email to