diff options
author | John MacFarlane <jgm@berkeley.edu> | 2020-05-12 14:36:43 -0700 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2020-05-12 14:37:07 -0700 |
commit | be9e93d4aeb37db8e07d2735527f9afc324ac70d (patch) | |
tree | 34e73003803a66112e81a754033ae7601c57e0c7 /src/Text | |
parent | 46179d5b3e84b5c709e09924cbda524230ebd3fe (diff) | |
download | pandoc-be9e93d4aeb37db8e07d2735527f9afc324ac70d.tar.gz |
LaTeX writer: create hypertarget for links with identifier.
Closes #6360.
Diffstat (limited to 'src/Text')
-rw-r--r-- | src/Text/Pandoc/Writers/LaTeX.hs | 50 |
1 files changed, 27 insertions, 23 deletions
diff --git a/src/Text/Pandoc/Writers/LaTeX.hs b/src/Text/Pandoc/Writers/LaTeX.hs index 021ef2645..0c73918d3 100644 --- a/src/Text/Pandoc/Writers/LaTeX.hs +++ b/src/Text/Pandoc/Writers/LaTeX.hs @@ -1282,29 +1282,33 @@ inlineToLaTeX SoftBreak = do WrapNone -> return space WrapPreserve -> return cr inlineToLaTeX Space = return space -inlineToLaTeX (Link _ txt (src,_)) - | Just ('#', ident) <- T.uncons src - = do - contents <- inlineListToLaTeX txt - lab <- toLabel ident - return $ text "\\protect\\hyperlink" <> braces (literal lab) <> braces contents - | otherwise = - case txt of - [Str x] | unEscapeString (T.unpack x) == unEscapeString (T.unpack src) -> -- autolink - do modify $ \s -> s{ stUrl = True } - src' <- stringToLaTeX URLString (escapeURI src) - return $ literal $ "\\url{" <> src' <> "}" - [Str x] | Just rest <- T.stripPrefix "mailto:" src, - unEscapeString (T.unpack x) == unEscapeString (T.unpack rest) -> -- email autolink - do modify $ \s -> s{ stUrl = True } - src' <- stringToLaTeX URLString (escapeURI src) - contents <- inlineListToLaTeX txt - return $ "\\href" <> braces (literal src') <> - braces ("\\nolinkurl" <> braces contents) - _ -> do contents <- inlineListToLaTeX txt - src' <- stringToLaTeX URLString (escapeURI src) - return $ literal ("\\href{" <> src' <> "}{") <> - contents <> char '}' +inlineToLaTeX (Link (id',_,_) txt (src,_)) = + (case T.uncons src of + Just ('#', ident) -> do + contents <- inlineListToLaTeX txt + lab <- toLabel ident + return $ text "\\protect\\hyperlink" <> braces (literal lab) <> braces contents + _ -> case txt of + [Str x] | unEscapeString (T.unpack x) == unEscapeString (T.unpack src) -> -- autolink + do modify $ \s -> s{ stUrl = True } + src' <- stringToLaTeX URLString (escapeURI src) + return $ literal $ "\\url{" <> src' <> "}" + [Str x] | Just rest <- T.stripPrefix "mailto:" src, + unEscapeString (T.unpack x) == unEscapeString (T.unpack rest) -> -- email autolink + do modify $ \s -> s{ stUrl = True } + src' <- stringToLaTeX URLString (escapeURI src) + contents <- inlineListToLaTeX txt + return $ "\\href" <> braces (literal src') <> + braces ("\\nolinkurl" <> braces contents) + _ -> do contents <- inlineListToLaTeX txt + src' <- stringToLaTeX URLString (escapeURI src) + return $ literal ("\\href{" <> src' <> "}{") <> + contents <> char '}') + >>= (if T.null id' + then return + else \x -> do + linkAnchor <- hypertarget False id' x + return ("\\protect" <> linkAnchor)) inlineToLaTeX il@(Image _ _ (src, _)) | Just _ <- T.stripPrefix "data:" src = do report $ InlineNotRendered il |