diff options
Diffstat (limited to 'components/script/dom/bindings/str.rs')
-rw-r--r-- | components/script/dom/bindings/str.rs | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/components/script/dom/bindings/str.rs b/components/script/dom/bindings/str.rs index 60b8d6183be..3667dddf92d 100644 --- a/components/script/dom/bindings/str.rs +++ b/components/script/dom/bindings/str.rs @@ -185,6 +185,29 @@ impl DOMString { pub fn bytes(&self) -> Bytes { self.0.bytes() } + + /// Removes newline characters according to <https://infra.spec.whatwg.org/#strip-newlines>. + pub fn strip_newlines(&mut self) { + self.0.retain(|c| c != '\r' && c != '\n'); + } + + /// Removes leading and trailing ASCII whitespaces according to + /// <https://infra.spec.whatwg.org/#strip-leading-and-trailing-ascii-whitespace>. + pub fn strip_leading_and_trailing_ascii_whitespace(&mut self) { + if self.0.len() == 0 { return; } + + let last_non_whitespace = match self.0.rfind(|ref c| !char::is_ascii_whitespace(c)) { + Some(idx) => idx + 1, + None => { + self.0.clear(); + return; + } + }; + let first_non_whitespace = self.0.find(|ref c| !char::is_ascii_whitespace(c)).unwrap(); + + self.0.truncate(last_non_whitespace); + let _ = self.0.splice(0..first_non_whitespace, ""); + } } impl Borrow<str> for DOMString { |