aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn MacFarlane <[email protected]>2025-12-02 12:03:15 +0100
committerJohn MacFarlane <[email protected]>2025-12-02 12:04:36 +0100
commitb9b6ba08056b6ef2a395a6478c7b065f967a020f (patch)
tree5184ea59ae66f2c0773d83f6ed41e47df10af04d
parent92e35d1b90ed90da0c584842ec44e462a79e167d (diff)
Texinfo writer: improve handling of certain code blocks.
MediaWiki, for example, will parse a code block containing formatting as a sequence of Code elements separated by LineBreaks. For this we now use a texinfo example block. Closes #11312.
-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
+```