git.iko.soy/typeable/pandoc
on master help sign in
Merge pull request #1435 from bosmacs/org-babel-exports
c3db0bbJohn MacFarlane
src/Text/Pandoc/Readers/Org.hs+27−5
@@ -341,14 +341,36 @@ verseBlock blkProp = try $ do
341 fmap B.para . mconcat . intersperse (pure B.linebreak)
341 fmap B.para . mconcat . intersperse (pure B.linebreak)
342 <$> mapM (parseFromString parseInlines) (lines content)
342 <$> mapM (parseFromString parseInlines) (lines content)
343
343
344+exportsCode :: [(String, String)] -> Bool
345+exportsCode attrs = not (("rundoc-exports", "none") `elem` attrs
346+ || ("rundoc-exports", "results") `elem` attrs)
347+
348+exportsResults :: [(String, String)] -> Bool
349+exportsResults attrs = ("rundoc-exports", "results") `elem` attrs
350+ || ("rundoc-exports", "both") `elem` attrs
351+
352+followingResultsBlock :: OrgParser (Maybe String)
353+followingResultsBlock =
354+ optionMaybe (try $ blanklines *> stringAnyCase "#+RESULTS:"
355+ *> blankline
356+ *> (unlines <$> many1 exampleLine))
357+
344codeBlock :: BlockProperties -> OrgParser (F Blocks)
358codeBlock :: BlockProperties -> OrgParser (F Blocks)
345codeBlock blkProp = do
359codeBlock blkProp = do
346 skipSpaces
360 skipSpaces
347− (classes, kv) <- codeHeaderArgs <|> (mempty <$ ignHeaders)
361+ (classes, kv) <- codeHeaderArgs <|> (mempty <$ ignHeaders)
348− id' <- fromMaybe "" <$> lookupBlockAttribute "name"
362+ id' <- fromMaybe "" <$> lookupBlockAttribute "name"
349− content <- rawBlockContent blkProp
363+ content <- rawBlockContent blkProp
364+ resultsContent <- followingResultsBlock
365+ let includeCode = exportsCode kv
366+ let includeResults = exportsResults kv
350− let codeBlck = B.codeBlockWith ( id', classes, kv ) content
367+ let codeBlck = B.codeBlockWith ( id', classes, kv ) content
368+ labelledBlck <- maybe (pure codeBlck)
369+ (labelDiv codeBlck)
351− maybe (pure codeBlck) (labelDiv codeBlck) <$> lookupInlinesAttr "caption"
370+ <$> lookupInlinesAttr "caption"
371+ let resultBlck = pure $ maybe mempty (exampleCode) resultsContent
372+ return $ (if includeCode then labelledBlck else mempty)
373+ <> (if includeResults then resultBlck else mempty)
352 where
374 where
353 labelDiv blk value =
375 labelDiv blk value =
354 B.divWith nullAttr <$> (mappend <$> labelledBlock value
376 B.divWith nullAttr <$> (mappend <$> labelledBlock value
tests/Tests/Readers/Org.hs+60
@@ -886,6 +886,66 @@ tests =
886 , " (+ 23 42))" ]
886 , " (+ 23 42))" ]
887 in codeBlockWith ("", classes, params) code'
887 in codeBlockWith ("", classes, params) code'
888
888
889+ , "Source block with results and :exports both" =:
890+ unlines [ "#+BEGIN_SRC emacs-lisp :exports both"
891+ , "(progn (message \"Hello, World!\")"
892+ , " (+ 23 42))"
893+ , "#+END_SRC"
894+ , ""
895+ , "#+RESULTS:"
896+ , ": 65"] =?>
897+ let classes = [ "commonlisp" -- as kate doesn't know emacs-lisp syntax
898+ , "rundoc-block"
899+ ]
900+ params = [ ("rundoc-language", "emacs-lisp")
901+ , ("rundoc-exports", "both")
902+ ]
903+ code' = unlines [ "(progn (message \"Hello, World!\")"
904+ , " (+ 23 42))" ]
905+ results' = "65\n"
906+ in codeBlockWith ("", classes, params) code'
907+ <>
908+ codeBlockWith ("", ["example"], []) results'
909+
910+ , "Source block with results and :exports code" =:
911+ unlines [ "#+BEGIN_SRC emacs-lisp :exports code"
912+ , "(progn (message \"Hello, World!\")"
913+ , " (+ 23 42))"
914+ , "#+END_SRC"
915+ , ""
916+ , "#+RESULTS:"
917+ , ": 65" ] =?>
918+ let classes = [ "commonlisp" -- as kate doesn't know emacs-lisp syntax
919+ , "rundoc-block"
920+ ]
921+ params = [ ("rundoc-language", "emacs-lisp")
922+ , ("rundoc-exports", "code")
923+ ]
924+ code' = unlines [ "(progn (message \"Hello, World!\")"
925+ , " (+ 23 42))" ]
926+ in codeBlockWith ("", classes, params) code'
927+
928+ , "Source block with results and :exports results" =:
929+ unlines [ "#+BEGIN_SRC emacs-lisp :exports results"
930+ , "(progn (message \"Hello, World!\")"
931+ , " (+ 23 42))"
932+ , "#+END_SRC"
933+ , ""
934+ , "#+RESULTS:"
935+ , ": 65" ] =?>
936+ let results' = "65\n"
937+ in codeBlockWith ("", ["example"], []) results'
938+
939+ , "Source block with results and :exports none" =:
940+ unlines [ "#+BEGIN_SRC emacs-lisp :exports none"
941+ , "(progn (message \"Hello, World!\")"
942+ , " (+ 23 42))"
943+ , "#+END_SRC"
944+ , ""
945+ , "#+RESULTS:"
946+ , ": 65" ] =?>
947+ rawBlock "html" ""
948+
889 , "Example block" =:
949 , "Example block" =:
890 unlines [ "#+begin_example"
950 unlines [ "#+begin_example"
891 , "A chosen representation of"
951 , "A chosen representation of"