src/Pure/Syntax/symbol_font.ML
changeset 2208 39002438a79c
parent 2207 f7f06d4deaa2
child 2255 f9126d306a02
equal deleted inserted replaced
2207:f7f06d4deaa2 2208:39002438a79c
     6 *)
     6 *)
     7 
     7 
     8 signature SYMBOL_FONT =
     8 signature SYMBOL_FONT =
     9 sig
     9 sig
    10   val char_names: string list
    10   val char_names: string list
    11   val char: string -> string
    11   val char: string -> string option
    12 end;
    12 end;
    13 
    13 
    14 structure SymbolFont : SYMBOL_FONT =
    14 structure SymbolFont : SYMBOL_FONT =
    15 struct
    15 struct
    16 
    16 
    17 (** the encoding vector **)
    17 (** the encoding vector **)
    18 
    18 
    19 val enc_start = 160;
    19 val enc_start = 161;
    20 val enc_end = 255;
    20 val enc_end = 255;
    21 
    21 
    22 val enc_vector =
    22 val enc_vector =
    23 [
    23 [
    24   "altspace", "Gamma", "Delta", "Theta", "Lambda", "Pi", "Sigma", "Phi",
    24       "Gamma", "Delta", "Theta", "Lambda", "Pi", "Sigma", "Phi",
    25   "Psi", "Omega", "alpha", "beta", "gamma", "delta", "epsilon", "zeta",
    25   "Psi", "Omega", "alpha", "beta", "gamma", "delta", "epsilon", "zeta",
    26   "eta", "theta", "kappa", "lambda", "mu", "nu", "xi", "pi",
    26   "eta", "theta", "kappa", "lambda", "mu", "nu", "xi", "pi",
    27   "rho", "sigma", "tau", "phi", "chi", "psi", "omega", "neg",
    27   "rho", "sigma", "tau", "phi", "chi", "psi", "omega", "neg",
    28   "vee", "wedge", "forall", "exists", "Vee", "lceil", "rceil", "lfloor",
    28   "vee", "wedge", "forall", "exists", "Vee", "lceil", "rceil", "lfloor",
    29   "rfloor", "ldpar", "rdpar", "ldbrak", "rdbrak", "empty", "in", "subseteq",
    29   "rfloor", "ldpar", "rdpar", "ldbrak", "rdbrak", "empty", "in", "subseteq",
    30   "cap", "cup", "Cap", "Cup", "sqcap", "sqcup", "Sqcap", "Sqcup",
    30   "cap", "cup", "Cap", "Cup", "sqcap", "sqcup", "Sqcap", "Sqcup",
    31   "bottom", "doteq", "equiv", "noteq", "sqsubset", "sqsubseteq", "prec", "preceq",
    31   "bottom", "doteq", "equiv", "noteq", "sqsubset", "sqsubseteq", "prec", "preceq",
    32   "succ", "succeq", "sim", "simeq", "le", "ge", "leftarrow", "midarrow",
    32   "succ", "succeq", "sim", "simeq", "le", "ge", "leftarrow", "midarrow",
    33   "rightarrow", "Leftarrow", "Midarrow", "Rightarrow", "rrightarrow", "mapsto", "leadsto", "up",
    33   "rightarrow", "Leftarrow", "Midarrow", "Rightarrow", "rrightarrow", "mapsto", "leadsto", "up",
    34   "down", "notin", "times", "oplus", "ominus", "otimes", "oslash", "natural",
    34   "down", "notin", "times", "oplus", "ominus", "otimes", "oslash", "natural",
    35   "infty", "box", "diamond", "circ", "bullet", "parallel", "tick", "copyright"
    35   "infinity", "box", "diamond", "circ", "bullet", "parallel", "tick", "copyright"
    36 ];
    36 ];
    37 
    37 
    38 val enc_tab = Symtab.make (enc_vector ~~ (enc_start upto enc_end));
    38 val enc_tab = Symtab.make (enc_vector ~~ (enc_start upto enc_end));
    39 
    39 
    40 
    40 
    41 (** chars by name **)
    41 (** chars by name **)
    42 
    42 
    43 val char_names = enc_vector;
    43 val char_names = enc_vector;
    44 
    44 
    45 fun char name =
    45 fun char name = apsome chr (Symtab.lookup (enc_tab, name));
    46  (case Symtab.lookup (enc_tab, name) of
       
    47    None => error ("Unknown symbol name: " ^ quote name)
       
    48  | Some n => chr n);
       
    49 
       
    50 
    46 
    51 end;
    47 end;