diff options
| author | Albert Krewinkel <[email protected]> | 2022-08-22 09:48:50 +0200 |
|---|---|---|
| committer | Albert Krewinkel <[email protected]> | 2022-08-22 12:53:57 +0200 |
| commit | a31cf9a005f3d7dcd3f5d16262f40d8b3e406776 (patch) | |
| tree | 6069cdb2f750c708bec72fe7ec4f4266212ec196 | |
| parent | 1de40c62fc1220b689389e6c2eaa76f4936363fe (diff) | |
Org writer: keep code block attributes as header args.
This allows to keep more information in the resulting `src` blocks,
making it easier to roundtrip from or through Org. Org babel ignores
unknown header arguments.
| -rw-r--r-- | src/Text/Pandoc/Writers/Org.hs | 14 | ||||
| -rw-r--r-- | test/Tests/Writers/Org.hs | 9 |
2 files changed, 19 insertions, 4 deletions
diff --git a/src/Text/Pandoc/Writers/Org.hs b/src/Text/Pandoc/Writers/Org.hs index 81c9d8d48..772e13d5c 100644 --- a/src/Text/Pandoc/Writers/Org.hs +++ b/src/Text/Pandoc/Writers/Org.hs @@ -159,10 +159,16 @@ blockToOrg (CodeBlock (ident,classes,kvs) str) = do else " -n" <> startnum else "" let at = map pandocLangToOrg classes `intersect` orgLangIdentifiers - let (beg, end) = case at of - [] -> ("#+begin_example" <> numberlines, "#+end_example") - (x:_) -> ("#+begin_src " <> x <> numberlines, "#+end_src") - return $ name $$ literal beg $$ literal str $$ text end $$ blankline + let lang = case at of + [] -> Nothing + l:_ -> Just l + let args = mconcat $ + [ " :" <> k <> " " <> v + | (k, v) <- kvs, k `notElem` ["startFrom", "org-language"]] + 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 blockToOrg (BlockQuote blocks) = do contents <- blockListToOrg blocks return $ blankline $$ "#+begin_quote" $$ diff --git a/test/Tests/Writers/Org.hs b/test/Tests/Writers/Org.hs index cc957fc6c..c36e761cd 100644 --- a/test/Tests/Writers/Org.hs +++ b/test/Tests/Writers/Org.hs @@ -76,5 +76,14 @@ tests = , "return True" , "#+end_src" ] + + , "attributes" + =: codeBlockWith ("", ["python"], [("cache", "yes"), ("noweb", "yes")]) + "'Hello'" + =?> T.unlines + [ "#+begin_src python :cache yes :noweb yes" + , "'Hello'" + , "#+end_src" + ] ] ] |
