summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoraarne <aarne@cs.chalmers.se>2007-11-08 17:01:09 +0000
committeraarne <aarne@cs.chalmers.se>2007-11-08 17:01:09 +0000
commit14e974af9e168cb768d935cb4fdb621eedab01bd (patch)
tree9270f1754b12d5fcd59cf6958b19810f4007ad75
parent44df29f52d074f372053e7b622849c65608728c4 (diff)
added linearize -all
-rw-r--r--src/GF/Command/Commands.hs3
-rw-r--r--src/GF/GFCC/ShowLinearize.hs38
2 files changed, 30 insertions, 11 deletions
diff --git a/src/GF/Command/Commands.hs b/src/GF/Command/Commands.hs
index 8dcefece9..04ba13256 100644
--- a/src/GF/Command/Commands.hs
+++ b/src/GF/Command/Commands.hs
@@ -103,7 +103,7 @@ allCommands mgr = Map.fromAscList [
}),
("l", emptyCommandInfo {
exec = \opts -> return . fromStrings . map (optLin opts),
- options = ["record","table","term"],
+ options = ["all","record","table","term"],
flags = ["lang"]
}),
("p", emptyCommandInfo {
@@ -117,6 +117,7 @@ allCommands mgr = Map.fromAscList [
optLin opts t = unlines [linea lang t | lang <- optLangs opts] where
linea lang = case opts of
+ _ | isOpt "all" opts -> allLinearize gr (cid lang)
_ | isOpt "table" opts -> tableLinearize gr (cid lang)
_ | isOpt "term" opts -> termLinearize gr (cid lang)
_ | isOpt "record" opts -> recordLinearize gr (cid lang)
diff --git a/src/GF/GFCC/ShowLinearize.hs b/src/GF/GFCC/ShowLinearize.hs
index b9fca129a..ec4952cc2 100644
--- a/src/GF/GFCC/ShowLinearize.hs
+++ b/src/GF/GFCC/ShowLinearize.hs
@@ -1,7 +1,8 @@
module GF.GFCC.ShowLinearize (
tableLinearize,
recordLinearize,
- termLinearize
+ termLinearize,
+ allLinearize
) where
import GF.GFCC.Linearize
@@ -13,8 +14,9 @@ import GF.GFCC.PrintGFCC ----
import GF.Data.Operations
import Data.List
--- printing linearizations with parameters
+-- printing linearizations in different ways with source parameters
+-- internal representation, only used internally in this module
data Record =
RR [(String,Record)]
| RT [(String,Record)]
@@ -36,6 +38,7 @@ prRecord = prr where
RS s -> prQuotedString s
RCon s -> s
+-- uses the encoding of record types in GFCC.paramlincat
mkRecord :: Term -> Term -> Record
mkRecord typ trm = case (typ,trm) of
(R rs, R ts) -> RR [(str lab, mkRecord ty t) | (P lab ty, t) <- zip rs ts]
@@ -47,23 +50,38 @@ mkRecord typ trm = case (typ,trm) of
where
str = realize
+-- show all branches, without labels and params
+allLinearize :: GFCC -> CId -> Exp -> String
+allLinearize gfcc lang = concat . map pr . tabularLinearize gfcc lang where
+ pr (p,vs) = unlines vs
+
+-- show all branches, with labels and params
tableLinearize :: GFCC -> CId -> Exp -> String
-tableLinearize gfcc lang = unlines . branches . recLinearize gfcc lang where
+tableLinearize gfcc lang = unlines . map pr . tabularLinearize gfcc lang where
+ pr (p,vs) = p +++ ":" +++ unwords (intersperse "|" vs)
+
+-- create a table from labels+params to variants
+tabularLinearize :: GFCC -> CId -> Exp -> [(String,[String])]
+tabularLinearize gfcc lang = branches . recLinearize gfcc lang where
branches r = case r of
- RR fs -> [lab +++ b | (lab,t) <- fs, b <- branches t]
- RT fs -> [lab +++ b | (lab,t) <- fs, b <- branches t]
- RFV rs -> intersperse "|" (concatMap branches rs)
- RS s -> [" : " ++ s]
+ RR fs -> [(lab +++ b,s) | (lab,t) <- fs, (b,s) <- branches t]
+ RT fs -> [(lab +++ b,s) | (lab,t) <- fs, (b,s) <- branches t]
+ RFV rs -> [([], ss) | (_,ss) <- concatMap branches rs]
+ RS s -> [([], [s])]
RCon _ -> []
+-- show record in GF-source-like syntax
recordLinearize :: GFCC -> CId -> Exp -> String
recordLinearize gfcc lang = prRecord . recLinearize gfcc lang
-termLinearize :: GFCC -> CId -> Exp -> String
-termLinearize gfcc lang = printTree . linExp gfcc lang
-
+-- create a GF-like record, forming the basis of all functions above
recLinearize :: GFCC -> CId -> Exp -> Record
recLinearize gfcc lang exp = mkRecord typ $ linExp gfcc lang exp where
typ = case exp of
DTr _ (AC f) _ -> lookParamLincat gfcc lang $ valCat $ lookType gfcc f
+-- show GFCC term
+termLinearize :: GFCC -> CId -> Exp -> String
+termLinearize gfcc lang = printTree . linExp gfcc lang
+
+