Trim script and style elements

This commit is contained in:
Wilson Lin 2021-08-10 17:35:14 +10:00
parent b0bba546ce
commit ca30897dae
9 changed files with 49 additions and 8 deletions

View File

@ -1,14 +1,18 @@
#!/usr/bin/env bash
set -Eeuo pipefail
set -Eeo pipefail
pushd "$(dirname "$0")" >/dev/null
cargo build --manifest-path c14n/Cargo.toml --release
cargo build --manifest-path charlines/Cargo.toml --release
for f in outputs/*/*; do
src=$(cat "$f")
c14n/target/release/c14n <<< "$src" > "$f"
out=$(c14n/target/release/c14n < "$f")
if [[ "$CHARLINES" == "1" ]]; then
out=$(charlines/target/release/charlines <<< "$out")
fi
cat <<< "$out" > "$f"
done
popd >/dev/null

2
debug/diff/charlines/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
/Cargo.lock
/target/

View File

@ -0,0 +1,5 @@
[package]
publish = false
name = "charlines"
version = "0.0.1"
edition = "2018"

View File

@ -0,0 +1,3 @@
# charlines
Output each character from stdin onto its own stdout line. Useful for subsequence diffing when text does not naturally have a lot of line breaks (e.g. minified HTML).

View File

@ -0,0 +1,10 @@
use std::io::{stdin, stdout, Read, Write};
fn main() {
let mut src = Vec::new();
stdin().read_to_end(&mut src).unwrap();
let mut out = stdout();
for c in src {
out.write_all(&[c, b'\n']).unwrap();
}
}

1
format
View File

@ -11,6 +11,7 @@ for dir in \
bench/runners/minify-html-onepass \
cli \
debug/diff/c14n \
debug/diff/charlines \
fuzz \
fuzz/process \
java \

View File

@ -1,5 +1,19 @@
use crate::common::gen::codepoints::WHITESPACE;
pub fn trimmed(val: &[u8]) -> &[u8] {
let mut start = 0;
while val.get(start).filter(|&&c| WHITESPACE[c]).is_some() {
start += 1;
}
let mut end = val.len();
while end > start && val.get(end - 1).filter(|&&c| WHITESPACE[c]).is_some() {
end -= 1;
}
&val[start..end]
}
pub fn left_trim(val: &mut Vec<u8>) {
let mut len = 0;
while val.get(len).filter(|&&c| WHITESPACE[c]).is_some() {

View File

@ -9,6 +9,7 @@ use {
};
use crate::cfg::Cfg;
use crate::common::whitespace::trimmed;
#[cfg(feature = "js-esbuild")]
lazy_static! {
@ -27,13 +28,13 @@ lazy_static! {
#[cfg(not(feature = "js-esbuild"))]
pub fn minify_css(_cfg: &Cfg, out: &mut Vec<u8>, code: &[u8]) {
out.extend_from_slice(&code);
out.extend_from_slice(trimmed(code));
}
#[cfg(feature = "js-esbuild")]
pub fn minify_css(cfg: &Cfg, out: &mut Vec<u8>, code: &[u8]) {
if !cfg.minify_css {
out.extend_from_slice(&code);
out.extend_from_slice(trimmed(code));
} else {
minify_using_esbuild(out, code, &MINIFY_CSS_TRANSFORM_OPTIONS.clone());
}

View File

@ -6,7 +6,8 @@ use {
std::sync::Arc,
};
use crate::Cfg;
use crate::cfg::Cfg;
use crate::common::whitespace::trimmed;
#[cfg(feature = "js-esbuild")]
lazy_static! {
@ -24,13 +25,13 @@ lazy_static! {
#[cfg(not(feature = "js-esbuild"))]
pub fn minify_js(_cfg: &Cfg, out: &mut Vec<u8>, code: &[u8]) {
out.extend_from_slice(&code);
out.extend_from_slice(trimmed(code));
}
#[cfg(feature = "js-esbuild")]
pub fn minify_js(cfg: &Cfg, out: &mut Vec<u8>, code: &[u8]) {
if !cfg.minify_js {
out.extend_from_slice(&code);
out.extend_from_slice(trimmed(code));
} else {
minify_using_esbuild(out, code, &TRANSFORM_OPTIONS.clone());
}