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