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