Formatting

This commit is contained in:
Wilson Lin 2021-08-09 19:56:37 +10:00
parent 3b6c22088e
commit 19abe390d4
23 changed files with 181 additions and 96 deletions

View File

@ -43,7 +43,7 @@ const averageChartOptions = (label) => ({
type: "linear", type: "linear",
scaleLabel: { scaleLabel: {
display: true, display: true,
fontColor: '#222', fontColor: "#222",
fontSize: 24, fontSize: 24,
fontStyle: "bold", fontStyle: "bold",
labelString: label, labelString: label,
@ -145,7 +145,12 @@ const renderChart = (cfg, width, height) =>
await fs.mkdir(GRAPHS_DIR, { recursive: true }); await fs.mkdir(GRAPHS_DIR, { recursive: true });
const res = results.calculate(); const res = results.calculate();
const speedMinifiers = ["html-minifier", "minimize", "minify-html", "minify-html-onepass"]; const speedMinifiers = [
"html-minifier",
"minimize",
"minify-html",
"minify-html-onepass",
];
const sizeMinifiers = ["minimize", "html-minifier", "minify-html"]; const sizeMinifiers = ["minimize", "html-minifier", "minify-html"];
const inputs = Object.keys(res.inputSizes).sort(); const inputs = Object.keys(res.inputSizes).sort();
@ -208,11 +213,14 @@ const renderChart = (cfg, width, height) =>
label: minifier, label: minifier,
data: inputs.map( data: inputs.map(
(input) => (input) =>
res.perInputOps[minifier][input] / res.perInputOps['minify-html'][input] res.perInputOps[minifier][input] /
res.perInputOps["minify-html"][input]
), ),
})), })),
}, },
...breakdownChartOptions("Operations per second, relative to minify-html"), ...breakdownChartOptions(
"Operations per second, relative to minify-html"
),
}, },
900, 900,
1600 1600
@ -228,7 +236,11 @@ const renderChart = (cfg, width, height) =>
labels: inputs, labels: inputs,
datasets: sizeMinifiers.map((minifier) => ({ datasets: sizeMinifiers.map((minifier) => ({
label: minifier, label: minifier,
data: inputs.map((input) => res.perInputReduction[minifier][input] / res.perInputReduction['minify-html'][input]), data: inputs.map(
(input) =>
res.perInputReduction[minifier][input] /
res.perInputReduction["minify-html"][input]
),
})), })),
}, },
...breakdownChartOptions("Size reduction, relative to minify-html"), ...breakdownChartOptions("Size reduction, relative to minify-html"),

View File

@ -1,13 +1,19 @@
use std::{env, fs};
use std::io::stdout; use std::io::stdout;
use std::time::Instant; use std::time::Instant;
use std::{env, fs};
use minify_html_onepass::{Cfg, in_place}; use minify_html_onepass::{in_place, Cfg};
fn main() { fn main() {
let iterations = env::var("MHB_ITERATIONS").unwrap().parse::<usize>().unwrap(); let iterations = env::var("MHB_ITERATIONS")
.unwrap()
.parse::<usize>()
.unwrap();
let input_dir = env::var("MHB_INPUT_DIR").unwrap(); let input_dir = env::var("MHB_INPUT_DIR").unwrap();
let html_only = env::var("MHB_HTML_ONLY").ok().filter(|v| v == "1").is_some(); let html_only = env::var("MHB_HTML_ONLY")
.ok()
.filter(|v| v == "1")
.is_some();
let tests = fs::read_dir(input_dir).unwrap().map(|d| d.unwrap()); let tests = fs::read_dir(input_dir).unwrap().map(|d| d.unwrap());
@ -24,10 +30,15 @@ fn main() {
for _ in 0..iterations { for _ in 0..iterations {
let mut data = source.to_vec(); let mut data = source.to_vec();
len = in_place(&mut data, &cfg).expect("failed to minify"); len = in_place(&mut data, &cfg).expect("failed to minify");
}; }
let elapsed = start.elapsed().as_secs_f64(); let elapsed = start.elapsed().as_secs_f64();
results.push((t.file_name().into_string().unwrap(), len, iterations, elapsed)); results.push((
}; t.file_name().into_string().unwrap(),
len,
iterations,
elapsed,
));
}
serde_json::to_writer(stdout(), &results).unwrap(); serde_json::to_writer(stdout(), &results).unwrap();
} }

