diff options
author | bors-servo <release+servo@mozilla.com> | 2013-11-12 02:04:25 -0800 |
---|---|---|
committer | bors-servo <release+servo@mozilla.com> | 2013-11-12 02:04:25 -0800 |
commit | 2975cb69e3bb4784647a5b7f6d5d4dac7b8241cf (patch) | |
tree | 75bfc9cb2445c11ff18d85a209c7ee2c5078826c /src/components/script/dom/bindings/utils.rs | |
parent | da4ca510496c5596ddc3593909ebd1db2f5bf957 (diff) | |
parent | 15b9d4d19967ed96bd459bf15cae5b793567c227 (diff) | |
download | servo-2975cb69e3bb4784647a5b7f6d5d4dac7b8241cf.tar.gz servo-2975cb69e3bb4784647a5b7f6d5d4dac7b8241cf.zip |
auto merge of #1218 : jdm/servo/attr, r=kmcallister
Diffstat (limited to 'src/components/script/dom/bindings/utils.rs')
-rw-r--r-- | src/components/script/dom/bindings/utils.rs | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/src/components/script/dom/bindings/utils.rs b/src/components/script/dom/bindings/utils.rs index 716f16459d5..6fa2a8ec0c3 100644 --- a/src/components/script/dom/bindings/utils.rs +++ b/src/components/script/dom/bindings/utils.rs @@ -784,7 +784,8 @@ pub enum Error { HierarchyRequest, InvalidCharacter, NotSupported, - InvalidState + InvalidState, + NamespaceError } pub type Fallible<T> = Result<T, Error>; @@ -883,7 +884,14 @@ pub fn cx_for_dom_object<T: Reflectable>(obj: &mut T) -> *JSContext { /// Check if an element name is valid. See http://www.w3.org/TR/xml/#NT-Name /// for details. -pub fn is_valid_element_name(name: &str) -> bool { +#[deriving(Eq)] +pub enum XMLName { + QName, + Name, + InvalidXMLName +} + +pub fn xml_name_type(name: &str) -> XMLName { fn is_valid_start(c: char) -> bool { match c { ':' | @@ -919,20 +927,34 @@ pub fn is_valid_element_name(name: &str) -> bool { } let mut iter = name.iter(); + let mut non_qname_colons = false; + let mut seen_colon = false; match iter.next() { - None => return false, + None => return InvalidXMLName, Some(c) => { if !is_valid_start(c) { - return false; + return InvalidXMLName; + } + if c == ':' { + non_qname_colons = true; } } } for c in name.iter() { if !is_valid_continuation(c) { - return false; + return InvalidXMLName; + } + if c == ':' { + match seen_colon { + true => non_qname_colons = true, + false => seen_colon = true + } } } - true + match non_qname_colons { + false => QName, + true => Name + } } |