Org reader: preserve indentation of verse lines
Leading spaces in verse lines are converted to non-breaking spaces, so indentation is preserved. This fixes #3064.
This commit is contained in:
parent
0fbb676c81
commit
13280a8112
2 changed files with 18 additions and 1 deletions
|
@ -422,7 +422,16 @@ verseBlock blockType = try $ do
|
||||||
ignHeaders
|
ignHeaders
|
||||||
content <- rawBlockContent blockType
|
content <- rawBlockContent blockType
|
||||||
fmap B.para . mconcat . intersperse (pure B.linebreak)
|
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
|
-- | 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"
|
-- boths blocks is included in the output is determined using the "exports"
|
||||||
|
|
|
@ -1440,6 +1440,14 @@ tests =
|
||||||
] =?>
|
] =?>
|
||||||
para ("foo" <> linebreak <> linebreak <> "bar")
|
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" =:
|
, "Raw block LaTeX" =:
|
||||||
unlines [ "#+BEGIN_LaTeX"
|
unlines [ "#+BEGIN_LaTeX"
|
||||||
, "The category $\\cat{Set}$ is adhesive."
|
, "The category $\\cat{Set}$ is adhesive."
|
||||||
|
|
Loading…
Reference in a new issue