src/Pure/ProofGeneral/pgml.ML
author wenzelm
Tue, 10 Jul 2007 23:29:49 +0200
changeset 23723 4fff46d5faaa
parent 23610 5ade06703b07
child 23748 1ff6b562076f
permissions -rw-r--r--
renamed XML.Rawtext to XML.Output;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
23571
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
     1
(*  Title:      Pure/ProofGeneral/pgip_types.ML
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
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
     5
PGIP abstraction: PGML 
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
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    16
    datatype pgmlplace = Subscript | Superscript | Above | Below 
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
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    21
					    
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    22
    datatype pgmlterm = 
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    23
	     Atoms of { kind: string option, content: pgmlatom list }
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    24
	   | Box of { orient: pgmlorient option, indent: int option, content: pgmlterm list }
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    25
	   | Break of { mandatory: bool option, indent: int option }
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    26
	   | Subterm of { kind: string option,
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    27
			  param: string option,
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    28
			  place: pgmlplace option,
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    29
			  name: string option,
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    30
			  decoration: pgmldec option,
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    31
			  action: pgmlaction option,
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    32
			  pos: string option,
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    33
			  xref: PgipTypes.pgipurl option,
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    34
			  content: pgmlterm list }
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    35
	   | Alt of { kind: string option, content: pgmlterm list }
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    36
	   | Embed of XML.tree list
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    37
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    38
    datatype pgmldoc =
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    39
	     Pgml of { version: string option, systemid: string option, 
23589
aaba731fce86 Revert body of pgml to match schema for now [change bad for Broker]
aspinall
parents: 23571
diff changeset
    40
		       content: pgmlterm }
23571
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    41
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    42
    val pgmlterm_to_xml : pgmlterm -> XML.tree
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    43
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    44
    val pgmldoc_to_xml : pgmldoc -> XML.tree
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    45
end
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    46
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    47
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    48
structure Pgml : PGML =
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    49
struct
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    50
    open PgipTypes
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    51
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    52
    type pgmlsym = { name: string, content: string }
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    53
    datatype pgmlatom = Sym of pgmlsym | Str of string
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    54
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    55
    datatype pgmlorient = HOVOrient | HOrient | VOrient | HVOrient
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    56
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    57
    datatype pgmlplace = Subscript | Superscript | Above | Below 
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    58
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    59
    datatype pgmldec = Bold | Italic | Error | Warning | Info | Other of string
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    60
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    61
    datatype pgmlaction = Toggle | Button | Menu
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    62
					    
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    63
    datatype pgmlterm = 
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    64
	     Atoms of { kind: string option, content: pgmlatom list }
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    65
	   | Box of { orient: pgmlorient option, indent: int option, content: pgmlterm list }
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    66
	   | Break of { mandatory: bool option, indent: int option }
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    67
	   | Subterm of { kind: string option,
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    68
			  param: string option,
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    69
			  place: pgmlplace option,
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    70
			  name: string option,
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    71
			  decoration: pgmldec option,
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    72
			  action: pgmlaction option,
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    73
			  pos: string option,
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    74
			  xref: PgipTypes.pgipurl option,
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    75
			  content: pgmlterm list }
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    76
	   | Alt of { kind: string option, content: pgmlterm list }
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    77
	   | Embed of XML.tree list
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    78
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    79
    datatype pgmldoc =
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    80
	     Pgml of { version: string option, systemid: string option, 
23589
aaba731fce86 Revert body of pgml to match schema for now [change bad for Broker]
aspinall
parents: 23571
diff changeset
    81
		       content: pgmlterm }
23571
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    82
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    83
    fun pgmlorient_to_string HOVOrient = "hov"
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    84
      | pgmlorient_to_string HOrient = "h"
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    85
      | pgmlorient_to_string VOrient = "v"
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    86
      | pgmlorient_to_string HVOrient = "hv"
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    87
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    88
    fun pgmlplace_to_string Subscript = "sub"
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    89
      | pgmlplace_to_string Superscript = "sup"
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    90
      | pgmlplace_to_string Above = "above"
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    91
      | pgmlplace_to_string Below = "below"
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    92
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    93
    fun pgmldec_to_string Bold = "bold"
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    94
      | pgmldec_to_string Italic = "italic"
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    95
      | pgmldec_to_string Error = "error"
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    96
      | pgmldec_to_string Warning = "warning"
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    97
      | pgmldec_to_string Info = "info"
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    98
      | pgmldec_to_string (Other s) = "other"
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
    99
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   100
    fun pgmlaction_to_string Toggle = "toggle"
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   101
      | pgmlaction_to_string Button = "button"
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   102
      | pgmlaction_to_string Menu = "menu"
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   103
23610
5ade06703b07 Produce good PGML 2.0
aspinall
parents: 23589
diff changeset
   104
    (* NOTE: we assume strings are already XML escaped here, for convenience in Isabelle; 
5ade06703b07 Produce good PGML 2.0
aspinall
parents: 23589
diff changeset
   105
       would be better not to *)
23723
4fff46d5faaa renamed XML.Rawtext to XML.Output;
wenzelm
parents: 23610
diff changeset
   106
    fun atom_to_xml (Sym {name,content}) = XML.Elem("sym",attr name name,[XML.Output content])
4fff46d5faaa renamed XML.Rawtext to XML.Output;
wenzelm
parents: 23610
diff changeset
   107
      | atom_to_xml (Str str) = XML.Output str 
23571
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   108
						    
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   109
    fun pgmlterm_to_xml (Atoms {kind, content}) = 
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   110
	XML.Elem("atom",opt_attr "kind" kind, map atom_to_xml content)
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   111
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   112
      | pgmlterm_to_xml (Box {orient, indent, content}) =
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   113
	XML.Elem("box", 
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   114
		 opt_attr_map pgmlorient_to_string "orient" orient @
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   115
		 opt_attr_map int_to_pgstring "indent" indent,
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   116
		 map pgmlterm_to_xml content)
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   117
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   118
      | pgmlterm_to_xml (Break {mandatory, indent}) =
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   119
	XML.Elem("break",
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   120
		 opt_attr_map bool_to_pgstring "mandatory" mandatory @
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   121
		 opt_attr_map int_to_pgstring "indent" indent, [])
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   122
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   123
      | pgmlterm_to_xml (Subterm {kind, param, place, name, decoration, action, pos, xref, content}) =
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   124
	XML.Elem("subterm", 
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   125
  		 opt_attr "kind" kind @
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   126
		 opt_attr "param" param @
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   127
		 opt_attr_map pgmlplace_to_string "place" place @
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   128
		 opt_attr "name" name @ 
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   129
		 opt_attr_map pgmldec_to_string "decoration" decoration @
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   130
		 opt_attr_map pgmlaction_to_string "action" action @ 
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   131
		 opt_attr "pos" pos @
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   132
		 opt_attr_map string_of_pgipurl "xref" xref,
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   133
		 map pgmlterm_to_xml content)
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   134
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   135
      | pgmlterm_to_xml (Alt {kind, content}) = 
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   136
	XML.Elem("alt", opt_attr "kind" kind, map pgmlterm_to_xml content)
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   137
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   138
      | pgmlterm_to_xml (Embed xmls) = XML.Elem("embed", [], xmls)
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   139
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   140
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   141
    fun pgmldoc_to_xml (Pgml {version,systemid,content}) = 
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   142
	XML.Elem("pgml",opt_attr "version" version  @ opt_attr "systemid" systemid,
23589
aaba731fce86 Revert body of pgml to match schema for now [change bad for Broker]
aspinall
parents: 23571
diff changeset
   143
		 [pgmlterm_to_xml content])
23571
0cd175710a93 PGML abstraction, draft version
aspinall
parents:
diff changeset
   144
end