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; |