Merge pull request #3065 from tarleb/org-verse-indent

Org reader: preserve indentation of verse lines
This commit is contained in:
John MacFarlane 2016-08-09 21:33:24 +02:00 committed by GitHub
commit 13424a2bd7
2 changed files with 18 additions and 1 deletions

View file

@ -422,7 +422,16 @@ verseBlock blockType = try $ do
ignHeaders
content <- rawBlockContent blockType
fmap B.para . mconcat . intersperse (pure B.linebreak)
<$> mapM (parseFromString inlines) (map (++ "\n") . lines $ content)
<$> mapM parseVerseLine (lines content)
where
-- replace initial spaces with nonbreaking spaces to preserve
-- indentation, parse the rest as normal inline
parseVerseLine :: String -> OrgParser (F Inlines)
parseVerseLine cs = do
let (initialSpaces, indentedLine) = span isSpace cs
let nbspIndent = B.str $ map (const '\160') initialSpaces
line <- parseFromString inlines (indentedLine ++ "\n")
return (pure nbspIndent <> line)
-- | Read a code block and the associated results block if present. Which of
-- boths blocks is included in the output is determined using the "exports"

View file

@ -1440,6 +1440,14 @@ tests =
] =?>
para ("foo" <> linebreak <> linebreak <> "bar")
, "Verse block with varying indentation" =:
unlines [ "#+BEGIN_VERSE"
, " hello darkness"
, "my old friend"
, "#+END_VERSE"
] =?>
para ("\160\160hello darkness" <> linebreak <> "my old friend")
, "Raw block LaTeX" =:
unlines [ "#+BEGIN_LaTeX"
, "The category $\\cat{Set}$ is adhesive."