src/Pure/PIDE/protocol_message.ML
author wenzelm
Fri, 06 Sep 2024 20:31:20 +0200
changeset 80820 db114ec720cb
parent 72771 72976a6bd2ba
permissions -rw-r--r--
more thorough Protocol_Message.clean_output, following Isabelle/Scala;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
59714
ae322325adbb tuned protocol -- resolve command positions in ML;
wenzelm
parents:
diff changeset
     1
(*  Title:      Pure/PIDE/protocol_message.ML
ae322325adbb tuned protocol -- resolve command positions in ML;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
ae322325adbb tuned protocol -- resolve command positions in ML;
wenzelm
parents:
diff changeset
     3
ae322325adbb tuned protocol -- resolve command positions in ML;
wenzelm
parents:
diff changeset
     4
Auxiliary operations on protocol messages.
ae322325adbb tuned protocol -- resolve command positions in ML;
wenzelm
parents:
diff changeset
     5
*)
ae322325adbb tuned protocol -- resolve command positions in ML;
wenzelm
parents:
diff changeset
     6
ae322325adbb tuned protocol -- resolve command positions in ML;
wenzelm
parents:
diff changeset
     7
signature PROTOCOL_MESSAGE =
ae322325adbb tuned protocol -- resolve command positions in ML;
wenzelm
parents:
diff changeset
     8
sig
71622
ab5009192ebb tuned signature -- follow Scala;
wenzelm
parents: 71619
diff changeset
     9
  val marker_text: string -> string -> unit
ab5009192ebb tuned signature -- follow Scala;
wenzelm
parents: 71619
diff changeset
    10
  val marker: string -> Properties.T -> unit
59714
ae322325adbb tuned protocol -- resolve command positions in ML;
wenzelm
parents:
diff changeset
    11
  val command_positions: string -> XML.body -> XML.body
ae322325adbb tuned protocol -- resolve command positions in ML;
wenzelm
parents:
diff changeset
    12
  val command_positions_yxml: string -> string -> string
80820
db114ec720cb more thorough Protocol_Message.clean_output, following Isabelle/Scala;
wenzelm
parents: 72771
diff changeset
    13
  val clean_output: string -> string
59714
ae322325adbb tuned protocol -- resolve command positions in ML;
wenzelm
parents:
diff changeset
    14
end;
ae322325adbb tuned protocol -- resolve command positions in ML;
wenzelm
parents:
diff changeset
    15
ae322325adbb tuned protocol -- resolve command positions in ML;
wenzelm
parents:
diff changeset
    16
structure Protocol_Message: PROTOCOL_MESSAGE =
ae322325adbb tuned protocol -- resolve command positions in ML;
wenzelm
parents:
diff changeset
    17
struct
ae322325adbb tuned protocol -- resolve command positions in ML;
wenzelm
parents:
diff changeset
    18
72771
72976a6bd2ba tuned comments;
wenzelm
parents: 71622
diff changeset
    19
(* message markers *)
72976a6bd2ba tuned comments;
wenzelm
parents: 71622
diff changeset
    20
71622
ab5009192ebb tuned signature -- follow Scala;
wenzelm
parents: 71619
diff changeset
    21
fun marker_text a text =
71619
e33f6e5f86b6 clarified protocol messages: explicitly use physical_writeln, always encode_lines;
wenzelm
parents: 70907
diff changeset
    22
  Output.physical_writeln ("\f" ^ a ^ " = " ^ encode_lines text);
e33f6e5f86b6 clarified protocol messages: explicitly use physical_writeln, always encode_lines;
wenzelm
parents: 70907
diff changeset
    23
71622
ab5009192ebb tuned signature -- follow Scala;
wenzelm
parents: 71619
diff changeset
    24
fun marker a props =
ab5009192ebb tuned signature -- follow Scala;
wenzelm
parents: 71619
diff changeset
    25
  marker_text a (YXML.string_of_body (XML.Encode.properties props));
70907
7e3f25a0cee4 proper protocol_message for bootstrap proofs;
wenzelm
parents: 59714
diff changeset
    26
7e3f25a0cee4 proper protocol_message for bootstrap proofs;
wenzelm
parents: 59714
diff changeset
    27
