summaryrefslogtreecommitdiff
path: root/src/compiler/GF/Grammar/ShowTerm.hs
diff options
context:
space:
mode:
authorkrasimir <krasimir@chalmers.se>2010-02-03 17:33:55 +0000
committerkrasimir <krasimir@chalmers.se>2010-02-03 17:33:55 +0000
commitb90e56a94e335d42dd5abe653555cc0854803037 (patch)
treee80c7c8a0dadbcf1eeca1426e6eb5e089935a280 /src/compiler/GF/Grammar/ShowTerm.hs
parent49e620b535aeec77c95bfc6db0bf0a4a725903e4 (diff)
fix the tabular printing when there is a V constructor
Diffstat (limited to 'src/compiler/GF/Grammar/ShowTerm.hs')
-rw-r--r--src/compiler/GF/Grammar/ShowTerm.hs40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/compiler/GF/Grammar/ShowTerm.hs b/src/compiler/GF/Grammar/ShowTerm.hs
new file mode 100644
index 000000000..e039aea79
--- /dev/null
+++ b/src/compiler/GF/Grammar/ShowTerm.hs
@@ -0,0 +1,40 @@
+module GF.Grammar.ShowTerm where
+
+import GF.Grammar.Grammar
+import GF.Grammar.Printer
+import GF.Grammar.Lookup
+import GF.Data.Operations
+
+import Text.PrettyPrint
+import Data.List (intersperse)
+
+showTerm :: SourceGrammar -> TermPrintStyle -> TermPrintQual -> Term -> String
+showTerm gr style q t = render $
+ case style of
+ TermPrintTable -> vcat [p <+> s | (p,s) <- ppTermTabular gr q t]
+ TermPrintAll -> vcat [ s | (p,s) <- ppTermTabular gr q t]
+ TermPrintDefault -> ppTerm q 0 t
+
+ppTermTabular :: SourceGrammar -> TermPrintQual -> Term -> [(Doc,Doc)]
+ppTermTabular gr q = pr where
+ pr t = case t of
+ R rs ->
+ [(ppLabel lab <+> char '.' <+> path, str) | (lab,(_,val)) <- rs, (path,str) <- pr val]
+ T _ cs ->
+ [(ppPatt q 0 patt <+> text "=>" <+> path, str) | (patt, val ) <- cs, (path,str) <- pr val]
+ V ty cs ->
+ let pvals = case allParamValues gr ty of
+ Ok pvals -> pvals
+ Bad _ -> map Meta [1..]
+ in [(ppTerm q 0 pval <+> text "=>" <+> path, str) | (pval, val) <- zip pvals cs, (path,str) <- pr val]
+ _ -> [(empty,ps t)]
+ ps t = case t of
+ K s -> text s
+ C s u -> ps s <+> ps u
+ FV ts -> hsep (intersperse (char '/') (map ps ts))
+ _ -> ppTerm q 0 t
+
+data TermPrintStyle
+ = TermPrintTable
+ | TermPrintAll
+ | TermPrintDefault