diff options
author | schrieveslaach <schrieveslaach@online.de> | 2017-08-16 19:24:46 +0200 |
---|---|---|
committer | John MacFarlane <jgm@berkeley.edu> | 2017-08-16 10:24:46 -0700 |
commit | cf4b40162d10b17cc7e8fade36c6d2ca9903d9dd (patch) | |
tree | 55dbe2d65d9f2933fff73b38c48f1f23d8dac57d | |
parent | 708bb8afe48e82fd35b1951714ecef1304eb38f7 (diff) | |
download | pandoc-cf4b40162d10b17cc7e8fade36c6d2ca9903d9dd.tar.gz |
LaTeX reader: add Support for `glossaries` and `acronym` package (#3589)
Acronyms are not resolved by the reader, but acronym and glossary information is put into attributes on Spans so that they can be processed in filters.
-rw-r--r-- | src/Text/Pandoc/Readers/LaTeX.hs | 39 | ||||
-rw-r--r-- | test/command/3539.md | 45 |
2 files changed, 84 insertions, 0 deletions
diff --git a/src/Text/Pandoc/Readers/LaTeX.hs b/src/Text/Pandoc/Readers/LaTeX.hs index 986547f42..5627e4ee1 100644 --- a/src/Text/Pandoc/Readers/LaTeX.hs +++ b/src/Text/Pandoc/Readers/LaTeX.hs @@ -702,6 +702,21 @@ enquote = do then singleQuoted <$> withQuoteContext InSingleQuote tok else doubleQuoted <$> withQuoteContext InDoubleQuote tok +doAcronym :: PandocMonad m => String -> LP m Inlines +doAcronym form = do + acro <- braced + return . mconcat $ [spanWith ("",[],[("acronym-label", toksToString acro), + ("acronym-form", "singular+" ++ form)]) + $ str $ toksToString acro] + +doAcronymPlural :: PandocMonad m => String -> LP m Inlines +doAcronymPlural form = do + acro <- braced + plural <- lit "s" + return . mconcat $ [spanWith ("",[],[("acronym-label", toksToString acro), + ("acronym-form", "plural+" ++ form)]) $ mconcat + $ [str $ toksToString acro, plural]] + doverb :: PandocMonad m => LP m Inlines doverb = do Tok _ Symbol t <- anySymbol @@ -1371,6 +1386,30 @@ inlineCommands = M.fromList $ , ("nocite", mempty <$ (citation "nocite" NormalCitation False >>= addMeta "nocite")) , ("hypertarget", braced >> tok) + -- glossaries package + , ("gls", doAcronym "short") + , ("Gls", doAcronym "short") + , ("glsdesc", doAcronym "long") + , ("Glsdesc", doAcronym "long") + , ("GLSdesc", doAcronym "long") + , ("acrlong", doAcronym "long") + , ("Acrlong", doAcronym "long") + , ("acrfull", doAcronym "full") + , ("Acrfull", doAcronym "full") + , ("acrshort", doAcronym "abbrv") + , ("Acrshort", doAcronym "abbrv") + , ("glspl", doAcronymPlural "short") + , ("Glspl", doAcronymPlural "short") + , ("glsdescplural", doAcronymPlural "long") + , ("Glsdescplural", doAcronymPlural "long") + , ("GLSdescplural", doAcronymPlural "long") + -- acronyms package + , ("ac", doAcronym "short") + , ("acf", doAcronym "full") + , ("acs", doAcronym "abbrv") + , ("acp", doAcronymPlural "short") + , ("acfp", doAcronymPlural "full") + , ("acsp", doAcronymPlural "abbrv") -- siuntix , ("SI", dosiunitx) -- hyphenat diff --git a/test/command/3539.md b/test/command/3539.md new file mode 100644 index 000000000..6ef9ffac7 --- /dev/null +++ b/test/command/3539.md @@ -0,0 +1,45 @@ +# Commands of [glossaries package](ftp://ftp.tu-chemnitz.de/pub/tex/macros/latex/contrib/glossaries/glossaries-code.pdf) + +``` +% pandoc -f latex -t native +Many programming languages provide \glspl{API}. Each \gls{API} should provide a documentation. +^D +[Para [Str "Many",Space,Str "programming",Space,Str "languages",Space,Str "provide",Space,Span ("",[],[("acronym-label","API"),("acronym-form","plural+short")]) [Str "APIs"],Str ".",Space,Str "Each",Space,Span ("",[],[("acronym-label","API"),("acronym-form","singular+short")]) [Str "API"],Space,Str "should",Space,Str "provide",Space,Str "a",Space,Str "documentation."]] +``` + +``` +% pandoc -f latex -t native +\Glsdesc{API} XYZ ist not as performant as \glsdesc{API} ZXY. +^D +[Para [Span ("",[],[("acronym-label","API"),("acronym-form","singular+long")]) [Str "API"],Space,Str "XYZ",Space,Str "ist",Space,Str "not",Space,Str "as",Space,Str "performant",Space,Str "as",Space,Span ("",[],[("acronym-label","API"),("acronym-form","singular+long")]) [Str "API"],Space,Str "ZXY."]] +``` + +``` +% pandoc -f latex -t native +\Acrlong{API} XYZ ist not as performant as \acrlong{API} ZXY. +^D +[Para [Span ("",[],[("acronym-label","API"),("acronym-form","singular+long")]) [Str "API"],Space,Str "XYZ",Space,Str "ist",Space,Str "not",Space,Str "as",Space,Str "performant",Space,Str "as",Space,Span ("",[],[("acronym-label","API"),("acronym-form","singular+long")]) [Str "API"],Space,Str "ZXY."]] +``` + +``` +% pandoc -f latex -t native +\Acrfull{API} XYZ ist not as performant as \acrfull{API} ZXY. +^D +[Para [Span ("",[],[("acronym-label","API"),("acronym-form","singular+full")]) [Str "API"],Space,Str "XYZ",Space,Str "ist",Space,Str "not",Space,Str "as",Space,Str "performant",Space,Str "as",Space,Span ("",[],[("acronym-label","API"),("acronym-form","singular+full")]) [Str "API"],Space,Str "ZXY."]] +``` + +``` +% pandoc -f latex -t native +\Acrshort{API} XYZ ist not as performant as \acrshort{API} ZXY. +^D +[Para [Span ("",[],[("acronym-label","API"),("acronym-form","singular+abbrv")]) [Str "API"],Space,Str "XYZ",Space,Str "ist",Space,Str "not",Space,Str "as",Space,Str "performant",Space,Str "as",Space,Span ("",[],[("acronym-label","API"),("acronym-form","singular+abbrv")]) [Str "API"],Space,Str "ZXY."]] +``` + +# Commands of [acronym package](ftp://ftp.mpi-sb.mpg.de/pub/tex/mirror/ftp.dante.de/pub/tex/macros/latex/contrib/acronym/acronym.pdf) + +``` +% pandoc -f latex -t native +Many programming languages provide \acp{API}. Each \ac{API} should provide a documentation. +^D +[Para [Str "Many",Space,Str "programming",Space,Str "languages",Space,Str "provide",Space,Span ("",[],[("acronym-label","API"),("acronym-form","plural+short")]) [Str "APIs"],Str ".",Space,Str "Each",Space,Span ("",[],[("acronym-label","API"),("acronym-form","singular+short")]) [Str "API"],Space,Str "should",Space,Str "provide",Space,Str "a",Space,Str "documentation."]] +``` |