From a41c1fe0bbdf912f3585c7eb91b59340c35b9b77 Mon Sep 17 00:00:00 2001 From: Samuel Tardieu <sam@rfc1149.net> Date: Thu, 14 Oct 2021 16:16:25 +0200 Subject: [PATCH] asciidoc writer: translate numberLines attribute to linesnum switch AsciiDoctor allows to request line numbering on code blocks by using a switch on the `source` block, such as in: ``` [source%linesnum,haskell] ---- some Haskell code here ---- ``` --- src/Text/Pandoc/Writers/AsciiDoc.hs | 7 +++++-- test/Tests/Writers/AsciiDoc.hs | 16 ++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/Text/Pandoc/Writers/AsciiDoc.hs b/src/Text/Pandoc/Writers/AsciiDoc.hs index bcef4a089..4d3906c5f 100644 --- a/src/Text/Pandoc/Writers/AsciiDoc.hs +++ b/src/Text/Pandoc/Writers/AsciiDoc.hs @@ -21,7 +21,7 @@ AsciiDoc: <http://www.methods.co.nz/asciidoc/> module Text.Pandoc.Writers.AsciiDoc (writeAsciiDoc, writeAsciiDoctor) where import Control.Monad.State.Strict import Data.Char (isPunctuation, isSpace) -import Data.List (intercalate, intersperse) +import Data.List (delete, intercalate, intersperse) import Data.List.NonEmpty (NonEmpty(..)) import Data.Maybe (fromMaybe, isJust) import qualified Data.Set as Set @@ -193,7 +193,10 @@ blockToAsciiDoc _ (CodeBlock (_,classes,_) str) = return $ flush ( then "...." $$ literal str $$ "...." else attrs $$ "----" $$ literal str $$ "----") <> blankline - where attrs = "[" <> literal (T.intercalate "," ("source" : classes)) <> "]" + where attrs = "[" <> literal (T.intercalate "," classes') <> "]" + classes' = if "numberLines" `elem` classes + then "source%linesnum" : delete "numberLines" classes + else "source" : classes blockToAsciiDoc opts (BlockQuote blocks) = do contents <- blockListToAsciiDoc opts blocks let isBlock (BlockQuote _) = True diff --git a/test/Tests/Writers/AsciiDoc.hs b/test/Tests/Writers/AsciiDoc.hs index 04655635f..7b2dd11e8 100644 --- a/test/Tests/Writers/AsciiDoc.hs +++ b/test/Tests/Writers/AsciiDoc.hs @@ -38,6 +38,22 @@ tests = [ testGroup "emphasis" para (singleQuoted (strong (text "foo"))) =?> "`**foo**'" ] + , testGroup "blocks" + [ testAsciidoc "code block without line numbers" $ + codeBlockWith ("", [ "haskell" ], []) "foo" =?> unlines + [ "[source,haskell]" + , "----" + , "foo" + , "----" + ] + , testAsciidoc "code block with line numbers" $ + codeBlockWith ("", [ "haskell", "numberLines" ], []) "foo" =?> unlines + [ "[source%linesnum,haskell]" + , "----" + , "foo" + , "----" + ] + ] , testGroup "tables" [ testAsciidoc "empty cells" $ simpleTable [] [[mempty],[mempty]] =?> unlines