-
Notifications
You must be signed in to change notification settings - Fork 8
/
MakeFract.sml
34 lines (30 loc) · 1.22 KB
/
MakeFract.sml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
signature MAKE_FRACT =
sig
open BasicTypes; open BoxTypes
val makeFract: style -> dist -> dist -> box -> box -> node
end (* signature MAKE_FRACT *)
(*----------*)
structure MakeFract: MAKE_FRACT =
struct
open BasicTypes; open BoxTypes
open Distance; open StyleParams; open MakeVBox
fun fractMinDist D halfTh = 6 * halfTh
| fractMinDist _ halfTh = 2 * halfTh
fun distances st axh halfTh dnum hden =
let val axisNum = fractNum st - axh
and axisDen = Denom st + axh
val distNum = axisNum - halfTh - dnum
and distDen = axisDen - halfTh - hden
fun correct dist = max (dist, fractMinDist st halfTh)
in (correct distNum, correct distDen) end
fun makeFract st th w numBox denBox =
let val halfTh = half th
val axh = AxisHeight st
val stroke = Rule {height = halfTh, depth = halfTh, width = w}
val (distNum, distDen) =
distances st axh halfTh (#depth numBox) (#height denBox)
fun makeList dist box = [Kern dist, Box0 box]
val fractBox = makeVBox w stroke (makeList distNum numBox)
(makeList distDen denBox)
in Box (~axh, fractBox) end
end (* structure MakeFract *)