aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJunyoung Cho <june0.cho@samsung.com>2014-02-21 16:16:06 +0900
committerJunyoung Cho <june0.cho@samsung.com>2014-02-21 17:30:15 +0900
commit327e1e20a91fe1849ab84a2f0e710e3d4d94aba4 (patch)
tree6a04beacec2993027336715bbf309f2b201ce465
parent65191b0d6316fa5ee0fcc9ad301a77e6b6f51b20 (diff)
downloadservo-327e1e20a91fe1849ab84a2f0e710e3d4d94aba4.tar.gz
servo-327e1e20a91fe1849ab84a2f0e710e3d4d94aba4.zip
Prevent '&nbsp' from stripping as whitespace
-rw-r--r--src/components/main/layout/box_.rs3
-rw-r--r--src/components/main/layout/construct.rs6
-rw-r--r--src/components/util/str.rs3
3 files changed, 7 insertions, 5 deletions
diff --git a/src/components/main/layout/box_.rs b/src/components/main/layout/box_.rs
index d4f16e1e37a..3350e3050f8 100644
--- a/src/components/main/layout/box_.rs
+++ b/src/components/main/layout/box_.rs
@@ -22,6 +22,7 @@ use servo_util::geometry::Au;
use servo_util::geometry;
use servo_util::range::*;
use servo_util::namespace;
+use servo_util::str::is_whitespace_not_nbsp;
use std::cast;
use std::cell::RefCell;
@@ -1428,7 +1429,7 @@ impl Box {
/// Returns true if this box is an unscanned text box that consists entirely of whitespace.
pub fn is_whitespace_only(&self) -> bool {
match self.specific {
- UnscannedTextBox(ref text_box_info) => text_box_info.text.is_whitespace(),
+ UnscannedTextBox(ref text_box_info) => is_whitespace_not_nbsp(text_box_info.text),
_ => false,
}
}
diff --git a/src/components/main/layout/construct.rs b/src/components/main/layout/construct.rs
index 98d33db8d26..4a2dc5a055d 100644
--- a/src/components/main/layout/construct.rs
+++ b/src/components/main/layout/construct.rs
@@ -43,6 +43,7 @@ use style::ComputedValues;
use servo_util::namespace;
use servo_util::url::parse_url;
use servo_util::url::is_image_data;
+use servo_util::str::is_whitespace_not_nbsp;
use extra::url::Url;
use extra::arc::Arc;
@@ -724,10 +725,7 @@ impl<'ln> NodeUtils for ThreadSafeLayoutNode<'ln> {
match self.type_id() {
TextNodeTypeId => {
unsafe {
- if !self.with_text(|text| text.characterdata
- .data
- .chars()
- .all(|c| c.is_whitespace())) {
+ if !self.with_text(|text| is_whitespace_not_nbsp(text.characterdata.data)) {
return false
}
diff --git a/src/components/util/str.rs b/src/components/util/str.rs
index 13272d8ec42..0b9bd74f074 100644
--- a/src/components/util/str.rs
+++ b/src/components/util/str.rs
@@ -19,3 +19,6 @@ pub fn null_str_as_empty_ref<'a>(s: &'a Option<DOMString>) -> &'a str {
}
}
+pub fn is_whitespace_not_nbsp(s: &str) -> bool {
+ s.chars().all(|c| c.is_whitespace() && c != '\xa0')
+}