aboutsummaryrefslogtreecommitdiff
path: root/core/encoding
diff options
context:
space:
mode:
authorJeroen van Rijn <Kelimion@users.noreply.github.com>2024-06-12 13:30:00 +0200
committerJeroen van Rijn <Kelimion@users.noreply.github.com>2024-06-12 13:30:00 +0200
commit2fe961cbcd05a558fd13cc5f4c506373e7047a6b (patch)
treea61ed13006959709de7251fbc56594477b131c32 /core/encoding
parentebadff555d70d5ef8faf91785696e5c5ea3605f8 (diff)
Fold XML attribute whitespace.
Diffstat (limited to 'core/encoding')
-rw-r--r--core/encoding/entity/entity.odin34
1 files changed, 24 insertions, 10 deletions
diff --git a/core/encoding/entity/entity.odin b/core/encoding/entity/entity.odin
index 280be9377..f5208ad6f 100644
--- a/core/encoding/entity/entity.odin
+++ b/core/encoding/entity/entity.odin
@@ -89,7 +89,7 @@ decode_xml :: proc(input: string, options := XML_Decode_Options{}, allocator :=
t := Tokenizer{src=input}
in_data := false
- prev: rune
+ prev: rune = ' '
loop: for {
advance(&t) or_return
@@ -153,18 +153,32 @@ decode_xml :: proc(input: string, options := XML_Decode_Options{}, allocator :=
write_string(&builder, ";")
}
} else {
- // https://www.w3.org/TR/2006/REC-xml11-20060816/#sec-line-ends
- switch t.r {
- case '\n', 0x85, 0x2028:
- write_rune(&builder, '\n')
- case '\r': // Do nothing until next character
- case:
- if prev == '\r' { // Turn a single carriage return into a \n
+ // Handle AV Normalization: https://www.w3.org/TR/2006/REC-xml11-20060816/#AVNormalize
+ if .Normalize_Whitespace in options {
+ switch t.r {
+ case ' ', '\r', '\n', '\t':
+ if prev != ' ' {
+ write_rune(&builder, ' ')
+ prev = ' '
+ }
+ case:
+ write_rune(&builder, t.r)
+ prev = t.r
+ }
+ } else {
+ // https://www.w3.org/TR/2006/REC-xml11-20060816/#sec-line-ends
+ switch t.r {
+ case '\n', 0x85, 0x2028:
write_rune(&builder, '\n')
+ case '\r': // Do nothing until next character
+ case:
+ if prev == '\r' { // Turn a single carriage return into a \n
+ write_rune(&builder, '\n')
+ }
+ write_rune(&builder, t.r)
}
- write_rune(&builder, t.r)
+ prev = t.r
}
- prev = t.r
}
}
}