72771
72976a6bd2ba tuned comments;
wenzelm
parents: 71622
diff changeset
    28
(* inlined messages *)
72976a6bd2ba tuned comments;
wenzelm
parents: 71622
diff changeset
    29
59714
ae322325adbb tuned protocol -- resolve command positions in ML;
wenzelm
parents:
diff changeset
    30
fun command_positions id =
ae322325adbb tuned protocol -- resolve command positions in ML;
wenzelm
parents:
diff changeset
    31
  let
ae322325adbb tuned protocol -- resolve command positions in ML;
wenzelm
parents:
diff changeset
    32
    fun attribute (a, b) =
ae322325adbb tuned protocol -- resolve command positions in ML;
wenzelm
parents:
diff changeset
    33
      if a = Markup.idN andalso b = Markup.commandN then (a, id) else (a, b);
ae322325adbb tuned protocol -- resolve command positions in ML;
wenzelm
parents:
diff changeset
    34
    fun tree (XML.Elem ((a, atts), ts)) = XML.Elem ((a, map attribute atts), map tree ts)
ae322325adbb tuned protocol -- resolve command positions in ML;
wenzelm
parents:
diff changeset
    35
      | tree text = text;
ae322325adbb tuned protocol -- resolve command positions in ML;
wenzelm
parents:
diff changeset
    36
  in map tree end;
ae322325adbb tuned protocol -- resolve command positions in ML;
wenzelm
parents:
diff changeset
    37
ae322325adbb tuned protocol -- resolve command positions in ML;
wenzelm
parents:
diff changeset
    38
fun command_positions_yxml id =
ae322325adbb tuned protocol -- resolve command positions in ML;
wenzelm
parents:
diff changeset
    39
  YXML.string_of_body o command_positions id o YXML.parse_body;
ae322325adbb tuned protocol -- resolve command positions in ML;
wenzelm
parents:
diff changeset
    40
80820
db114ec720cb more thorough Protocol_Message.clean_output, following Isabelle/Scala;
wenzelm
parents: 72771
diff changeset
    41
db114ec720cb more thorough Protocol_Message.clean_output, following Isabelle/Scala;
wenzelm
parents: 72771
diff changeset
    42
(* clean output *)
db114ec720cb more thorough Protocol_Message.clean_output, following Isabelle/Scala;
wenzelm
parents: 72771
diff changeset
    43
db114ec720cb more thorough Protocol_Message.clean_output, following Isabelle/Scala;
wenzelm
parents: 72771
diff changeset
    44
fun clean_output msg =
db114ec720cb more thorough Protocol_Message.clean_output, following Isabelle/Scala;
wenzelm
parents: 72771
diff changeset
    45
  (case try YXML.parse_body msg of
db114ec720cb more thorough Protocol_Message.clean_output, following Isabelle/Scala;
wenzelm
parents: 72771
diff changeset
    46
    SOME xml =>
db114ec720cb more thorough Protocol_Message.clean_output, following Isabelle/Scala;
wenzelm
parents: 72771
diff changeset
    47
      xml |> XML.filter_elements
db114ec720cb more thorough Protocol_Message.clean_output, following Isabelle/Scala;
wenzelm
parents: 72771
diff changeset
    48
        {remove = fn a => a = Markup.reportN,
db114ec720cb more thorough Protocol_Message.clean_output, following Isabelle/Scala;
wenzelm
parents: 72771
diff changeset
    49
         expose = fn a => a = Markup.no_reportN}
db114ec720cb more thorough Protocol_Message.clean_output, following Isabelle/Scala;
wenzelm
parents: 72771
diff changeset
    50
      |> XML.content_of
db114ec720cb more thorough Protocol_Message.clean_output, following Isabelle/Scala;
wenzelm
parents: 72771
diff changeset
    51
  | NONE => msg);
db114ec720cb more thorough Protocol_Message.clean_output, following Isabelle/Scala;
wenzelm
parents: 72771
diff changeset
    52
59714
ae322325adbb tuned protocol -- resolve command positions in ML;
wenzelm
parents:
diff changeset
    53
end;