diff options
Diffstat (limited to 'core/encoding/entity/example')
| -rw-r--r-- | core/encoding/entity/example/entity_example.odin | 76 | ||||
| -rw-r--r-- | core/encoding/entity/example/test.html | 28 |
2 files changed, 104 insertions, 0 deletions
diff --git a/core/encoding/entity/example/entity_example.odin b/core/encoding/entity/example/entity_example.odin new file mode 100644 index 000000000..6fc377f9d --- /dev/null +++ b/core/encoding/entity/example/entity_example.odin @@ -0,0 +1,76 @@ +package unicode_entity_example + +import "core:encoding/xml" +import "core:strings" +import "core:mem" +import "core:fmt" +import "core:time" + +doc_print :: proc(doc: ^xml.Document) { + buf: strings.Builder + defer strings.destroy_builder(&buf) + w := strings.to_writer(&buf) + + xml.print(w, doc) + fmt.println(strings.to_string(buf)) +} + +_entities :: proc() { + doc: ^xml.Document + err: xml.Error + + DOC :: #load("../../../../tests/core/assets/XML/unicode.xml") + + OPTIONS :: xml.Options{ + flags = { + .Ignore_Unsupported, .Intern_Comments, + }, + expected_doctype = "", + } + + parse_duration: time.Duration + + { + time.SCOPED_TICK_DURATION(&parse_duration) + doc, err = xml.parse(DOC, OPTIONS) + } + defer xml.destroy(doc) + + doc_print(doc) + + ms := time.duration_milliseconds(parse_duration) + + speed := (f64(1000.0) / ms) * f64(len(DOC)) / 1_024.0 / 1_024.0 + + fmt.printf("Parse time: %.2f ms (%.2f MiB/s).\n", ms, speed) + fmt.printf("Error: %v\n", err) +} + +_main :: proc() { + using fmt + + options := xml.Options{ flags = { .Ignore_Unsupported, .Intern_Comments, .Unbox_CDATA, .Decode_SGML_Entities }} + + doc, _ := xml.parse(#load("test.html"), options) + + defer xml.destroy(doc) + doc_print(doc) +} + +main :: proc() { + using fmt + + track: mem.Tracking_Allocator + mem.tracking_allocator_init(&track, context.allocator) + context.allocator = mem.tracking_allocator(&track) + + // _main() + _entities() + + if len(track.allocation_map) > 0 { + println() + for _, v in track.allocation_map { + printf("%v Leaked %v bytes.\n", v.location, v.size) + } + } +}
\ No newline at end of file diff --git a/core/encoding/entity/example/test.html b/core/encoding/entity/example/test.html new file mode 100644 index 000000000..ebbc6470c --- /dev/null +++ b/core/encoding/entity/example/test.html @@ -0,0 +1,28 @@ +<html>
+ <head>
+ <title>Entity Reference Test</title>
+ <style>
+ body {
+ background: #000; color: #eee;
+ width: 40%;
+ margin-left: auto;
+ margin-right: auto;
+ font-size: 14pt;
+ }
+ </style>
+ </head>
+ <body>
+ <h1>Entity Reference Test</h1>
+ <div id="test_cdata_in_comment" foo="">
+ Foozle]! © <!-- <![CDATA[ ® ]]> -->42&;1234&
+ </div>
+ <!-- EXPECTED: Foozle]! © 42&;1234& -->
+ <div id="test_cdata_unwrap_and_passthrough">
+ Foozle]! © <![CDATA[BOX ® /BOX]]>42&;1234&
+ </div>
+ <!-- EXPECTED: Foozle]! © BOX ® /BOX42&;1234& -->
+ <div>
+ | | | fj ` \ ® ϱ ∳ ⁏
+ </div>
+ </body>
+</html>
\ No newline at end of file |