1signature ILIST_TRANSLATE = 2sig 3 val IListToHList: BasicTypes.style -> bool -> IListTypes.ilist -> BoxTypes.hlist 4end (* signature ILIST_TRANSLATE *) 5(*----------*) 6 7structure IListTranslate: ILIST_TRANSLATE = 8struct 9 open BasicTypes; open BoxTypes; open IListTypes 10 open ChangeKind; open MathSpace; open Spacing; open MathPenalty 11 12 fun IListToHList st insertPenalty iList = 13 let fun trans st prevKind = 14 fn [] => [] 15 | IPen pen :: rest => Penalty pen :: trans st prevKind rest 16 | ISpace sp :: rest => makeSpace st sp @ trans st prevKind rest 17 | IStyle st' :: rest => trans st' prevKind rest 18 | INoad (actKind, hList) :: rest => 19 let val newKind = changeKind prevKind actKind rest 20 val spaceList = makeSpaceOpt st (mathSpacing (prevKind, newKind)) 21 val penaltyList = mathPenalty insertPenalty newKind rest 22 in spaceList @ hList @ penaltyList @ trans st newKind rest end 23 in trans st None iList end 24end (* structure IListTranslate *) 25