1signature MATH_SPACE  =
2sig
3  val makeSpace:    BoxTypes.style -> MathTypes.mathSpace -> BoxTypes.hlist
4  val makeSpaceOpt: BoxTypes.style -> MathTypes.mathSpace option -> BoxTypes.hlist
5end  (* signature MATH_SPACE *)
6(*----------*)
7
8structure MathSpace: MATH_SPACE  =
9struct
10  open BasicTypes;  open BoxTypes;  open MathTypes
11  open General;  open StyleParams
12
13  fun translate (SKern s)  =  Kern s
14  |   translate (SGlue g)  =  Glue g
15
16  fun conv (m: dist) (s, normal)  =  (m * s, normal)
17  |   conv  _         pair        =   pair
18
19  fun convert m (SKern s)  =  Kern (m * s)
20  |   convert m (SGlue {size, stretch, shrink})  =
21      Glue {size = m * size,  stretch = conv m stretch,  shrink = conv m shrink}
22
23  fun makeSpace st {isMu, always, entry}  =
24  if  always  orelse  st = D  orelse  st = T
25  then  [if  isMu  then  convert (MathUnit st) entry  else  translate entry]
26  else  [ ]
27(* Logically, a node option would be more appropriate than a node list.
28   However, a node list would be formed by the caller anyway. *)
29
30  fun makeSpaceOpt st  =  optFold [] (makeSpace st)
31
32end
33