public featureModel OSL { Document[1] ( [2] ( Sheet[1..*] ( [6] ( Tab ( [3] ( VerticalAlignment[1] ( Position[1] : string{top,bottom,center}, Margin : integer ), HorizontalAlignment[1] ( Pos[1] : string{left,right,center}, Margin : float ), Text ( LineCount[1] : integer[0..*], BackSide[1] : boolean, Rotate : boolean, Color[1] : boolean ) ), Orientation[1] : string{horizontalLeft,horizontalRight,verical}, Groupe[1] : integer ), Page[0..*] ( Color[1] : boolean, Side[1] : string{recto,verso}, BindingMargin : float, Orientation[1] : string{portrait,landscape}, Page[1] : integer, Position[1] ( X[1] : integer, Y[1] : integer ), Dimension[1] ( Width[1] : integer, Height[1] : integer ), Cover[1] : boolean, Force : string{front,back} ), Hole[0..*] ( Position[1] ( X[1] : integer, Y[1] : integer ), Dimension[1] ( Width[1] : integer, Height[1] : integer ), Location[1] : string{top,left,right,bottom} ), Media[1] ( [1] ( Hole[0..*] ( Position[1] ( X[1] : integer, Y[1] : integer ), Dimension[1] ( Width[1] : integer, Height[1] : integer ) ) ), Dimension[1] ( Width[1] : integer, Height[1] : integer ), Insert[1] : boolean, Tab[1] : boolean, TabIndent : float, Cyclic[1] : boolean, CycleLength[1] : integer, Weight[1] : float, Type : string{plain,glossy,coated,stationary,transparent,plasticSheet,colorCopy,custom}, Color : string{white,red,green,blue,cyan,magenta,yellow,pink,grey,black,purple,orange,buff,goldenrod,clear,ivory,custom}, SingleSided[1] : boolean, PrePrinted[1] : boolean, Thickness[1] : float ), Staple ( Position[1] ( X[1] : integer, Y[1] : integer ), Location : string{top,left,right,bottom,center,top_left,top_right,left_top,left_bottom,right_top,right_bottom,bottom_left,bottom_right,mixed} ), NumberingMethod ( [1] ( Side[1..2] ( Side[1] : string{recto,verso}, Alignment[1] : string{top,bottom}, Position[1] : string{left,center,right} ) ), HorizontalMargin : float, VerticalMargin[1] : float, Color[1] : boolean ) ), Section[1] : integer, PaperPass[1] : integer{sef,lef,mixed}, Side[1] : integer{1,2}, Folding : string{z_fold,half_fold,gate_fold,parallel_fold,tri_fold_in,tri_fold_out,simple_gate_fold,multi_half_fold,multi_tri_fold_in,mixed}, FaceDirection[1] : string{up,down}, HeaderDirection[1] : string{up,down} ), SpineCaption ( Alignment[1] : string{top,middle,bottom}, Orientation[1] : string{horizontalLeft,horizontalRight,verical}, Margin[1] : integer[0..*], LineCount[1] : integer[0..*], TextColor[1] : boolean, BackGroundColor[1] : boolean ) ), Type[1] : string{normal,booklet,perfectBinding}, Binding[1] : string{top,left,right}, StackMethod : string{offset,mixed}, SheetOrder[1] : string{normal,reverse}, NumberOfSheets[1] : integer ); link Sheet.Tab = needs > Media.Tab; link Folding < excludes > Sheet.Tab; link Folding < excludes > Media.Tab; constraint !(Document.Type=booklet | Document.Type=perfectBinding) | !Sheet.Folding; constraint !(Document.Type=booklet | Document.Type=perfectBinding) | Media.Tab=false; constraint !(Document.Type=booklet | Document.Type=perfectBinding) | !Sheet.Tab; constraint !(Document.Type=booklet | Document.Type=perfectBinding) | !Sheet.Staple; constraint !(Document.Type=booklet) | !Sheet.Hole; constraint !(Document.Type=booklet) | !Media.Hole; constraint !(Document.Type=booklet | Document.Type=perfectBinding) | Media.Cyclic=false; constraint !(Sheet.PaperPass=sef & Document.Binding=top) | Media.Tab=false; constraint !(Sheet.PaperPass=lef & Document.Binding=left) | Media.Tab=false; constraint !SpineCaption | Document.Type=booklet | Document.Type=perfectBinding; constraint !(Sheet.Staple.Location=left) | Document.Binding=left; constraint !(Sheet.Staple.Location=top) | Document.Binding=top; constraint !(Sheet.Folding=z_fold) | Document.Binding=top; constraint !(HorizontalAlignment.Position=center) | !HorizontalAlignment.Margin; constraint !(VerticalAlignment.Position=center) | !VerticalAlignment.Margin; constraint !(Page.force=front | Page.Force=back) | Sheet.Side=2; constraint !(Page.force=front) | Page.Side=recto; constraint !(Page.force=back) | Page.Side=verso; constraint !(Document.Type=perfectBinding & Page.Cover=true) | !Page.BindingMargin; constraint !(Document.Type=perfectBinding & Page.Cover=true) | !Sheet.Hole; constraint !(Document.Type=perfectBinding & Page.Cover=true) | !Sheet.Folding; constraint !(Document.Type=perfectBinding & Page.Cover=true) | Sheet.Side=2; constraint !(Document.Type=perfectBinding & Page.Cover=true) | !Page.Force; constraint !(Document.Type=perfectBinding & Page.Cover=true) | !Sheet.NumberingMethod; constraint !(Side.Side=verso) | Sheet.Side=2 ; constraint !(Sheet.Folding & !Sheet.Folfing=z_fold) | !Document.Sheet.Page.BindingMargin; constraint !(Sheet.Tab.Text.Rotate=true) | Sheet.Tab.Text.BackSide=true; constraint !(Sheet.Tab.Text.Rotate=true) | Media.SingleSided=false; constraint !(Media.Tab=false) | !Media.TabIndent; constraint !(Media.Cyclic=false) | Media.CycleLength=0; constraint !(Media.SingleSided=true) | Sheet.Side=1; }