diff options
| author | John MacFarlane <[email protected]> | 2023-11-29 21:22:03 -0800 |
|---|---|---|
| committer | John MacFarlane <[email protected]> | 2023-11-29 21:22:03 -0800 |
| commit | 80ea048bb26fdf50dbfe767d130054cf2dfc7d57 (patch) | |
| tree | 0e8f758443f4052213447a8dea0b95f1852f27e3 | |
| parent | 2e8ecb3fba62723fe39599f9f0cb7f7a30a5ca19 (diff) | |
LaTeX reader: handle otherlanguage environment...
...and language-name environments like
`\begin{french}...\end{french}`.
Closes #9202.
| -rw-r--r-- | src/Text/Pandoc/Readers/LaTeX.hs | 20 | ||||
| -rw-r--r-- | test/command/9202.md | 62 |
2 files changed, 81 insertions, 1 deletions
diff --git a/src/Text/Pandoc/Readers/LaTeX.hs b/src/Text/Pandoc/Readers/LaTeX.hs index 34c36d1bc..4714462fb 100644 --- a/src/Text/Pandoc/Readers/LaTeX.hs +++ b/src/Text/Pandoc/Readers/LaTeX.hs @@ -61,7 +61,8 @@ import Text.Pandoc.Readers.LaTeX.Table (tableEnvironments) import Text.Pandoc.Readers.LaTeX.Macro (macroDef) import Text.Pandoc.Readers.LaTeX.Lang (inlineLanguageCommands, enquoteCommands, - babelLangToBCP47, setDefaultLanguage) + babelLangToBCP47, + setDefaultLanguage) import Text.Pandoc.Readers.LaTeX.SIunitx (siunitxCommands) import Text.Pandoc.Readers.LaTeX.Inline (acronymCommands, refCommands, nameCommands, charCommands, @@ -1045,8 +1046,24 @@ environments = M.union (tableEnvironments blocks inline) $ , ("togglefalse", braced >>= setToggle False) , ("iftoggle", try $ ifToggle >> block) , ("CSLReferences", braced >> braced >> env "CSLReferences" blocks) + , ("otherlanguage", env "otherlanguage" otherlanguageEnv) ] +otherlanguageEnv :: PandocMonad m => LP m Blocks +otherlanguageEnv = do + skipopts + babelLang <- untokenize <$> braced + case babelLangToBCP47 babelLang of + Just lang -> divWith ("", [], [("lang", renderLang lang)]) <$> blocks + Nothing -> blocks + +langEnvironment :: PandocMonad m => Text -> LP m Blocks +langEnvironment name = + case babelLangToBCP47 name of + Just lang -> + env name (divWith ("", [], [("lang", renderLang lang)]) <$> blocks) + Nothing -> mzero -- fall through to raw environment + filecontents :: PandocMonad m => LP m Blocks filecontents = try $ do controlSeq "begin" @@ -1064,6 +1081,7 @@ environment = try $ do controlSeq "begin" name <- untokenize <$> braced M.findWithDefault mzero name environments <|> + langEnvironment name <|> theoremEnvironment blocks opt name <|> if M.member name (inlineEnvironments :: M.Map Text (LP PandocPure Inlines)) diff --git a/test/command/9202.md b/test/command/9202.md new file mode 100644 index 000000000..c8096f695 --- /dev/null +++ b/test/command/9202.md @@ -0,0 +1,62 @@ +``` +% pandoc -f latex -t native +\begin{otherlanguage}{french} +Bonjour. +\end{otherlanguage} +^D +[ Div + ( "" , [] , [ ( "lang" , "fr" ) ] ) + [ Para [ Str "Bonjour." ] ] +] +``` + +``` +% pandoc -f latex -t native +\begin{otherlanguage*}{french} +Bonjour. +\end{otherlanguage*} +^D +[ Div + ( "" , [ "otherlanguage*" ] , [] ) + [ Para + [ Span ( "" , [] , [] ) [ Str "french" ] + , SoftBreak + , Str "Bonjour." + ] + ] +] +``` + +``` +% pandoc -f latex -t native +\textfrench{Bonjour} +^D +[ Para + [ Span ( "" , [] , [ ( "lang" , "fr" ) ] ) [ Str "Bonjour" ] + ] +] +``` + +``` +% pandoc -f latex -t native +\foreignlanguage{swissgerman}{Guten tag} +^D +[ Para + [ Span + ( "" , [] , [ ( "lang" , "de-CH-1901" ) ] ) + [ Str "Guten" , Space , Str "tag" ] + ] +] +``` + +``` +% pandoc -f latex -t native +\begin{french} +Bonjour. +\end{french} +^D +[ Div + ( "" , [] , [ ( "lang" , "fr" ) ] ) + [ Para [ Str "Bonjour." ] ] +] +``` |
