mirror of
https://github.com/servo/servo.git
synced 2025-08-03 20:50:07 +01:00
Use rust-phf to map strings to property IDs
This commit is contained in:
parent
137e30b825
commit
fdc40592de
7 changed files with 50 additions and 36 deletions
|
@ -33,6 +33,7 @@ def main():
|
|||
rust = render(template, product=product, data=properties, __file__=template)
|
||||
if output == "style-crate":
|
||||
write(os.environ["OUT_DIR"], "properties.rs", rust)
|
||||
write(os.environ["OUT_DIR"], "static_ids.txt", static_ids(properties))
|
||||
if product == "gecko":
|
||||
template = os.path.join(BASE, "gecko.mako.rs")
|
||||
rust = render(template, data=properties)
|
||||
|
@ -69,6 +70,15 @@ def write(directory, filename, content):
|
|||
open(os.path.join(directory, filename), "wb").write(content)
|
||||
|
||||
|
||||
def static_ids(properties):
|
||||
return '\n'.join(
|
||||
"%s\tStaticId::%s(%sId::%s)" % (p.name, kind, kind, p.camel_case)
|
||||
for kind, props in [("Longhand", properties.longhands),
|
||||
("Shorthand", properties.shorthands)]
|
||||
for p in props
|
||||
)
|
||||
|
||||
|
||||
def write_html(properties):
|
||||
properties = dict(
|
||||
(p.name, {
|
||||
|
|
|
@ -391,16 +391,6 @@ pub enum LonghandId {
|
|||
}
|
||||
|
||||
impl LonghandId {
|
||||
pub fn from_ascii_lowercase_name(name: &str) -> Result<Self, ()> {
|
||||
// FIXME: use rust-phf?
|
||||
match name {
|
||||
% for property in data.longhands:
|
||||
"${property.name}" => Ok(LonghandId::${property.camel_case}),
|
||||
% endfor
|
||||
_ => Err(())
|
||||
}
|
||||
}
|
||||
|
||||
pub fn name(&self) -> &'static str {
|
||||
match *self {
|
||||
% for property in data.longhands:
|
||||
|
@ -425,16 +415,6 @@ impl ToCss for ShorthandId {
|
|||
}
|
||||
|
||||
impl ShorthandId {
|
||||
pub fn from_ascii_lowercase_name(name: &str) -> Result<Self, ()> {
|
||||
// FIXME: use rust-phf?
|
||||
match name {
|
||||
% for property in data.shorthands:
|
||||
"${property.name}" => Ok(ShorthandId::${property.camel_case}),
|
||||
% endfor
|
||||
_ => Err(())
|
||||
}
|
||||
}
|
||||
|
||||
pub fn name(&self) -> &'static str {
|
||||
match *self {
|
||||
% for property in data.shorthands:
|
||||
|
@ -629,19 +609,26 @@ impl ToCss for PropertyId {
|
|||
}
|
||||
}
|
||||
|
||||
// FIXME(https://github.com/rust-lang/rust/issues/33156): remove this enum and use PropertyId
|
||||
// when stable Rust allows destructors in statics.
|
||||
enum StaticId {
|
||||
Longhand(LonghandId),
|
||||
Shorthand(ShorthandId),
|
||||
}
|
||||
include!(concat!(env!("OUT_DIR"), "/static_ids.rs"));
|
||||
|
||||
impl PropertyId {
|
||||
/// Returns Err(()) for unknown non-custom properties
|
||||
pub fn parse(s: Cow<str>) -> Result<Self, ()> {
|
||||
if let Ok(name) = ::custom_properties::parse_name(&s) {
|
||||
return Ok(PropertyId::Custom(::custom_properties::Name::from(name)))
|
||||
}
|
||||
|
||||
let lower_case = ::str::cow_into_ascii_lowercase(s);
|
||||
if let Ok(id) = LonghandId::from_ascii_lowercase_name(&lower_case) {
|
||||
Ok(PropertyId::Longhand(id))
|
||||
} else if let Ok(id) = ShorthandId::from_ascii_lowercase_name(&lower_case) {
|
||||
Ok(PropertyId::Shorthand(id))
|
||||
} else {
|
||||
Err(())
|
||||
match STATIC_IDS.get(&*lower_case) {
|
||||
Some(&StaticId::Longhand(id)) => Ok(PropertyId::Longhand(id)),
|
||||
Some(&StaticId::Shorthand(id)) => Ok(PropertyId::Shorthand(id)),
|
||||
None => Err(()),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue