Skip to content

Commit

Permalink
implement conversion method from Gecko CounterStylePtr to CounterStyl…
Browse files Browse the repository at this point in the history
…eOrNone
  • Loading branch information
dadaa committed Aug 7, 2017
1 parent 16704bb commit 3e40d67
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 0 deletions.
30 changes: 30 additions & 0 deletions components/style/gecko/values.rs
Expand Up @@ -446,4 +446,34 @@ impl CounterStyleOrNone {
}
}
}

/// Convert Gecko CounterStylePtr to CounterStyleOrNone.
pub fn from_gecko_value(gecko_value: &CounterStylePtr) -> Self {
use counter_style::{Symbol, Symbols};
use gecko_bindings::bindings::Gecko_CounterStyle_GetName;
use gecko_bindings::bindings::Gecko_CounterStyle_GetSymbols;
use gecko_bindings::bindings::Gecko_CounterStyle_GetSystem;
use gecko_bindings::bindings::Gecko_CounterStyle_IsName;
use gecko_bindings::bindings::Gecko_CounterStyle_IsNone;
use values::CustomIdent;
use values::generics::SymbolsType;

if unsafe { Gecko_CounterStyle_IsNone(gecko_value) } {
CounterStyleOrNone::None
} else if unsafe { Gecko_CounterStyle_IsName(gecko_value) } {
ns_auto_string!(name);
unsafe { Gecko_CounterStyle_GetName(gecko_value, &mut *name) };
CounterStyleOrNone::Name(CustomIdent((&*name).into()))
} else {
let system = unsafe { Gecko_CounterStyle_GetSystem(gecko_value) };
let symbol_type = SymbolsType::from_gecko_keyword(system as u32);
let symbols = unsafe {
let ref gecko_symbols = *Gecko_CounterStyle_GetSymbols(gecko_value);
gecko_symbols.iter().map(|gecko_symbol| {
Symbol::String(gecko_symbol.to_string())
}).collect()
};
CounterStyleOrNone::Symbols(symbol_type, Symbols(symbols))
}
}
}
13 changes: 13 additions & 0 deletions components/style/values/generics/mod.rs
Expand Up @@ -50,6 +50,19 @@ impl SymbolsType {
SymbolsType::Fixed => structs::NS_STYLE_COUNTER_SYSTEM_FIXED as u8,
}
}

/// Convert Gecko value to symbol type.
pub fn from_gecko_keyword(gecko_value: u32) -> SymbolsType {
use gecko_bindings::structs;
match gecko_value {
structs::NS_STYLE_COUNTER_SYSTEM_CYCLIC => SymbolsType::Cyclic,
structs::NS_STYLE_COUNTER_SYSTEM_NUMERIC => SymbolsType::Numeric,
structs::NS_STYLE_COUNTER_SYSTEM_ALPHABETIC => SymbolsType::Alphabetic,
structs::NS_STYLE_COUNTER_SYSTEM_SYMBOLIC => SymbolsType::Symbolic,
structs::NS_STYLE_COUNTER_SYSTEM_FIXED => SymbolsType::Fixed,
x => panic!("Unexpected value for symbol type {}", x)
}
}
}

/// https://drafts.csswg.org/css-counter-styles/#typedef-counter-style
Expand Down

0 comments on commit 3e40d67

Please sign in to comment.