View File

@ -1,13 +1,19 @@
use std::{env, fs};
use std::io::stdout; use std::io::stdout;
use std::time::Instant; use std::time::Instant;
use std::{env, fs};
use minify_html::{Cfg, minify}; use minify_html::{minify, Cfg};
fn main() { fn main() {
let iterations = env::var("MHB_ITERATIONS").unwrap().parse::<usize>().unwrap(); let iterations = env::var("MHB_ITERATIONS")
.unwrap()
.parse::<usize>()
.unwrap();
let input_dir = env::var("MHB_INPUT_DIR").unwrap(); let input_dir = env::var("MHB_INPUT_DIR").unwrap();
let html_only = env::var("MHB_HTML_ONLY").ok().filter(|v| v == "1").is_some(); let html_only = env::var("MHB_HTML_ONLY")
.ok()
.filter(|v| v == "1")
.is_some();
let tests = fs::read_dir(input_dir).unwrap().map(|d| d.unwrap()); let tests = fs::read_dir(input_dir).unwrap().map(|d| d.unwrap());
@ -24,10 +30,15 @@ fn main() {
let mut len = 0; let mut len = 0;
for _ in 0..iterations { for _ in 0..iterations {
len = minify(&source, &cfg).len(); len = minify(&source, &cfg).len();
}; }
let elapsed = start.elapsed().as_secs_f64(); let elapsed = start.elapsed().as_secs_f64();
results.push((t.file_name().into_string().unwrap(), len, iterations, elapsed)); results.push((
}; t.file_name().into_string().unwrap(),
len,
iterations,
elapsed,
));
}
serde_json::to_writer(stdout(), &results).unwrap(); serde_json::to_writer(stdout(), &results).unwrap();
} }

View File

