forked from GitHub/gf-core
small fixes in GF.Grammar.Printer
This commit is contained in:
@@ -8,7 +8,8 @@
|
|||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
|
|
||||||
module GF.Grammar.Printer
|
module GF.Grammar.Printer
|
||||||
( ppModule
|
( ppIdent
|
||||||
|
, ppModule
|
||||||
, ppJudgement
|
, ppJudgement
|
||||||
, ppTerm
|
, ppTerm
|
||||||
, ppPatt
|
, ppPatt
|
||||||
@@ -26,20 +27,21 @@ import Data.List (intersperse)
|
|||||||
|
|
||||||
ppModule :: SourceModule -> Doc
|
ppModule :: SourceModule -> Doc
|
||||||
ppModule (mn, ModInfo mtype mstat opts exts with opens _ jments _) =
|
ppModule (mn, ModInfo mtype mstat opts exts with opens _ jments _) =
|
||||||
(let defs = tree2list jments
|
hdr $$ nest 2 (ppOptions opts $$ vcat (map ppJudgement defs)) $$ ftr
|
||||||
in if null defs
|
|
||||||
then hdr
|
|
||||||
else hdr <+> lbrace $$ nest 2 (ppOptions opts $$ vcat (map ppJudgement defs)) $$ rbrace)
|
|
||||||
where
|
where
|
||||||
|
defs = tree2list jments
|
||||||
|
|
||||||
hdr = complModDoc <+> modTypeDoc <+> equals <+>
|
hdr = complModDoc <+> modTypeDoc <+> equals <+>
|
||||||
hsep (intersperse (text "**") $
|
hsep (intersperse (text "**") $
|
||||||
filter (not . isEmpty) $ [ commaPunct ppExtends exts
|
filter (not . isEmpty) $ [ commaPunct ppExtends exts
|
||||||
, maybe empty ppWith with
|
, maybe empty ppWith with
|
||||||
, if null opens
|
, if null opens
|
||||||
then empty
|
then lbrace
|
||||||
else text "open" <+> commaPunct ppOpenSpec opens <+> text "in"
|
else text "open" <+> commaPunct ppOpenSpec opens <+> text "in" <+> lbrace
|
||||||
])
|
])
|
||||||
|
|
||||||
|
ftr = rbrace
|
||||||
|
|
||||||
complModDoc =
|
complModDoc =
|
||||||
case mstat of
|
case mstat of
|
||||||
MSComplete -> empty
|
MSComplete -> empty
|
||||||
@@ -169,8 +171,8 @@ ppTerm d (Meta _) = char '?'
|
|||||||
ppTerm d (Empty) = text "[]"
|
ppTerm d (Empty) = text "[]"
|
||||||
ppTerm d (EData) = text "data"
|
ppTerm d (EData) = text "data"
|
||||||
ppTerm d (R xs) = braces (fsep (punctuate semi [ppLabel l <+>
|
ppTerm d (R xs) = braces (fsep (punctuate semi [ppLabel l <+>
|
||||||
case mb_t of {Just t -> colon <+> ppTerm 0 t; Nothing -> empty} <+>
|
fsep [case mb_t of {Just t -> colon <+> ppTerm 0 t; Nothing -> empty},
|
||||||
equals <+> ppTerm 0 e | (l,(mb_t,e)) <- xs]))
|
equals <+> ppTerm 0 e] | (l,(mb_t,e)) <- xs]))
|
||||||
ppTerm d (RecType xs)= braces (fsep (punctuate semi [ppLabel l <+> colon <+> ppTerm 0 t | (l,t) <- xs]))
|
ppTerm d (RecType xs)= braces (fsep (punctuate semi [ppLabel l <+> colon <+> ppTerm 0 t | (l,t) <- xs]))
|
||||||
ppTerm d (Typed e t) = char '<' <> ppTerm 0 e <+> colon <+> ppTerm 0 t <> char '>'
|
ppTerm d (Typed e t) = char '<' <> ppTerm 0 e <+> colon <+> ppTerm 0 t <> char '>'
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user