% $Header: /cvsroot/html2ps/postscript/box.list-item.ps,v 1.1 2005/12/18 07:21:37 Konstantin Exp $
/box-list-item-height-koeff 0.7 def
/box-list-item-bullet-size-koeff 0.15 def
/box-list-item-create {
box-block-create
dup /MarkerImage /null put
dup /MarkerString ( ) put
dup box-list-item-setup-methods
dup /box-list-item add-type
} def
/box-list-item-get-marker-box-width { % => ListItem
dup /list-style get-css-value
/type get { % => ListItem Type
dup /none eq { pop 0 exit } if
dup /disc eq
1 index /circle eq or
1 index /square eq or { pop dup /font-size get-css-value exit } if
pop
dup /font-family get-css-value
1 index /font-size get-css-value
scalefont
setfont
dup box-list-item-get-string
stringwidth pop % => ListItem Width
} loop % => ListItem Width
exch pop % => Width
} def
/box-list-item-get-marker-image {
/MarkerImage get
} def
/box-list-item-get-string {
/MarkerString get
} def
/box-list-item-put-marker-image { % => Image This
exch /MarkerImage exch put
} def
/box-list-item-put-string {
exch /MarkerString exch put
} def
/box-list-item-reflow { % => Context Parent Box
% If list-style-position is inside, we'll need to move marker box inside the
% list-item box and offset all content by its size;
dup /list-style get-css-value /position get
/inside eq {
% Add marker box width to text-indent value
dup box-list-item-get-marker-box-width
1 index put-additional-text-indent
} if
3 copy box-block-reflow
pop pop pop
} def
/box-list-item-show { % => Viewport This
% Draw generic block box
2 copy box-container-show
% Draw marker
% Determine the marker box base X coordinate
dup get-left % => Viewport This MX
% Determine the base Y coordinate of marker box
1 index box-container-get-first-data
dup /null ne { % => Viewport This MX Element
dup get-top
1 index get-default-baseline sub
exch pop
} { % => Viewport This MX /null
pop
1 index get-top
} ifelse % => Viewport This MX MY
% If list-style-position is inside, we'll need to move marker box inside the
% list-item box and offset all content by its size;
2 index /list-style get-css-value /position get
/inside eq {
2 index box-list-item-get-marker-box-width
2 index add % => Viewport This MX MY MX'
3 2 roll pop
exch
} if
2 index box-list-item-get-marker-image
/null ne { % => Viewport This MX MY
exch 3 index 3 index
box-list-item-show-image
} { % => Viewport This MX MY
exch
3 index 3 index % => Viewport This MY MX Viewport This
dup /list-style get-css-value /type get
{
dup /none eq { pop pop pop pop pop exit } if
dup /disc eq { pop box-list-item-show-disc exit } if
dup /circle eq { pop box-list-item-show-circle exit } if
dup /square eq { pop box-list-item-show-square exit } if
pop box-list-item-show-string exit
} loop
} ifelse % => Viewport This
pop pop
} def
/box-list-item-setup-methods { % => Box
dup /Methods get
dup /reflow {box-list-item-reflow} put
dup /show {box-list-item-show} put
pop pop
} def
/box-list-item-show-circle { % => MY MX Viewport This
dup /color get-css-value
color-apply
0.1 setlinewidth
dup /font-size get-css-value
2 div neg
3 index add % => MY MX Viewport This X
1 index /font-size get-css-value
0.4 mul
box-list-item-height-koeff mul
5 index add % => MY MX Viewport This X Y
2 copy newpath moveto
2 index /font-size get-css-value
box-list-item-bullet-size-koeff mul
% => MY MX Viewport This X Y R
0 360 arc closepath stroke
pop pop pop pop
} def
/box-list-item-show-disc { % => MY MX Viewport This
dup /color get-css-value
color-apply
dup /font-size get-css-value
2 div neg
3 index add % => MY MX Viewport This X
1 index /font-size get-css-value
0.4 mul
box-list-item-height-koeff mul
5 index add % => MY MX Viewport This X Y
2 copy newpath moveto
2 index /font-size get-css-value
box-list-item-bullet-size-koeff mul
% => MY MX Viewport This X Y R
0 360 arc closepath fill
pop pop pop pop
} def
/box-list-item-show-image { % => MY MX Viewport This
dup box-list-item-get-marker-image
% => MY MX Viewport This Image
3 index
5 index moveto % => MY MX Viewport This Image
dup /SX get px
1 index /SY get px
2 index
image-show % => MY MX Viewport This Image
pop pop pop pop pop
} def
/box-list-item-show-square { % => MY MX Viewport This
dup /color get-css-value
color-apply
2 index
1 index /font-size get-css-value
0.512 mul sub
4 index
2 index /font-size get-css-value
0.3 mul
box-list-item-height-koeff mul add
2 index /font-size get-css-value 0.25 mul
3 index /font-size get-css-value 0.25 mul
rectfill
pop pop pop pop
} def
/box-list-item-show-string { % => MY MX Viewport This
box-text-create % => MY MX Viewport This TextBox
1 index box-list-item-get-string % => MY MX Viewport This TextBox String
1 index put-text % => MY MX Viewport This TextBox
1 index
/font-family get-css-value % => MY MX Viewport This TextBox Font
1 index exch
/font-family exch put-css-value % => MY MX Viewport This TextBox
1 index
/font-size get-css-value % => MY MX Viewport This TextBox FontSize
1 index exch
/font-size exch put-css-value % => MY MX Viewport This TextBox
1 index
/color get-css-value % => MY MX Viewport This TextBox Color
1 index exch
/color exch put-css-value % => MY MX Viewport This TextBox
dup box-text-setup % => MY MX Viewport This TextBox
dup get-default-baseline
1 index put-baseline
4 index
1 index get-baseline add
4 index
2 index get-full-width sub % => MY MX Viewport This TextBox MY MX
2 index
box-generic-move-to % => MY MX Viewport This TextBox
2 index exch
box-text-show
pop pop pop pop
} def