src/Pure/ProofGeneral/pgml.ML
author wenzelm
Sat, 13 Dec 2008 15:00:39 +0100
changeset 29091 b81fe045e799
parent 28039 4d28b4d134f6
child 29606 fedb8be05f24
permissions -rw-r--r--
Context.display_names;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
24584
01e83ffa6c54 fixed title
haftmann
parents: 23748
diff changeset
     1
(*  Title:      Pure/ProofGeneral/pgml.ML
23571
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
     2
    ID:         $Id$
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
     3
    Author:     David Aspinall
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
     4
28038
7a47b1a8790e exported atom_to_xml;
wenzelm
parents: 28020
diff changeset
     5
PGIP abstraction: PGML
23571
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
     6
*)
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
     7
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
     8
signature PGML =
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
     9
sig
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    10
    type pgmlsym = { name: string, content: string }
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    11
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    12
    datatype pgmlatom = Sym of pgmlsym | Str of string
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    13
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    14
    datatype pgmlorient = HOVOrient | HOrient | VOrient | HVOrient
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    15
28038
7a47b1a8790e exported atom_to_xml;
wenzelm
parents: 28020
diff changeset
    16
    datatype pgmlplace = Subscript | Superscript | Above | Below
23571
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    17
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    18
    datatype pgmldec = Bold | Italic | Error | Warning | Info | Other of string
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    19
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    20
    datatype pgmlaction = Toggle | Button | Menu
28038
7a47b1a8790e exported atom_to_xml;
wenzelm
parents: 28020
diff changeset
    21
7a47b1a8790e exported atom_to_xml;
wenzelm
parents: 28020
diff changeset
    22
    datatype pgmlterm =
28020
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
    23
             Atoms of { kind: string option, content: pgmlatom list }
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
    24
           | Box of { orient: pgmlorient option, indent: int option, content: pgmlterm list }
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
    25
           | Break of { mandatory: bool option, indent: int option }
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
    26
           | Subterm of { kind: string option,
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
    27
                          param: string option,
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
    28
                          place: pgmlplace option,
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
    29
                          name: string option,
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
    30
                          decoration: pgmldec option,
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
    31
                          action: pgmlaction option,
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
    32
                          pos: string option,
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
    33
                          xref: PgipTypes.pgipurl option,
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
    34
                          content: pgmlterm list }
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
    35
           | Alt of { kind: string option, content: pgmlterm list }
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
    36
           | Embed of XML.tree list
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
    37
           | Raw of XML.tree
23571
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    38
28038
7a47b1a8790e exported atom_to_xml;
wenzelm
parents: 28020
diff changeset
    39
    datatype pgml =
7a47b1a8790e exported atom_to_xml;
wenzelm
parents: 28020
diff changeset
    40
             Pgml of { version: string option, systemid: string option,
7a47b1a8790e exported atom_to_xml;
wenzelm
parents: 28020
diff changeset
    41
                       area: PgipTypes.displayarea option,
28020
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
    42
                       content: pgmlterm list }
28038
7a47b1a8790e exported atom_to_xml;
wenzelm
parents: 28020
diff changeset
    43
7a47b1a8790e exported atom_to_xml;
wenzelm
parents: 28020
diff changeset
    44
    val atom_to_xml : pgmlatom -> XML.tree
23571
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    45
    val pgmlterm_to_xml : pgmlterm -> XML.tree
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    46
23748
1ff6b562076f Track schema changes: add area attribute to pgml packet. Also add quoted Raw element [hack for Isabelle bottom-up XML production]
aspinall
parents: 23723
diff changeset
    47
    val pgml_to_xml : pgml -> XML.tree
23571
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    48
end
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    49
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    50
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    51
structure Pgml : PGML =
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    52
struct
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    53
    open PgipTypes
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    54
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    55
    type pgmlsym = { name: string, content: string }
23748
1ff6b562076f Track schema changes: add area attribute to pgml packet. Also add quoted Raw element [hack for Isabelle bottom-up XML production]
aspinall
parents: 23723
diff changeset
    56
23571
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    57
    datatype pgmlatom = Sym of pgmlsym | Str of string
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    58
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    59
    datatype pgmlorient = HOVOrient | HOrient | VOrient | HVOrient
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    60
28038
7a47b1a8790e exported atom_to_xml;
wenzelm
parents: 28020
diff changeset
    61
    datatype pgmlplace = Subscript | Superscript | Above | Below
