diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2017-06-07 09:54:47 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-07 09:54:47 -0700 |
commit | cb281af463e2f6a30f4f65db0dd614b07570c356 (patch) | |
tree | 315d4af411e8b660784faf7eb4bd8357f05cf1d8 | |
parent | 738483742c32f6de680b13be31ffc552059b39b9 (diff) | |
parent | 36f32554842225a42be3b672b85c45d130a65165 (diff) | |
download | servo-cb281af463e2f6a30f4f65db0dd614b07570c356.tar.gz servo-cb281af463e2f6a30f4f65db0dd614b07570c356.zip |
Auto merge of #17210 - ferjm:bug1367615.inDOMUtils, r=emilio
Bug 1367615 - Stylo: implement inIDOMUtils.getSelectorCount and inIDO…
…MUtils.getSelectorTextFromIndex
https://bugzilla.mozilla.org/show_bug.cgi?id=1367615
<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/17210)
<!-- Reviewable:end -->
-rw-r--r-- | components/selectors/parser.rs | 27 | ||||
-rw-r--r-- | components/style/gecko/generated/bindings.rs | 10 | ||||
-rw-r--r-- | ports/geckolib/glue.rs | 19 |
3 files changed, 47 insertions, 9 deletions
diff --git a/components/selectors/parser.rs b/components/selectors/parser.rs index c613d741eb6..92ba8c17601 100644 --- a/components/selectors/parser.rs +++ b/components/selectors/parser.rs @@ -167,6 +167,23 @@ impl<Impl: SelectorImpl> SelectorList<Impl> { pub fn from_vec(v: Vec<Selector<Impl>>) -> Self { 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 @@ -638,15 +655,7 @@ impl<Impl: SelectorImpl> Debug for LocalName<Impl> { impl<Impl: SelectorImpl> ToCss for SelectorList<Impl> { fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { - let mut iter = self.0.iter(); - 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(()) + self.to_css_from_index(/* from_index = */ 0, dest) } } diff --git a/components/style/gecko/generated/bindings.rs b/components/style/gecko/generated/bindings.rs index 7054148ba70..3eed899e538 100644 --- a/components/style/gecko/generated/bindings.rs +++ b/components/style/gecko/generated/bindings.rs @@ -2051,6 +2051,16 @@ extern "C" { 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" { pub fn Servo_ImportRule_GetHref(rule: RawServoImportRuleBorrowed, result: *mut nsAString); } diff --git a/ports/geckolib/glue.rs b/ports/geckolib/glue.rs index 07ae5a8c2b9..6363e38deb1 100644 --- a/ports/geckolib/glue.rs +++ b/ports/geckolib/glue.rs @@ -1157,6 +1157,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] pub extern "C" fn Servo_ImportRule_GetHref(rule: RawServoImportRuleBorrowed, result: *mut nsAString) { read_locked_arc(rule, |rule: &ImportRule| { write!(unsafe { &mut *result }, "{}", rule.url.as_str()).unwrap(); |