///|
/// Split a qualified name into `(prefix?, local)`.
/// `"itunes:author"` becomes `(Some("itunes"), "author")`;
/// `"title"` becomes `(None, "title")`.
pub fn split_qname(qname : String) -> (String?, String) {
let len = qname.length()
let mut sep = -1
for i in 0..= len {
// No separator, or malformed like ":name" / "ns:" — keep it whole.
(None, qname)
} else {
let prefix = substring(qname, 0, sep)
let name = substring(qname, sep + 1, len)
(Some(prefix), name)
}
}
///|
/// The local part of a qualified name: `"itunes:author"` → `"author"`.
pub fn local_name(qname : String) -> String {
match split_qname(qname) {
(_, name) => name
}
}
///|
/// The prefix part of a qualified name, or `None` when unprefixed.
pub fn prefix_of(qname : String) -> String? {
match split_qname(qname) {
(prefix, _) => prefix
}
}