23571
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    62
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    63
    datatype pgmldec = Bold | Italic | Error | Warning | Info | Other of string
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    64
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    65
    datatype pgmlaction = Toggle | Button | Menu
28038
7a47b1a8790e exported atom_to_xml;
wenzelm
parents: 28020
diff changeset
    66
7a47b1a8790e exported atom_to_xml;
wenzelm
parents: 28020
diff changeset
    67
    datatype pgmlterm =
28020
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
    68
             Atoms of { kind: string option, content: pgmlatom list }
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
    69
           | Box of { orient: pgmlorient option, indent: int option, content: pgmlterm list }
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
    70
           | Break of { mandatory: bool option, indent: int option }
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
    71
           | Subterm of { kind: string option,
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
    72
                          param: string option,
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
    73
                          place: pgmlplace option,
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
    74
                          name: string option,
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
    75
                          decoration: pgmldec option,
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
    76
                          action: pgmlaction option,
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
    77
                          pos: string option,
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
    78
                          xref: PgipTypes.pgipurl option,
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
    79
                          content: pgmlterm list }
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
    80
           | Alt of { kind: string option, content: pgmlterm list }
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
    81
           | Embed of XML.tree list
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
    82
           | Raw of XML.tree
23571
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    83
28038
7a47b1a8790e exported atom_to_xml;
wenzelm
parents: 28020
diff changeset
    84
7a47b1a8790e exported atom_to_xml;
wenzelm
parents: 28020
diff changeset
    85
    datatype pgml =
7a47b1a8790e exported atom_to_xml;
wenzelm
parents: 28020
diff changeset
    86
             Pgml of { version: string option, systemid: string option,
7a47b1a8790e exported atom_to_xml;
wenzelm
parents: 28020
diff changeset
    87
                       area: PgipTypes.displayarea option,
28020
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
    88
                       content: pgmlterm list }
23571
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    89
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    90
    fun pgmlorient_to_string HOVOrient = "hov"
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    91
      | pgmlorient_to_string HOrient = "h"
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    92
      | pgmlorient_to_string VOrient = "v"
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    93
      | pgmlorient_to_string HVOrient = "hv"
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    94
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    95
    fun pgmlplace_to_string Subscript = "sub"
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    96
      | pgmlplace_to_string Superscript = "sup"
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    97
      | pgmlplace_to_string Above = "above"
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    98
      | pgmlplace_to_string Below = "below"
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    99
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   100
    fun pgmldec_to_string Bold = "bold"
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   101
      | pgmldec_to_string Italic = "italic"
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   102
      | pgmldec_to_string Error = "error"
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   103
      | pgmldec_to_string Warning = "warning"
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   104
      | pgmldec_to_string Info = "info"
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   105
      | pgmldec_to_string (Other s) = "other"
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   106
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   107
    fun pgmlaction_to_string Toggle = "toggle"
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   108
      | pgmlaction_to_string Button = "button"
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   109
      | pgmlaction_to_string Menu = "menu"
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   110
28038
7a47b1a8790e exported atom_to_xml;
wenzelm
parents: 28020
diff changeset
   111
    (* NOTE: we assume strings are already XML escaped here, for convenience in Isabelle;
7a47b1a8790e exported atom_to_xml;
wenzelm
parents: 28020
diff changeset
   112
       would be better not to *)  (* FIXME !??? *)
28039
4d28b4d134f6 fixed atom_to_xml: literal "name" attribute;
wenzelm
parents: 28038
diff changeset
   113
    fun atom_to_xml (Sym {name, content}) = XML.Elem ("sym", attr "name" name, [XML.Text content])
28038
7a47b1a8790e exported atom_to_xml;
wenzelm
parents: 28020
diff changeset
   114
      | atom_to_xml (Str content) = XML.Text content;
7a47b1a8790e exported atom_to_xml;
wenzelm
parents: 28020
diff changeset
   115
7a47b1a8790e exported atom_to_xml;
wenzelm
parents: 28020
diff changeset
   116
    fun pgmlterm_to_xml (Atoms {kind, content}) =
