diff --git a/docs/src/html.rs b/docs/src/html.rs
index e0b524ce0..d02f768e3 100644
--- a/docs/src/html.rs
+++ b/docs/src/html.rs
@@ -124,6 +124,7 @@ struct Metadata {
struct Handler<'a> {
resolver: &'a dyn Resolver,
lang: Option,
+ code: String,
outline: Vec,
id_base: String,
ids: &'a Arena,
@@ -134,6 +135,7 @@ impl<'a> Handler<'a> {
Self {
resolver,
lang: None,
+ code: String::new(),
outline: vec![],
id_base,
ids,
@@ -141,7 +143,6 @@ impl<'a> Handler<'a> {
}
fn handle(&mut self, event: &mut md::Event<'a>) -> bool {
- let lang = self.lang.take();
match event {
// Rewrite Markdown images.
md::Event::Start(md::Tag::Image(_, path, _)) => {
@@ -207,17 +208,21 @@ impl<'a> Handler<'a> {
// Code blocks.
md::Event::Start(md::Tag::CodeBlock(md::CodeBlockKind::Fenced(lang))) => {
self.lang = Some(lang.as_ref().into());
+ self.code = String::new();
return false;
}
md::Event::End(md::Tag::CodeBlock(md::CodeBlockKind::Fenced(_))) => {
- return false;
+ let Some(lang) = self.lang.take() else { return false };
+ let html = code_block(self.resolver, &lang, &self.code);
+ *event = md::Event::Html(html.raw.into());
}
// Example with preview.
md::Event::Text(text) => {
- let Some(lang) = lang.as_deref() else { return true };
- let html = code_block(self.resolver, lang, text);
- *event = md::Event::Html(html.raw.into());
+ if self.lang.is_some() {
+ self.code.push_str(text);
+ return false;
+ }
}
_ => {}
diff --git a/tests/src/tests.rs b/tests/src/tests.rs
index c2d0cc686..61414daa6 100644
--- a/tests/src/tests.rs
+++ b/tests/src/tests.rs
@@ -378,7 +378,11 @@ fn test(
let mut compare_ever = false;
let mut rng = LinearShift::new();
- let parts: Vec<_> = text.split("\n---").collect();
+ let parts: Vec<_> = text
+ .split("\n---")
+ .map(|s| s.strip_suffix('\r').unwrap_or(s))
+ .collect();
+
for (i, &part) in parts.iter().enumerate() {
if let Some(x) = args.subtest {
let x = usize::try_from(