Bug 1367615 - Stylo: implement inIDOMUtils.getSelectorCount and inIDOMUtils.getSelectorTextFromIndex

This commit is contained in:
Fernando Jiménez Moreno 2017-06-07 17:41:24 +02:00
parent 7e273d6c9b
commit 36f3255484
3 changed files with 47 additions and 9 deletions

View file

@ -167,6 +167,23 @@ impl<Impl: SelectorImpl> SelectorList<Impl> {
pub fn from_vec(v: Vec<Selector<Impl>>) -> Self { pub fn from_vec(v: Vec<Selector<Impl>>) -> Self {
SelectorList(v.into_iter().map(SelectorAndHashes::new).collect()) SelectorList(v.into_iter().map(SelectorAndHashes::new).collect())
} }
pub fn to_css_from_index<W>(&self, from_index: usize, dest: &mut W)
-> fmt::Result where W: fmt::Write {
let mut iter = self.0.iter().skip(from_index);
let first = match iter.next() {
Some(f) => f,
None => return Ok(()),
};
first.selector.to_css(dest)?;
for selector_and_hashes in iter {
dest.write_str(", ")?;
selector_and_hashes.selector.to_css(dest)?;
}
Ok(())
}
} }
/// Copied from Gecko, who copied it from WebKit. Note that increasing the /// Copied from Gecko, who copied it from WebKit. Note that increasing the
@ -638,15 +655,7 @@ impl<Impl: SelectorImpl> Debug for LocalName<Impl> {
impl<Impl: SelectorImpl> ToCss for SelectorList<Impl> { impl<Impl: SelectorImpl> ToCss for SelectorList<Impl> {
fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write {
let mut iter = self.0.iter(); self.to_css_from_index(/* from_index = */ 0, dest)
let first = iter.next()
.expect("Empty SelectorList, should contain at least one selector");
first.selector.to_css(dest)?;
for selector_and_hashes in iter {
dest.write_str(", ")?;
selector_and_hashes.selector.to_css(dest)?;
}
Ok(())
} }
} }

View file

@ -2050,6 +2050,16 @@ extern "C" {
pub fn Servo_StyleRule_GetSelectorText(rule: RawServoStyleRuleBorrowed, pub fn Servo_StyleRule_GetSelectorText(rule: RawServoStyleRuleBorrowed,
result: *mut nsAString); result: *mut nsAString);
} }
extern "C" {
pub fn Servo_StyleRule_GetSelectorTextFromIndex(rule:
RawServoStyleRuleBorrowed,
index: u32,
result: *mut nsAString);
}
extern "C" {
pub fn Servo_StyleRule_GetSelectorCount(rule: RawServoStyleRuleBorrowed,
count: *mut u32);
}
extern "C" { extern "C" {
pub fn Servo_ImportRule_GetHref(rule: RawServoImportRuleBorrowed, pub fn Servo_ImportRule_GetHref(rule: RawServoImportRuleBorrowed,
result: *mut nsAString); result: *mut nsAString);

View file

@ -1156,6 +1156,25 @@ pub extern "C" fn Servo_StyleRule_GetSelectorText(rule: RawServoStyleRuleBorrowe
}) })
} }
#[no_mangle]
pub extern "C" fn Servo_StyleRule_GetSelectorTextFromIndex(rule: RawServoStyleRuleBorrowed,
aSelectorIndex: u32,
result: *mut nsAString) {
read_locked_arc(rule, |rule: &StyleRule| {
rule.selectors.to_css_from_index(
aSelectorIndex as usize,
unsafe { result.as_mut().unwrap() }
).unwrap();
})
}
#[no_mangle]
pub extern "C" fn Servo_StyleRule_GetSelectorCount(rule: RawServoStyleRuleBorrowed, count: *mut u32) {
read_locked_arc(rule, |rule: &StyleRule| {
*unsafe { count.as_mut().unwrap() } = rule.selectors.0.len() as u32;
})
}
#[no_mangle] #[no_mangle]
pub extern "C" fn Servo_ImportRule_GetHref(rule: RawServoImportRuleBorrowed, result: *mut nsAString) { pub extern "C" fn Servo_ImportRule_GetHref(rule: RawServoImportRuleBorrowed, result: *mut nsAString) {
read_locked_arc(rule, |rule: &ImportRule| { read_locked_arc(rule, |rule: &ImportRule| {