diff options
author | Cameron McCormack <cam@mcc.id.au> | 2017-11-24 16:48:12 +0800 |
---|---|---|
committer | Cameron McCormack <cam@mcc.id.au> | 2017-12-05 10:04:52 +0800 |
commit | c49554d4c4e8a270f48548262200884637ca7c88 (patch) | |
tree | 7c7419bc32495d2ef0a44c17eba33c1371f166d3 /ports | |
parent | 374f0091c1487b9c0c44e096a301379701711c58 (diff) | |
download | servo-c49554d4c4e8a270f48548262200884637ca7c88.tar.gz servo-c49554d4c4e8a270f48548262200884637ca7c88.zip |
style: Add FFI function to parse a @counter-style descriptor.
Diffstat (limited to 'ports')
-rw-r--r-- | ports/geckolib/glue.rs | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/ports/geckolib/glue.rs b/ports/geckolib/glue.rs index e9ef9d8104f..4ddb28f4f94 100644 --- a/ports/geckolib/glue.rs +++ b/ports/geckolib/glue.rs @@ -105,6 +105,8 @@ use style::gecko_bindings::structs::ServoTraversalFlags; use style::gecko_bindings::structs::StyleRuleInclusion; use style::gecko_bindings::structs::URLExtraData; use style::gecko_bindings::structs::gfxFontFeatureValueSet; +use style::gecko_bindings::structs::nsCSSCounterDesc; +use style::gecko_bindings::structs::nsCSSValue; use style::gecko_bindings::structs::nsCSSValueSharedList; use style::gecko_bindings::structs::nsCompatibility; use style::gecko_bindings::structs::nsIDocument; @@ -4749,3 +4751,36 @@ pub extern "C" fn Servo_ParseCounterStyleName( Err(_) => ptr::null_mut(), } } + +#[no_mangle] +pub extern "C" fn Servo_ParseCounterStyleDescriptor( + descriptor: nsCSSCounterDesc, + value: *const nsACString, + raw_extra_data: *mut URLExtraData, + result: *mut nsCSSValue, +) -> bool { + let value = unsafe { value.as_ref().unwrap().as_str_unchecked() }; + let url_data = unsafe { + if raw_extra_data.is_null() { + dummy_url_data() + } else { + RefPtr::from_ptr_ref(&raw_extra_data) + } + }; + let result = unsafe { result.as_mut().unwrap() }; + let mut input = ParserInput::new(&value); + let mut parser = Parser::new(&mut input); + let context = ParserContext::new( + Origin::Author, + url_data, + Some(CssRuleType::CounterStyle), + ParsingMode::DEFAULT, + QuirksMode::NoQuirks, + ); + counter_style::parse_counter_style_descriptor( + &context, + &mut parser, + descriptor, + result, + ).is_ok() +} |