src/Pure/PIDE/markup_expression.ML
author wenzelm
Fri, 20 Sep 2024 21:34:09 +0200
changeset 80915 dbaa780c6d0d
parent 80912 b2eaa342aae5
permissions -rw-r--r--
more markup elements;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
80889
510f6cb6721e more formal Markup.expression;
wenzelm
parents:
diff changeset
     1
(*  Title:      Pure/markup_expression.ML
510f6cb6721e more formal Markup.expression;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
510f6cb6721e more formal Markup.expression;
wenzelm
parents:
diff changeset
     3
510f6cb6721e more formal Markup.expression;
wenzelm
parents:
diff changeset
     4
Formally defined kind for Markup.expression.
510f6cb6721e more formal Markup.expression;
wenzelm
parents:
diff changeset
     5
*)
510f6cb6721e more formal Markup.expression;
wenzelm
parents:
diff changeset
     6
510f6cb6721e more formal Markup.expression;
wenzelm
parents:
diff changeset
     7
signature MARKUP_EXPRESSION =
510f6cb6721e more formal Markup.expression;
wenzelm
parents:
diff changeset
     8
sig
510f6cb6721e more formal Markup.expression;
wenzelm
parents:
diff changeset
     9
  val check_kind: Proof.context -> xstring * Position.T -> string
510f6cb6721e more formal Markup.expression;
wenzelm
parents:
diff changeset
    10
  val setup_kind: binding -> theory -> string * theory
80902
ac1e8686e523 more operations;
wenzelm
parents: 80889
diff changeset
    11
  val check: Proof.context -> xstring * Position.T -> Markup.T
80889
510f6cb6721e more formal Markup.expression;
wenzelm
parents:
diff changeset
    12
  val setup: binding -> Markup.T
80912
b2eaa342aae5 support more markup elements;
wenzelm
parents: 80902
diff changeset
    13
  val markup_type: Markup.T
b2eaa342aae5 support more markup elements;
wenzelm
parents: 80902
diff changeset
    14
  val markup_type_application: Markup.T
b2eaa342aae5 support more markup elements;
wenzelm
parents: 80902
diff changeset
    15
  val markup_term: Markup.T
b2eaa342aae5 support more markup elements;
wenzelm
parents: 80902
diff changeset
    16
  val markup_term_application: Markup.T
80915
dbaa780c6d0d more markup elements;
wenzelm
parents: 80912
diff changeset
    17
  val markup_term_abstraction: Markup.T
80912
b2eaa342aae5 support more markup elements;
wenzelm
parents: 80902
diff changeset
    18
  val markup_prop: Markup.T
b2eaa342aae5 support more markup elements;
wenzelm
parents: 80902
diff changeset
    19
  val markup_prop_application: Markup.T
80915
dbaa780c6d0d more markup elements;
wenzelm
parents: 80912
diff changeset
    20
  val markup_prop_abstraction: Markup.T
80889
510f6cb6721e more formal Markup.expression;
wenzelm
parents:
diff changeset
    21
end;
510f6cb6721e more formal Markup.expression;
wenzelm
parents:
diff changeset
    22
510f6cb6721e more formal Markup.expression;
wenzelm
parents:
diff changeset
    23
structure Markup_Expression: MARKUP_EXPRESSION =
510f6cb6721e more formal Markup.expression;
wenzelm
parents:
diff changeset
    24
struct
510f6cb6721e more formal Markup.expression;
wenzelm
parents:
diff changeset
    25
510f6cb6721e more formal Markup.expression;
wenzelm
parents:
diff changeset
    26
(* theory data *)
510f6cb6721e more formal Markup.expression;
wenzelm
parents:
diff changeset
    27
510f6cb6721e more formal Markup.expression;
wenzelm
parents:
diff changeset
    28
structure Data = Theory_Data
510f6cb6721e more formal Markup.expression;
wenzelm
parents:
diff changeset
    29
(
510f6cb6721e more formal Markup.expression;
wenzelm
parents:
diff changeset
    30
  type T = unit Name_Space.table;
510f6cb6721e more formal Markup.expression;
wenzelm
parents:
diff changeset
    31
  val empty : T = Name_Space.empty_table "markup_expression_kind";
510f6cb6721e more formal Markup.expression;
wenzelm
parents:
diff changeset
    32
  fun merge data : T = Name_Space.merge_tables data;
510f6cb6721e more formal Markup.expression;
wenzelm
parents:
diff changeset
    33
);
510f6cb6721e more formal Markup.expression;
wenzelm
parents:
diff changeset
    34
80902
ac1e8686e523 more operations;
wenzelm
parents: 80889
diff changeset
    35
