Skip to content

Commit

Permalink
LaTeX reader: handle otherlanguage environment...
Browse files Browse the repository at this point in the history
...and language-name environments like
`\begin{french}...\end{french}`.
Closes #9202.
  • Loading branch information
jgm committed Nov 30, 2023
1 parent 2e8ecb3 commit 80ea048
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 1 deletion.
20 changes: 19 additions & 1 deletion src/Text/Pandoc/Readers/LaTeX.hs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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"
Expand All @@ -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))
Expand Down
62 changes: 62 additions & 0 deletions test/command/9202.md
Original file line number Diff line number Diff line change
@@ -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." ] ]
]
```

0 comments on commit 80ea048

Please sign in to comment.