mirror of
https://github.com/rust-lang/book.git
synced 2026-04-02 16:27:15 -04:00
infra: use mdbook::utils::new_cmark_parser in preprocessors
This guarantees we use the exact same config mdBook does, preventing a class of bugs where we renderer something different than the baseline output would simply because we are preprocessing.
This commit is contained in:
1170
packages/mdbook-trpl-listing/Cargo.lock
generated
Normal file
1170
packages/mdbook-trpl-listing/Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -2,9 +2,10 @@ use mdbook::{
|
||||
book::Book,
|
||||
errors::Result,
|
||||
preprocess::{Preprocessor, PreprocessorContext},
|
||||
utils::new_cmark_parser,
|
||||
BookItem,
|
||||
};
|
||||
use pulldown_cmark::{html, Event, Parser};
|
||||
use pulldown_cmark::{html, Event};
|
||||
use pulldown_cmark_to_cmark::cmark;
|
||||
use xmlparser::{Token, Tokenizer};
|
||||
|
||||
@@ -138,7 +139,7 @@ impl TryFrom<&str> for Mode {
|
||||
}
|
||||
|
||||
fn rewrite_listing(src: &str, mode: Mode) -> Result<String, String> {
|
||||
let parser = Parser::new(src);
|
||||
let parser = new_cmark_parser(src, true);
|
||||
|
||||
struct State<'e> {
|
||||
current_listing: Option<Listing>,
|
||||
@@ -339,7 +340,7 @@ impl<'a> ListingBuilder<'a> {
|
||||
let caption = self
|
||||
.caption
|
||||
.map(|caption_source| {
|
||||
let events = Parser::new(caption_source);
|
||||
let events = new_cmark_parser(caption_source, true);
|
||||
let mut buf = String::with_capacity(caption_source.len() * 2);
|
||||
html::push_html(&mut buf, events);
|
||||
|
||||
|
||||
1087
packages/mdbook-trpl-note/Cargo.lock
generated
Normal file
1087
packages/mdbook-trpl-note/Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -2,11 +2,12 @@ use mdbook::{
|
||||
book::Book,
|
||||
errors::Result,
|
||||
preprocess::{Preprocessor, PreprocessorContext},
|
||||
utils::new_cmark_parser,
|
||||
BookItem,
|
||||
};
|
||||
use pulldown_cmark::{
|
||||
Event::{self, *},
|
||||
Parser, Tag, TagEnd,
|
||||
Tag, TagEnd,
|
||||
};
|
||||
use pulldown_cmark_to_cmark::cmark;
|
||||
|
||||
@@ -53,7 +54,7 @@ impl Preprocessor for TrplNote {
|
||||
}
|
||||
|
||||
pub fn rewrite(text: &str) -> String {
|
||||
let parser = Parser::new(text);
|
||||
let parser = new_cmark_parser(text, true);
|
||||
|
||||
let mut events = Vec::new();
|
||||
let mut state = Default;
|
||||
@@ -301,8 +302,43 @@ mod tests {
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn normal_table() {
|
||||
let text = "| Header 1 | Header 2 |\n| -------- | -------- |\n| Text 123 | More 456 |";
|
||||
let processed = rewrite(text);
|
||||
|
||||
assert_eq!(
|
||||
processed,
|
||||
"|Header 1|Header 2|\n|--------|--------|\n|Text 123|More 456|",
|
||||
"It strips some whitespace but otherwise leaves the table intact."
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn table_in_note() {
|
||||
let text = "> Note: table stuff.\n\n| Header 1 | Header 2 |\n| -------- | -------- |\n| Text 123 | More 456 |";
|
||||
let processed = rewrite(text);
|
||||
|
||||
assert_eq!(
|
||||
processed,
|
||||
"\n\n<section class=\"note\" aria-role=\"note\">\n\nNote: table stuff.\n\n</section>\n\n|Header 1|Header 2|\n|--------|--------|\n|Text 123|More 456|",
|
||||
"It adds the note markup but leaves the table untouched, to be rendered as Markdown."
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn table_in_quote() {
|
||||
let text = "> A table.\n\n| Header 1 | Header 2 |\n| -------- | -------- |\n| Text 123 | More 456 |";
|
||||
let processed = rewrite(text);
|
||||
assert_eq!(
|
||||
render_markdown(&processed),
|
||||
"<blockquote>\n<p>A table.</p>\n</blockquote>\n<table><thead><tr><th>Header 1</th><th>Header 2</th></tr></thead><tbody>\n<tr><td>Text 123</td><td>More 456</td></tr>\n</tbody></table>\n",
|
||||
"It renders blockquotes with nested tables as expected."
|
||||
);
|
||||
}
|
||||
|
||||
fn render_markdown(text: &str) -> String {
|
||||
let parser = Parser::new(text);
|
||||
let parser = new_cmark_parser(text, true);
|
||||
let mut buf = String::new();
|
||||
pulldown_cmark::html::push_html(&mut buf, parser);
|
||||
buf
|
||||
|
||||
Reference in New Issue
Block a user