ac1e8686e523 more operations;
wenzelm
parents: 80889
diff changeset
    36
(* kind *)
ac1e8686e523 more operations;
wenzelm
parents: 80889
diff changeset
    37
80889
510f6cb6721e more formal Markup.expression;
wenzelm
parents:
diff changeset
    38
fun check_kind ctxt =
510f6cb6721e more formal Markup.expression;
wenzelm
parents:
diff changeset
    39
  Name_Space.check (Context.Proof ctxt) (Data.get (Proof_Context.theory_of ctxt)) #> #1;
510f6cb6721e more formal Markup.expression;
wenzelm
parents:
diff changeset
    40
510f6cb6721e more formal Markup.expression;
wenzelm
parents:
diff changeset
    41
fun setup_kind binding thy =
510f6cb6721e more formal Markup.expression;
wenzelm
parents:
diff changeset
    42
  let
510f6cb6721e more formal Markup.expression;
wenzelm
parents:
diff changeset
    43
    val context = Name_Space.map_naming (K Name_Space.global_naming) (Context.Theory thy);
510f6cb6721e more formal Markup.expression;
wenzelm
parents:
diff changeset
    44
    val (name, data') = Name_Space.define context true (binding, ()) (Data.get thy);
510f6cb6721e more formal Markup.expression;
wenzelm
parents:
diff changeset
    45
  in (name, Data.put data' thy) end;
510f6cb6721e more formal Markup.expression;
wenzelm
parents:
diff changeset
    46
80902
ac1e8686e523 more operations;
wenzelm
parents: 80889
diff changeset
    47
ac1e8686e523 more operations;
wenzelm
parents: 80889
diff changeset
    48
(* markup *)
ac1e8686e523 more operations;
wenzelm
parents: 80889
diff changeset
    49
ac1e8686e523 more operations;
wenzelm
parents: 80889
diff changeset
    50
fun check ctxt = check_kind ctxt #> Markup.expression;
ac1e8686e523 more operations;
wenzelm
parents: 80889
diff changeset
    51
80889
510f6cb6721e more formal Markup.expression;
wenzelm
parents:
diff changeset
    52
fun setup binding =
510f6cb6721e more formal Markup.expression;
wenzelm
parents:
diff changeset
    53
  Context.>>> (Context.map_theory_result (setup_kind binding #>> Markup.expression));
510f6cb6721e more formal Markup.expression;
wenzelm
parents:
diff changeset
    54
80912
b2eaa342aae5 support more markup elements;
wenzelm
parents: 80902
diff changeset
    55
b2eaa342aae5 support more markup elements;
wenzelm
parents: 80902
diff changeset
    56
(* concrete markup *)
b2eaa342aae5 support more markup elements;
wenzelm
parents: 80902
diff changeset
    57
b2eaa342aae5 support more markup elements;
wenzelm
parents: 80902
diff changeset
    58
val markup_type = setup (Binding.make ("type", \<^here>));
b2eaa342aae5 support more markup elements;
wenzelm
parents: 80902
diff changeset
    59
val markup_type_application = setup (Binding.make ("type_application", \<^here>));
b2eaa342aae5 support more markup elements;
wenzelm
parents: 80902
diff changeset
    60
b2eaa342aae5 support more markup elements;
wenzelm
parents: 80902
diff changeset
    61
val markup_term = setup (Binding.make ("term", \<^here>));
b2eaa342aae5 support more markup elements;
wenzelm
parents: 80902
diff changeset
    62
val markup_term_application = setup (Binding.make ("term_application", \<^here>));
80915
dbaa780c6d0d more markup elements;
wenzelm
parents: 80912
diff changeset
    63
val markup_term_abstraction = setup (Binding.make ("term_abstraction", \<^here>));
80912
b2eaa342aae5 support more markup elements;
wenzelm
parents: 80902
diff changeset
    64
b2eaa342aae5 support more markup elements;
wenzelm
parents: 80902
diff changeset
    65
val markup_prop = setup (Binding.make ("prop", \<^here>));
b2eaa342aae5 support more markup elements;
wenzelm
parents: 80902
diff changeset
    66
val markup_prop_application = setup (Binding.make ("prop_application", \<^here>));
80915
dbaa780c6d0d more markup elements;
wenzelm
parents: 80912
diff changeset
    67
val markup_prop_abstraction = setup (Binding.make ("prop_abstraction", \<^here>));
80912
b2eaa342aae5 support more markup elements;
wenzelm
parents: 80902
diff changeset
    68
80889
510f6cb6721e more formal Markup.expression;
wenzelm
parents:
diff changeset
    69
end;