1
0
mirror of https://github.com/rkd77/elinks.git synced 2024-07-26 16:45:12 -04:00

[libdom] libdom also retired

This commit is contained in:
Witold Filipczyk 2021-06-12 17:37:11 +02:00
parent 908fa22878
commit 9328fa261e
11 changed files with 0 additions and 483 deletions

View File

@ -71,8 +71,6 @@ INTLOBJS = @INTLOBJS@
INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
DBLATEX = @DBLATEX@
LIBDIR = @LIBDIR@
LIBDOM_CFLAGS = @LIBDOM_CFLAGS@
LIBDOM_LIBS = @LIBDOM_LIBS@
LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@
LOCALEDIR = @LOCALEDIR@
LUA_CFLAGS = @LUA_CFLAGS@
@ -141,7 +139,6 @@ CONFIG_INTERLINK = @CONFIG_INTERLINK@
CONFIG_IPV6 = @CONFIG_IPV6@
CONFIG_DBLATEX = @CONFIG_DBLATEX@
CONFIG_LEDS = @CONFIG_LEDS@
CONFIG_LIBDOM = @CONFIG_LIBDOM@
CONFIG_LZMA = @CONFIG_LZMA@
CONFIG_MAILCAP = @CONFIG_MAILCAP@
CONFIG_MANUAL = @CONFIG_MANUAL@

View File

@ -1639,38 +1639,6 @@ AC_SUBST(TRE_CFLAGS)
AC_SUBST(TRE_LIBS)
EL_LOG_CONFIG([CONFIG_TRE], [[Regexp searching]], [[$tre_log]])
# ===================================================================
# libdom
# ===================================================================
LIBDOM_CFLAGS=
LIBDOM_LIBS=
CONFIG_LIBDOM=no
enable_libdom=no
AC_ARG_WITH(libdom, [ --with-libdom enable libdom],
[ if test "x$withval" != xno; then enable_libdom=yes; fi ])
if test "$enable_libdom" = no; then
AC_MSG_CHECKING([[for libdom]])
AC_MSG_RESULT([[disabled]])
else
AC_MSG_CHECKING([[for libdom in pkg-config]])
if $PKG_CONFIG $pkg_config_static libdom; then
LIBDOM_CFLAGS=`$PKG_CONFIG $pkg_config_static --cflags libdom`
LIBDOM_LIBS=`$PKG_CONFIG $pkg_config_static --libs libdom`
LIBS="$LIBDOM_LIBS $LIBS"
CONFIG_LIBDOM=yes
AC_DEFINE([CONFIG_LIBDOM], [1], [Define as 1 to use the libdom library.])
AC_MSG_RESULT([[yes]])
else
enable_libdom=no
fi
fi
AC_SUBST(LIBDOM_CFLAGS)
AC_SUBST(LIBDOM_LIBS)
EL_LOG_CONFIG([CONFIG_LIBDOM], [[libdom]], [[$enable_libdom]])
# ===================================================================
# Further LDFLAGS tweaks

View File

@ -86,7 +86,6 @@ conf_data.set('CONFIG_OPENSSL', get_option('openssl'))
conf_data.set('CONFIG_LIBEV', get_option('libev'))
conf_data.set('CONFIG_LIBEVENT', get_option('libevent'))
conf_data.set('CONFIG_X', get_option('x'))
conf_data.set('CONFIG_LIBDOM', get_option('libdom'))
conf_data.set('CONFIG_XML', get_option('xml'))
#CONFIG_BOOKMARKS=true
@ -114,7 +113,6 @@ conf_data.set('CONFIG_SCRIPTING', true)
#CONFIG_LEDS', true)
#CONFIG_EXMODE', false)
#CONFIG_CSS', true)
#CONFIG_LIBDOM', false)
#CONFIG_BROTLI', true)
#CONFIG_BZIP2', true)
#CONFIG_GZIP', true)
@ -291,11 +289,6 @@ if conf_data.get('CONFIG_GPM')
deps += libgpmdeps
endif
if conf_data.get('CONFIG_LIBDOM')
domdeps = dependency('libdom')
deps += domdeps
endif
if conf_data.get('CONFIG_XML')
xml2deps = dependency('libxml2')
deps += xml2deps

View File

