aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/layout/inline.rs26
-rw-r--r--components/layout/lib.rs1
2 files changed, 21 insertions, 6 deletions
diff --git a/components/layout/inline.rs b/components/layout/inline.rs
index 1ce18b562bb..60edeedff4b 100644
--- a/components/layout/inline.rs
+++ b/components/layout/inline.rs
@@ -962,13 +962,29 @@ impl InlineFlow {
Some(ref runs) => runs[run_count - run_idx - 1], // reverse order for RTL runs
None => (line.range, bidi::Level::ltr())
};
+
+ struct MaybeReverse<I> {
+ iter: I,
+ reverse: bool,
+ }
+
+ impl<I: DoubleEndedIterator> Iterator for MaybeReverse<I> {
+ type Item = I::Item;
+
+ fn next(&mut self) -> Option<I::Item> {
+ if self.reverse {
+ self.iter.next_back()
+ } else {
+ self.iter.next()
+ }
+ }
+ }
+
// If the bidi embedding direction is opposite the layout direction, lay out this
// run in reverse order.
- let reverse = level.is_ltr() != is_ltr;
- let fragment_indices = if reverse {
- (range.end().get() - 1..range.begin().get() - 1).step_by(-1)
- } else {
- (range.begin().get()..range.end().get()).step_by(1)
+ let fragment_indices = MaybeReverse {
+ iter: range.begin().get()..range.end().get(),
+ reverse: level.is_ltr() != is_ltr,
};
for fragment_index in fragment_indices {
diff --git a/components/layout/lib.rs b/components/layout/lib.rs
index 0b961550974..af108249c42 100644
--- a/components/layout/lib.rs
+++ b/components/layout/lib.rs
@@ -8,7 +8,6 @@
#![feature(conservative_impl_trait)]
#![feature(nonzero)]
#![feature(raw)]
-#![feature(step_by)]
extern crate app_units;
extern crate atomic_refcell;