aboutsummaryrefslogtreecommitdiff
path: root/core/encoding/xml/debug_print.odin
diff options
context:
space:
mode:
authorJeroen van Rijn <Kelimion@users.noreply.github.com>2022-04-28 15:29:00 +0200
committerJeroen van Rijn <Kelimion@users.noreply.github.com>2022-04-28 15:29:00 +0200
commit80878264b63cd8476def629526b294b8e129791a (patch)
treed50ef7531aa490cad474f3e805a3f199455a12b4 /core/encoding/xml/debug_print.odin
parent6df21d6a9f08deb4dab96fb17f3540ebfbc8b8fe (diff)
[xml] Speedup.
Diffstat (limited to 'core/encoding/xml/debug_print.odin')
-rw-r--r--core/encoding/xml/debug_print.odin18
1 files changed, 10 insertions, 8 deletions
diff --git a/core/encoding/xml/debug_print.odin b/core/encoding/xml/debug_print.odin
index e6a8c9433..7c20ac123 100644
--- a/core/encoding/xml/debug_print.odin
+++ b/core/encoding/xml/debug_print.odin
@@ -1,8 +1,7 @@
-package xml
/*
An XML 1.0 / 1.1 parser
- Copyright 2021 Jeroen van Rijn <nom@duclavier.com>.
+ Copyright 2021-2022 Jeroen van Rijn <nom@duclavier.com>.
Made available under Odin's BSD-3 license.
A from-scratch XML implementation, loosely modeled on the [spec](https://www.w3.org/TR/2006/REC-xml11-20060816).
@@ -10,6 +9,8 @@ package xml
List of contributors:
Jeroen van Rijn: Initial implementation.
*/
+package xml
+
import "core:io"
import "core:fmt"
@@ -40,17 +41,16 @@ print :: proc(writer: io.Writer, doc: ^Document) -> (written: int, err: io.Error
written += wprintf(writer, "[Pre-root comment] %v\n", comment)
}
- if doc.root != nil {
+ if len(doc.elements) > 0 {
+ wprintln(writer, " --- ")
+ print_element(writer, doc, 0)
wprintln(writer, " --- ")
- print_element(writer, doc.root)
- wprintln(writer, " --- ")
}
return written, .None
}
-print_element :: proc(writer: io.Writer, element: ^Element, indent := 0) -> (written: int, err: io.Error) {
- if element == nil { return }
+print_element :: proc(writer: io.Writer, doc: ^Document, element_id: Element_ID, indent := 0) -> (written: int, err: io.Error) {
using fmt
tab :: proc(writer: io.Writer, indent: int) {
@@ -61,6 +61,8 @@ print_element :: proc(writer: io.Writer, element: ^Element, indent := 0) -> (wri
tab(writer, indent)
+ element := doc.elements[element_id]
+
if element.kind == .Element {
wprintf(writer, "<%v>\n", element.ident)
if len(element.value) > 0 {
@@ -74,7 +76,7 @@ print_element :: proc(writer: io.Writer, element: ^Element, indent := 0) -> (wri
}
for child in element.children {
- print_element(writer, child, indent + 1)
+ print_element(writer, doc, child, indent + 1)
}
} else if element.kind == .Comment {
wprintf(writer, "[COMMENT] %v\n", element.value)