module Display where
import Core_datatype
import Edlib
import X_interface
import Kernel
import Parse
import Unparse
import Vtslib
import Type_defs
import Lookup
import Globals
import Tags
import Goals
import Tree
typeL = ["Thm","Trm","Sgn","Dec"]
wins = ["Own","Scratch"]
select :: (Eq b) => b -> [b] -> Int
select s [] = 0
select s (s' : l) = if s==s' then 0 else 1+select s l
make_form ty sp win err
= [
InComment " Parse Object",
InRadio "Type of Object"
(case ty of
SOME x -> select x typeL
_ -> 0 )
typeL ,
InComment "",
InMultiText "Specification"
( case sp of
SOME x -> x
_ -> "" ),
InRadio "Display Window"
( case win of
SOME x -> select x wins
_ -> 0 )
wins
] ++
(case err of
SOME err' -> [InComment err']
_ -> [])
{-
unerr (Unbound s) = "Unbound symbol " ^ s
unerr (UnboundRec s) = "Unbound rec symbol " ^ s
unerr NonAtomic = "Not atomic"
unerr (NonInfixBinder s) = "Expected infixbinder, found " ^ s
unerr (NonNumber s) = "Not a number " ^ s
unerr (Reserved s) = "Unexpected reserved word " ^ s
unerr OtherError = "Syntax error"
-}
--eexperr t1 t2 = "Expected "^t1^" but found "^t2
theory_form = [
InComment " Show Theory",
InRadio "Display Theory" 1 ["Strcutured","Unstructered",
"Just Names"]
]
show_goal_cmd tr@(TreeSt t _ gst)
= x_display title display ./.
reTurn tr
where
title = (case obj of
ThmSpec _ -> "Thm Goal No: "
TrmSpec _ -> "Trm Goal No: "
SgnSpec _ -> "Sgn Goal No: "
DecSpec _ -> "Dec Goal No: " )
++ uid
display = unparse_obj sg gst obj
(Tree (Goal _ _ _ uid obj _ sg _) _ _ _ _ ) = t
show_subgoal_cmd :: Int -> (Tree_state GOAL b (c, d, e)) -> Xin
-> Xst ( MayBe (Tree_state GOAL b (c, d, e)) f )
show_subgoal_cmd i tr@( TreeSt (Tree _ tl _ _ _) _ gst)
= x_display title display ./.
reTurn tr
where
title = ( case obj of
ThmSpec _ -> "Thm Goal No: "
TrmSpec _ -> "Trm Goal No: "
SgnSpec _ -> "Sgn Goal No: "
DecSpec _ -> "Dec Goal No: " )
++ uid
display = unparse_obj sg gst obj
( Tree (Goal _ _ _ uid obj _ sg _) _ _ _ _ ) = tl !! i
show_theory tr@( TreeSt (Tree g _ _ _ _) _ gst)
= x_form True theory_form /./
disp
where
disp ( SOME [(OutRadio "Strcutured")] )
= show_theory' tr (unparse_Sgn (error "") (get_attributes gst)) g
disp ( SOME [(OutRadio "Unstructered")] )
= show_theory' tr display_Sgn g
disp ( SOME [(OutRadio "Just Names")] )
= show_theory' tr summary_Sgn g
disp _ = reTurn tr
display_Sgn = error "unimplemented in display"
summary_Sgn = error "unimplemented in display"
show_theory' tr unparse_fn (Goal _ _ _ uid _ True sg lt)
= x_display title display ./.
reTurn tr
where
title = "Signature of Node No. " ++ uid
display = unparse_fn sg
show_theory' tr unparse_fn (Goal _ _ _ _ _ False _ _)
= x_set_status "Theory not yet defined" ./.
reTurn tr
show_object tr@( TreeSt (Tree g _ _ _ _) _ gst)
= case g of
Goal _ _ _ uid _ True sg lt
-> show_obj sg gst' sg att NONE NONE NONE NONE /./
( \ _ -> reTurn tr )
where
-- gst' = get_default_ps gst
gst' = gst -- find get_default_ps
att = get_attributes gst
Goal _ _ _ _ _ False _ _
-> x_set_status "Theory not yet defined" ./.
reTurn tr
show_com t@(Tree (Goal _ _ (SOME com) uid _ _ _ _) _ _ _ _)
= x_display ("Comment for Node No: " ++ uid) com ./.
reTurn t
show_com t@(Tree (Goal _ _ NONE _ _ _ _ _) _ _ _ _)
= x_set_status "No Comment defined" ./.
reTurn t
get_comment (Tree (Goal _ _ NONE _ _ _ _ _) _ _ _ _) = ""
get_comment (Tree (Goal _ _ (SOME s) _ _ _ _ _) _ _ _ _) = s
set_comment "" (Tree (Goal a b _ d e f g h) i j k l)
= Tree (Goal a b NONE d e f g h) i j k l
set_comment c (Tree (Goal a b _ d e f g h) i j k l)
= Tree (Goal a b (SOME c) d e f g h) i j k l
unparse_obj sg gst (TrmSpec tm)
= unparse_trm sg (get_attributes gst) tm
unparse_obj sg gst (ThmSpec tm)
= unparse_trm sg (get_attributes gst) tm
unparse_obj sg gst (DecSpec dc)
= unparse_dec sg (get_attributes gst) dc
unparse_obj sg gst (SgnSpec isg)
= unparse_sgn sg (get_attributes gst) isg
{- no - valid result (Ok "" ) returned - only possibility of error - deal with this ? -}
show_obj sg ps lt attL ty sp win err
= x_form True (make_form ty sp win err) /./
exp
where
exp NONE = reTurn ""
exp ( SOME [OutRadio obj_type, OutText obj_spec, OutRadio win] )
= display_fn (show_fn obj_spec) ./.
reTurn ""
where
display_fn = case win of
"Own" -> own_win obj_type
"Scratch" -> scratch_win obj_type
_ -> own_win obj_type
show_fn = case obj_type of
"Trm" -> show_Trm sg ps lt attL
{-
"Thm" -> show_Thm sg ps lt attL
"Sgn" -> show_Sgn sg ps lt attL
"Dec" -> show_Dec sg ps lt attL
-}
_ -> show_error
-- exp _ = reTurn ""
{-
handle
Syntax (e,inp) =>
let val err_mesg = unerr e
val where = under_line_input inp
val new_form = redo err_mesg where info
in show_obj xio sg ps lt attL new_form end
| Expect (t1,t2,inp) =>
let val err_mesg = eexperr t1 t2
val where = under_line_input inp
val new_form = redo err_mesg where info
in show_obj xio sg ps lt attL new_form end
| Fail s =>
let val err_mesg = "Error: "^ s
val where = ""
val new_form = redo err_mesg where info
in show_obj xio sg ps lt attL new_form end)
-}
{-
redo err whre (SOME [OutRadio obj_type, OutText obj_spec, OutRadio win])
= [
InComment "Parse Object",
InRadio "Type of Object" ["Trm","Thm","Sgn","Dec"],
InComment "Specification of Object",
InMultiText obj_spec,
InComment err,
InComment whre,
InRadio "Display Window" ["Own", "Scratch"]
]
-}
show_Trm sg ps lt attL tm_rep
= unparse_Trm sg attL
(parse_tm (tgL,sg) tm_rep )
-- (parse_typed_Trm tm_rep ps sg)
{-
show_Thm sg ps lt attL th_rep
= unparse_Thm lt attL
(parse_Thm th_rep ps sg)
show_Sgn sg ps lt attL sg_rep
= unparse_Sgn lt attL
(parse_typed_Sgn sg_rep ps)
show_Dec sg ps lt attL dc_rep
= unparse_Dec lt attL
(parse_typed_Dec dc_rep ps sg)
-}
show_error s = "Bad Object"
own_win = x_display
scratch_win obj_type s = x_scratch ("\n\n" ++ obj_type ++ "\n\n" ++ s)
split_line = split '\n'
show_comment tr@(TreeSt t _ _)
= show_com t /./
(\ _ -> reTurn tr )
edit_comment tr @ (TreeSt t tl gst)
= x_form True [InComment "Edit Comment", InMultiText "Comment:" com] /./
exp
where
exp (SOME [OutText com'])
= reTurn ( TreeSt (set_comment com' t) tl gst )
exp _ = reTurn tr
com = get_comment t
show_arguments tr@(TreeSt t _ _)
= show_args t ./.
reTurn tr
show_args t@(Tree (Goal (SOME tac) op_args _ uid _ _ _ _) _ _ _ _)
= x_display title concat_args
where
concat_args = case op_args of
NONE -> "NONE"
SOME args -> foldr ((++).(\s->s++ "\n\n")) "" args
title = "Node: " ++ uid ++ "\nTactic: " ++ tac ++ "\nArguments:"
show_args t@(Tree (Goal _ _ _ _ _ _ _ _) _ _ _ _)
= x_set_status "No tactic applied!"
show_tactics t = x_show_tactics ./.
reTurn t
|