Skip to content
Permalink
Browse files

Implement string stripping utilities from the Infra spec

  • Loading branch information
KiChjang committed Nov 8, 2017
1 parent c494d25 commit 9d60333af95adf64f2489e1e51563f0694abdd2a
Showing with 26 additions and 0 deletions.
  1. +23 −0 components/script/dom/bindings/str.rs
  2. +3 −0 components/script/lib.rs
@@ -186,6 +186,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 {
@@ -4,11 +4,14 @@

#![cfg_attr(feature = "unstable", feature(core_intrinsics))]
#![cfg_attr(feature = "unstable", feature(on_unimplemented))]
#![feature(ascii_ctype)]
#![feature(conservative_impl_trait)]
#![feature(const_fn)]
#![feature(mpsc_select)]
#![feature(plugin)]
#![feature(proc_macro)]
#![feature(splice)]
#![feature(string_retain)]

#![deny(unsafe_code)]
#![allow(non_snake_case)]

0 comments on commit 9d60333

Please sign in to comment.
You can’t perform that action at this time.