From b9b6ba08056b6ef2a395a6478c7b065f967a020f Mon Sep 17 00:00:00 2001 From: John MacFarlane Date: Tue, 2 Dec 2025 12:03:15 +0100 Subject: 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. --- src/Text/Pandoc/Writers/Texinfo.hs | 21 +++++++++++++++++++-- test/command/11312.md | 21 +++++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 test/command/11312.md 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 +``` -- cgit v1.2.3