summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlbert Krewinkel <albert@zeitkraut.de>2024-01-22 18:03:53 +0100
committerAlbert Krewinkel <albert@zeitkraut.de>2024-01-22 18:13:34 +0100
commit57774d79e86c8645b5f8252c8be8554f1c412a24 (patch)
tree5a4483ab3339d56b409fe2a13a5f0de2c919d53e /src
parent734f86061893e81a14ef94432555f4edd24b2b8f (diff)
Org writer: escape special lines in code blocks
Fixes: #9218
Diffstat (limited to 'src')
-rw-r--r--src/Text/Pandoc/Writers/Org.hs10
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" $$