aboutsummaryrefslogtreecommitdiffstats
path: root/ports
diff options
context:
space:
mode:
authorCameron McCormack <cam@mcc.id.au>2017-11-24 16:48:12 +0800
committerCameron McCormack <cam@mcc.id.au>2017-12-05 10:04:52 +0800
commitc49554d4c4e8a270f48548262200884637ca7c88 (patch)
tree7c7419bc32495d2ef0a44c17eba33c1371f166d3 /ports
parent374f0091c1487b9c0c44e096a301379701711c58 (diff)
downloadservo-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.rs35
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()
+}