minify_html_common/
whitespace.rs1use crate::gen::codepoints::WHITESPACE;
2
3pub fn trimmed(val: &[u8]) -> &[u8] {
4 let mut start = 0;
5 while val.get(start).filter(|&&c| WHITESPACE[c]).is_some() {
6 start += 1;
7 }
8
9 let mut end = val.len();
10 while end > start && val.get(end - 1).filter(|&&c| WHITESPACE[c]).is_some() {
11 end -= 1;
12 }
13
14 &val[start..end]
15}
16
17pub fn left_trim(val: &mut Vec<u8>) {
18 let mut len = 0;
19 while val.get(len).filter(|&&c| WHITESPACE[c]).is_some() {
20 len += 1;
21 }
22 val.drain(0..len);
23}
24
25pub fn right_trim(val: &mut Vec<u8>) {
26 let mut retain = val.len();
27 while retain > 0 && val.get(retain - 1).filter(|&&c| WHITESPACE[c]).is_some() {
28 retain -= 1;
29 }
30 val.truncate(retain);
31}
32
33pub fn collapse_whitespace(val: &mut Vec<u8>) {
34 let mut write = 0;
35 let mut in_whitespace = false;
36 for i in 0..val.len() {
37 let mut c = val[i];
38 if WHITESPACE[c] {
39 if in_whitespace {
40 continue;
42 };
43 in_whitespace = true;
44 c = b' ';
45 } else {
46 in_whitespace = false;
47 };
48 val[write] = c;
49 write += 1;
50 }
51 val.truncate(write);
52}
53
54pub fn remove_all_whitespace(val: &mut Vec<u8>) {
55 let mut write = 0;
56 for i in 0..val.len() {
57 let c = val[i];
58 if WHITESPACE[c] {
59 continue;
61 };
62 val[write] = c;
63 write += 1;
64 }
65 val.truncate(write);
66}
67
68pub fn is_all_whitespace(val: &[u8]) -> bool {
69 for &c in val {
70 if !WHITESPACE[c] {
71 return false;
72 };
73 }
74 true
75}