diff options
| author | John MacFarlane <[email protected]> | 2025-12-02 12:03:15 +0100 |
|---|---|---|
| committer | John MacFarlane <[email protected]> | 2025-12-02 12:04:36 +0100 |
| commit | b9b6ba08056b6ef2a395a6478c7b065f967a020f (patch) | |
| tree | 5184ea59ae66f2c0773d83f6ed41e47df10af04d /src | |
| parent | 92e35d1b90ed90da0c584842ec44e462a79e167d (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.
Diffstat (limited to 'src')
| -rw-r--r-- | src/Text/Pandoc/Writers/Texinfo.hs | 21 |
1 files changed, 19 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 |
