2020-07-29 22:46:18 -04:00
|
|
|
use aho_corasick::{AhoCorasick, AhoCorasickBuilder};
|
2022-06-21 11:36:27 -04:00
|
|
|
use css_minify::optimizations::{Level, Minifier};
|
2020-07-27 04:08:53 -04:00
|
|
|
use lazy_static::lazy_static;
|
2021-04-14 11:36:06 -04:00
|
|
|
|
2022-06-21 11:36:27 -04:00
|
|
|
use std::str::from_utf8_unchecked;
|
2021-04-14 11:36:06 -04:00
|
|
|
|
|
|
|
use crate::err::ProcessingResult;
|
2022-06-21 11:36:27 -04:00
|
|
|
use crate::proc::checkpoint::WriteCheckpoint;
|
2021-04-14 11:36:06 -04:00
|
|
|
use crate::proc::MatchAction::*;
|
|
|
|
use crate::proc::MatchMode::*;
|
|
|
|
use crate::proc::Processor;
|
2021-08-08 03:58:10 -04:00
|
|
|
use crate::Cfg;
|
2021-01-07 08:26:02 -05:00
|
|
|
|
2020-07-26 10:27:52 -04:00
|
|
|
lazy_static! {
|
2021-08-08 03:58:10 -04:00
|
|
|
static ref STYLE_END: AhoCorasick = AhoCorasickBuilder::new()
|
|
|
|
.ascii_case_insensitive(true)
|
|
|
|
.build(&["</style"]);
|
2020-07-26 10:27:52 -04:00
|
|
|
}
|
|
|
|
|
2020-07-27 04:08:53 -04:00
|
|
|
#[inline(always)]
|
2021-01-07 08:26:02 -05:00
|
|
|
pub fn process_style(proc: &mut Processor, cfg: &Cfg) -> ProcessingResult<()> {
|
2021-08-08 03:58:10 -04:00
|
|
|
let start = WriteCheckpoint::new(proc);
|
2020-07-26 10:27:52 -04:00
|
|
|
proc.require_not_at_end()?;
|
2022-06-21 11:36:27 -04:00
|
|
|
let src = proc.m(WhileNotSeq(&STYLE_END), Discard);
|
2020-07-26 10:27:52 -04:00
|
|
|
// `process_tag` will require closing tag.
|
|
|
|
|
2021-01-07 08:26:02 -05:00
|
|
|
if cfg.minify_css {
|
2022-06-21 11:36:27 -04:00
|
|
|
let result = Minifier::default()
|
|
|
|
.minify(unsafe { from_utf8_unchecked(&proc[src]) }, Level::Three)
|
|
|
|
.ok();
|
|
|
|
// TODO Collect error as warning.
|
|
|
|
if result.as_ref().filter(|r| r.len() < src.len()).is_some() {
|
|
|
|
proc.write_slice(result.unwrap().as_bytes());
|
|
|
|
} else {
|
|
|
|
proc.write_range(src);
|
2021-01-07 08:26:02 -05:00
|
|
|
};
|
2022-06-21 11:36:27 -04:00
|
|
|
} else {
|
|
|
|
proc.write_range(src);
|
2021-01-07 08:26:02 -05:00
|
|
|
};
|
|
|
|
|
2019-12-23 06:48:41 -05:00
|
|
|
Ok(())
|
|
|
|
}
|