diff options
| author | Laurenz <laurmaedje@gmail.com> | 2023-06-12 15:40:43 +0200 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2023-06-12 15:42:01 +0200 |
| commit | 378ebe5f5601f11c3f428c17bed492012feb251e (patch) | |
| tree | 4530bf009844faca40ca4fd6d0b9251fd51ef587 /library/src/meta/link.rs | |
| parent | 19bf1f58944a42f17903869c162a33aba22b80b0 (diff) | |
Delayed errors
Fixes #785. Thanks to @Dherse for the idea!
Diffstat (limited to 'library/src/meta/link.rs')
| -rw-r--r-- | library/src/meta/link.rs | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/library/src/meta/link.rs b/library/src/meta/link.rs index 43f6a34d..c3d8718c 100644 --- a/library/src/meta/link.rs +++ b/library/src/meta/link.rs @@ -91,21 +91,18 @@ impl Show for LinkElem { #[tracing::instrument(name = "LinkElem::show", skip(self, vt))] fn show(&self, vt: &mut Vt, _: StyleChain) -> SourceResult<Content> { let body = self.body(); - let dest = match self.dest() { - LinkTarget::Dest(dest) => dest, - LinkTarget::Label(label) => { - if !vt.introspector.init() { - return Ok(body); - } - - let elem = vt.introspector.query_label(&label).at(self.span())?; - Destination::Location(elem.location().unwrap()) - } + let linked = match self.dest() { + LinkTarget::Dest(dest) => body.linked(dest), + LinkTarget::Label(label) => vt + .delayed(|vt| { + let elem = vt.introspector.query_label(&label).at(self.span())?; + let dest = Destination::Location(elem.location().unwrap()); + Ok(Some(body.clone().linked(dest))) + }) + .unwrap_or(body), }; - Ok(body - .linked(dest) - .styled(TextElem::set_hyphenate(Hyphenate(Smart::Custom(false))))) + Ok(linked.styled(TextElem::set_hyphenate(Hyphenate(Smart::Custom(false))))) } } |
