diff options
author | Brendan Zabarauskas <bjzaba@yahoo.com.au> | 2014-05-30 14:38:46 -0700 |
---|---|---|
committer | Brendan Zabarauskas <bjzaba@yahoo.com.au> | 2014-06-02 14:35:40 -0700 |
commit | 2b23a2ca944d627f06ef39cc696feadf81fbb04b (patch) | |
tree | 68cbcb129f6ab8ce58b5b7bc748ae02a8ab9ba0c /src/components/main/layout/construct.rs | |
parent | 86efd92a92503ef2bf61fca31b877b04d4f21219 (diff) | |
download | servo-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.rs | 71 |
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, - } -} |