src/Pure/Tools/jedit.ML
author wenzelm
Tue, 10 Nov 2015 21:52:18 +0100
changeset 61620 01db1bed4487
parent 61617 cd7549cd5fe7
child 61621 70b8085f51b4
permissions -rw-r--r--
tuned signature;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
61617
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
     1
(*  Title:      Pure/Tools/jedit.ML
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
     3
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
     4
jEdit support.
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
     5
*)
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
     6
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
     7
signature JEDIT =
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
     8
sig
61620
01db1bed4487 tuned signature;
wenzelm
parents: 61617
diff changeset
     9
  val check_action: string * Position.T -> string
61617
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    10
end;
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    11
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    12
structure JEdit: JEDIT =
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    13
struct
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    14
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    15
(* jEdit actions *)
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    16
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    17
local
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    18
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    19
fun parse_named a (XML.Elem ((b, props), _)) =
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    20
      (case Properties.get props "NAME" of
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    21
        SOME name => if a = b then [name] else []
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    22
      | NONE => [])
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    23
  | parse_named _ _ = [];
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    24
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    25
val isabelle_jedit_actions =
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    26
  Lazy.lazy (fn () =>
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    27
    (case XML.parse (File.read @{path "~~/src/Tools/jEdit/src/actions.xml"}) of
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    28
      XML.Elem (("ACTIONS", _), body) => maps (parse_named "ACTION") body
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    29
    | _ => []));
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    30
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    31
val isabelle_jedit_dockables =
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    32
  Lazy.lazy (fn () =>
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    33
    (case XML.parse (File.read @{path "~~/src/Tools/jEdit/src/dockables.xml"}) of
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    34
      XML.Elem (("DOCKABLES", _), body) => maps (parse_named "DOCKABLE") body
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    35
    | _ => []));
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    36
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    37
val jedit_actions =
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    38
  Lazy.lazy (fn () =>
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    39
    (case Isabelle_System.bash_output
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    40
      "unzip -p \"$JEDIT_HOME/dist/jedit.jar\" org/gjt/sp/jedit/actions.xml" of
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    41
      (txt, 0) =>
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    42
        (case XML.parse txt of
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    43
          XML.Elem (("ACTIONS", _), body) => maps (parse_named "ACTION") body
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    44
        | _ => [])
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    45
    | (_, rc) => error ("Cannot unzip jedit.jar\nreturn code = " ^ string_of_int rc)));
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    46
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    47
fun is_action a =
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    48
  member (op =) (Lazy.force isabelle_jedit_actions) a orelse
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    49
  member (op =) (Lazy.force isabelle_jedit_dockables) a orelse
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    50
  member (op =) (Lazy.force jedit_actions) a;
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    51
61620
01db1bed4487 tuned signature;
wenzelm
parents: 61617
diff changeset
    52
in
01db1bed4487 tuned signature;
wenzelm
parents: 61617
diff changeset
    53
01db1bed4487 tuned signature;
wenzelm
parents: 61617
diff changeset
    54
fun check_action (a, pos) =
01db1bed4487 tuned signature;
wenzelm
parents: 61617
diff changeset
    55
  if is_action a then a
01db1bed4487 tuned signature;
wenzelm
parents: 61617
diff changeset
    56
  else error ("Bad jEdit action " ^ quote a ^ Position.here pos);
01db1bed4487 tuned signature;
wenzelm
parents: 61617
diff changeset
    57
61617
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    58
end;
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    59
cd7549cd5fe7 clarified modules;
wenzelm
parents:
diff changeset
    60
end;