aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Text/Pandoc/Writers/Texinfo.hs21
-rw-r--r--test/command/11312.md21
2 files changed, 40 insertions, 2 deletions
diff --git a/src/Text/Pandoc/Writers/Texinfo.hs b/src/Text/Pandoc/Writers/Texinfo.hs
index fa00dc675..755e9130c 100644
--- a/src/Text/Pandoc/Writers/Texinfo.hs
+++ b/src/Text/Pandoc/Writers/Texinfo.hs
@@ -148,6 +148,19 @@ stringToTexinfo t
inCmd :: Text -> Doc Text -> Doc Text
inCmd cmd contents = char '@' <> literal cmd <> braces contents
+isCodeOrBreak :: Inline -> Bool
+isCodeOrBreak (Code{}) = True
+isCodeOrBreak LineBreak = True
+isCodeOrBreak _ = False
+
+isCode :: Inline -> Bool
+isCode (Code{}) = True
+isCode _ = False
+
+codeToStr :: Inline -> Inline
+codeToStr (Code _ s) = Str s
+codeToStr x = x
+
-- | Convert Pandoc block element to Texinfo.
blockToTexinfo :: PandocMonad m
=> Block -- ^ Block to convert
@@ -158,8 +171,12 @@ blockToTexinfo (Div _ bs) = blockListToTexinfo bs
blockToTexinfo (Plain lst) =
inlineListToTexinfo lst
-blockToTexinfo (Para lst) =
- inlineListToTexinfo lst -- this is handled differently from Plain in blockListToTexinfo
+-- this is handled differently from Plain in blockListToTexinfo
+blockToTexinfo (Para lst)
+ | all isCodeOrBreak lst
+ = (\xs -> "@example" $$ vcat xs $$ "@end example")
+ <$> mapM (inlineToTexinfo . codeToStr) (filter isCode lst)
+ | otherwise = inlineListToTexinfo lst
blockToTexinfo (LineBlock lns) =
blockToTexinfo $ linesToPara lns
diff --git a/test/command/11312.md b/test/command/11312.md
new file mode 100644
index 000000000..57bf287cd
--- /dev/null
+++ b/test/command/11312.md
@@ -0,0 +1,21 @@
+```
+% pandoc -f mediawiki -t texinfo
+foofoo
+
+ bar
+ baz
+
+foofoo
+^D
+@node Top
+@top Top
+
+foofoo
+
+@example
+bar
+baz
+@end example
+
+foofoo
+```