1signature ACCENT = 2sig 3 val makeAccent: (BasicTypes.family * BasicTypes.charCode) option -> 4 BasicTypes.style -> BasicTypes.family -> 5 BasicTypes.charCode -> BoxTypes.box -> BoxTypes.box 6end (* signature ACCENT *) 7(*----------*) 8 9structure Accent: ACCENT = 10struct 11 open BasicTypes; open BoxTypes 12 open Int 13 open MakeChar; open CharInfo; open CharFunctions 14 open StyleParams 15 open NodeListDim; open Distance 16 open MakeVBox; open BoxPack 17 18 fun getSkew st (SOME (fam,ch)) = charAccentSkew (fontNumber st fam, ch) 19 | getSkew _ NONE = 0 20 21 fun widestAccent limit st fam ch = 22 let val font = fontNumber st fam 23 in case charLarger (font, ch) of 24 SOME ch' => if charWidth (font, ch') > limit then ch 25 else widestAccent limit st fam ch' 26 | NONE => ch 27 end 28 29 fun makeAccent singleChar st fam ch box = 30 let val ch' = widestAccent (#width box) st fam ch 31 val accentBox = boxList (makeChar st fam ch') 32 val skew = getSkew st singleChar 33 val hzShift = skew + half (#width box - #width accentBox) 34 val vtKern = min (#height box, xHeight st) 35 in upVBox (#width box) box [Kern (~vtKern), Box (hzShift, accentBox)] end 36 37end (* structure Accent *) 38