7a47b1a8790e exported atom_to_xml;
wenzelm
parents: 28020
diff changeset
   117
        XML.Elem("atom", opt_attr "kind" kind, map atom_to_xml content)
23571
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   118
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   119
      | pgmlterm_to_xml (Box {orient, indent, content}) =
28038
7a47b1a8790e exported atom_to_xml;
wenzelm
parents: 28020
diff changeset
   120
        XML.Elem("box",
28020
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
   121
                 opt_attr_map pgmlorient_to_string "orient" orient @
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
   122
                 opt_attr_map int_to_pgstring "indent" indent,
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
   123
                 map pgmlterm_to_xml content)
23571
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   124
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   125
      | pgmlterm_to_xml (Break {mandatory, indent}) =
28020
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
   126
        XML.Elem("break",
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
   127
                 opt_attr_map bool_to_pgstring "mandatory" mandatory @
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
   128
                 opt_attr_map int_to_pgstring "indent" indent, [])
23571
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   129
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   130
      | pgmlterm_to_xml (Subterm {kind, param, place, name, decoration, action, pos, xref, content}) =
28038
7a47b1a8790e exported atom_to_xml;
wenzelm
parents: 28020
diff changeset
   131
        XML.Elem("subterm",
28020
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
   132
                 opt_attr "kind" kind @
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
   133
                 opt_attr "param" param @
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
   134
                 opt_attr_map pgmlplace_to_string "place" place @
28038
7a47b1a8790e exported atom_to_xml;
wenzelm
parents: 28020
diff changeset
   135
                 opt_attr "name" name @
28020
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
   136
                 opt_attr_map pgmldec_to_string "decoration" decoration @
28038
7a47b1a8790e exported atom_to_xml;
wenzelm
parents: 28020
diff changeset
   137
                 opt_attr_map pgmlaction_to_string "action" action @
28020
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
   138
                 opt_attr "pos" pos @
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
   139
                 opt_attr_map string_of_pgipurl "xref" xref,
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
   140
                 map pgmlterm_to_xml content)
23571
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   141
28038
7a47b1a8790e exported atom_to_xml;
wenzelm
parents: 28020
diff changeset
   142
      | pgmlterm_to_xml (Alt {kind, content}) =
28020
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
   143
        XML.Elem("alt", opt_attr "kind" kind, map pgmlterm_to_xml content)
23571
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   144
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   145
      | pgmlterm_to_xml (Embed xmls) = XML.Elem("embed", [], xmls)
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   146
23748
1ff6b562076f Track schema changes: add area attribute to pgml packet. Also add quoted Raw element [hack for Isabelle bottom-up XML production]
aspinall
parents: 23723
diff changeset
   147
      | pgmlterm_to_xml (Raw xml) = xml
23571
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   148
23748
1ff6b562076f Track schema changes: add area attribute to pgml packet. Also add quoted Raw element [hack for Isabelle bottom-up XML production]
aspinall
parents: 23723
diff changeset
   149
28038
7a47b1a8790e exported atom_to_xml;
wenzelm
parents: 28020
diff changeset
   150
    datatype pgml =
7a47b1a8790e exported atom_to_xml;
wenzelm
parents: 28020
diff changeset
   151
             Pgml of { version: string option, systemid: string option,
7a47b1a8790e exported atom_to_xml;
wenzelm
parents: 28020
diff changeset
   152
                       area: PgipTypes.displayarea option,
28020
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
   153
                       content: pgmlterm list }
23748
1ff6b562076f Track schema changes: add area attribute to pgml packet. Also add quoted Raw element [hack for Isabelle bottom-up XML production]
aspinall
parents: 23723
diff changeset
   154
28038
7a47b1a8790e exported atom_to_xml;
wenzelm
parents: 28020
diff changeset
   155
    fun pgml_to_xml (Pgml {version,systemid,area,content}) =
28020
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
   156
        XML.Elem("pgml",
28038
7a47b1a8790e exported atom_to_xml;
wenzelm
parents: 28020
diff changeset
   157
                 opt_attr "version" version @
28020
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
   158
                 opt_attr "systemid" systemid @
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
   159
                 Option.getOpt(Option.map PgipTypes.attrs_of_displayarea area,[]),
1ff5167592ba get rid of tabs;
wenzelm
parents: 26548
diff changeset
   160
                 map pgmlterm_to_xml content)
23571
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   161
end