#[derive(Debug, Clone, Ord, PartialOrd, Eq, PartialEq, Hash)]
pub enum VendorPrefix
{
o,
moz,
epub,
webkit,
ms,
servo,
Unrecognised(String),
}
impl ToCss for VendorPrefix
{
fn to_css<W: fmt::Write>(&self, dest: &mut W) -> fmt::Result
{
use self::VendorPrefix::*;
match *self
{
o => dest.write_str("-o-"),
moz => dest.write_str("-moz-"),
webkit => dest.write_str("-webkit-"),
ms => dest.write_str("-ms-"),
servo => dest.write_str("-servo-"),
epub => dest.write_str("-epub-"),
Unrecognised(ref prefix) =>
{
dest.write_char('-')?;
dest.write_str(prefix.as_str())?;
dest.write_char('-')
},
}
}
}
impl VendorPrefix
{
#[inline(always)]
pub fn findPrefixIfAnyForAsciiLowerCaseName<'i>(asciiLowerCaseName: String) -> (Option<VendorPrefix>, String)
{
if asciiLowerCaseName.len() < 3
{
return (None, asciiLowerCaseName);
}
{
let (firstCharacter, remainder) = asciiLowerCaseName.split_at(1);
if firstCharacter == "-" && !remainder.starts_with('-')
{
let mut split = remainder.splitn(2, '-');
let prefix = split.next().unwrap();
let unprefixedRemainder = split.next().unwrap();
use self::VendorPrefix::*;
return match prefix
{
"o" => (Some(o), unprefixedRemainder.to_owned()),
"moz" => (Some(moz), unprefixedRemainder.to_owned()),
"webkit" => (Some(webkit), unprefixedRemainder.to_owned()),
"ms" => (Some(ms), unprefixedRemainder.to_owned()),
"servo" => (Some(servo), unprefixedRemainder.to_owned()),
_ => (Some(Unrecognised(prefix.to_owned())), unprefixedRemainder.to_owned()),
};
}
}
return (None, asciiLowerCaseName);
}
#[inline(always)]
pub fn prefix(&self, name: &str) -> String
{
use self::VendorPrefix::*;
fn knownPrefix(prefix: &str, name: &str) -> String
{
let mut prefixed = String::with_capacity(prefix.len() + name.len());
prefixed.push_str(prefix);
prefixed.push_str(name);
prefixed
}
match self
{
&o => knownPrefix("-o-", name),
&moz => knownPrefix("-moz-", name),
&epub => knownPrefix("-epub-", name),
&webkit => knownPrefix("-webkit-", name),
&ms => knownPrefix("-ms-", name),
&servo => knownPrefix("-servo-", name),
&Unrecognised(ref prefix) =>
{
let mut prefixed = String::with_capacity(1 + prefix.len() + 1 + name.len());
prefixed.push('-');
prefixed.push_str(prefix);
prefixed.push('-');
prefixed.push_str(name);
prefixed
},
}
}
}