diff options
Diffstat (limited to 'core/encoding/xml')
| -rw-r--r-- | core/encoding/xml/tokenizer.odin | 2 | ||||
| -rw-r--r-- | core/encoding/xml/xml_reader.odin | 8 |
2 files changed, 6 insertions, 4 deletions
diff --git a/core/encoding/xml/tokenizer.odin b/core/encoding/xml/tokenizer.odin index 71fa0bdf5..d07f41580 100644 --- a/core/encoding/xml/tokenizer.odin +++ b/core/encoding/xml/tokenizer.odin @@ -264,7 +264,7 @@ scan_comment :: proc(t: ^Tokenizer) -> (comment: string, err: Error) { expect(t, .Dash) expect(t, .Gt) - return string(t.src[offset : t.offset - 1]), .None + return string(t.src[offset : t.offset - 3]), .None } // Skip CDATA diff --git a/core/encoding/xml/xml_reader.odin b/core/encoding/xml/xml_reader.odin index 0e773fd8a..8f8fffe14 100644 --- a/core/encoding/xml/xml_reader.odin +++ b/core/encoding/xml/xml_reader.odin @@ -294,7 +294,7 @@ parse_bytes :: proc(data: []u8, options := DEFAULT_OPTIONS, path := "", error_ha comment := scan_comment(t) or_return if .Intern_Comments in opts.flags { - if len(doc.elements) == 0 { + if doc.element_count == 0 { append(&doc.comments, comment) } else { el := new_element(doc) @@ -308,6 +308,7 @@ parse_bytes :: proc(data: []u8, options := DEFAULT_OPTIONS, path := "", error_ha case .Open_Bracket: // This could be a CDATA tag part of a tag's body. Unread the `<![` t.offset -= 3 + t.read_offset = t.offset // Instead of calling `parse_body` here, we could also `continue loop` // and fall through to the `case:` at the bottom of the outer loop. @@ -385,7 +386,8 @@ load_from_file :: proc(filename: string, options := DEFAULT_OPTIONS, error_handl return parse_bytes(data, options, filename, error_handler, allocator) } -destroy :: proc(doc: ^Document) { +destroy :: proc(doc: ^Document, allocator := context.allocator) { + context.allocator = allocator if doc == nil { return } for el in doc.elements { @@ -625,4 +627,4 @@ new_element :: proc(doc: ^Document) -> (id: Element_ID) { cur := doc.element_count doc.element_count += 1 return cur -}
\ No newline at end of file +} |