From 26bd4deb3b0a9b1a1aef3bf22539926241772bbf Mon Sep 17 00:00:00 2001 From: Benjamin Barenblat Date: Thu, 12 Feb 2015 22:29:13 -0500 Subject: Remove leading spaces and/or one newline from code blocks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit listings is space-sensitive, so the common idiom <>= block body @ gets typeset as ⟨block name⟩≡ block body This is ugly, so remove all leading spaces up to the first newline (and that newline itself, if appropriate) in each code block. --- src/Weave.hs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/Weave.hs b/src/Weave.hs index f10617f..f2d7836 100644 --- a/src/Weave.hs +++ b/src/Weave.hs @@ -23,9 +23,19 @@ weaveFragment :: Fragment -> String weaveFragment (Documentation text) = text weaveFragment (BlockCode name body) = "\\begin{LytBlockCode}{" ++ name ++ "}\n" - ++ concatMap weaveCodeOrReference body + ++ weaveBlockBody body ++ "\\end{LytBlockCode}\n" +weaveBlockBody :: [CodeOrReference] -> String +weaveBlockBody ((Code first):rest) = + {- The first block is code. To make sure it gets typeset correctly, drop + everything up to the first newline or non-space character. -} + (case dropWhile (==' ') first of + '\n' : first' -> first' + first' -> first') + ++ concatMap weaveCodeOrReference rest +weaveBlockBody blocks = concatMap weaveCodeOrReference blocks + weaveCodeOrReference :: CodeOrReference -> String weaveCodeOrReference (Code text) = text weaveCodeOrReference (Reference name) = "\\LytFragmentReference{" ++ name ++ "}" -- cgit v1.2.3