diff options
| author | Albert Krewinkel <albert@zeitkraut.de> | 2024-01-22 18:03:53 +0100 |
|---|---|---|
| committer | Albert Krewinkel <albert@zeitkraut.de> | 2024-01-22 18:13:34 +0100 |
| commit | 57774d79e86c8645b5f8252c8be8554f1c412a24 (patch) | |
| tree | 5a4483ab3339d56b409fe2a13a5f0de2c919d53e /src | |
| parent | 734f86061893e81a14ef94432555f4edd24b2b8f (diff) | |
Org writer: escape special lines in code blocks
Fixes: #9218
Diffstat (limited to 'src')
| -rw-r--r-- | src/Text/Pandoc/Writers/Org.hs | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/Text/Pandoc/Writers/Org.hs b/src/Text/Pandoc/Writers/Org.hs index a283d0265..407c0a637 100644 --- a/src/Text/Pandoc/Writers/Org.hs +++ b/src/Text/Pandoc/Writers/Org.hs @@ -194,7 +194,15 @@ blockToOrg (CodeBlock (ident,classes,kvs) str) = do let (beg, end) = case lang of Nothing -> ("#+begin_example" <> numberlines, "#+end_example") Just x -> ("#+begin_src " <> x <> numberlines <> args, "#+end_src") - return $ name $$ literal beg $$ literal str $$ literal end $$ blankline + -- escape special lines + let escape_line line = + let (spaces, code) = T.span (\c -> c == ' ' || c == '\t') line + in spaces <> + (if T.isPrefixOf "#+" code || T.isPrefixOf "*" code + then T.cons ',' code + else code) + let escaped = T.unlines . map escape_line . T.lines $ str + return $ name $$ literal beg $$ literal escaped $$ literal end $$ blankline blockToOrg (BlockQuote blocks) = do contents <- blockListToOrg blocks return $ blankline $$ "#+begin_quote" $$ |
