Do not minify any whitespace in any descendants of <pre>
This commit is contained in:
parent
83efa7e8a8
commit
55eab19bbe
|
@ -40,7 +40,7 @@ mod unit;
|
|||
/// ```
|
||||
pub fn in_place(code: &mut [u8], cfg: &Cfg) -> Result<usize, Error> {
|
||||
let mut proc = Processor::new(code);
|
||||
process_content(&mut proc, cfg, Namespace::Html, None)
|
||||
process_content(&mut proc, cfg, Namespace::Html, None, false)
|
||||
.and_then(|_| if !proc.at_end() {
|
||||
Err(ErrorType::UnexpectedClosingTag)
|
||||
} else {
|
||||
|
|
|
@ -166,9 +166,13 @@ lazy_static! {
|
|||
}
|
||||
|
||||
#[inline(always)]
|
||||
pub fn get_whitespace_minification_for_tag(tag_name: Option<&[u8]>) -> &'static WhitespaceMinification {
|
||||
match tag_name {
|
||||
Some(n) => TAG_WHITESPACE_MINIFICATION.get(n).unwrap_or(&DEFAULT),
|
||||
None => ROOT,
|
||||
pub fn get_whitespace_minification_for_tag(tag_name: Option<&[u8]>, descendant_of_pre: bool) -> &'static WhitespaceMinification {
|
||||
if descendant_of_pre {
|
||||
WHITESPACE_SENSITIVE
|
||||
} else {
|
||||
match tag_name {
|
||||
Some(n) => TAG_WHITESPACE_MINIFICATION.get(n).unwrap_or(&DEFAULT),
|
||||
None => ROOT,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -90,6 +90,9 @@ fn test_no_whitespace_minification() {
|
|||
eval(b"<pre> \n  \t </pre>", b"<pre> \n \t </pre>");
|
||||
// Tag names should be case insensitive.
|
||||
eval(b"<pRe> \n  \t </PRE>", b"<pre> \n \t </pre>");
|
||||
eval(b"<pre> <span> 1 2 </span> </pre>", b"<pre> <span> 1 2 </span> </pre>");
|
||||
eval(b"<pre> <span> 1 <pre>\n</pre> 2 </span> </pre>", b"<pre> <span> 1 <pre>\n</pre> 2 </span> </pre>");
|
||||
eval(b"<div> <pre> <span> 1 <pre>\n</pre> 2 </span> </pre> </div>", b"<div><pre> <span> 1 <pre>\n</pre> 2 </span> </pre></div>");
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
|
@ -51,8 +51,8 @@ pub struct ProcessedContent {
|
|||
pub closing_tag_omitted: bool,
|
||||
}
|
||||
|
||||
pub fn process_content(proc: &mut Processor, cfg: &Cfg, ns: Namespace, parent: Option<ProcessorRange>) -> ProcessingResult<ProcessedContent> {
|
||||
let &WhitespaceMinification { collapse, destroy_whole, trim } = get_whitespace_minification_for_tag(parent.map(|r| &proc[r]));
|
||||
pub fn process_content(proc: &mut Processor, cfg: &Cfg, ns: Namespace, parent: Option<ProcessorRange>, descendant_of_pre: bool) -> ProcessingResult<ProcessedContent> {
|
||||
let &WhitespaceMinification { collapse, destroy_whole, trim } = get_whitespace_minification_for_tag(parent.map(|r| &proc[r]), descendant_of_pre);
|
||||
|
||||
let handle_ws = collapse || destroy_whole || trim;
|
||||
|
||||
|
@ -134,7 +134,7 @@ pub fn process_content(proc: &mut Processor, cfg: &Cfg, ns: Namespace, parent: O
|
|||
});
|
||||
};
|
||||
|
||||
let new_closing_tag = process_tag(proc, cfg, ns, parent, prev_sibling_closing_tag, tag_name)?;
|
||||
let new_closing_tag = process_tag(proc, cfg, ns, parent, ns == Namespace::Html && parent.filter(|p| &proc[*p] == b"pre").is_some(), prev_sibling_closing_tag, tag_name)?;
|
||||
prev_sibling_closing_tag.replace(new_closing_tag);
|
||||
}
|
||||
ContentType::End => {
|
||||
|
|
|
@ -99,6 +99,7 @@ pub fn process_tag(
|
|||
cfg: &Cfg,
|
||||
ns: Namespace,
|
||||
parent: Option<ProcessorRange>,
|
||||
descendant_of_pre: bool,
|
||||
mut prev_sibling_closing_tag: MaybeClosingTag,
|
||||
source_tag_name: ProcessorRange,
|
||||
) -> ProcessingResult<MaybeClosingTag> {
|
||||
|
@ -212,7 +213,7 @@ pub fn process_tag(
|
|||
TagType::ScriptData => process_script(proc, cfg, false)?,
|
||||
TagType::ScriptJs => process_script(proc, cfg, true)?,
|
||||
TagType::Style => process_style(proc, cfg)?,
|
||||
_ => closing_tag_omitted = process_content(proc, cfg, child_ns, Some(tag_name))?.closing_tag_omitted,
|
||||
_ => closing_tag_omitted = process_content(proc, cfg, child_ns, Some(tag_name), descendant_of_pre)?.closing_tag_omitted,
|
||||
};
|
||||
|
||||
let can_omit_closing_tag = can_omit_as_last_node(proc, parent, source_tag_name);
|
||||
|
|
Loading…
Reference in New Issue