# HG changeset patch # User František Kučera # Date 1605862987 -3600 # Node ID 53f1f3a5649aabd017e506fe322f8d55d8c8ba4e # Parent 053054f9f702bfbb5db59ed0daea183f9dbb8c66 XML name escaping: in namespace aware mode: escape also the colon diff -r 053054f9f702 -r 53f1f3a5649a src/XMLNameCodec.h --- a/src/XMLNameCodec.h Fri Nov 20 00:09:59 2020 +0100 +++ b/src/XMLNameCodec.h Fri Nov 20 10:03:07 2020 +0100 @@ -34,22 +34,22 @@ return codepoint >= start && codepoint <= end; } - bool isValidNameStartChar(gunichar codepoint) { + bool isValidNameStartChar(gunichar codepoint, bool namespaceAware = true) { // NameStartChar ::= ":" | [A-Z] | "_" | [a-z] // | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] // | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] // | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF] - return codepoint == ':' || between(codepoint, 'A', 'Z') || codepoint == '_' || between(codepoint, 'a', 'z') + return (codepoint == ':' && !namespaceAware) || between(codepoint, 'A', 'Z') || codepoint == '_' || between(codepoint, 'a', 'z') || between(codepoint, 0xC0, 0xD6) || between(codepoint, 0xD8, 0xF6) || between(codepoint, 0xF8, 0x2FF) || between(codepoint, 0x370, 0x37D) || between(codepoint, 0x37F, 0x1FFF) || between(codepoint, 0x200C, 0x200D) || between(codepoint, 0x2070, 0x218F) || between(codepoint, 0x2C00, 0x2FEF) || between(codepoint, 0x3001, 0xD7FF) || between(codepoint, 0xF900, 0xFDCF) || between(codepoint, 0xFDF0, 0xFFFD) || between(codepoint, 0x10000, 0xEFFFF); } - bool isValidNameChar(gunichar codepoint) { + bool isValidNameChar(gunichar codepoint, bool namespaceAware = true) { // NameChar ::= NameStartChar | "-" | "." | [0-9] // | #xB7 // | [#x0300-#x036F] | [#x203F-#x2040] - return isValidNameStartChar(codepoint) || codepoint == '-' || codepoint == '.' || between(codepoint, '0', '9') + return isValidNameStartChar(codepoint, namespaceAware) || codepoint == '-' || codepoint == '.' || between(codepoint, '0', '9') || codepoint == 0xB7 || between(codepoint, 0x0300, 0x036F) || between(codepoint, 0x203F, 0x2040); }