@ -60,5 +60,4 @@ option('openssl', type: 'boolean', value: true, description: 'OpenSSL support')
option('libev', type: 'boolean', value: false, description: 'compile with libev (libevent compatibility mode)')
option('libevent', type: 'boolean', value: false, description: 'compile with libevent. Note that libev has precedence')
option('x', type: 'boolean', value: false, description: 'use the X Window System')
option('libdom', type: 'boolean', value: false, description: 'libdom')
option('xml', type: 'boolean', value: false, description: 'libxml++')

View File

@ -3,7 +3,6 @@ include $(top_builddir)/Makefile.config
SUBDIRS-$(CONFIG_CSS) += css
SUBDIRS-$(CONFIG_DOM) += dom
SUBDIRS-$(CONFIG_LIBDOM) += libdom
SUBDIRS = html plain

View File

@ -1,8 +0,0 @@
top_builddir=../../..
include $(top_builddir)/Makefile.config
INCLUDES += $(LIBDOM_CFLAGS)
OBJS = renderer.o
include $(top_srcdir)/Makefile.lib

View File

@ -1,2 +0,0 @@
#INCLUDES += $(LIBDOM_CFLAGS)
srcs += files('renderer.c')

View File

@ -1,398 +0,0 @@
/* Plain text document renderer */
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include "elinks.h"
#include "bookmarks/bookmarks.h"
#include "cache/cache.h"
#include "config/options.h"
#include "document/docdata.h"
#include "document/document.h"
#include "document/format.h"
#include "document/options.h"
#include "document/libdom/renderer.h"
#include "document/plain/renderer.h"
#include "document/renderer.h"
#include "globhist/globhist.h"
#include "intl/charsets.h"
#include "protocol/protocol.h"
#include "protocol/uri.h"
#include "terminal/color.h"
#include "terminal/draw.h"
#include "util/color.h"
#include "util/error.h"
#include "util/memory.h"
#include "util/string.h"
#include <dom/dom.h>
#include <dom/bindings/hubbub/parser.h>
struct source_renderer {
struct string tmp_buffer;
struct string *source;
char *enc;
};
/**
* Generate a LibDOM document DOM from an HTML file
*
* \param file The file path
* \return pointer to DOM document, or NULL on error
*/
static dom_document *
create_doc_dom_from_buffer(struct source_renderer *renderer)
{
dom_hubbub_parser *parser = NULL;
dom_hubbub_error error;
dom_hubbub_parser_params params;
dom_document *doc;
params.enc = renderer->enc;
params.fix_enc = true;
params.enable_script = false;
params.msg = NULL;
params.script = NULL;
params.ctx = NULL;
params.daf = NULL;
/* Create Hubbub parser */
error = dom_hubbub_parser_create(&params, &parser, &doc);
if (error != DOM_HUBBUB_OK) {
DBG("Can't create Hubbub Parser\n");
return NULL;
}
/* Parse data */
error = dom_hubbub_parser_parse_chunk(parser, renderer->source->source, renderer->source->length);
if (error != DOM_HUBBUB_OK) {
dom_hubbub_parser_destroy(parser);
DBG("Parsing errors occur %d\n", error & ~DOM_HUBBUB_HUBBUB_ERR);
return NULL;
}
/* Done parsing file */
error = dom_hubbub_parser_completed(parser);
if (error != DOM_HUBBUB_OK) {
dom_hubbub_parser_destroy(parser);
DBG("Parsing error when construct DOM\n");
return NULL;
}
/* Finished with parser */
dom_hubbub_parser_destroy(parser);
return doc;
}
/**
* Dump attribute/value for an element node
*
* \param node The attribute node to dump details for
* \return true on success, or false on error
*/
static bool
dump_node_element_attribute(struct source_renderer *renderer, dom_node *node)
{
dom_exception exc;
dom_string *attr = NULL;
dom_string *attr_value = NULL;
exc = dom_attr_get_name((struct dom_attr *)node, &attr);
if (exc != DOM_NO_ERR) {
DBG("Exception raised for dom_string_create\n");
return false;
}
/* Get attribute's value */
exc = dom_attr_get_value((struct dom_attr *)node, &attr_value);
if (exc != DOM_NO_ERR) {
DBG("Exception raised for element_get_attribute\n");
dom_string_unref(attr);
return false;
} else if (attr_value == NULL) {
/* Element lacks required attribute */
dom_string_unref(attr);
return true;
}
add_to_string(&renderer->tmp_buffer, " \033[0;33m");
add_bytes_to_string(&renderer->tmp_buffer, dom_string_data(attr), dom_string_byte_length(attr));
add_to_string(&renderer->tmp_buffer, "\033[0m=\"\033[0;35m");
add_bytes_to_string(&renderer->tmp_buffer, dom_string_data(attr_value), dom_string_byte_length(attr_value));
add_to_string(&renderer->tmp_buffer, "\033[0m\"");
/* Finished with the attr dom_string */
dom_string_unref(attr);
dom_string_unref(attr_value);
return true;
}
/**
* Print a line in a DOM structure dump for an element
*
* \param node The node to dump
* \param depth The node's depth
* \return true on success, or false on error
*/
static bool
dump_dom_element(struct source_renderer *renderer, dom_node *node, int depth)
{
dom_exception exc;
dom_string *node_name = NULL;
dom_node_type type;
dom_namednodemap *attrs;
/* Only interested in element nodes */
exc = dom_node_get_node_type(node, &type);
if (exc != DOM_NO_ERR) {
DBG("Exception raised for node_get_node_type\n");
return false;
} else {
if (type == DOM_TEXT_NODE) {
dom_string *str;
exc = dom_node_get_text_content(node, &str);
if (exc == DOM_NO_ERR && str != NULL) {
int length = dom_string_byte_length(str);
const char *string = dom_string_data(str);
if (!((length == 1) && (*string == '\n'))) {
add_bytes_to_string(&renderer->tmp_buffer, string, length);
}
dom_string_unref(str);
}
return true;
}
if (type != DOM_ELEMENT_NODE) {
/* Nothing to print */
return true;
}
}
/* Get element name */
exc = dom_node_get_node_name(node, &node_name);
if (exc != DOM_NO_ERR) {
DBG("Exception raised for get_node_name\n");
return false;
} else if (node_name == NULL) {
DBG("Broken: root_name == NULL\n");
return false;
}
/* Get string data and print element name */
add_to_string(&renderer->tmp_buffer, "<\033[0;32m");
add_bytes_to_string(&renderer->tmp_buffer, dom_string_data(node_name), dom_string_byte_length(node_name));
add_to_string(&renderer->tmp_buffer, "\033[0m");
exc = dom_node_get_attributes(node, &attrs);
if (exc == DOM_NO_ERR) {
int length;
exc = dom_namednodemap_get_length(attrs, &length);
if (exc == DOM_NO_ERR) {
int i;
for (i = 0; i < length; ++i) {
dom_node *attr;
exc = dom_namednodemap_item(attrs, i, &attr);
if (exc == DOM_NO_ERR) {
dump_node_element_attribute(renderer, attr);
dom_node_unref(attr);
}
}
}
dom_node_unref(attrs);
}
add_char_to_string(&renderer->tmp_buffer, '>');
/* Finished with the node_name dom_string */
dom_string_unref(node_name);
return true;
}
/**
* Print a closing element
*
* \param node The node to dump
* \return true on success, or false on error
*/
static bool
dump_dom_element_closing(struct source_renderer *renderer, dom_node *node)
{
dom_exception exc;
dom_string *node_name = NULL;
dom_node_type type;
/* Only interested in element nodes */
exc = dom_node_get_node_type(node, &type);
if (exc != DOM_NO_ERR) {
DBG("Exception raised for node_get_node_type\n");
return false;
} else {
if (type != DOM_ELEMENT_NODE) {
/* Nothing to print */
return true;
}
}
/* Get element name */
exc = dom_node_get_node_name(node, &node_name);
if (exc != DOM_NO_ERR) {
DBG("Exception raised for get_node_name\n");
return false;
} else if (node_name == NULL) {
DBG("Broken: root_name == NULL\n");
return false;
}
/* Get string data and print element name */
add_to_string(&renderer->tmp_buffer, "</\033[0;32m");
add_bytes_to_string(&renderer->tmp_buffer, dom_string_data(node_name), dom_string_byte_length(node_name));
add_to_string(&renderer->tmp_buffer, "\033[0m>");
/* Finished with the node_name dom_string */
dom_string_unref(node_name);
return true;
}
/**
* Walk though a DOM (sub)tree, in depth first order, printing DOM structure.
*
* \param node The root node to start from
* \param depth The depth of 'node' in the (sub)tree
*/
static bool
dump_dom_structure(struct source_renderer *renderer, dom_node *node, int depth)
{
dom_exception exc;
dom_node *child;
/* Print this node's entry */
if (dump_dom_element(renderer, node, depth) == false) {
/* There was an error; return */
return false;
}
/* Get the node's first child */
exc = dom_node_get_first_child(node, &child);
if (exc != DOM_NO_ERR) {
DBG("Exception raised for node_get_first_child\n");
return false;
} else if (child != NULL) {
/* node has children; decend to children's depth */
depth++;
/* Loop though all node's children */
do {
dom_node *next_child;
/* Visit node's descendents */
if (dump_dom_structure(renderer, child, depth) == false) {
/* There was an error; return */
dom_node_unref(child);
return false;
}
/* Go to next sibling */
exc = dom_node_get_next_sibling(child, &next_child);
if (exc != DOM_NO_ERR) {
DBG("Exception raised for "
"node_get_next_sibling\n");
dom_node_unref(child);
return false;
}
dom_node_unref(child);
child = next_child;
} while (child != NULL); /* No more children */
}
dump_dom_element_closing(renderer, node);
return true;
}
/**
* Main entry point from OS.
*/
static int
libdom_main(struct source_renderer *renderer)
{
dom_exception exc; /* returned by libdom functions */
dom_document *doc = NULL; /* document, loaded into libdom */
dom_node *root = NULL; /* root element of document */
/* Load up the input HTML file */
doc = create_doc_dom_from_buffer(renderer);
if (doc == NULL) {
DBG("Failed to load document.\n");
return EXIT_FAILURE;
}
/* Get root element */
exc = dom_document_get_document_element(doc, &root);
if (exc != DOM_NO_ERR) {
DBG("Exception raised for get_document_element\n");
dom_node_unref(doc);
return EXIT_FAILURE;
} else if (root == NULL) {
DBG("Broken: root == NULL\n");
dom_node_unref(doc);
return EXIT_FAILURE;
}
/* Dump DOM structure */
if (dump_dom_structure(renderer, root, 0) == false) {
DBG("Failed to complete DOM structure dump.\n");
dom_node_unref(root);
dom_node_unref(doc);
return EXIT_FAILURE;
}
dom_node_unref(root);
/* Finished with the dom_document */
dom_node_unref(doc);
return EXIT_SUCCESS;
}
void
render_source_document(struct cache_entry *cached, struct document *document,
struct string *buffer)
{
struct source_renderer renderer;
char *head = empty_string_or_(cached->head);
(void)get_convert_table(head, document->options.cp,
document->options.assume_cp,
&document->cp,
&document->cp_status,
document->options.hard_assume);
init_string(&renderer.tmp_buffer);
renderer.source = buffer;
renderer.enc = get_cp_mime_name(document->cp);
libdom_main(&renderer);
render_plain_document(cached, document, &renderer.tmp_buffer);
done_string(&renderer.tmp_buffer);
}

