src/Pure/General/xml.ML
author wenzelm
Sat, 08 Dec 2001 14:39:08 +0100
changeset 12416 9b3e7a35da30
child 13729 1a8dda49fd86
permissions -rw-r--r--
Basic support for XML output.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12416
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
     1
(*  Title:      Pure/General/xml.ML
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
     2
    ID:         $Id$
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
     3
    Author:     Markus Wenzel, LMU München
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
     4
    License:    GPL (GNU GENERAL PUBLIC LICENSE)
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
     5
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
     6
Basic support for XML output.
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
     7
*)
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
     8
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
     9
signature XML =
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
    10
sig
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
    11
  val element: string -> (string * string) list -> string list -> string
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
    12
  val text: string -> string
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
    13
  val header: string
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
    14
end;
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
    15
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
    16
structure XML: XML =
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
    17
struct
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
    18
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
    19
(* character data *)
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
    20
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
    21
fun encode "<" = "&lt;"
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
    22
  | encode ">" = "&gt;"
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
    23
  | encode "&" = "&amp;"
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
    24
  | encode "'" = "&apos;"
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
    25
  | encode "\"" = "&quot;"
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
    26
  | encode c = c;
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
    27
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
    28
val text = implode o map encode o explode;
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
    29
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
    30
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
    31
(* elements *)
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
    32
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
    33
fun attribute (a, x) = a ^ " = " ^ quote (text x);
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
    34
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
    35
fun element name atts cs =
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
    36
  let val elem = space_implode " " (name :: map attribute atts) in
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
    37
    if null cs then enclose "<" "/>" elem
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
    38
    else enclose "<" ">" elem ^ implode cs ^ enclose "</" ">" name
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
    39
  end;
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
    40
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
    41
val header = "<?xml version=\"1.0\"?>\n";
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
    42
9b3e7a35da30 Basic support for XML output.
wenzelm
parents:
diff changeset
    43
end;