Skip to content

Commit 59af646

Browse files
committed
fixed pretty print
1 parent 439bd87 commit 59af646

File tree

11 files changed

+959
-556
lines changed

11 files changed

+959
-556
lines changed

src/ZM/Parser.hs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@ module ZM.Parser (
66

77
import Text.Megaparsec
88
import ZM.Parser.ADT as X
9+
import ZM.Parser.Bracket as X
910
import ZM.Parser.Env as X
11+
import ZM.Parser.Exp as X
1012
import ZM.Parser.Lexer as X
13+
import ZM.Parser.Literal as X
1114
import ZM.Parser.Types as X
1215
import ZM.Parser.Util as X
1316
import ZM.Parser.Value as X
14-
import ZM.Parser.Exp as X

src/ZM/Parser/Bracket.hs

Lines changed: 93 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,25 @@
1-
{-# LANGUAGE OverloadedStrings #-}
21
{-# LANGUAGE DeriveTraversable #-}
2+
{-# LANGUAGE OverloadedStrings #-}
3+
{-# LANGUAGE RecordWildCards #-}
34

45
module ZM.Parser.Bracket (
56
Bracket (..),
67
bracket,
8+
prettyBracket,
79
) where
810

911
import Data.Maybe (fromMaybe)
1012
import Data.Text (Text)
13+
import Prettyprinter
14+
import qualified Prettyprinter as PP
1115
import Text.Megaparsec
1216
import Text.Megaparsec.Char
1317
import ZM.Parser.Lexer
18+
import ZM.Parser.Literal
1419
import ZM.Parser.Types
15-
import ZM.Pretty
16-
import Control.Monad (void)
17-
import Text.PrettyPrint(vcat)
20+
import ZM.Parser.Util (testParse)
21+
22+
-- import Text.PrettyPrint (vcat)
1823

1924
{- List of values between brackets, space separated, with an optional operand/modifier
2025
>>> import ZM.Parser.Lexer
@@ -77,47 +82,111 @@ Just (Bracket {open = '[', close = ']', op = Nothing, values = [1,2]})
7782
>>> p "[ 1\n\n 2\n\n] "
7883
Just (Bracket {open = '[', close = ']', op = Nothing, values = [1,2]})
7984
-}
80-
-- generate test cases
85+
-- generate test cases
8186
-- gen = [ T.concat ["[","]"] | n<-[0..2] ,l <- [0..2],sp <- T.take n (T.replicate " ")
8287

8388
bracket :: Parser e -> Parser (Bracket e)
8489
bracket pe = lexeme $ do
85-
(o, c) <- choice (map (\oc@(o, _) -> oc <$ char o) brackets)
90+
(o, c) <- choice (map (\oc@(o, _) -> oc <$ char o) bracketsOpenClose)
8691
msym <- optional sym
8792
_ <- optional wsn
88-
--vs <- many (sepElem pe)
93+
-- vs <- many (sepElem pe)
8994
vs <- pe `endBy` elemSep
9095
-- _ <- optional wsn
9196
_ <- maybe (string "") string msym
9297
_ <- char c
9398
return $ Bracket o c msym vs
9499

95-
sepElem pe = choice [
96-
pe
97-
, elemSep *> pe
98-
]
100+
sepElem pe =
101+
choice
102+
[ pe
103+
, elemSep *> pe
104+
]
99105

100-
elemSep = choice [
101-
--void $ symbol "," -- This will be parser by 'expr'
102-
wsn
103-
,pure ()
104-
]
106+
elemSep =
107+
choice
108+
[ -- void $ symbol "," -- This will be parser by 'expr'
109+
wsn
110+
, pure ()
111+
]
105112

106-
brackets :: [(Char, Char)]
107-
brackets = [('{', '}'), ('[', ']')] -- ('<','>'),('«','»')]
113+
bracketsOpenClose :: [(Char, Char)]
114+
bracketsOpenClose = [('{', '}'), ('[', ']')] -- ('<','>'),('«','»')]
108115

109116
data Bracket e = Bracket
110117
{ open, close :: Char
111118
, op :: Maybe Text
112119
, values :: [e]
113120
}
114-
deriving (Show, Eq, Ord,Functor)
121+
deriving (Show, Eq, Ord, Functor)
115122

116123
{-
117-
>>> prettyShow <$> parseMaybe (bracket signedInt) "{%%11\n 22%%}"
118-
Just "{%%11\n 22%%}"
124+
>>> p = either id (show . pretty) . testParse (bracket charLiteral)
125+
126+
>>> error $ p "{}"
127+
{
128+
}
129+
130+
>>> error $ p "{%% %%}"
131+
{%%
132+
%%}
133+
134+
>>> error $ p "{%% ?a ?b %%}"
135+
{%%
136+
a
137+
b
138+
%%}
119139
-}
120140
instance (Pretty e) => Pretty (Bracket e) where
121-
pPrint (Bracket open close mop vs) =
122-
let op = txt . fromMaybe "" $ mop
123-
in chr open <> op <> vcat (map pPrint vs) <> op <> chr close
141+
pretty = prettyBracket pretty
142+
143+
-- pretty (Bracket{..}) =
144+
-- let sop = pretty . fromMaybe "" $ op
145+
-- in pretty open
146+
-- <> sop
147+
-- <> column (\l -> let n = l + 1 in hardline <> indent n (vcat (map pretty values)) <> hardline)
148+
-- <> hardlinesop
149+
-- <> pretty close
150+
151+
-- ?TODO: add compact single line form {1 2 3}
152+
prettyBracket :: (a -> Doc ann) -> Bracket a -> Doc ann
153+
prettyBracket prettyE (Bracket{..}) =
154+
let sop = pretty . fromMaybe "" $ op
155+
beg = pretty open <> sop
156+
end = sop <> pretty close
157+
in align
158+
( beg
159+
<> PP.space
160+
<> PP.space
161+
<> align (foldMap (\e -> hardline <> prettyE e) values)
162+
<> hardline
163+
<> end
164+
)
165+
166+
-- prettyBracket prettyE (Bracket{..}) =
167+
-- let sop = pretty . fromMaybe "" $ op
168+
-- in column
169+
-- ( \s ->
170+
-- pretty open
171+
-- <> sop
172+
-- <> column
173+
-- ( \l ->
174+
-- hardline
175+
-- <> indent (l + 2) (align (vsep (map prettyE values)))
176+
-- <> hardline
177+
-- )
178+
-- <> indent s (sop <> pretty close)
179+
-- )
180+
181+
-- <> hardline
182+
-- <> PP.space
183+
-- <> PP.space
184+
-- <> align (vsep (map prettyE values))
185+
-- <> hardline
186+
-- <> sop
187+
-- <> pretty close
188+
189+
-- instance (Pretty e) => Pretty (Bracket e) where
190+
-- pPrint (Bracket open close mop vs) =
191+
-- let op = txt . fromMaybe "" $ mop
192+
-- in chr open <> op <> vcat (map pPrint vs) <> op <> chr close

0 commit comments

Comments
 (0)