View File

@ -1,19 +0,0 @@
#ifndef EL__DOCUMENT_LIBDOM_RENDERER_H
#define EL__DOCUMENT_LIBDOM_RENDERER_H
#ifdef __cplusplus
extern "C" {
#endif
struct cache_entry;
struct document;
struct string;
void render_source_document(struct cache_entry *cached, struct document *document, struct string *buffer);
#ifdef __cplusplus
}
#endif
#endif

View File

@ -4,9 +4,6 @@ endif
if conf_data.get('CONFIG_DOM')
subdir('dom')
endif
if conf_data.get('CONFIG_LIBDOM')
subdir('libdom')
endif
subdir('html')
subdir('plain')
srcs += files('docdata.c', 'document.c', 'format.c', 'forms.c', 'options.c', 'refresh.c', 'renderer.c')

View File

@ -18,7 +18,6 @@
#include "document/dom/renderer.h"
#include "document/html/frames.h"
#include "document/html/renderer.h"
#include "document/libdom/renderer.h"
#include "document/plain/renderer.h"
#include "document/renderer.h"
#include "document/view.h"
@ -249,14 +248,6 @@ render_encoded_document(struct cache_entry *cached, struct document *document)
}
}
#ifdef CONFIG_LIBDOM
if (document->options.plain && cached->content_type
&& (!c_strcasecmp("text/html", cached->content_type)
|| !c_strcasecmp("application/xhtml+xml", cached->content_type))) {
render_source_document(cached, document, &buffer);
}
else
#endif
if (document->options.plain) {
#ifdef CONFIG_DOM
if (cached->content_type