The new tree position annotation, and the corresponding command.

This commit is contained in:
aarne
2003-09-25 11:42:20 +00:00
parent 6e9258558a
commit 49f6288350
4 changed files with 23 additions and 2 deletions

View File

@@ -100,6 +100,16 @@ goLast :: Loc a -> Err (Loc a)
goLast = rep goAhead where
rep f s = err (const (return s)) (rep f) (f s)
goPosition :: [Int] -> Loc a -> Err (Loc a)
goPosition p = go p . goRoot where
go [] s = return s
go (p:ps) s = goDown s >>= apply p goRight >>= go ps
apply :: Monad m => Int -> (a -> m a) -> a -> m a
apply n f a = case n of
0 -> return a
_ -> f a >>= apply (n-1) f
-- added some utilities
traverseCollect :: Path a -> [a]

View File

@@ -63,6 +63,7 @@ pCommand = pCommandWords . words where
"<<" : _ -> CPrevMeta
"'" : _ -> CTop
"+" : _ -> CLast
"mp" : p -> CMovePosition (readIntList (unwords p))
"r" : f : _ -> CRefineWithAtom f
"w" : f:i : _ -> CWrapWithFun (strings2Fun f, readIntArg i)
"ch": f : _ -> CChangeHead (strings2Fun f)
@@ -133,3 +134,9 @@ initEditMsgEmpty env = initEditMsg env +++++ unlines (
showCurrentState env' state' =
unlines (tr ++ ["",""] ++ msg ++ ["",""] ++ map fst menu)
where (tr,msg,menu) = displaySStateIn env' state'
-- to read position; borrowed from Prelude; should be elsewhere
readIntList :: String -> [Int]
readIntList s = case [x | (x,t) <- reads s, ("","") <- lex t] of
[x] -> x
_ -> []

View File

@@ -42,7 +42,9 @@ import Random (newStdGen)
--- temporary hacks for GF 2.0
-- abstract command language for syntax editing. AR 22/8/2001
-- Abstract command language for syntax editing. AR 22/8/2001
-- Most arguments are strings, to make it easier to receive them from e.g. Java.
-- See CommandsL for a parser of a command language.
data Command =
CNewCat G.Cat
@@ -53,6 +55,7 @@ data Command =
| CPrevMeta
| CTop
| CLast
| CMovePosition [Int]
| CRefineWithTree String
| CRefineWithAtom String
| CRefineParse String
@@ -206,6 +209,7 @@ execECommand env c = case c of
CBack n -> action2command (goBackN n)
CTop -> action2command $ return . goRoot
CLast -> action2command $ goLast
CMovePosition p -> action2command $ goPosition p
CNextMeta -> action2command goNextNewMeta
CPrevMeta -> action2command goPrevNewMeta
CRefineWithAtom s -> action2commandNext $ \x -> do

View File

@@ -1 +1 @@
module Today where today = "Wed Sep 24 17:15:34 CEST 2003"
module Today where today = "Thu Sep 25 14:28:54 CEST 2003"