From c271046d76e5b19d9481dee7c531bfabbeeaa24c Mon Sep 17 00:00:00 2001 From: Witold Filipczyk Date: Sat, 2 Nov 2024 17:38:52 +0100 Subject: [PATCH] [quickjs] getNode --- src/js/quickjs/document.c | 3 +-- src/js/quickjs/document.h | 1 + src/js/quickjs/node.c | 35 +++++++++++++++++++++++++++++++++++ src/js/quickjs/node.h | 3 ++- 4 files changed, 39 insertions(+), 3 deletions(-) diff --git a/src/js/quickjs/document.c b/src/js/quickjs/document.c index 32ff111c6..648f828e3 100644 --- a/src/js/quickjs/document.c +++ b/src/js/quickjs/document.c @@ -44,7 +44,6 @@ #define countof(x) (sizeof(x) / sizeof((x)[0])) -static JSValue getDoctype(JSContext *ctx, void *node); static JSClassID js_doctype_class_id; static JSClassID js_document_class_id; @@ -2015,7 +2014,7 @@ js_doctype_init(JSContext *ctx) return 0; } -static JSValue +JSValue getDoctype(JSContext *ctx, void *node) { #ifdef ECMASCRIPT_DEBUG diff --git a/src/js/quickjs/document.h b/src/js/quickjs/document.h index ef945340c..9de186a22 100644 --- a/src/js/quickjs/document.h +++ b/src/js/quickjs/document.h @@ -11,6 +11,7 @@ void *js_doc_getopaque(JSValueConst obj); void *document_get_node(JSValueConst obj); JSValue getDocument(JSContext *ctx, void *doc); JSValue getDocument2(JSContext *ctx, void *doc); +JSValue getDoctype(JSContext *ctx, void *node); #ifdef __cplusplus } diff --git a/src/js/quickjs/node.c b/src/js/quickjs/node.c index aa228b760..c85288f4d 100644 --- a/src/js/quickjs/node.c +++ b/src/js/quickjs/node.c @@ -18,8 +18,13 @@ #include "js/ecmascript.h" #include "js/quickjs/mapa.h" #include "js/quickjs.h" +#include "js/quickjs/attr.h" +#include "js/quickjs/document.h" #include "js/quickjs/element.h" +#include "js/quickjs/fragment.h" +#include "js/quickjs/node.h" #include "js/quickjs/nodelist.h" +#include "js/quickjs/text.h" #define countof(x) (sizeof(x) / sizeof((x)[0])) @@ -54,6 +59,36 @@ static JSClassDef node_class = { "Node", }; +JSValue +getNode(JSContext *ctx, void *n) +{ + dom_node *node = (dom_node *)n; + dom_node_type typ; + dom_exception exc = dom_node_get_node_type(node, &typ); + + if (exc != DOM_NO_ERR) { + return JS_NULL; + } + switch (typ) { + case ELEMENT_NODE: + return getElement(ctx, n); + case ATTRIBUTE_NODE: + return getAttr(ctx, n); + case TEXT_NODE: + case CDATA_SECTION_NODE: + case PROCESSING_INSTRUCTION_NODE: + case COMMENT_NODE: + default: + return getText(ctx, n); + case DOCUMENT_NODE: + return getDocument2(ctx, n); + case DOCUMENT_TYPE_NODE: + return getDoctype(ctx, n); + case DOCUMENT_FRAGMENT_NODE: + return getDocumentFragment(ctx, n); + } +} + static JSValue node_constructor(JSContext *ctx, JSValueConst new_target, int argc, JSValueConst *argv) { diff --git a/src/js/quickjs/node.h b/src/js/quickjs/node.h index 399c5f43c..3d3707a05 100644 --- a/src/js/quickjs/node.h +++ b/src/js/quickjs/node.h @@ -7,7 +7,8 @@ extern "C" { #endif -JSValue js_node_init(JSContext *ctx); +int js_node_init(JSContext *ctx); +JSValue getNode(JSContext *ctx, void *n); #ifdef __cplusplus }