aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/main/layout/construct.rs
diff options
context:
space:
mode:
authorBrendan Zabarauskas <bjzaba@yahoo.com.au>2014-05-30 14:38:46 -0700
committerBrendan Zabarauskas <bjzaba@yahoo.com.au>2014-06-02 14:35:40 -0700
commit2b23a2ca944d627f06ef39cc696feadf81fbb04b (patch)
tree68cbcb129f6ab8ce58b5b7bc748ae02a8ab9ba0c /src/components/main/layout/construct.rs
parent86efd92a92503ef2bf61fca31b877b04d4f21219 (diff)
downloadservo-2b23a2ca944d627f06ef39cc696feadf81fbb04b.tar.gz
servo-2b23a2ca944d627f06ef39cc696feadf81fbb04b.zip
Remove the need to destructure InlineFragments
We do this by moving InlineFragmentMap::fixup into InlineFragments
Diffstat (limited to 'src/components/main/layout/construct.rs')
-rw-r--r--src/components/main/layout/construct.rs71
1 files changed, 5 insertions, 66 deletions
diff --git a/src/components/main/layout/construct.rs b/src/components/main/layout/construct.rs
index 869d4af0aeb..af9ee53169d 100644
--- a/src/components/main/layout/construct.rs
+++ b/src/components/main/layout/construct.rs
@@ -307,23 +307,17 @@ impl<'a> FlowConstructor<'a> {
whitespace_stripping: WhitespaceStrippingMode,
node: &ThreadSafeLayoutNode) {
let mut fragments = fragment_accumulator.finish();
- if fragments.len() == 0 {
- return
- }
+ if fragments.is_empty() { return };
match whitespace_stripping {
NoWhitespaceStripping => {}
StripWhitespaceFromStart => {
- strip_ignorable_whitespace_from_start(&mut fragments);
- if fragments.len() == 0 {
- return
- }
+ fragments.strip_ignorable_whitespace_from_start();
+ if fragments.is_empty() { return };
}
StripWhitespaceFromEnd => {
- strip_ignorable_whitespace_from_end(&mut fragments);
- if fragments.len() == 0 {
- return
- }
+ fragments.strip_ignorable_whitespace_from_end();
+ if fragments.is_empty() { return };
}
}
@@ -1084,58 +1078,3 @@ impl<'ln> ObjectElement for ThreadSafeLayoutNode<'ln> {
}
}
}
-
-/// Strips ignorable whitespace from the start of a list of fragments.
-fn strip_ignorable_whitespace_from_start(fragments: &mut InlineFragments) {
- if fragments.len() == 0 {
- return
- }
-
- let InlineFragments {
- fragments: old_fragments,
- map: mut map
- } = mem::replace(fragments, InlineFragments::new());
-
- // FIXME(#2264, pcwalton): This is slow because vector shift is broken. :(
- let mut found_nonwhitespace = false;
- let mut new_fragments = Vec::new();
- for fragment in old_fragments.iter() {
- if !found_nonwhitespace && fragment.is_whitespace_only() {
- debug!("stripping ignorable whitespace from start");
- continue
- }
-
- found_nonwhitespace = true;
- new_fragments.push(fragment.clone())
- }
-
- map.fixup(old_fragments.as_slice(), new_fragments.as_slice());
- *fragments = InlineFragments {
- fragments: new_fragments,
- map: map,
- }
-}
-
-/// Strips ignorable whitespace from the end of a list of fragments.
-fn strip_ignorable_whitespace_from_end(fragments: &mut InlineFragments) {
- if fragments.len() == 0 {
- return
- }
-
- let InlineFragments {
- fragments: old_fragments,
- map: mut map
- } = mem::replace(fragments, InlineFragments::new());
-
- let mut new_fragments = old_fragments.clone();
- while new_fragments.len() > 0 && new_fragments.as_slice().last().get_ref().is_whitespace_only() {
- debug!("stripping ignorable whitespace from end");
- drop(new_fragments.pop());
- }
-
- map.fixup(old_fragments.as_slice(), new_fragments.as_slice());
- *fragments = InlineFragments {
- fragments: new_fragments,
- map: map,
- }
-}