@ -74,7 +74,8 @@ fn main() {
let out_code = minify( let out_code = minify(
&src_code, &src_code,
&Cfg { &Cfg {
ensure_spec_compliant_unquoted_attribute_values: args.ensure_spec_compliant_unquoted_attribute_values, ensure_spec_compliant_unquoted_attribute_values: args
.ensure_spec_compliant_unquoted_attribute_values,
keep_closing_tags: args.keep_closing_tags, keep_closing_tags: args.keep_closing_tags,
keep_comments: args.keep_comments, keep_comments: args.keep_comments,
keep_html_and_head_opening_tags: args.keep_html_and_head_opening_tags, keep_html_and_head_opening_tags: args.keep_html_and_head_opening_tags,

27
format Executable file
View File

@ -0,0 +1,27 @@
#!/usr/bin/env bash
set -Eeuxo pipefail
pushd "$(dirname "$0")" >/dev/null
npx prettier@2.3.2 -w 'bench/*.{js,json}' 'bench/*/*.{js,json}' 'gen/*.{ts,json}'
for dir in \
bench/runners/minify-html \
bench/runners/minify-html-onepass \
cli \
fuzz \
fuzz/process \
java \
nodejs/native \
python \
ruby \
rust/main \
rust/onepass \
; do
pushd "$dir" >/dev/null
cargo fmt
popd >/dev/null
done
popd >/dev/null

View File

@ -1,7 +1,7 @@
use minify_html;
use std::fs; use std::fs;
use std::io::{self, Write}; use std::io::{self, Write};
use std::panic; use std::panic;
use minify_html;
fn main() { fn main() {
for dirent in fs::read_dir("../out/crashes").unwrap() { for dirent in fs::read_dir("../out/crashes").unwrap() {
@ -9,9 +9,7 @@ fn main() {
let path_in_catch = path.clone(); let path_in_catch = path.clone();
let res = panic::catch_unwind(|| { let res = panic::catch_unwind(|| {
let mut contents = fs::read(path_in_catch).unwrap(); let mut contents = fs::read(path_in_catch).unwrap();
let _ = minify_html::in_place(&mut contents, &minify_html::Cfg { let _ = minify_html::in_place(&mut contents, &minify_html::Cfg { minify_js: false });
minify_js: false,
});
}); });
if res.is_err() { if res.is_err() {
let contents = fs::read(path).unwrap(); let contents = fs::read(path).unwrap();
@ -19,5 +17,5 @@ fn main() {
break; break;
}; };
fs::remove_file(path).unwrap(); fs::remove_file(path).unwrap();
}; }
} }

View File

@ -49,7 +49,15 @@ const SINGLE_QUOTE = [c("'")];
// Official characters allowed in an attribute name. // Official characters allowed in an attribute name.
// NOTE: Unicode noncharacters not tested. // NOTE: Unicode noncharacters not tested.
// See https://html.spec.whatwg.org/multipage/syntax.html#syntax-attribute-name for spec. // See https://html.spec.whatwg.org/multipage/syntax.html#syntax-attribute-name for spec.
const WHATWG_ATTR_NAME_CHAR = invert([...CONTROL, c(' '), c('"'), c('\''), c('>'), c('/'), c('=')]); const WHATWG_ATTR_NAME_CHAR = invert([
...CONTROL,
c(" "),
c('"'),
c("'"),
c(">"),
c("/"),
c("="),
]);
// Valid attribute quote characters. // Valid attribute quote characters.
// See https://html.spec.whatwg.org/multipage/introduction.html#intro-early-example for spec. // See https://html.spec.whatwg.org/multipage/introduction.html#intro-early-example for spec.
// Backtick is not a valid quote character according to spec. // Backtick is not a valid quote character according to spec.

View File

@ -1,14 +1,9 @@
{ {
"private": true, "private": true,
"scripts": {
"format": "prettier -w '*.{ts,json}'"
},
"dependencies": { "dependencies": {
"@types/node": "^14.0.5", "@types/node": "^14.0.5",
"@wzlin/html-data": "^2021080714.0.0", "@wzlin/html-data": "^2021080714.0.0",
"prettier": "2.3.2",
"ts-node": "^8.10.1", "ts-node": "^8.10.1",
"typescript": "^3.7.4", "typescript": "^3.7.4"
"yaml": "^1.10.0"
} }
} }

View File

@ -1,23 +1,48 @@
use minify_html::{minify as minify_html_native, Cfg}; use jni::objects::{JClass, JObject, JString};
use jni::sys::jstring;
use jni::JNIEnv; use jni::JNIEnv;
use jni::objects::{ JClass, JObject, JString}; use minify_html::{minify as minify_html_native, Cfg};
use jni::sys::{ jstring};
use std::str::from_utf8; use std::str::from_utf8;
fn build_cfg( fn build_cfg(env: &JNIEnv, obj: &JObject) -> Cfg {
env: &JNIEnv,
obj: &JObject,
) -> Cfg {
Cfg { Cfg {
ensure_spec_compliant_unquoted_attribute_values: env.get_field(*obj, "ensure_spec_compliant_unquoted_attribute_values", "Z").unwrap().z().unwrap(), ensure_spec_compliant_unquoted_attribute_values: env
keep_closing_tags: env.get_field(*obj, "keep_closing_tags", "Z").unwrap().z().unwrap(), .get_field(*obj, "ensure_spec_compliant_unquoted_attribute_values", "Z")
keep_comments: env.get_field(*obj, "keep_comments", "Z").unwrap().z().unwrap(), .unwrap()
keep_html_and_head_opening_tags: env.get_field(*obj, "keep_html_and_head_opening_tags", "Z").unwrap().z().unwrap(), .z()
keep_spaces_between_attributes: env.get_field(*obj, "keep_spaces_between_attributes", "Z").unwrap().z().unwrap(), .unwrap(),
keep_closing_tags: env
.get_field(*obj, "keep_closing_tags", "Z")
.unwrap()
.z()
.unwrap(),
keep_comments: env
.get_field(*obj, "keep_comments", "Z")
.unwrap()
.z()
.unwrap(),
keep_html_and_head_opening_tags: env
.get_field(*obj, "keep_html_and_head_opening_tags", "Z")
.unwrap()
.z()
.unwrap(),
keep_spaces_between_attributes: env
.get_field(*obj, "keep_spaces_between_attributes", "Z")
.unwrap()
.z()
.unwrap(),
minify_css: env.get_field(*obj, "minify_css", "Z").unwrap().z().unwrap(), minify_css: env.get_field(*obj, "minify_css", "Z").unwrap().z().unwrap(),
minify_js: env.get_field(*obj, "minify_js", "Z").unwrap().z().unwrap(), minify_js: env.get_field(*obj, "minify_js", "Z").unwrap().z().unwrap(),
remove_bangs: env.get_field(*obj, "remove_bangs", "Z").unwrap().z().unwrap(), remove_bangs: env
remove_processing_instructions: env.get_field(*obj, "remove_processing_instructions", "Z").unwrap().z().unwrap(), .get_field(*obj, "remove_bangs", "Z")
.unwrap()
.z()
.unwrap(),
remove_processing_instructions: env
.get_field(*obj, "remove_processing_instructions", "Z")
.unwrap()
.z()
.unwrap(),
} }
} }
@ -27,8 +52,7 @@ pub extern "system" fn Java_in_wilsonl_minifyhtml_MinifyHtml_minify(
_class: JClass, _class: JClass,
input: JString, input: JString,
cfg: JObject, cfg: JObject,
) ) -> jstring {
-> jstring {
let source: String = env.get_string(input).unwrap().into(); let source: String = env.get_string(input).unwrap().into();
let code = source.into_bytes(); let code = source.into_bytes();

View File

@ -1,9 +1,9 @@
pub use crate::cfg::Cfg; pub use crate::cfg::Cfg;
use crate::common::spec::tag::ns::Namespace;
use crate::common::spec::tag::EMPTY_SLICE;
use crate::minify::content::minify_content; use crate::minify::content::minify_content;
use crate::parse::content::parse_content; use crate::parse::content::parse_content;
use crate::parse::Code; use crate::parse::Code;
use crate::common::spec::tag::ns::Namespace;
use crate::common::spec::tag::EMPTY_SLICE;
mod ast; mod ast;
mod cfg; mod cfg;

View File

@ -6,14 +6,14 @@ use {
crate::minify::css::MINIFY_CSS_TRANSFORM_OPTIONS, crate::minify::esbuild::minify_using_esbuild, crate::minify::css::MINIFY_CSS_TRANSFORM_OPTIONS, crate::minify::esbuild::minify_using_esbuild,
}; };
use crate::entity::encode::encode_entities;
use crate::Cfg;
use crate::common::gen::attrs::ATTRS; use crate::common::gen::attrs::ATTRS;
use crate::common::gen::codepoints::DIGIT; use crate::common::gen::codepoints::DIGIT;
use crate::common::pattern::Replacer; use crate::common::pattern::Replacer;
use crate::common::spec::script::JAVASCRIPT_MIME_TYPES; use crate::common::spec::script::JAVASCRIPT_MIME_TYPES;
use crate::common::spec::tag::ns::Namespace; use crate::common::spec::tag::ns::Namespace;
use crate::common::whitespace::{collapse_whitespace, left_trim, right_trim}; use crate::common::whitespace::{collapse_whitespace, left_trim, right_trim};
use crate::entity::encode::encode_entities;
use crate::Cfg;
fn build_double_quoted_replacer() -> Replacer { fn build_double_quoted_replacer() -> Replacer {
let mut patterns = Vec::<Vec<u8>>::new(); let mut patterns = Vec::<Vec<u8>>::new();

View File

@ -3,6 +3,12 @@ use lazy_static::lazy_static;
use crate::ast::{NodeData, ScriptOrStyleLang}; use crate::ast::{NodeData, ScriptOrStyleLang};
use crate::cfg::Cfg; use crate::cfg::Cfg;
use crate::common::gen::codepoints::TAG_NAME_CHAR;
use crate::common::pattern::Replacer;
use crate::common::spec::tag::whitespace::{
get_whitespace_minification_for_tag, WhitespaceMinification,
};
use crate::common::whitespace::{collapse_whitespace, is_all_whitespace, left_trim, right_trim};
use crate::entity::encode::encode_entities; use crate::entity::encode::encode_entities;
use crate::minify::bang::minify_bang; use crate::minify::bang::minify_bang;
use crate::minify::comment::minify_comment; use crate::minify::comment::minify_comment;
@ -10,14 +16,6 @@ use crate::minify::css::minify_css;
use crate::minify::element::minify_element; use crate::minify::element::minify_element;
use crate::minify::instruction::minify_instruction; use crate::minify::instruction::minify_instruction;
use crate::minify::js::minify_js; use crate::minify::js::minify_js;
use crate::common::gen::codepoints::TAG_NAME_CHAR;
use crate::common::pattern::Replacer;
use crate::common::spec::tag::whitespace::{
get_whitespace_minification_for_tag, WhitespaceMinification,
};
use crate::common::whitespace::{
collapse_whitespace, is_all_whitespace, left_trim, right_trim,
};
fn build_chevron_replacer() -> Replacer { fn build_chevron_replacer() -> Replacer {
let mut patterns = Vec::<Vec<u8>>::new(); let mut patterns = Vec::<Vec<u8>>::new();

View File

@ -2,10 +2,10 @@ use std::collections::HashMap;
use crate::ast::{ElementClosingTag, NodeData}; use crate::ast::{ElementClosingTag, NodeData};
use crate::cfg::Cfg; use crate::cfg::Cfg;
use crate::minify::attr::{minify_attr, AttrMinified};
use crate::minify::content::minify_content;
use crate::common::spec::tag::ns::Namespace; use crate::common::spec::tag::ns::Namespace;
use crate::common::spec::tag::omission::{can_omit_as_before, can_omit_as_last_node}; use crate::common::spec::tag::omission::{can_omit_as_before, can_omit_as_last_node};
use crate::minify::attr::{minify_attr, AttrMinified};
use crate::minify::content::minify_content;
#[derive(Copy, Clone, Eq, PartialEq)] #[derive(Copy, Clone, Eq, PartialEq)]
enum LastAttr { enum LastAttr {

View File

@ -3,6 +3,10 @@ use lazy_static::lazy_static;
use memchr::memrchr; use memchr::memrchr;
use crate::ast::NodeData; use crate::ast::NodeData;
use crate::common::gen::codepoints::TAG_NAME_CHAR;
use crate::common::spec::tag::ns::Namespace;
use crate::common::spec::tag::omission::{can_omit_as_before, can_omit_as_last_node};
use crate::common::spec::tag::void::VOID_TAGS;
use crate::entity::decode::decode_entities; use crate::entity::decode::decode_entities;
use crate::parse::bang::parse_bang; use crate::parse::bang::parse_bang;
use crate::parse::comment::parse_comment; use crate::parse::comment::parse_comment;
@ -10,10 +14,6 @@ use crate::parse::content::ContentType::*;
use crate::parse::element::{parse_element, parse_tag, peek_tag_name}; use crate::parse::element::{parse_element, parse_tag, peek_tag_name};
use crate::parse::instruction::parse_instruction; use crate::parse::instruction::parse_instruction;
use crate::parse::Code; use crate::parse::Code;
use crate::common::gen::codepoints::TAG_NAME_CHAR;
use crate::common::spec::tag::ns::Namespace;
use crate::common::spec::tag::omission::{can_omit_as_before, can_omit_as_last_node};
use crate::common::spec::tag::void::VOID_TAGS;
#[derive(Copy, Clone, Eq, PartialEq)] #[derive(Copy, Clone, Eq, PartialEq)]
enum ContentType { enum ContentType {

View File

@ -1,13 +1,6 @@
use std::collections::HashMap; use std::collections::HashMap;
use crate::ast::{ElementClosingTag, NodeData, ScriptOrStyleLang}; use crate::ast::{ElementClosingTag, NodeData, ScriptOrStyleLang};
use crate::entity::decode::decode_entities;
use crate::parse::content::{parse_content, ParsedContent};
use crate::parse::script::parse_script_content;
use crate::parse::style::parse_style_content;
use crate::parse::textarea::parse_textarea_content;
use crate::parse::title::parse_title_content;
use crate::parse::Code;
use crate::common::gen::codepoints::{ use crate::common::gen::codepoints::{
ATTR_QUOTE, DOUBLE_QUOTE, NOT_UNQUOTED_ATTR_VAL_CHAR, SINGLE_QUOTE, TAG_NAME_CHAR, WHITESPACE, ATTR_QUOTE, DOUBLE_QUOTE, NOT_UNQUOTED_ATTR_VAL_CHAR, SINGLE_QUOTE, TAG_NAME_CHAR, WHITESPACE,
WHITESPACE_OR_SLASH, WHITESPACE_OR_SLASH_OR_EQUALS_OR_RIGHT_CHEVRON, WHITESPACE_OR_SLASH, WHITESPACE_OR_SLASH_OR_EQUALS_OR_RIGHT_CHEVRON,
@ -15,6 +8,13 @@ use crate::common::gen::codepoints::{
use crate::common::spec::script::JAVASCRIPT_MIME_TYPES; use crate::common::spec::script::JAVASCRIPT_MIME_TYPES;
use crate::common::spec::tag::ns::Namespace; use crate::common::spec::tag::ns::Namespace;
use crate::common::spec::tag::void::VOID_TAGS; use crate::common::spec::tag::void::VOID_TAGS;
use crate::entity::decode::decode_entities;
use crate::parse::content::{parse_content, ParsedContent};
use crate::parse::script::parse_script_content;
use crate::parse::style::parse_style_content;
use crate::parse::textarea::parse_textarea_content;
use crate::parse::title::parse_title_content;
use crate::parse::Code;
use std::fmt::{Debug, Formatter}; use std::fmt::{Debug, Formatter};
use std::str::from_utf8; use std::str::from_utf8;

View File

@ -1,10 +1,10 @@
use std::collections::HashMap; use std::collections::HashMap;
use crate::ast::{ElementClosingTag, NodeData}; use crate::ast::{ElementClosingTag, NodeData};
use crate::parse::element::{parse_element, parse_tag, ParsedTag};
use crate::parse::Code;
use crate::common::spec::tag::ns::Namespace; use crate::common::spec::tag::ns::Namespace;
use crate::common::spec::tag::EMPTY_SLICE; use crate::common::spec::tag::EMPTY_SLICE;
use crate::parse::element::{parse_element, parse_tag, ParsedTag};
use crate::parse::Code;
#[test] #[test]
fn test_parse_tag() { fn test_parse_tag() {

View File

@ -1,9 +1,9 @@
pub use crate::cfg::Cfg; pub use crate::cfg::Cfg;
use crate::common::spec::tag::ns::Namespace;
use crate::err::debug_repr; use crate::err::debug_repr;
pub use crate::err::{Error, ErrorType, FriendlyError}; pub use crate::err::{Error, ErrorType, FriendlyError};
use crate::proc::Processor; use crate::proc::Processor;
use crate::unit::content::process_content; use crate::unit::content::process_content;
use crate::common::spec::tag::ns::Namespace;
mod cfg; mod cfg;
mod common; mod common;

View File

@ -15,12 +15,12 @@
use std::char::from_u32; use std::char::from_u32;
use crate::proc::Processor;
use crate::common::gen::codepoints::{ use crate::common::gen::codepoints::{
Lookup, ALPHANUMERIC_OR_EQUALS, DIGIT, HEX_DIGIT, LOWER_HEX_ALPHA, UPPER_HEX_ALPHA, Lookup, ALPHANUMERIC_OR_EQUALS, DIGIT, HEX_DIGIT, LOWER_HEX_ALPHA, UPPER_HEX_ALPHA,
}; };
use crate::common::gen::entities::{EntityType, ENTITY}; use crate::common::gen::entities::{EntityType, ENTITY};
use crate::common::pattern::TrieNodeMatch; use crate::common::pattern::TrieNodeMatch;
use crate::proc::Processor;
enum Parsed { enum Parsed {
// This includes numeric entities that were invalid and decoded to 0xFFFD. // This includes numeric entities that were invalid and decoded to 0xFFFD.

View File

@ -11,12 +11,12 @@ use {
std::sync::{Arc, Mutex}, std::sync::{Arc, Mutex},
}; };
use crate::common::gen::codepoints::Lookup;
use crate::common::spec::tag::EMPTY_SLICE;
use crate::err::{debug_repr, Error, ErrorType, ProcessingResult}; use crate::err::{debug_repr, Error, ErrorType, ProcessingResult};
use crate::proc::range::ProcessorRange; use crate::proc::range::ProcessorRange;
use crate::proc::MatchAction::*; use crate::proc::MatchAction::*;
use crate::proc::MatchMode::*; use crate::proc::MatchMode::*;
use crate::common::gen::codepoints::Lookup;
use crate::common::spec::tag::EMPTY_SLICE;
pub mod checkpoint; pub mod checkpoint;
pub mod entity; pub mod entity;

View File

@ -1,3 +1,6 @@
use crate::common::gen::attrs::ATTRS;
use crate::common::gen::codepoints::{WHATWG_ATTR_NAME_CHAR, WHITESPACE};
use crate::common::spec::tag::ns::Namespace;
use crate::err::ProcessingResult; use crate::err::ProcessingResult;
use crate::proc::checkpoint::WriteCheckpoint; use crate::proc::checkpoint::WriteCheckpoint;
use crate::proc::range::ProcessorRange; use crate::proc::range::ProcessorRange;
@ -7,9 +10,6 @@ use crate::proc::Processor;
use crate::unit::attr::value::{ use crate::unit::attr::value::{
process_attr_value, skip_attr_value, DelimiterType, ProcessedAttrValue, process_attr_value, skip_attr_value, DelimiterType, ProcessedAttrValue,
}; };
use crate::common::gen::attrs::ATTRS;
use crate::common::gen::codepoints::{WHATWG_ATTR_NAME_CHAR, WHITESPACE};
use crate::common::spec::tag::ns::Namespace;
mod value; mod value;

View File

@ -2,6 +2,9 @@ use std::collections::HashMap;
use lazy_static::lazy_static; use lazy_static::lazy_static;
use crate::common::gen::codepoints::{
ATTR_QUOTE, DIGIT, DOUBLE_QUOTE, NOT_UNQUOTED_ATTR_VAL_CHAR, SINGLE_QUOTE, WHITESPACE,
};
use crate::err::ProcessingResult; use crate::err::ProcessingResult;
use crate::proc::checkpoint::WriteCheckpoint; use crate::proc::checkpoint::WriteCheckpoint;
use crate::proc::entity::maybe_normalise_entity; use crate::proc::entity::maybe_normalise_entity;
@ -9,9 +12,6 @@ use crate::proc::range::ProcessorRange;
use crate::proc::MatchAction::*; use crate::proc::MatchAction::*;
use crate::proc::MatchMode::*; use crate::proc::MatchMode::*;
use crate::proc::Processor; use crate::proc::Processor;
use crate::common::gen::codepoints::{
ATTR_QUOTE, DIGIT, DOUBLE_QUOTE, NOT_UNQUOTED_ATTR_VAL_CHAR, SINGLE_QUOTE, WHITESPACE,
};
// See comment in `process_attr_value` for full description of why these intentionally do not have semicolons. // See comment in `process_attr_value` for full description of why these intentionally do not have semicolons.
lazy_static! { lazy_static! {

View File

@ -1,4 +1,10 @@
use crate::cfg::Cfg; use crate::cfg::Cfg;
use crate::common::gen::codepoints::{TAG_NAME_CHAR, WHITESPACE};
use crate::common::spec::tag::ns::Namespace;
use crate::common::spec::tag::omission::{can_omit_as_before, can_omit_as_last_node};
use crate::common::spec::tag::whitespace::{
get_whitespace_minification_for_tag, WhitespaceMinification,
};
use crate::err::ProcessingResult; use crate::err::ProcessingResult;
use crate::proc::checkpoint::ReadCheckpoint; use crate::proc::checkpoint::ReadCheckpoint;
use crate::proc::entity::maybe_normalise_entity; use crate::proc::entity::maybe_normalise_entity;
@ -10,12 +16,6 @@ use crate::unit::bang::process_bang;
use crate::unit::comment::process_comment; use crate::unit::comment::process_comment;
use crate::unit::instruction::process_instruction; use crate::unit::instruction::process_instruction;
use crate::unit::tag::{process_tag, MaybeClosingTag}; use crate::unit::tag::{process_tag, MaybeClosingTag};
use crate::common::gen::codepoints::{TAG_NAME_CHAR, WHITESPACE};
use crate::common::spec::tag::ns::Namespace;
use crate::common::spec::tag::omission::{can_omit_as_before, can_omit_as_last_node};
use crate::common::spec::tag::whitespace::{
get_whitespace_minification_for_tag, WhitespaceMinification,
};
#[derive(Copy, Clone, PartialEq, Eq)] #[derive(Copy, Clone, PartialEq, Eq)]
enum ContentType { enum ContentType {

View File

@ -1,4 +1,9 @@
use crate::cfg::Cfg; use crate::cfg::Cfg;
use crate::common::gen::attrs::{AttributeMinification, ATTRS};
use crate::common::gen::codepoints::{TAG_NAME_CHAR, WHITESPACE};
use crate::common::spec::tag::ns::Namespace;
use crate::common::spec::tag::omission::{can_omit_as_before, can_omit_as_last_node};
use crate::common::spec::tag::void::VOID_TAGS;
use crate::err::{ErrorType, ProcessingResult}; use crate::err::{ErrorType, ProcessingResult};
use crate::proc::checkpoint::{ReadCheckpoint, WriteCheckpoint}; use crate::proc::checkpoint::{ReadCheckpoint, WriteCheckpoint};
use crate::proc::range::ProcessorRange; use crate::proc::range::ProcessorRange;
@ -10,11 +15,6 @@ use crate::unit::content::process_content;
use crate::unit::script::process_script; use crate::unit::script::process_script;
use crate::unit::style::process_style; use crate::unit::style::process_style;
use lazy_static::lazy_static; use lazy_static::lazy_static;
use crate::common::gen::attrs::{AttributeMinification, ATTRS};
use crate::common::gen::codepoints::{TAG_NAME_CHAR, WHITESPACE};
use crate::common::spec::tag::ns::Namespace;
use crate::common::spec::tag::omission::{can_omit_as_before, can_omit_as_last_node};
use crate::common::spec::tag::void::VOID_TAGS;
use std::collections::HashSet; use std::collections::HashSet;
lazy_static! { lazy_static! {