diff --git a/README.md b/README.md
index 12da41c..512ba56 100644
--- a/README.md
+++ b/README.md
@@ -272,7 +272,7 @@ $ cat robots.html | pup 'div#p-namespaces a'
Article
-
+
Talk
```
@@ -282,16 +282,25 @@ $ cat robots.html | pup 'div#p-namespaces a json{}'
[
{
"accesskey": "c",
+ "children": [
+ {
+ "text": "Article"
+ }
+ ],
"href": "/wiki/Robots_exclusion_standard",
"tag": "a",
- "text": "Article",
"title": "View the content page [c]"
},
{
"accesskey": "t",
+ "children": [
+ {
+ "text": "Talk"
+ }
+ ],
"href": "/wiki/Talk:Robots_exclusion_standard",
+ "rel": "discussion",
"tag": "a",
- "text": "Talk",
"title": "Discussion about the content page [t]"
}
]
@@ -304,16 +313,25 @@ $ cat robots.html | pup -i 4 'div#p-namespaces a json{}'
[
{
"accesskey": "c",
+ "children": [
+ {
+ "text": "Article"
+ }
+ ],
"href": "/wiki/Robots_exclusion_standard",
"tag": "a",
- "text": "Article",
"title": "View the content page [c]"
},
{
"accesskey": "t",
+ "children": [
+ {
+ "text": "Talk"
+ }
+ ],
"href": "/wiki/Talk:Robots_exclusion_standard",
+ "rel": "discussion",
"tag": "a",
- "text": "Talk",
"title": "Discussion about the content page [t]"
}
]
diff --git a/display.go b/display.go
index 0be946c..3b16f01 100644
--- a/display.go
+++ b/display.go
@@ -272,38 +272,32 @@ func jsonify(node *html.Node) map[string]interface{} {
}
}
}
- vals["tag"] = node.DataAtom.String()
+ switch node.Type {
+ case html.ElementNode:
+ vals["tag"] = node.Data
+ case html.TextNode:
+ text := strings.TrimSpace(node.Data)
+ if text != "" {
+ if pupEscapeHTML {
+ // don't escape javascript
+ if node.DataAtom != atom.Script {
+ text = html.EscapeString(text)
+ }
+ }
+ vals["text"] = text
+ }
+ case html.CommentNode:
+ comment := strings.TrimSpace(node.Data)
+ if pupEscapeHTML {
+ comment = html.EscapeString(comment)
+ }
+ vals["comment"] = comment
+ }
children := []interface{}{}
for child := node.FirstChild; child != nil; child = child.NextSibling {
- switch child.Type {
- case html.ElementNode:
- children = append(children, jsonify(child))
- case html.TextNode:
- text := strings.TrimSpace(child.Data)
- if text != "" {
- if pupEscapeHTML {
- // don't escape javascript
- if node.DataAtom != atom.Script {
- text = html.EscapeString(text)
- }
- }
- // if there is already text we'll append it
- currText, ok := vals["text"]
- if ok {
- text = fmt.Sprintf("%s %s", currText, text)
- }
- vals["text"] = text
- }
- case html.CommentNode:
- comment := strings.TrimSpace(child.Data)
- if pupEscapeHTML {
- comment = html.EscapeString(comment)
- }
- currComment, ok := vals["comment"]
- if ok {
- comment = fmt.Sprintf("%s %s", currComment, comment)
- }
- vals["comment"] = comment
+ jChild := jsonify(child)
+ if len(jChild) > 0 {
+ children = append(children, jChild)
}
}
if len(children) > 0 {
diff --git a/tests/expected_output.txt b/tests/expected_output.txt
index 7f06b47..3b08cee 100644
--- a/tests/expected_output.txt
+++ b/tests/expected_output.txt
@@ -10,7 +10,7 @@ a92e50c09cd56970625ac3b74efbddb83b2731bb table li
66950e746590d7f4e9cfe3d1adef42cd0addcf1d table li:last-of-type
0a37d612cd4c67a42bd147b1edc5a1128456b017 table a[title="The Practice of Programming"]
0d3918d54f868f13110262ffbb88cbb0b083057d table a[title="The Practice of Programming"] text{}
-ecb542a30fc75c71a0c6380692cbbc4266ccbce4 json{}
+199188dc8f1522426a628e41d96264bffb8beb0f json{}
95ef88ded9dab22ee3206cca47b9c3a376274bda text{}
e4f7358fbb7bb1748a296fa2a7e815fa7de0a08b .after-portlet
da39a3ee5e6b4b0d3255bfef95601890afd80709 .after
@@ -34,7 +34,7 @@ d314e83b059bb876b0e5ee76aa92d54987961f9a .navbox-list li:nth-last-child(1)
613bf65ac4042b6ee0a7a47f08732fdbe1b5b06b #toc
da39a3ee5e6b4b0d3255bfef95601890afd80709 #toc li + a
da39a3ee5e6b4b0d3255bfef95601890afd80709 #toc li + a text{}
-97d170e1550eee4afc0af065b78cda302a97674c #toc li + a json{}
+cd0d4cc32346750408f7d4f5e78ec9a6e5b79a0d #toc li + a json{}
da39a3ee5e6b4b0d3255bfef95601890afd80709 #toc li + a + span
da39a3ee5e6b4b0d3255bfef95601890afd80709 #toc li + span
da39a3ee5e6b4b0d3255bfef95601890afd80709 #toc li > li