From 1b3431a165309aad3a28a0e8a75755c299561280 Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Fri, 25 Aug 2017 22:04:57 -0700 Subject: LaTeX reader: improved support for \hyperlink, \hypertarget. Closes #2549. --- src/Text/Pandoc/Readers/LaTeX.hs | 29 +++++++++++++++++++++++------ test/command/2549.md | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 6 deletions(-) create mode 100644 test/command/2549.md diff --git a/src/Text/Pandoc/Readers/LaTeX.hs b/src/Text/Pandoc/Readers/LaTeX.hs index ac471bdb1..06e112cef 100644 --- a/src/Text/Pandoc/Readers/LaTeX.hs +++ b/src/Text/Pandoc/Readers/LaTeX.hs @@ -1391,11 +1391,8 @@ inlineCommands = M.fromList $ <|> citation "citeauthor" AuthorInText False) , ("nocite", mempty <$ (citation "nocite" NormalCitation False >>= addMeta "nocite")) - -- hyperlink: for now, we just preserve contents. - -- we might add the actual links, but we need to avoid clashes - -- with ids produced by label. - , ("hypertarget", braced >> tok) - , ("hyperlink", braced >> tok) + , ("hyperlink", hyperlink) + , ("hypertarget", hypertargetInline) -- glossaries package , ("gls", doAcronym "short") , ("Gls", doAcronym "short") @@ -1450,6 +1447,26 @@ inlineCommands = M.fromList $ , ("Rn", romanNumeralLower) ] +hyperlink :: PandocMonad m => LP m Inlines +hyperlink = try $ do + src <- toksToString <$> braced + lab <- tok + return $ link ('#':src) "" lab + +hypertargetBlock :: PandocMonad m => LP m Blocks +hypertargetBlock = try $ do + ref <- toksToString <$> braced + bs <- grouped block + case toList bs of + [Header 1 (ident,_,_) _] | ident == ref -> return bs + _ -> return $ divWith (ref, [], []) bs + +hypertargetInline :: PandocMonad m => LP m Inlines +hypertargetInline = try $ do + ref <- toksToString <$> braced + ils <- grouped inline + return $ spanWith (ref, [], []) ils + romanNumeralUpper :: (PandocMonad m) => LP m Inlines romanNumeralUpper = str . toRomanNumeral <$> romanNumeralArg @@ -1972,7 +1989,7 @@ blockCommands = M.fromList $ , ("setdefaultlanguage", setDefaultLanguage) , ("setmainlanguage", setDefaultLanguage) -- hyperlink - , ("hypertarget", try $ braced >> grouped block) + , ("hypertarget", hypertargetBlock) -- LaTeX colors , ("textcolor", coloredBlock "color") , ("colorbox", coloredBlock "background-color") diff --git a/test/command/2549.md b/test/command/2549.md new file mode 100644 index 000000000..8f4aea852 --- /dev/null +++ b/test/command/2549.md @@ -0,0 +1,38 @@ +``` +% pandoc -f latex -t native +\hypertarget{foo}{% +\section{A section}\label{foo} +} +^D +[Header 1 ("foo",[],[]) [Str "A",Space,Str "section"]] +``` + +``` +% pandoc -f latex -t native +\hypertarget{bar}{% +\section{A section}\label{foo} +} +^D +[Div ("bar",[],[]) + [Header 1 ("foo",[],[]) [Str "A",Space,Str "section"]]] +``` + +``` +% pandoc -f latex -t native +Bar \hypertarget{foo}{Foo} +^D +[Para [Str "Bar",Space,Span ("foo",[],[]) [Str "Foo"]]] +``` + +``` +% pandoc -f latex -t native +\hypertarget{foo}{% +\begin{verbatim} +bar +\end{verbatim} +} +^D +[Div ("foo",[],[]) + [CodeBlock ("",[],[]) "bar"]] +``` + -- cgit v1.2.3