aboutsummaryrefslogtreecommitdiffstats
path: root/app/Render.hs
diff options
context:
space:
mode:
authorLibravatar Alexander Foremny <aforemny@posteo.de>2023-12-08 07:29:35 +0100
committerLibravatar Alexander Foremny <aforemny@posteo.de>2023-12-08 07:29:42 +0100
commit19b148277aa5a80bce1c87e33bb857e66698f4eb (patch)
tree92f2ca9e8e222843fb41892b13b5f94dd4401f27 /app/Render.hs
parent278e40659ced135ee14d82c3ccf1c0c6e90e85e1 (diff)
feat: easily separate renderables by blank lines
Diffstat (limited to 'app/Render.hs')
-rw-r--r--app/Render.hs19
1 files changed, 19 insertions, 0 deletions
diff --git a/app/Render.hs b/app/Render.hs
index f63a3bc..964581f 100644
--- a/app/Render.hs
+++ b/app/Render.hs
@@ -10,6 +10,7 @@ module Render
-- * Render
Render (..),
(<<<),
+ (===),
styled,
-- * Reporting styles
@@ -72,6 +73,24 @@ instance Render Day where
startsWithNL = ("\n" `isPrefixOf`) . show . render
endsWithNL = ("\n" `isSuffixOf`) . show . render
+(===) :: (Render a, Render b) => a -> b -> Doc AnsiStyle
+(===) a' b' =
+ case (nonEmpty a', nonEmpty b') of
+ (Nothing, Nothing) -> emptyDoc
+ (Just a, Nothing) -> a
+ (Nothing, Just b) -> b
+ (Just a, Just b) ->
+ if
+ | endsWithNL a && startsWithNL b -> a <> b
+ | endsWithNL a || startsWithNL b -> a <> hardline <> b
+ | otherwise -> a <> hardline <> hardline <> b
+ where
+ nonEmpty x' =
+ let x = render x'
+ in if not (null (show x)) then Just (render x) else Nothing
+ startsWithNL = ("\n" `isPrefixOf`) . show . render
+ endsWithNL = ("\n" `isSuffixOf`) . show . render
+
-- | `styled` allows to annotate a document with multiple annotations. It obsoletes prettyprinter's `annotate`.
styled :: [AnsiStyle] -> Doc AnsiStyle -> Doc AnsiStyle
styled [] doc = doc