aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2017-06-07 09:54:47 -0700
committerGitHub <noreply@github.com>2017-06-07 09:54:47 -0700
commitcb281af463e2f6a30f4f65db0dd614b07570c356 (patch)
tree315d4af411e8b660784faf7eb4bd8357f05cf1d8
parent738483742c32f6de680b13be31ffc552059b39b9 (diff)
parent36f32554842225a42be3b672b85c45d130a65165 (diff)
downloadservo-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.rs27
-rw-r--r--components/style/gecko/generated/bindings.rs10
-rw-r--r--ports/geckolib/glue.rs19
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();