mirror of
https://github.com/rkd77/elinks.git
synced 2024-11-04 08:17:17 -05:00
[libdom] Possibility to build libcss code without ecmascript.
meson config option libcss enabled by default. To enable libcss in elinks: set document.css.libcss = 1
This commit is contained in:
parent
6c06b2f3de
commit
9a6edd69db
17
meson.build
17
meson.build
@ -412,6 +412,7 @@ if conf_data.get('CONFIG_ECMASCRIPT_SMJS') or conf_data.get('CONFIG_QUICKJS') or
|
||||
endif
|
||||
|
||||
conf_data.set('CONFIG_LIBCSS', false)
|
||||
cssdeps = false
|
||||
|
||||
if conf_data.get('CONFIG_ECMASCRIPT_SMJS') or conf_data.get('CONFIG_QUICKJS') or conf_data.get('CONFIG_MUJS')
|
||||
cssdeps = dependency('libcss', static: st, version: '>=0.9.1')
|
||||
@ -420,13 +421,25 @@ if conf_data.get('CONFIG_ECMASCRIPT_SMJS') or conf_data.get('CONFIG_QUICKJS') or
|
||||
endif
|
||||
|
||||
conf_data.set('CONFIG_LIBDOM', false)
|
||||
libdomdeps = false
|
||||
|
||||
if conf_data.get('CONFIG_ECMASCRIPT_SMJS') or conf_data.get('CONFIG_QUICKJS') or conf_data.get('CONFIG_MUJS')
|
||||
cssdeps = dependency('libdom', static: st, version: '>=0.4.1')
|
||||
deps += cssdeps
|
||||
libdomdeps = dependency('libdom', static: st, version: '>=0.4.1')
|
||||
deps += libdomdeps
|
||||
conf_data.set('CONFIG_LIBDOM', true)
|
||||
endif
|
||||
|
||||
if not cssdeps and get_option('libcss')
|
||||
cssdeps = dependency('libcss', static: st, version: '>=0.9.1')
|
||||
deps += cssdeps
|
||||
conf_data.set('CONFIG_LIBCSS', true)
|
||||
if not libdomdeps
|
||||
libdomdeps = dependency('libdom', static: st, version: '>=0.4.1')
|
||||
deps += libdomdeps
|
||||
conf_data.set('CONFIG_LIBDOM', true)
|
||||
endif
|
||||
endif
|
||||
|
||||
if conf_data.get('CONFIG_SCRIPTING_LUA')
|
||||
luadeps = dependency(luapkg, static: st)
|
||||
deps += luadeps
|
||||
|
@ -76,3 +76,4 @@ option('docdir', type: 'string', value: '', description: 'Documentation installa
|
||||
option('apidoc', type: 'boolean', value: true, description: 'whether to generate API docs with doxygen')
|
||||
option('htmldoc', type: 'boolean', value: true, description: 'whether to build html docs')
|
||||
option('pdfdoc', type: 'boolean', value: true, description: 'whether to build manual.pdf')
|
||||
option('libcss', type: 'boolean', value: true, description: 'whether to compile libcss support, requires libdom. This option is automatically enabled with js support')
|
||||
|
@ -69,6 +69,7 @@
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_LIBDOM
|
||||
#include "document/libdom/doc.h"
|
||||
#include "document/libdom/mapa.h"
|
||||
#endif
|
||||
|
||||
@ -379,7 +380,9 @@ done_document(struct document *document)
|
||||
}
|
||||
}
|
||||
free_list(document->timeouts);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_LIBDOM
|
||||
mem_free_if(document->text);
|
||||
free_document(document->dom);
|
||||
|
||||
@ -390,7 +393,6 @@ done_document(struct document *document)
|
||||
delete_map(mapa);
|
||||
}
|
||||
#endif
|
||||
|
||||
free_list(document->tags);
|
||||
free_list(document->nodes);
|
||||
|
||||
|
@ -220,11 +220,14 @@ struct document {
|
||||
/** used by setTimeout */
|
||||
LIST_OF(struct ecmascript_timeout) timeouts;
|
||||
int ecmascript_counter;
|
||||
#endif
|
||||
#ifdef CONFIG_LIBDOM
|
||||
void *dom;
|
||||
void *element_map;
|
||||
char *text;
|
||||
void *forms_nodeset;
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_CSS
|
||||
/** @todo FIXME: We should externally maybe using cache_entry store the
|
||||
* dependencies between the various entries so nothing gets removed
|
||||
|
@ -1,6 +1,6 @@
|
||||
top_builddir=../../..
|
||||
include $(top_builddir)/Makefile.config
|
||||
|
||||
OBJS = corestrings.o css.o mapa.obj renderer.o renderer2.o
|
||||
OBJS = corestrings.o css.o doc.o mapa.obj renderer.o renderer2.o
|
||||
|
||||
include $(top_srcdir)/Makefile.lib
|
||||
|
91
src/document/libdom/doc.c
Normal file
91
src/document/libdom/doc.c
Normal file
@ -0,0 +1,91 @@
|
||||
/* Parse document. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#ifdef CONFIG_LIBDOM
|
||||
#include <dom/dom.h>
|
||||
#include <dom/bindings/hubbub/parser.h>
|
||||
#endif
|
||||
|
||||
#include "elinks.h"
|
||||
|
||||
#include "cache/cache.h"
|
||||
#include "document/document.h"
|
||||
#include "document/libdom/doc.h"
|
||||
#include "util/string.h"
|
||||
|
||||
void *
|
||||
document_parse_text(char *data, size_t length)
|
||||
{
|
||||
dom_hubbub_parser *parser = NULL;
|
||||
dom_hubbub_error error;
|
||||
dom_hubbub_parser_params params;
|
||||
dom_document *doc;
|
||||
|
||||
params.enc = NULL;
|
||||
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(¶ms, &parser, &doc);
|
||||
if (error != DOM_HUBBUB_OK) {
|
||||
fprintf(stderr, "Can't create Hubbub Parser\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Parse */
|
||||
error = dom_hubbub_parser_parse_chunk(parser, (const uint8_t *)data, length);
|
||||
if (error != DOM_HUBBUB_OK) {
|
||||
dom_hubbub_parser_destroy(parser);
|
||||
fprintf(stderr, "Parsing errors occur\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Done parsing file */
|
||||
error = dom_hubbub_parser_completed(parser);
|
||||
if (error != DOM_HUBBUB_OK) {
|
||||
dom_hubbub_parser_destroy(parser);
|
||||
fprintf(stderr, "Parsing error when construct DOM\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Finished with parser */
|
||||
dom_hubbub_parser_destroy(parser);
|
||||
|
||||
return doc;
|
||||
}
|
||||
|
||||
void *
|
||||
document_parse(struct document *document)
|
||||
{
|
||||
#ifdef ECMASCRIPT_DEBUG
|
||||
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
|
||||
#endif
|
||||
struct cache_entry *cached = document->cached;
|
||||
struct fragment *f = get_cache_fragment(cached);
|
||||
|
||||
if (!f || !f->length) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return document_parse_text(f->data, f->length);
|
||||
}
|
||||
|
||||
void
|
||||
free_document(void *doc)
|
||||
{
|
||||
if (!doc) {
|
||||
return;
|
||||
}
|
||||
dom_node *ddd = (dom_node *)doc;
|
||||
dom_node_unref(ddd);
|
||||
}
|
19
src/document/libdom/doc.h
Normal file
19
src/document/libdom/doc.h
Normal file
@ -0,0 +1,19 @@
|
||||
#ifndef EL__DOCUMENT_LIBDOM_DOC_H
|
||||
#define EL__DOCUMENT_LIBDOM_DOC_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
struct document;
|
||||
struct string;
|
||||
|
||||
void *document_parse_text(char *data, size_t length);
|
||||
void *document_parse(struct document *document);
|
||||
void free_document(void *doc);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
@ -1 +1 @@
|
||||
srcs += files('corestrings.c', 'css.c', 'mapa.cpp', 'renderer.c', 'renderer2.c')
|
||||
srcs += files('corestrings.c', 'css.c', 'doc.c', 'mapa.cpp', 'renderer.c', 'renderer2.c')
|
||||
|
@ -13,12 +13,12 @@
|
||||
#include "cache/cache.h"
|
||||
#include "document/document.h"
|
||||
#include "document/renderer.h"
|
||||
#include "document/libdom/doc.h"
|
||||
#include "document/libdom/mapa.h"
|
||||
#include "document/libdom/renderer.h"
|
||||
#include "document/plain/renderer.h"
|
||||
#include "ecmascript/libdom/parse.h"
|
||||
|
||||
|
||||
static bool
|
||||
dump_dom_element_closing(struct string *buf, dom_node *node)
|
||||
{
|
||||
|
@ -15,6 +15,7 @@
|
||||
#include "document/renderer.h"
|
||||
#include "document/html/renderer.h"
|
||||
#include "document/libdom/corestrings.h"
|
||||
#include "document/libdom/doc.h"
|
||||
#include "document/libdom/mapa.h"
|
||||
#include "document/libdom/renderer2.h"
|
||||
#include "ecmascript/libdom/parse.h"
|
||||
|
@ -293,7 +293,7 @@ render_encoded_document(struct cache_entry *cached, struct document *document)
|
||||
&& (!c_strlcasecmp("text/gemini", 11, cached->content_type, -1)))
|
||||
render_gemini_document(cached, document, &buffer);
|
||||
else
|
||||
#if defined(CONFIG_LIBDOM) && defined(CONFIG_ECMASCRIPT)
|
||||
#ifdef CONFIG_LIBDOM
|
||||
if (1) {
|
||||
if (encoding != ENCODING_NONE) {
|
||||
done_string(&buffer);
|
||||
|
@ -196,7 +196,6 @@ void check_for_rerender(struct ecmascript_interpreter *interpreter, const char*
|
||||
|
||||
void toggle_ecmascript(struct session *ses);
|
||||
|
||||
void free_document(void *doc);
|
||||
void location_goto(struct document_view *doc_view, char *url);
|
||||
void location_goto_const(struct document_view *doc_view, const char *url);
|
||||
|
||||
|
@ -25,6 +25,7 @@
|
||||
#include "document/html/frames.h"
|
||||
#include "document/document.h"
|
||||
#include "document/forms.h"
|
||||
#include "document/libdom/doc.h"
|
||||
#include "document/view.h"
|
||||
#include "ecmascript/ecmascript.h"
|
||||
#include "ecmascript/libdom/mujs/mapa.h"
|
||||
|
@ -10,6 +10,7 @@
|
||||
|
||||
#include "elinks.h"
|
||||
|
||||
#include "document/libdom/doc.h"
|
||||
#include "ecmascript/ecmascript.h"
|
||||
#include "ecmascript/libdom/parse.h"
|
||||
#include "ecmascript/mujs.h"
|
||||
|
@ -18,77 +18,6 @@
|
||||
#include "document/document.h"
|
||||
#include "util/string.h"
|
||||
|
||||
void *
|
||||
document_parse_text(char *data, size_t length)
|
||||
{
|
||||
dom_hubbub_parser *parser = NULL;
|
||||
dom_hubbub_error error;
|
||||
dom_hubbub_parser_params params;
|
||||
dom_document *doc;
|
||||
|
||||
params.enc = NULL;
|
||||
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(¶ms, &parser, &doc);
|
||||
if (error != DOM_HUBBUB_OK) {
|
||||
fprintf(stderr, "Can't create Hubbub Parser\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Parse */
|
||||
error = dom_hubbub_parser_parse_chunk(parser, (const uint8_t *)data, length);
|
||||
if (error != DOM_HUBBUB_OK) {
|
||||
dom_hubbub_parser_destroy(parser);
|
||||
fprintf(stderr, "Parsing errors occur\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Done parsing file */
|
||||
error = dom_hubbub_parser_completed(parser);
|
||||
if (error != DOM_HUBBUB_OK) {
|
||||
dom_hubbub_parser_destroy(parser);
|
||||
fprintf(stderr, "Parsing error when construct DOM\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Finished with parser */
|
||||
dom_hubbub_parser_destroy(parser);
|
||||
|
||||
return doc;
|
||||
}
|
||||
|
||||
void *
|
||||
document_parse(struct document *document)
|
||||
{
|
||||
#ifdef ECMASCRIPT_DEBUG
|
||||
fprintf(stderr, "%s:%s\n", __FILE__, __FUNCTION__);
|
||||
#endif
|
||||
struct cache_entry *cached = document->cached;
|
||||
struct fragment *f = get_cache_fragment(cached);
|
||||
|
||||
if (!f || !f->length) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return document_parse_text(f->data, f->length);
|
||||
}
|
||||
|
||||
void
|
||||
free_document(void *doc)
|
||||
{
|
||||
if (!doc) {
|
||||
return;
|
||||
}
|
||||
dom_node *ddd = (dom_node *)doc;
|
||||
dom_node_unref(ddd);
|
||||
}
|
||||
|
||||
void
|
||||
el_insert_before(struct document *document, void *element, struct string *source)
|
||||
{
|
||||
|
@ -8,8 +8,6 @@ extern "C" {
|
||||
struct document;
|
||||
struct string;
|
||||
|
||||
void *document_parse_text(char *data, size_t length);
|
||||
void *document_parse(struct document *document);
|
||||
void el_insert_before(struct document *document, void *element, struct string *source);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@ -18,6 +18,7 @@
|
||||
#include "cookies/cookies.h"
|
||||
#include "dialogs/status.h"
|
||||
#include "document/document.h"
|
||||
#include "document/libdom/doc.h"
|
||||
#include "document/view.h"
|
||||
#include "ecmascript/ecmascript.h"
|
||||
#include "ecmascript/libdom/parse.h"
|
||||
|
@ -15,6 +15,7 @@
|
||||
|
||||
#include "elinks.h"
|
||||
|
||||
#include "document/libdom/doc.h"
|
||||
#include "ecmascript/ecmascript.h"
|
||||
#include "ecmascript/libdom/parse.h"
|
||||
#include "ecmascript/quickjs.h"
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include "document/html/frames.h"
|
||||
#include "document/document.h"
|
||||
#include "document/forms.h"
|
||||
#include "document/libdom/doc.h"
|
||||
#include "document/view.h"
|
||||
#include "ecmascript/css2xpath.h"
|
||||
#include "ecmascript/ecmascript.h"
|
||||
|
@ -10,6 +10,7 @@
|
||||
|
||||
#include "elinks.h"
|
||||
|
||||
#include "document/libdom/doc.h"
|
||||
#include "ecmascript/ecmascript.h"
|
||||
#include "ecmascript/libdom/parse.h"
|
||||
#include "ecmascript/spidermonkey/document.h"
|
||||
|
Loading…
Reference in New Issue
Block a user