| 
59714
 | 
     1  | 
(*  Title:      Pure/PIDE/protocol_message.ML
  | 
| 
 | 
     2  | 
    Author:     Makarius
  | 
| 
 | 
     3  | 
  | 
| 
 | 
     4  | 
Auxiliary operations on protocol messages.
  | 
| 
 | 
     5  | 
*)
  | 
| 
 | 
     6  | 
  | 
| 
 | 
     7  | 
signature PROTOCOL_MESSAGE =
  | 
| 
 | 
     8  | 
sig
  | 
| 
 | 
     9  | 
  val command_positions: string -> XML.body -> XML.body
  | 
| 
 | 
    10  | 
  val command_positions_yxml: string -> string -> string
  | 
| 
 | 
    11  | 
end;
  | 
| 
 | 
    12  | 
  | 
| 
 | 
    13  | 
structure Protocol_Message: PROTOCOL_MESSAGE =
  | 
| 
 | 
    14  | 
struct
  | 
| 
 | 
    15  | 
  | 
| 
 | 
    16  | 
fun command_positions id =
  | 
| 
 | 
    17  | 
  let
  | 
| 
 | 
    18  | 
    fun attribute (a, b) =
  | 
| 
 | 
    19  | 
      if a = Markup.idN andalso b = Markup.commandN then (a, id) else (a, b);
  | 
| 
 | 
    20  | 
    fun tree (XML.Elem ((a, atts), ts)) = XML.Elem ((a, map attribute atts), map tree ts)
  | 
| 
 | 
    21  | 
      | tree text = text;
  | 
| 
 | 
    22  | 
  in map tree end;
  | 
| 
 | 
    23  | 
  | 
| 
 | 
    24  | 
fun command_positions_yxml id =
  | 
| 
 | 
    25  | 
  YXML.string_of_body o command_positions id o YXML.parse_body;
  | 
| 
 | 
    26  | 
  | 
| 
 | 
    27  | 
end;
  |