mirror of
https://github.com/netsurf-browser/netsurf
synced 2025-02-14 13:34:31 +03:00
Add initial content handler for PDF format
This commit is contained in:
parent
fdaad39a57
commit
0d486a1ffe
3
Makefile
3
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)
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
};
|
||||
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
*/
|
||||
|
11
content/handlers/pdf/Makefile
Normal file
11
content/handlers/pdf/Makefile
Normal file
@ -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
|
122
content/handlers/pdf/pdf.c
Normal file
122
content/handlers/pdf/pdf.c
Normal file
@ -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);
|
29
content/handlers/pdf/pdf.h
Normal file
29
content/handlers/pdf/pdf.h
Normal file
@ -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
|
@ -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 */
|
||||
|
@ -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/
|
||||
*
|
||||
@ -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;
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user