summaryrefslogtreecommitdiff
path: root/deprecated/exper/EditShell.hs
diff options
context:
space:
mode:
Diffstat (limited to 'deprecated/exper/EditShell.hs')
-rw-r--r--deprecated/exper/EditShell.hs136
1 files changed, 0 insertions, 136 deletions
diff --git a/deprecated/exper/EditShell.hs b/deprecated/exper/EditShell.hs
deleted file mode 100644
index dd7fd8eea..000000000
--- a/deprecated/exper/EditShell.hs
+++ /dev/null
@@ -1,136 +0,0 @@
-module Main where
-
-import PGF.Editor
-import PGF
-
-import Data.Char
-import System (getArgs)
-
--- a rough editor shell using the PGF.Edito API
--- compile:
--- cd .. ; ghc --make exper/EditShell.hs
--- use:
--- EditShell file.pgf
-
-main = do
- putStrLn "Hi, I'm the Editor! Type h for help on commands."
- file:_ <- getArgs
- pgf <- readPGF file
- let dict = pgf2dict pgf
- let st0 = new (startCat pgf)
- let lang = head (languages pgf) ---- for printnames; enable choosing lang
- editLoop pgf dict lang st0 -- alt 1: all editing commands
--- dialogueLoop pgf dict lang st0 -- alt 2: just refinement by parsing (see bottom)
-
-editLoop :: PGF -> Dict -> Language -> State -> IO State
-editLoop pgf dict lang st = do
- putStrLn $
- if null (allMetas st)
- then unlines
- (["The tree is complete:",prState st] ++ linearizeAll pgf (stateTree st))
- else if isMetaFocus st
- then "I want something of type " ++ showType (focusType st) ++
- " (0 - " ++ show (length (refineMenu dict st)-1) ++ ")"
- else "Do you want to change this node?"
- c <- getLine
- st' <- interpret pgf dict st c
- editLoop pgf dict lang st'
-
-interpret :: PGF -> Dict -> State -> String -> IO State
-interpret pgf dict st c = case words c of
- "r":f:_ -> do
- let st' = goNextMeta (refine dict (mkCId f) st)
- prLState pgf st'
- return st'
- "p":ws -> do
- let tts = parseAll pgf (focusType st) (dropWhile (not . isSpace) c)
- st' <- selectReplace dict (concat tts) st
- prLState pgf st'
- return st'
- "a":_ -> do
- t:_ <- generateRandom pgf (focusType st)
- let st' = goNextMeta (replace dict t st)
- prLState pgf st'
- return st'
- "d":_ -> do
- let st' = delete st
- prLState pgf st'
- return st'
- "m":_ -> do
- putStrLn (unwords (map prCId (refineMenu dict st)))
- return st
- d : _ | all isDigit d -> do
- let f = refineMenu dict st !! read d
- let st' = goNextMeta (refine dict f st)
- prLState pgf st'
- return st'
- p@('[':_):_ -> do
- let st' = goPosition (mkPosition (read p)) st
- prLState pgf st'
- return st'
- ">":_ -> do
- let st' = goNext st
- prLState pgf st'
- return st'
- "x":_ -> do
- mapM_ putStrLn [show (showPosition p) ++ showType t | (p,t) <- allMetas st]
- return st
- "h":_ -> putStrLn commandHelp >> return st
- _ -> do
- putStrLn "command not understood"
- return st
-
-prLState pgf st = do
- let t = stateTree st
- putStrLn (unlines ([
- "Now I have:","",
- prState st] ++
- linearizeAll pgf t))
-
--- prompt selection from list of trees, such as ambiguous choice
-selectReplace :: Dict -> [Tree] -> State -> IO State
-selectReplace dict ts st = case ts of
- [] -> putStrLn "no results" >> return st
- [t] -> return $ goNextMeta $ replace dict t st
- _ -> do
- mapM_ putStrLn $ "choose tree by entering its number:" :
- [show i ++ " : " ++ showTree t | (i,t) <- zip [0..] ts]
- d <- getLine
- let t = ts !! read d
- return $ goNextMeta $ replace dict t st
-
-commandHelp = unlines [
- "a -- refine with a random subtree",
- "d -- delete current subtree",
- "h -- display this help message",
- "m -- show refinement menu",
- "p Anything -- parse Anything and refine with it",
- "r Function -- refine with Function",
- "x -- show all unknown positions and their types",
- "4 -- refine with 4th item from menu (see m)",
- "[1,2,3] -- go to position 1,2,3",
- "> -- go to next node"
- ]
-
-----------------
--- for a dialogue system, working just by parsing; questions are cat printnames
-----------------
-
-dialogueLoop :: PGF -> Dict -> Language -> State -> IO State
-dialogueLoop pgf dict lang st = do
- putStrLn $
- if null (allMetas st)
- then "Ready!\n " ++ unlines (linearizeAll pgf (stateTree st))
- else if isMetaFocus st
- then showPrintName pgf lang (focusType st)
- else "Do you want to change this node?"
- c <- getLine
- st' <- interpretD pgf dict st c
- dialogueLoop pgf dict lang st'
-
-interpretD :: PGF -> Dict -> State -> String -> IO State
-interpretD pgf dict st c = do
- let tts = parseAll pgf (focusType st) c
- st' <- selectReplace dict (concat tts) st
--- prLState pgf st'
- return st'