summaryrefslogtreecommitdiff
path: root/docs/src/html.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2024-03-04 15:51:22 +0100
committerGitHub <noreply@github.com>2024-03-04 14:51:22 +0000
commite3bd39c9d156a4a02a8b7398ed5769100a3d877a (patch)
treef793037b515289f158a2b69dce3b516127c6b3fa /docs/src/html.rs
parentb005dc37e5f7e2f519edc1f607f6ba3ab810ec26 (diff)
Add support for shortcut links in docs (#3547)
Diffstat (limited to 'docs/src/html.rs')
-rw-r--r--docs/src/html.rs28
1 files changed, 26 insertions, 2 deletions
diff --git a/docs/src/html.rs b/docs/src/html.rs
index 912ad367..bb6204a3 100644
--- a/docs/src/html.rs
+++ b/docs/src/html.rs
@@ -59,9 +59,27 @@ impl Html {
| md::Options::ENABLE_STRIKETHROUGH
| md::Options::ENABLE_HEADING_ATTRIBUTES;
+ // Convert `[foo]` to `[foo]($foo)`.
+ let mut link = |broken: md::BrokenLink| {
+ assert_eq!(
+ broken.link_type,
+ md::LinkType::Shortcut,
+ "unsupported link type: {:?}",
+ broken.link_type,
+ );
+
+ Some((
+ format!("${}", broken.reference.trim_matches('`')).into(),
+ broken.reference.into_string().into(),
+ ))
+ };
+
let ids = Arena::new();
let mut handler = Handler::new(text, resolver, nesting, &ids);
- let mut events = md::Parser::new_ext(text, options).peekable();
+ let mut events =
+ md::Parser::new_with_broken_link_callback(text, options, Some(&mut link))
+ .peekable();
+
let iter = std::iter::from_fn(|| loop {
let mut event = events.next()?;
handler.peeked = events.peek().and_then(|event| match event {
@@ -199,7 +217,13 @@ impl<'a> Handler<'a> {
// Rewrite links.
md::Event::Start(md::Tag::Link(ty, dest, _)) => {
assert!(
- matches!(ty, md::LinkType::Inline | md::LinkType::Reference),
+ matches!(
+ ty,
+ md::LinkType::Inline
+ | md::LinkType::Reference
+ | md::LinkType::ShortcutUnknown
+ | md::LinkType::Autolink
+ ),
"unsupported link type: {ty:?}",
);