aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/dom/bindings/utils.rs
diff options
context:
space:
mode:
authorbors-servo <release+servo@mozilla.com>2013-11-12 02:04:25 -0800
committerbors-servo <release+servo@mozilla.com>2013-11-12 02:04:25 -0800
commit2975cb69e3bb4784647a5b7f6d5d4dac7b8241cf (patch)
tree75bfc9cb2445c11ff18d85a209c7ee2c5078826c /src/components/script/dom/bindings/utils.rs
parentda4ca510496c5596ddc3593909ebd1db2f5bf957 (diff)
parent15b9d4d19967ed96bd459bf15cae5b793567c227 (diff)
downloadservo-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.rs34
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
+ }
}