src/XMLNameCodec.h
branchv_0
changeset 22 53f1f3a5649a
parent 21 053054f9f702
child 23 b25404ff2b2b
equal deleted inserted replaced
21:053054f9f702 22:53f1f3a5649a
    32 
    32 
    33 	bool between(gunichar codepoint, gunichar start, gunichar end) {
    33 	bool between(gunichar codepoint, gunichar start, gunichar end) {
    34 		return codepoint >= start && codepoint <= end;
    34 		return codepoint >= start && codepoint <= end;
    35 	}
    35 	}
    36 
    36 
    37 	bool isValidNameStartChar(gunichar codepoint) {
    37 	bool isValidNameStartChar(gunichar codepoint, bool namespaceAware = true) {
    38 		// NameStartChar  ::= ":" | [A-Z] | "_" | [a-z] 
    38 		// NameStartChar  ::= ":" | [A-Z] | "_" | [a-z] 
    39 		//   | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF]
    39 		//   | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF]
    40 		//   | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF]
    40 		//   | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF]
    41 		//   | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
    41 		//   | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
    42 		return codepoint == ':' || between(codepoint, 'A', 'Z') || codepoint == '_' || between(codepoint, 'a', 'z')
    42 		return (codepoint == ':' && !namespaceAware) || between(codepoint, 'A', 'Z') || codepoint == '_' || between(codepoint, 'a', 'z')
    43 				|| between(codepoint, 0xC0, 0xD6) || between(codepoint, 0xD8, 0xF6) || between(codepoint, 0xF8, 0x2FF) || between(codepoint, 0x370, 0x37D) || between(codepoint, 0x37F, 0x1FFF)
    43 				|| between(codepoint, 0xC0, 0xD6) || between(codepoint, 0xD8, 0xF6) || between(codepoint, 0xF8, 0x2FF) || between(codepoint, 0x370, 0x37D) || between(codepoint, 0x37F, 0x1FFF)
    44 				|| between(codepoint, 0x200C, 0x200D) || between(codepoint, 0x2070, 0x218F) || between(codepoint, 0x2C00, 0x2FEF) || between(codepoint, 0x3001, 0xD7FF)
    44 				|| between(codepoint, 0x200C, 0x200D) || between(codepoint, 0x2070, 0x218F) || between(codepoint, 0x2C00, 0x2FEF) || between(codepoint, 0x3001, 0xD7FF)
    45 				|| between(codepoint, 0xF900, 0xFDCF) || between(codepoint, 0xFDF0, 0xFFFD) || between(codepoint, 0x10000, 0xEFFFF);
    45 				|| between(codepoint, 0xF900, 0xFDCF) || between(codepoint, 0xFDF0, 0xFFFD) || between(codepoint, 0x10000, 0xEFFFF);
    46 	}
    46 	}
    47 
    47 
    48 	bool isValidNameChar(gunichar codepoint) {
    48 	bool isValidNameChar(gunichar codepoint, bool namespaceAware = true) {
    49 		// NameChar       ::= NameStartChar | "-" | "." | [0-9] 
    49 		// NameChar       ::= NameStartChar | "-" | "." | [0-9] 
    50 		//   | #xB7
    50 		//   | #xB7
    51 		//   | [#x0300-#x036F] | [#x203F-#x2040]
    51 		//   | [#x0300-#x036F] | [#x203F-#x2040]
    52 		return isValidNameStartChar(codepoint) || codepoint == '-' || codepoint == '.' || between(codepoint, '0', '9')
    52 		return isValidNameStartChar(codepoint, namespaceAware) || codepoint == '-' || codepoint == '.' || between(codepoint, '0', '9')
    53 				|| codepoint == 0xB7
    53 				|| codepoint == 0xB7
    54 				|| between(codepoint, 0x0300, 0x036F) || between(codepoint, 0x203F, 0x2040);
    54 				|| between(codepoint, 0x0300, 0x036F) || between(codepoint, 0x203F, 0x2040);
    55 	}
    55 	}
    56 
    56 
    57 public:
    57 public: