nokolexbor 0.4.0 → 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/nokolexbor/nl_node.c +13 -26
- data/lib/nokolexbor/version.rb +1 -1
- data/patches/0005-lexbor-add-source-location-to-node.patch +77 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4d9b715c95c44d85153796fbb2bd0760cde7c83d4a58d0df026a5bd5cddbd7dc
|
4
|
+
data.tar.gz: '01958cbe391c1dd9b57419ee84bc7db14c961428ec3c91c916d8a34cc36afddb'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8bbb957b15cac859b5565c57ccd0830b0ce184db5e63bf5b609b788ac4854e9620ba60e5477de1f85492357b216c4d39cded91ea2297142cef7ee529a0aa1692
|
7
|
+
data.tar.gz: 9dc2200b3506a5ff3eb14ea4438b09798f6845715238193e09d76468943d08e125992ce758bd3a946ad5b5efcb6443a58fa3aae68d2d7b381410883a974d98da
|
data/ext/nokolexbor/nl_node.c
CHANGED
@@ -1053,20 +1053,8 @@ static VALUE
|
|
1053
1053
|
nl_node_first_element_child(VALUE self)
|
1054
1054
|
{
|
1055
1055
|
lxb_dom_node_t *parent = nl_rb_node_unwrap(self);
|
1056
|
-
lxb_dom_node_t *cur;
|
1056
|
+
lxb_dom_node_t *cur = parent->first_child;
|
1057
1057
|
|
1058
|
-
if (parent == NULL) {
|
1059
|
-
return Qnil;
|
1060
|
-
}
|
1061
|
-
switch (parent->type) {
|
1062
|
-
case LXB_DOM_NODE_TYPE_ELEMENT:
|
1063
|
-
case LXB_DOM_NODE_TYPE_ENTITY:
|
1064
|
-
case LXB_DOM_NODE_TYPE_DOCUMENT:
|
1065
|
-
cur = parent->first_child;
|
1066
|
-
break;
|
1067
|
-
default:
|
1068
|
-
return Qnil;
|
1069
|
-
}
|
1070
1058
|
while (cur != NULL) {
|
1071
1059
|
if (cur->type == LXB_DOM_NODE_TYPE_ELEMENT) {
|
1072
1060
|
return nl_rb_node_create(cur, nl_rb_document_get(self));
|
@@ -1083,20 +1071,8 @@ static VALUE
|
|
1083
1071
|
nl_node_last_element_child(VALUE self)
|
1084
1072
|
{
|
1085
1073
|
lxb_dom_node_t *parent = nl_rb_node_unwrap(self);
|
1086
|
-
lxb_dom_node_t *cur;
|
1074
|
+
lxb_dom_node_t *cur = parent->last_child;
|
1087
1075
|
|
1088
|
-
if (parent == NULL) {
|
1089
|
-
return Qnil;
|
1090
|
-
}
|
1091
|
-
switch (parent->type) {
|
1092
|
-
case LXB_DOM_NODE_TYPE_ELEMENT:
|
1093
|
-
case LXB_DOM_NODE_TYPE_ENTITY:
|
1094
|
-
case LXB_DOM_NODE_TYPE_DOCUMENT:
|
1095
|
-
cur = parent->last_child;
|
1096
|
-
break;
|
1097
|
-
default:
|
1098
|
-
return Qnil;
|
1099
|
-
}
|
1100
1076
|
while (cur != NULL) {
|
1101
1077
|
if (cur->type == LXB_DOM_NODE_TYPE_ELEMENT) {
|
1102
1078
|
return nl_rb_node_create(cur, nl_rb_document_get(self));
|
@@ -1155,6 +1131,16 @@ nl_node_inspect(int argc, VALUE *argv, VALUE self)
|
|
1155
1131
|
return rb_call_super(argc, argv);
|
1156
1132
|
}
|
1157
1133
|
|
1134
|
+
/**
|
1135
|
+
* @return [Integer] The node's location at the source HTML. Returns 0 if the node is not parsed from a HTML string.
|
1136
|
+
*/
|
1137
|
+
static VALUE
|
1138
|
+
nl_node_source_location(VALUE self)
|
1139
|
+
{
|
1140
|
+
lxb_dom_node_t *node = nl_rb_node_unwrap(self);
|
1141
|
+
return ULONG2NUM(node->source_location);
|
1142
|
+
}
|
1143
|
+
|
1158
1144
|
void Init_nl_node(void)
|
1159
1145
|
{
|
1160
1146
|
cNokolexborNode = rb_define_class_under(mNokolexbor, "Node", rb_cObject);
|
@@ -1199,6 +1185,7 @@ void Init_nl_node(void)
|
|
1199
1185
|
rb_define_method(cNokolexborNode, "last_element_child", nl_node_last_element_child, 0);
|
1200
1186
|
rb_define_method(cNokolexborNode, "clone", nl_node_clone, 0);
|
1201
1187
|
rb_define_method(cNokolexborNode, "inspect", nl_node_inspect, -1);
|
1188
|
+
rb_define_method(cNokolexborNode, "source_location", nl_node_source_location, 0);
|
1202
1189
|
|
1203
1190
|
rb_define_alias(cNokolexborNode, "attr", "[]");
|
1204
1191
|
rb_define_alias(cNokolexborNode, "get_attribute", "[]");
|
data/lib/nokolexbor/version.rb
CHANGED
@@ -0,0 +1,77 @@
|
|
1
|
+
diff --git a/source/lexbor/dom/interfaces/node.c b/source/lexbor/dom/interfaces/node.c
|
2
|
+
index cf6475d..9f1cf75 100755
|
3
|
+
--- a/source/lexbor/dom/interfaces/node.c
|
4
|
+
+++ b/source/lexbor/dom/interfaces/node.c
|
5
|
+
@@ -85,6 +85,7 @@ lxb_dom_node_interface_copy(lxb_dom_node_t *dst,
|
6
|
+
|
7
|
+
dst->type = src->type;
|
8
|
+
dst->user = src->user;
|
9
|
+
+ dst->source_location = src->source_location;
|
10
|
+
|
11
|
+
if (dst->owner_document == src->owner_document) {
|
12
|
+
dst->local_name = src->local_name;
|
13
|
+
diff --git a/source/lexbor/dom/interfaces/node.h b/source/lexbor/dom/interfaces/node.h
|
14
|
+
index acd0c1c..f436257 100755
|
15
|
+
--- a/source/lexbor/dom/interfaces/node.h
|
16
|
+
+++ b/source/lexbor/dom/interfaces/node.h
|
17
|
+
@@ -46,6 +46,8 @@ struct lxb_dom_node {
|
18
|
+
uintptr_t prefix; /* lowercase: lalala */
|
19
|
+
uintptr_t ns; /* namespace */
|
20
|
+
|
21
|
+
+ size_t source_location; /* char offset to the source HTML */
|
22
|
+
+
|
23
|
+
lxb_dom_document_t *owner_document;
|
24
|
+
|
25
|
+
lxb_dom_node_t *next;
|
26
|
+
diff --git a/source/lexbor/html/tokenizer.c b/source/lexbor/html/tokenizer.c
|
27
|
+
index 741bced..6343c65 100755
|
28
|
+
--- a/source/lexbor/html/tokenizer.c
|
29
|
+
+++ b/source/lexbor/html/tokenizer.c
|
30
|
+
@@ -309,6 +309,7 @@ lxb_html_tokenizer_chunk(lxb_html_tokenizer_t *tkz, const lxb_char_t *data,
|
31
|
+
|
32
|
+
tkz->is_eof = false;
|
33
|
+
tkz->status = LXB_STATUS_OK;
|
34
|
+
+ tkz->first = data;
|
35
|
+
tkz->last = end;
|
36
|
+
|
37
|
+
while (data < end) {
|
38
|
+
diff --git a/source/lexbor/html/tokenizer.h b/source/lexbor/html/tokenizer.h
|
39
|
+
index ba9602f..08d0d9a 100755
|
40
|
+
--- a/source/lexbor/html/tokenizer.h
|
41
|
+
+++ b/source/lexbor/html/tokenizer.h
|
42
|
+
@@ -72,6 +72,7 @@ struct lxb_html_tokenizer {
|
43
|
+
lxb_char_t *pos;
|
44
|
+
const lxb_char_t *end;
|
45
|
+
const lxb_char_t *begin;
|
46
|
+
+ const lxb_char_t *first;
|
47
|
+
const lxb_char_t *last;
|
48
|
+
|
49
|
+
/* Entities */
|
50
|
+
diff --git a/source/lexbor/html/tree.c b/source/lexbor/html/tree.c
|
51
|
+
index 8c42990..28c97cc 100755
|
52
|
+
--- a/source/lexbor/html/tree.c
|
53
|
+
+++ b/source/lexbor/html/tree.c
|
54
|
+
@@ -484,6 +484,7 @@ lxb_html_tree_append_attributes(lxb_html_tree_t *tree,
|
55
|
+
|
56
|
+
attr->node.local_name = token_attr->name->attr_id;
|
57
|
+
attr->node.ns = ns;
|
58
|
+
+ attr->node.source_location = token_attr->name_begin - tree->tkz_ref->first;
|
59
|
+
|
60
|
+
/* Fix for adjust MathML/SVG attributes */
|
61
|
+
if (tree->before_append_attr != NULL) {
|
62
|
+
diff --git a/source/lexbor/html/tree.h b/source/lexbor/html/tree.h
|
63
|
+
index 231239d..bc0249e 100755
|
64
|
+
--- a/source/lexbor/html/tree.h
|
65
|
+
+++ b/source/lexbor/html/tree.h
|
66
|
+
@@ -266,8 +266,10 @@ lxb_inline lxb_dom_node_t *
|
67
|
+
lxb_html_tree_create_node(lxb_html_tree_t *tree,
|
68
|
+
lxb_tag_id_t tag_id, lxb_ns_id_t ns)
|
69
|
+
{
|
70
|
+
- return (lxb_dom_node_t *) lxb_html_interface_create(tree->document,
|
71
|
+
+ lxb_dom_node_t *node = (lxb_dom_node_t *) lxb_html_interface_create(tree->document,
|
72
|
+
tag_id, ns);
|
73
|
+
+ node->source_location = (tree->tkz_ref->token->begin > tree->tkz_ref->first ? tree->tkz_ref->token->begin : tree->tkz_ref->begin) - tree->tkz_ref->first;
|
74
|
+
+ return node;
|
75
|
+
}
|
76
|
+
|
77
|
+
lxb_inline bool
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nokolexbor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yicheng Zhou
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-04-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake-compiler
|
@@ -131,6 +131,7 @@ files:
|
|
131
131
|
- patches/0002-lexbor-match-id-class-case-sensitive.patch
|
132
132
|
- patches/0003-lexbor-attach-template-content-to-self.patch
|
133
133
|
- patches/0004-lexbor-fix-template-clone.patch
|
134
|
+
- patches/0005-lexbor-add-source-location-to-node.patch
|
134
135
|
- vendor/lexbor/CMakeLists.txt
|
135
136
|
- vendor/lexbor/config.cmake
|
136
137
|
- vendor/lexbor/feature.cmake
|