Formatting
This commit is contained in:
parent
3b6c22088e
commit
19abe390d4
|
@ -43,7 +43,7 @@ const averageChartOptions = (label) => ({
|
|||
type: "linear",
|
||||
scaleLabel: {
|
||||
display: true,
|
||||
fontColor: '#222',
|
||||
fontColor: "#222",
|
||||
fontSize: 24,
|
||||
fontStyle: "bold",
|
||||
labelString: label,
|
||||
|
@ -145,7 +145,12 @@ const renderChart = (cfg, width, height) =>
|
|||
await fs.mkdir(GRAPHS_DIR, { recursive: true });
|
||||
|
||||
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 inputs = Object.keys(res.inputSizes).sort();
|
||||
|
||||
|
@ -208,11 +213,14 @@ const renderChart = (cfg, width, height) =>
|
|||
label: minifier,
|
||||
data: inputs.map(
|
||||
(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,
|
||||
1600
|
||||
|
@ -228,7 +236,11 @@ const renderChart = (cfg, width, height) =>
|
|||
labels: inputs,
|
||||
datasets: sizeMinifiers.map((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"),
|
||||
|
|
|
@ -1,13 +1,19 @@
|
|||
use std::{env, fs};
|
||||
use std::io::stdout;
|
||||
use std::time::Instant;
|
||||
use std::{env, fs};
|
||||
|
||||
use minify_html_onepass::{Cfg, in_place};
|
||||
use minify_html_onepass::{in_place, Cfg};
|
||||
|
||||
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 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());
|
||||
|
||||
|
@ -24,10 +30,15 @@ fn main() {
|
|||
for _ in 0..iterations {
|
||||
let mut data = source.to_vec();
|
||||
len = in_place(&mut data, &cfg).expect("failed to minify");
|
||||
};
|
||||
}
|
||||
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();
|
||||
}
|
||||
|
|
|
@ -1,13 +1,19 @@
|
|||
use std::{env, fs};
|
||||
use std::io::stdout;
|
||||
use std::time::Instant;
|
||||
use std::{env, fs};
|
||||
|
||||
use minify_html::{Cfg, minify};
|
||||
use minify_html::{minify, Cfg};
|
||||
|
||||
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 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());
|
||||
|
||||
|
@ -24,10 +30,15 @@ fn main() {
|
|||
let mut len = 0;
|
||||
for _ in 0..iterations {
|
||||
len = minify(&source, &cfg).len();
|
||||
};
|
||||
}
|
||||
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();
|
||||
}
|
||||
|
|
|
@ -74,7 +74,8 @@ fn main() {
|
|||
let out_code = minify(
|
||||
&src_code,
|
||||
&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_comments: args.keep_comments,
|
||||
keep_html_and_head_opening_tags: args.keep_html_and_head_opening_tags,
|
||||
|
|
|
@ -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
|
|
@ -1,7 +1,7 @@
|
|||
use minify_html;
|
||||
use std::fs;
|
||||
use std::io::{self, Write};
|
||||
use std::panic;
|
||||
use minify_html;
|
||||
|
||||
fn main() {
|
||||
for dirent in fs::read_dir("../out/crashes").unwrap() {
|
||||
|
@ -9,9 +9,7 @@ fn main() {
|
|||
let path_in_catch = path.clone();
|
||||
let res = panic::catch_unwind(|| {
|
||||
let mut contents = fs::read(path_in_catch).unwrap();
|
||||
let _ = minify_html::in_place(&mut contents, &minify_html::Cfg {
|
||||
minify_js: false,
|
||||
});
|
||||
let _ = minify_html::in_place(&mut contents, &minify_html::Cfg { minify_js: false });
|
||||
});
|
||||
if res.is_err() {
|
||||
let contents = fs::read(path).unwrap();
|
||||
|
@ -19,5 +17,5 @@ fn main() {
|
|||
break;
|
||||
};
|
||||
fs::remove_file(path).unwrap();
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
@ -49,7 +49,15 @@ const SINGLE_QUOTE = [c("'")];
|
|||
// Official characters allowed in an attribute name.
|
||||
// NOTE: Unicode noncharacters not tested.
|
||||
// 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.
|
||||
// See https://html.spec.whatwg.org/multipage/introduction.html#intro-early-example for spec.
|
||||
// Backtick is not a valid quote character according to spec.
|
||||
|
|
|
@ -1,14 +1,9 @@
|
|||
{
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"format": "prettier -w '*.{ts,json}'"
|
||||
},
|
||||
"dependencies": {
|
||||
"@types/node": "^14.0.5",
|
||||
"@wzlin/html-data": "^2021080714.0.0",
|
||||
"prettier": "2.3.2",
|
||||
"ts-node": "^8.10.1",
|
||||
"typescript": "^3.7.4",
|
||||
"yaml": "^1.10.0"
|
||||
"typescript": "^3.7.4"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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::objects::{ JClass, JObject, JString};
|
||||
use jni::sys::{ jstring};
|
||||
use minify_html::{minify as minify_html_native, Cfg};
|
||||
use std::str::from_utf8;
|
||||
|
||||
fn build_cfg(
|
||||
env: &JNIEnv,
|
||||
obj: &JObject,
|
||||
) -> Cfg {
|
||||
fn build_cfg(env: &JNIEnv, obj: &JObject) -> Cfg {
|
||||
Cfg {
|
||||
ensure_spec_compliant_unquoted_attribute_values: env.get_field(*obj, "ensure_spec_compliant_unquoted_attribute_values", "Z").unwrap().z().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(),
|
||||
ensure_spec_compliant_unquoted_attribute_values: env
|
||||
.get_field(*obj, "ensure_spec_compliant_unquoted_attribute_values", "Z")
|
||||
.unwrap()
|
||||
.z()
|
||||
.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_js: env.get_field(*obj, "minify_js", "Z").unwrap().z().unwrap(),
|
||||
remove_bangs: env.get_field(*obj, "remove_bangs", "Z").unwrap().z().unwrap(),
|
||||
remove_processing_instructions: env.get_field(*obj, "remove_processing_instructions", "Z").unwrap().z().unwrap(),
|
||||
remove_bangs: env
|
||||
.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,
|
||||
input: JString,
|
||||
cfg: JObject,
|
||||
)
|
||||
-> jstring {
|
||||
) -> jstring {
|
||||
let source: String = env.get_string(input).unwrap().into();
|
||||
let code = source.into_bytes();
|
||||
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
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::parse::content::parse_content;
|
||||
use crate::parse::Code;
|
||||
use crate::common::spec::tag::ns::Namespace;
|
||||
use crate::common::spec::tag::EMPTY_SLICE;
|
||||
|
||||
mod ast;
|
||||
mod cfg;
|
||||
|
|
|
@ -6,14 +6,14 @@ use {
|
|||
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::codepoints::DIGIT;
|
||||
use crate::common::pattern::Replacer;
|
||||
use crate::common::spec::script::JAVASCRIPT_MIME_TYPES;
|
||||
use crate::common::spec::tag::ns::Namespace;
|
||||
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 {
|
||||
let mut patterns = Vec::<Vec<u8>>::new();
|
||||
|
|
|
@ -3,6 +3,12 @@ use lazy_static::lazy_static;
|
|||
|
||||
use crate::ast::{NodeData, ScriptOrStyleLang};
|
||||
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::minify::bang::minify_bang;
|
||||
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::instruction::minify_instruction;
|
||||
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 {
|
||||
let mut patterns = Vec::<Vec<u8>>::new();
|
||||
|
|
|
@ -2,10 +2,10 @@ use std::collections::HashMap;
|
|||
|
||||
use crate::ast::{ElementClosingTag, NodeData};
|
||||
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::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)]
|
||||
enum LastAttr {
|
||||
|
|
|
@ -3,6 +3,10 @@ use lazy_static::lazy_static;
|
|||
use memchr::memrchr;
|
||||
|
||||
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::parse::bang::parse_bang;
|
||||
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::instruction::parse_instruction;
|
||||
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)]
|
||||
enum ContentType {
|
||||
|
|
|
@ -1,13 +1,6 @@
|
|||
use std::collections::HashMap;
|
||||
|
||||
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::{
|
||||
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,
|
||||
|
@ -15,6 +8,13 @@ use crate::common::gen::codepoints::{
|
|||
use crate::common::spec::script::JAVASCRIPT_MIME_TYPES;
|
||||
use crate::common::spec::tag::ns::Namespace;
|
||||
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::str::from_utf8;
|
||||
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
use std::collections::HashMap;
|
||||
|
||||
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::EMPTY_SLICE;
|
||||
use crate::parse::element::{parse_element, parse_tag, ParsedTag};
|
||||
use crate::parse::Code;
|
||||
|
||||
#[test]
|
||||
fn test_parse_tag() {
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
pub use crate::cfg::Cfg;
|
||||
use crate::common::spec::tag::ns::Namespace;
|
||||
use crate::err::debug_repr;
|
||||
pub use crate::err::{Error, ErrorType, FriendlyError};
|
||||
use crate::proc::Processor;
|
||||
use crate::unit::content::process_content;
|
||||
use crate::common::spec::tag::ns::Namespace;
|
||||
|
||||
mod cfg;
|
||||
mod common;
|
||||
|
|
|
@ -15,12 +15,12 @@
|
|||
|
||||
use std::char::from_u32;
|
||||
|
||||
use crate::proc::Processor;
|
||||
use crate::common::gen::codepoints::{
|
||||
Lookup, ALPHANUMERIC_OR_EQUALS, DIGIT, HEX_DIGIT, LOWER_HEX_ALPHA, UPPER_HEX_ALPHA,
|
||||
};
|
||||
use crate::common::gen::entities::{EntityType, ENTITY};
|
||||
use crate::common::pattern::TrieNodeMatch;
|
||||
use crate::proc::Processor;
|
||||
|
||||
enum Parsed {
|
||||
// This includes numeric entities that were invalid and decoded to 0xFFFD.
|
||||
|
|
|
@ -11,12 +11,12 @@ use {
|
|||
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::proc::range::ProcessorRange;
|
||||
use crate::proc::MatchAction::*;
|
||||
use crate::proc::MatchMode::*;
|
||||
use crate::common::gen::codepoints::Lookup;
|
||||
use crate::common::spec::tag::EMPTY_SLICE;
|
||||
|
||||
pub mod checkpoint;
|
||||
pub mod entity;
|
||||
|
|
|
@ -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::proc::checkpoint::WriteCheckpoint;
|
||||
use crate::proc::range::ProcessorRange;
|
||||
|
@ -7,9 +10,6 @@ use crate::proc::Processor;
|
|||
use crate::unit::attr::value::{
|
||||
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;
|
||||
|
||||
|
|
|
@ -2,6 +2,9 @@ use std::collections::HashMap;
|
|||
|
||||
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::proc::checkpoint::WriteCheckpoint;
|
||||
use crate::proc::entity::maybe_normalise_entity;
|
||||
|
@ -9,9 +12,6 @@ use crate::proc::range::ProcessorRange;
|
|||
use crate::proc::MatchAction::*;
|
||||
use crate::proc::MatchMode::*;
|
||||
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.
|
||||
lazy_static! {
|
||||
|
|
|
@ -1,4 +1,10 @@
|
|||
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::proc::checkpoint::ReadCheckpoint;
|
||||
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::instruction::process_instruction;
|
||||
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)]
|
||||
enum ContentType {
|
||||
|
|
|
@ -1,4 +1,9 @@
|
|||
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::proc::checkpoint::{ReadCheckpoint, WriteCheckpoint};
|
||||
use crate::proc::range::ProcessorRange;
|
||||
|
@ -10,11 +15,6 @@ use crate::unit::content::process_content;
|
|||
use crate::unit::script::process_script;
|
||||
use crate::unit::style::process_style;
|
||||
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;
|
||||
|
||||
lazy_static! {
|
||||
|
|
Loading…
Reference in New Issue