Prevent '&nbsp' from stripping as whitespace

This commit is contained in:
Junyoung Cho 2014-02-21 16:16:06 +09:00
parent 65191b0d63
commit 327e1e20a9
3 changed files with 7 additions and 5 deletions

View file

@ -22,6 +22,7 @@ use servo_util::geometry::Au;
use servo_util::geometry; use servo_util::geometry;
use servo_util::range::*; use servo_util::range::*;
use servo_util::namespace; use servo_util::namespace;
use servo_util::str::is_whitespace_not_nbsp;
use std::cast; use std::cast;
use std::cell::RefCell; 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. /// Returns true if this box is an unscanned text box that consists entirely of whitespace.
pub fn is_whitespace_only(&self) -> bool { pub fn is_whitespace_only(&self) -> bool {
match self.specific { 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, _ => false,
} }
} }

View file

@ -43,6 +43,7 @@ use style::ComputedValues;
use servo_util::namespace; use servo_util::namespace;
use servo_util::url::parse_url; use servo_util::url::parse_url;
use servo_util::url::is_image_data; use servo_util::url::is_image_data;
use servo_util::str::is_whitespace_not_nbsp;
use extra::url::Url; use extra::url::Url;
use extra::arc::Arc; use extra::arc::Arc;
@ -724,10 +725,7 @@ impl<'ln> NodeUtils for ThreadSafeLayoutNode<'ln> {
match self.type_id() { match self.type_id() {
TextNodeTypeId => { TextNodeTypeId => {
unsafe { unsafe {
if !self.with_text(|text| text.characterdata if !self.with_text(|text| is_whitespace_not_nbsp(text.characterdata.data)) {
.data
.chars()
.all(|c| c.is_whitespace())) {
return false return false
} }

View file

@ -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')
}