/hilight-color-alpha 0.6 def /border-create { << /left << /width 2 px /color 0 0 0 0 color-create /style /none >> /right << /width 2 px /color 0 0 0 0 color-create /style /none >> /top << /width 2 px /color 0 0 0 0 color-create /style /none >> /bottom << /width 2 px /color 0 0 0 0 color-create /style /none >> >> } def /border-show { % => Box Viewport Border exch pop % => Box Border % LEFT dup /left get /width get 0 gt 1 index /left get /style get /none ne and { dup /left get /style get true 2 index /left get /color get 3 index /left get /width get 5 index get-left-border 6 index get-bottom-border 7 index get-left-border 8 index get-top-border 9 index get-left-border 9 index /left get /width get add 10 index get-top-border 10 index /top get /width get sub 11 index get-left-border 11 index /left get /width get add 12 index get-bottom-border 12 index /bottom get /width get add edge-show } if % RIGHT dup /right get /width get 0 gt 1 index /right get /style get /none ne and { dup /right get /style get false 2 index /right get /color get 3 index /right get /width get 5 index get-right-border 6 index get-bottom-border 7 index get-right-border 8 index get-top-border 9 index get-right-border 9 index /right get /width get sub 10 index get-top-border 10 index /top get /width get sub 11 index get-right-border 11 index /right get /width get sub 12 index get-bottom-border 12 index /bottom get /width get add edge-show } if % TOP dup /top get /width get 0 gt 1 index /top get /style get /none ne and { dup /top get /style get true 2 index /top get /color get 3 index /top get /width get 5 index get-left-border 6 index get-top-border 7 index get-right-border 8 index get-top-border 9 index get-right-border 9 index /right get /width get sub 10 index get-top-border 10 index /top get /width get sub 11 index get-left-border 11 index /left get /width get add 12 index get-top-border 12 index /top get /width get sub edge-show } if % BOTTOM dup /bottom get /width get 0 gt 1 index /bottom get /style get /none ne and { dup /bottom get /style get false 2 index /bottom get /color get 3 index /bottom get /width get 5 index get-left-border 6 index get-bottom-border 7 index get-right-border 8 index get-bottom-border 9 index get-right-border 9 index /right get /width get sub 10 index get-bottom-border 10 index /bottom get /width get add 11 index get-left-border 11 index /left get /width get add 12 index get-bottom-border 12 index /bottom get /width get add edge-show } if pop pop } def /edge-get-width { % => Edge dup /style get /none eq { pop 0 } { /width get } ifelse } def /edge-show { % If this border have 'transparent' color value, we just will not draw it 9 index color-is-transparent { pop pop pop pop pop pop pop pop pop pop pop pop } { edge-show-in } ifelse } def /edge-show-in { % => Style HI Color Width X1 Y1 X2 Y2 X3 Y3 X4 Y4 newpath 11 index /dashed eq { 9 index color-apply 8 index 4 mul 1 array astore 0 setdash 8 index setlinewidth 7 index 2 index add 2 div 7 index 2 index add 2 div moveto 5 index 4 index add 2 div 5 index 4 index add 2 div lineto stroke [] 0 setdash } if 11 index /dotted eq { 9 index color-apply 8 index 1 array astore 0 setdash 8 index setlinewidth 7 index 2 index add 2 div 7 index 2 index add 2 div moveto 5 index 4 index add 2 div 5 index 4 index add 2 div lineto stroke [] 0 setdash } if 11 index /solid eq { 9 index color-apply 7 index 7 index moveto 5 index 5 index lineto 3 index 3 index lineto 1 index 1 index lineto closepath fill } if 11 index /double eq { 9 index color-apply 1 px setlinewidth 7 index 7 index moveto 5 index 5 index lineto stroke 3 index 3 index moveto 1 index 1 index lineto stroke } if 11 index /inset eq { 10 index { 9 index color-apply } { 9 index [1.0 1.0 1.0 1.0] hilight-color-alpha color-blend color-apply } ifelse 7 index 7 index moveto 5 index 5 index lineto 3 index 3 index lineto 1 index 1 index lineto closepath fill } if 11 index /outset eq { 10 index not { 9 index color-apply } { 9 index [1.0 1.0 1.0 1.0] hilight-color-alpha color-blend color-apply } ifelse 7 index 7 index moveto 5 index 5 index lineto 3 index 3 index lineto 1 index 1 index lineto closepath fill } if 11 index /groove eq { 9 index [1.0 1.0 1.0 1.0] hilight-color-alpha color-blend color-apply 7 index 7 index moveto 5 index 5 index lineto 3 index 3 index lineto 1 index 1 index lineto closepath fill 9 index aload pop setrgbcolor 1 px setlinewidth 10 index { 7 index 7 index moveto 5 index 5 index lineto stroke } { 3 index 3 index moveto 1 index 1 index lineto stroke } ifelse } if 11 index /ridge eq { 9 index aload pop setrgbcolor 7 index 7 index moveto 5 index 5 index lineto 3 index 3 index lineto 1 index 1 index lineto closepath fill 9 index aload pop [1.0 1.0 1.0 1.0] hilight-color-alpha color-blend color-apply 1 px setlinewidth 10 index { 7 index 7 index moveto 5 index 5 index lineto stroke } { 3 index 3 index moveto 1 index 1 index lineto stroke } ifelse } if pop pop pop pop pop pop pop pop pop pop pop pop } def