summaryrefslogtreecommitdiff
path: root/metapost
diff options
context:
space:
mode:
Diffstat (limited to 'metapost')
-rw-r--r--metapost/context/base/mpiv/mp-mlib.mpiv39
-rw-r--r--metapost/context/base/mpiv/mp-shap.mpiv12
-rw-r--r--metapost/context/base/mpiv/mp-step.mpiv364
3 files changed, 303 insertions, 112 deletions
diff --git a/metapost/context/base/mpiv/mp-mlib.mpiv b/metapost/context/base/mpiv/mp-mlib.mpiv
index ad2338bd0..cac84a6fd 100644
--- a/metapost/context/base/mpiv/mp-mlib.mpiv
+++ b/metapost/context/base/mpiv/mp-mlib.mpiv
@@ -240,6 +240,32 @@ vardef rawtextext(expr s) = % todo: avoid currentpicture
fi
enddef ;
+vardef validtexbox(expr category, name) =
+ if category == "" :
+ false
+ elseif string name :
+ name <> ""
+ elseif numeric name :
+ name > 0
+ else :
+ true
+ fi
+enddef ;
+
+vardef rawtexbox(expr category, name) =
+ mfun_tt_c := nullpicture ;
+ if validtexbox(category,name) :
+ mfun_tt_b := lua.mp.tb_dimensions(category, name) ;
+ addto mfun_tt_c doublepath unitsquare
+ xscaled redpart mfun_tt_b
+ yscaled (greenpart mfun_tt_b + bluepart mfun_tt_b)
+ shifted (0,- bluepart mfun_tt_b)
+ withprescript "bx_category=" & if numeric category : decimal fi category
+ withprescript "bx_name=" & if numeric name : decimal fi name ;
+ fi
+ mfun_tt_c
+enddef ;
+
% More text
defaultfont := "Mono" ;
@@ -403,6 +429,19 @@ vardef onetimetextext@#(expr p) = % no draw here
thetextext@#(p,origin)
enddef ;
+vardef thetexbox@#(expr category, name, z) =
+ save p ; picture p ; p := rawtexbox(category,name) ;
+ p
+ if (mfun_labtype@# >= 10) :
+ shifted (0,ypart center p)
+ fi
+ shifted (z + textextoffset*mfun_laboff@# - (mfun_labxf@#*lrcorner p + mfun_labyf@#*ulcorner p + (1-mfun_labxf@#-mfun_labyf@#)*llcorner p))
+enddef ;
+
+vardef texbox@#(expr category, name) = % no draw here
+ thetexbox@#(category,name,origin)
+enddef ;
+
vardef thelabel@#(expr p,z) =
if string p :
thelabel@#(rawtextext("\definedfont[" & defaultfont & "]" & p) scaled defaultscale,z)
diff --git a/metapost/context/base/mpiv/mp-shap.mpiv b/metapost/context/base/mpiv/mp-shap.mpiv
index 713656510..3e885e585 100644
--- a/metapost/context/base/mpiv/mp-shap.mpiv
+++ b/metapost/context/base/mpiv/mp-shap.mpiv
@@ -74,6 +74,8 @@ def stop_predefined_shape_definition =
enddef ;
+% this can be delayed
+
start_predefined_shape_definition ;
predefined_shapes[ 0] := (origin--cycle) ;
@@ -143,7 +145,7 @@ start_predefined_shape_definition ;
stop_predefined_shape_definition ;
vardef some_shape_path (expr type) =
- if known predefined_shapes[type] : predefined_shapes[type] else : predefined_shapes[0] fi
+ if known predefined_shapes[type] : predefined_shapes[type] else : predefined_shapes[24] fi
enddef ;
def some_shape (expr shape_type, shape_width, shape_height, shape_linewidth, shape_linecolor, shape_fillcolor) =
@@ -156,6 +158,14 @@ def some_shape (expr shape_type, shape_width, shape_height, shape_linewidth, sha
endgroup ;
enddef ;
+% maybe:
+%
+% if t>1 : % normal shape
+% path pp ; pp := some_shape_path(t) xyscaled(bbwidth(p), bbheight(p)) ;
+% pp := pp shifted - center pp shifted center p ;
+% fill pp withcolor fc ;
+% draw pp withpen pencircle scaled lw withcolor lc ;
+
vardef drawpredefinedshape (expr t, p, lw, lc, fc) =
save pp ;
if t>1 : % normal shape
diff --git a/metapost/context/base/mpiv/mp-step.mpiv b/metapost/context/base/mpiv/mp-step.mpiv
index f7a7ba5de..27bcffcdc 100644
--- a/metapost/context/base/mpiv/mp-step.mpiv
+++ b/metapost/context/base/mpiv/mp-step.mpiv
@@ -23,7 +23,9 @@ def initialize_step_variables =
cell_fill_color, cell_line_color, cell_line_width, cell_offset,
line_line_color, line_line_width, line_alternative,
line_distance, cell_distance_y, cell_distance_x,
- nofcells, chart_vertical ;
+ nofcells, chart_vertical, chart_align, chart_category ;
+
+ string chart_category ; chart_category := "" ;
color text_line_color ; text_line_color := red ;
color cell_line_color ; cell_line_color := blue ;
@@ -49,6 +51,7 @@ def initialize_step_variables =
numeric text_distance_set ; text_distance_set := 4pt ;
boolean chart_vertical ; chart_vertical := false ;
+ boolean chart_align ; chart_align := false ;
numeric nofcells ; nofcells := 0 ;
@@ -56,17 +59,17 @@ enddef ;
def step_cells (expr t, b) =
nofcells := nofcells + 1 ;
- cells_t[nofcells] := textext.d(t) ;
- cells_b[nofcells] := textext.d(b) ;
+ cells_t[nofcells] := texbox.d(chart_category,t) ;
+ cells_b[nofcells] := texbox.d(chart_category,b) ;
texts_t[nofcells] := nullpicture ;
texts_m[nofcells] := nullpicture ;
texts_b[nofcells] := nullpicture ;
enddef ;
-def step_texts (expr t, b) =
- texts_t[nofcells] := textext.d(t) ;
- texts_m[nofcells] := textext.d(m) ;
- texts_b[nofcells] := textext.d(b) ;
+def step_texts (expr t, m, b) =
+ texts_t[nofcells] := texbox.d(chart_category,t) ;
+ texts_m[nofcells] := texbox.d(chart_category,m) ;
+ texts_b[nofcells] := texbox.d(chart_category,b) ;
enddef ;
def step_begin_cell =
@@ -81,11 +84,66 @@ enddef ;
def step_end_cell =
enddef ;
-def step_cell_top (expr t) = cells_t[nofcells] := textext.d(t) ; enddef ;
-def step_cell_bot (expr b) = cells_b[nofcells] := textext.d(b) ; enddef ;
-def step_text_top (expr t) = texts_t[nofcells] := textext.d(t) ; enddef ;
-def step_text_mid (expr m) = texts_m[nofcells] := textext.d(m) ; enddef ;
-def step_text_bot (expr b) = texts_b[nofcells] := textext.d(b) ; enddef ;
+% maybe: texbox.d
+
+def step_cell_top (expr t, c, f, l, s) =
+ cells_t[nofcells] := texbox.d(chart_category,t) ;
+ cell_top_colors[nofcells] := c ;
+ cell_top_fills [nofcells] := f ;
+ cell_top_lines [nofcells] := l ;
+ cell_top_shapes[nofcells] := s ;
+enddef ;
+
+def step_cell_bot (expr b, c, f, l, s) =
+ cells_b[nofcells] := texbox.d(chart_category,b) ;
+ cell_bot_colors[nofcells] := c ;
+ cell_bot_fills [nofcells] := f ;
+ cell_bot_lines [nofcells] := l ;
+ cell_bot_shapes[nofcells] := s ;
+enddef ;
+
+def step_cell_ali (expr ca, cb, cc, c, f, l, s) =
+ cells_a[nofcells][1] := texbox.d(chart_category,ca) ;
+ cells_a[nofcells][2] := texbox.d(chart_category,cb) ;
+ cells_a[nofcells][3] := texbox.d(chart_category,cc) ;
+ cell_top_colors[nofcells] := c ;
+ cell_top_fills [nofcells] := f ;
+ cell_top_lines [nofcells] := l ;
+ cell_top_shapes[nofcells] := s ;
+enddef ;
+
+def step_text_top (expr t, tc, tf, tl, ts, lc, ll, ls) =
+ texts_t[nofcells] := texbox.d(chart_category,t) ;
+ text_top_colors[nofcells] := tc ;
+ text_top_fills [nofcells] := tf ;
+ text_top_lines [nofcells] := tl ;
+ text_top_shapes[nofcells] := ts ;
+ line_top_colors[nofcells] := lc ;
+ line_top_lines [nofcells] := ll ;
+ line_top_shapes[nofcells] := ls ;
+enddef ;
+
+def step_text_mid (expr m, tc, tf, tl, ts, lc, ll, ls) =
+ texts_m[nofcells] := texbox.d(chart_category,m) ;
+ text_mid_colors[nofcells] := tc ;
+ text_mid_fills [nofcells] := tf ;
+ text_mid_lines [nofcells] := tl ;
+ text_mid_shapes[nofcells] := ts ;
+ line_mid_colors[nofcells] := lc ;
+ line_mid_lines [nofcells] := ll ;
+ line_mid_shapes[nofcells] := ls ;
+enddef ;
+
+def step_text_bot (expr b, tc, tf, tl, ts, lc, ll, ls) =
+ texts_b[nofcells] := texbox.d(chart_category,b) ;
+ text_bot_colors[nofcells] := tc ;
+ text_bot_fills [nofcells] := tf ;
+ text_bot_lines [nofcells] := tl ;
+ text_bot_shapes[nofcells] := ts ;
+ line_bot_colors[nofcells] := lc ;
+ line_bot_lines [nofcells] := ll ;
+ line_bot_shapes[nofcells] := ls ;
+enddef ;
def step_begin_chart =
begingroup ;
@@ -93,6 +151,44 @@ def step_begin_chart =
save nofcells ; numeric nofcells ; nofcells := 0 ;
save cells_t, cells_m, cells_b ; picture cells_t[], cells_m[], cells_b[] ;
save texts_t, texts_m, texts_b ; picture texts_t[], texts_m[], texts_b[] ;
+ save start_t, start_m, start_b ; numeric start_t[], start_m[], start_b[] ;
+ save cells_a ; picture cells_a[][] ;
+
+ save cell_top_colors ; color cell_top_colors[] ;
+ save cell_bot_colors ; color cell_bot_colors[] ;
+ save text_top_colors ; color text_top_colors[] ;
+ save text_mid_colors ; color text_mid_colors[] ;
+ save text_bot_colors ; color text_bot_colors[] ;
+
+ save cell_top_fills ; color cell_top_fills[] ;
+ save cell_bot_fills ; color cell_bot_fills[] ;
+ save text_top_fills ; color text_top_fills[] ;
+ save text_mid_fills ; color text_mid_fills[] ;
+ save text_bot_fills ; color text_bot_fills[] ;
+
+ save cell_top_lines ; numeric cell_top_lines[] ;
+ save cell_bot_lines ; numeric cell_bot_lines[] ;
+ save text_top_lines ; numeric text_top_lines[] ;
+ save text_mid_lines ; numeric text_mid_lines[] ;
+ save text_bot_lines ; numeric text_bot_lines[] ;
+
+ save cell_top_shapes ; numeric cell_top_shapes[] ;
+ save cell_bot_shapes ; numeric cell_bot_shapes[] ;
+ save text_top_shapes ; numeric text_top_shapes[] ;
+ save text_mid_shapes ; numeric text_mid_shapes[] ;
+ save text_bot_shapes ; numeric text_bot_shapes[] ;
+
+ save line_top_lines ; numeric line_top_lines[] ;
+ save line_mid_lines ; numeric line_mid_lines[] ;
+ save line_bot_lines ; numeric line_bot_lines[] ;
+
+ save line_top_colors ; color line_top_colors[] ;
+ save line_mid_colors ; color line_mid_colors[] ;
+ save line_bot_colors ; color line_bot_colors[] ;
+
+ save line_top_shapes ; numeric line_top_shapes[] ;
+ save line_mid_shapes ; numeric line_mid_shapes[] ;
+ save line_bot_shapes ; numeric line_bot_shapes[] ;
enddef ;
def step_end_chart =
@@ -106,6 +202,7 @@ def step_end_chart =
save height_t, width_t, max_height_t, max_width_t ; numeric height_t, width_t, max_height_t, max_width_t ;
save height_m, width_m, max_height_m, max_width_m ; numeric height_m, width_m, max_height_m, max_width_m ;
save height_b, width_b, max_height_b, max_width_b ; numeric height_b, width_b, max_height_b, max_width_b ;
+ save alternative ; numeric alternative ;
% check rows
one_row_only := true ;
for i=1 upto nofcells :
@@ -113,18 +210,43 @@ def step_end_chart =
one_row_only := false ;
fi ;
endfor ;
+ %
+ if chart_align :
+ save size, delta, width ; numeric size[], delta[], width[] ;
+ for i=1 upto 3:
+ size[i] = 0 ;
+ for c=1 upto nofcells :
+ size[i] := max(size[i],bbwidth(cells_a[c][i])) ;
+ endfor ;
+ endfor ;
+ for c=1 upto nofcells :
+ cells_t[c] := image (
+ for i=1 upto 3:
+ width[i] := bbwidth(cells_a[c][i]);
+ delta[i] := size[i] - width[i] ;
+ endfor;
+ setbounds cells_a[c][1] to boundingbox(cells_a[c][1]) leftenlarged (delta[1]) ;
+ setbounds cells_a[c][2] to boundingbox(cells_a[c][2]) leftenlarged (delta[2]/2)
+ rightenlarged(delta[2]/2) ;
+ setbounds cells_a[c][3] to boundingbox(cells_a[c][3]) rightenlarged(delta[3]) ;
+ cells_a[c][1] := cells_a[c][1] shifted (- width[1]/2 - size[2]/2 - text_distance_set,0) ;
+ cells_a[c][3] := cells_a[c][3] shifted ( width[3]/2 + size[2]/2 + text_distance_set,0) ;
+ for i=1 upto 3:
+ draw cells_a[c][i] ;
+ % draw boundingbox cells_a[c][i] ;
+ endfor ;
+ ) ;
+ endfor ;
+ fi ;
% swap and rotate
if chart_vertical :
if one_row_only :
% deal with mid_texts
max_width_t := max_width_m := max_width_b := 0 ;
for i=1 upto nofcells :
- width_t := bbwidth(texts_t[i]) ;
- width_m := bbwidth(texts_m[i]) ;
- width_b := bbwidth(texts_b[i]) ;
- if width_t > max_width_t : max_width_t := width_t fi ;
- if width_m > max_width_m : max_width_m := width_m fi ;
- if width_b > max_width_b : max_width_b := width_b fi ;
+ max_width_t := max(max_width_t,bbwidth(texts_t[i]));
+ max_width_m := max(max_width_m,bbwidth(texts_m[i]));
+ max_width_b := max(max_width_b,bbwidth(texts_b[i]));
endfor ;
if max_width_m > 0 :
for i=1 upto nofcells :
@@ -132,14 +254,17 @@ def step_end_chart =
text_m := texts_m[i] ; width_m := bbwidth(text_m) ;
text_b := texts_b[i] ; width_b := bbwidth(text_b) ;
if width_t < max_width_t :
- setbounds text_t to boundingbox text_t leftenlarged (max_width_t - width_t) ;
+ setbounds text_t to boundingbox text_t
+ leftenlarged (max_width_t - width_t) ;
fi ;
if width_m < max_width_m :
- setbounds text_m to boundingbox text_m leftenlarged ((max_width_m - width_m)/2) ;
- setbounds text_m to boundingbox text_m rightenlarged ((max_width_m - width_m)/2) ;
+ setbounds text_m to boundingbox text_m
+ leftenlarged ((max_width_m - width_m)/2)
+ rightenlarged ((max_width_m - width_m)/2) ;
fi ;
if width_b < max_width_b :
- setbounds text_b to boundingbox text_b rightenlarged (max_width_b - width_b) ;
+ setbounds text_b to boundingbox text_b
+ rightenlarged (max_width_b - width_b) ;
fi ;
text_t := text_t shifted (- xpart llcorner text_t, 0) ;
text_m := text_m shifted (- xpart llcorner text_m, 0) ;
@@ -161,6 +286,7 @@ def step_end_chart =
fi ;
else :
for i=1 upto nofcells :
+ % swaps so we need a scratch variable
cell_t := cells_t[i] ;
cell_b := cells_b[i] ;
cells_t[i] := cell_b rotated 90 ;
@@ -174,39 +300,31 @@ def step_end_chart =
fi ;
% align horizontal
for i=1 upto nofcells :
- cell_t := cells_t[i] ;
- cell_b := cells_b[i] ;
- width_t := bbwidth(cell_t) ;
- width_b := bbwidth(cell_b) ;
+ width_t := bbwidth(cells_t[i]) ;
+ width_b := bbwidth(cells_b[i]) ;
if (width_t = 0) and (width_b = 0) :
% skip
elseif (width_t > 0) and (width_t < width_b) :
delta := (width_b-width_t)/2 ;
- setbounds cell_t to boundingbox cell_t leftenlarged delta rightenlarged delta ;
- cells_t[i] := cell_t ;
+ setbounds cells_t[i] to boundingbox cells_t[i] leftenlarged delta rightenlarged delta ;
elseif (width_b > 0) and (width_t > width_b) :
delta := (width_t-width_b)/2 ;
- setbounds cell_b to boundingbox cell_b leftenlarged delta rightenlarged delta ;
- cells_b[i] := cell_b ;
+ setbounds cells_b[i] to boundingbox cells_b[i] leftenlarged delta rightenlarged delta ;
fi ;
endfor ;
% analyze vertical
max_height_t := 0 ;
max_height_b := 0 ;
for i=1 upto nofcells :
- cell_t := cells_t[i] ;
- cell_b := cells_b[i] ;
- height_t := bbheight(cell_t) ;
- height_b := bbheight(cell_b) ;
+ height_t := bbheight(cells_t[i]) ;
+ height_b := bbheight(cells_b[i]) ;
if height_t > 0 :
- setbounds cell_t to boundingbox cell_t enlarged cell_offset ;
+ setbounds cells_t[i] to boundingbox cells_t[i] enlarged cell_offset ;
height_t := height_t + 2 * cell_offset ;
- cells_t[i] := cell_t ;
fi ;
if height_b > 0 :
- setbounds cell_b to boundingbox cell_b enlarged cell_offset ;
+ setbounds cells_b[i] to boundingbox cells_b[i] enlarged cell_offset ;
height_b := height_b + 2 * cell_offset ;
- cells_b[i] := cell_b ;
fi ;
if height_t > max_height_t :
max_height_t := height_t ;
@@ -217,34 +335,24 @@ def step_end_chart =
endfor ;
% align vertical
for i=1 upto nofcells :
- cell_t := cells_t[i] ;
- cell_b := cells_b[i] ;
- height_t := bbheight(cell_t) ;
- height_b := bbheight(cell_b) ;
+ height_t := bbheight(cells_t[i]) ;
+ height_b := bbheight(cells_b[i]) ;
if height_t > 0 :
delta := (max_height_t-height_t)/2 ;
- setbounds cell_t to boundingbox cell_t topenlarged delta bottomenlarged delta ;
+ setbounds cells_t[i] to boundingbox cells_t[i] topenlarged delta bottomenlarged delta ;
fi ;
if height_b > 0 :
delta := (max_height_b-height_b)/2 ;
- setbounds cell_b to boundingbox cell_b topenlarged delta bottomenlarged delta ;
+ setbounds cells_b[i] to boundingbox cells_b[i] topenlarged delta bottomenlarged delta ;
fi ;
- cells_t[i] := cell_t ;
- cells_b[i] := cell_b ;
endfor ;
% position
dx := 0 ;
for i=1 upto nofcells :
- cell_t := cells_t[i] ;
- cell_b := cells_b[i] ;
- cell_t := cell_t shifted -llcorner cell_t ;
- cell_b := cell_b shifted -llcorner cell_b ;
- cell_t := cell_t shifted (dx, 0) ;
- cell_b := cell_b shifted (dx,-cell_distance_y-max_height_b) ;
- cells_t[i] := cell_t ;
- cells_b[i] := cell_b ;
- width_t := bbwidth(cell_t) ;
- width_b := bbwidth(cell_b) ;
+ cells_t[i] := cells_t[i] shifted -llcorner cells_t[i] shifted (dx, 0) ;
+ cells_b[i] := cells_b[i] shifted -llcorner cells_b[i] shifted (dx,-cell_distance_y-max_height_b) ;
+ width_t := bbwidth(cells_t[i]) ;
+ width_b := bbwidth(cells_b[i]) ;
if width_t > 0 :
dx := dx + cell_distance_x + width_t ;
elseif width_b > 0 :
@@ -253,19 +361,27 @@ def step_end_chart =
endfor ;
% flush
for i=1 upto nofcells :
- cell_t := cells_t[i] ;
- cell_b := cells_b[i] ;
- width_t := bbwidth(cell_t) ;
- width_b := bbwidth(cell_b) ;
+ width_t := bbwidth(cells_t[i]) ;
+ width_b := bbwidth(cells_b[i]) ;
if width_t > 0 :
- fill boundingbox cell_t withcolor cell_fill_color ;
- draw boundingbox cell_t withpen pencircle scaled cell_line_width withcolor cell_line_color ;
- draw cell_t ;
+ drawpredefinedshape (
+ if known cell_top_shapes[i] : cell_top_shapes[i] else : 24 fi,
+ cells_t[i],
+ if known cell_top_lines [i] : cell_top_lines [i] else : cell_line_width fi,
+ if known cell_top_colors[i] : cell_top_colors[i] else : cell_line_color fi,
+ if known cell_top_fills [i] : cell_top_fills [i] else : cell_fill_color fi
+ ) ;
+ draw cells_t[i] ;
fi ;
if width_b > 0 :
- fill boundingbox cell_b withcolor cell_fill_color ;
- draw boundingbox cell_b withpen pencircle scaled cell_line_width withcolor cell_line_color ;
- draw cell_b ;
+ drawpredefinedshape (
+ if known cell_bot_shapes[i] : cell_bot_shapes[i] else : 24 fi,
+ cells_b[i],
+ if known cell_bot_lines [i] : cell_bot_lines [i] else : cell_line_width fi,
+ if known cell_bot_colors[i] : cell_bot_colors[i] else : cell_line_color fi,
+ if known cell_bot_fills [i] : cell_bot_fills [i] else : cell_fill_color fi
+ ) ;
+ draw cells_b[i] ;
fi ;
endfor ;
%
@@ -273,54 +389,58 @@ def step_end_chart =
def midbottomboundary expr p = 0.5[llcorner boundingbox p, lrcorner boundingbox p] enddef ;
% draw top and bottom text boxes
for i=1 upto nofcells-1 :
- text_t := texts_t[i] ;
- text_b := texts_b[i] ;
- if bbwidth(text_t) > 0 :
- setbounds text_t to boundingbox text_t enlarged text_offset ;
- texts_t[i] := text_t ;
+ if bbwidth(texts_t[i]) > 0 :
+ setbounds texts_t[i] to boundingbox texts_t[i] enlarged text_offset ;
fi ;
- if bbwidth(text_b) > 0 :
- setbounds text_b to boundingbox text_b enlarged text_offset ;
- texts_b[i] := text_b ;
+ if bbwidth(texts_b[i]) > 0 :
+ setbounds texts_b[i] to boundingbox texts_b[i] enlarged text_offset ;
fi ;
endfor ;
% arrows
for i=1 upto nofcells-1 :
- cell_t := cells_t[i] ;
- cell_b := cells_b[i] ;
- next_t := cells_t[i+1] ;
- next_b := cells_b[i+1] ;
pair t_a, t_b, t_c, b_a, b_b, b_c ;
- t_a := midtopboundary cell_t ;
- t_b := midtopboundary next_t ;
- t_c := (xpart 0.5[t_a,t_b], ypart t_a+line_height+line_distance) ;
+ t_a := midtopboundary cells_t[i] ;
+ t_b := midtopboundary cells_t[i+1] ;
if one_row_only :
- b_a := midbottomboundary cell_t ;
- b_b := midbottomboundary next_t ;
+ b_a := midbottomboundary cells_t[i] ;
+ b_b := midbottomboundary cells_t[i+1] ;
else :
- b_a := midbottomboundary cell_b ;
- b_b := midbottomboundary next_b ;
+ b_a := midbottomboundary cells_b[i] ;
+ b_b := midbottomboundary cells_b[i+1] ;
fi ;
+ t_c := (xpart 0.5[t_a,t_b], ypart t_a+line_height+line_distance) ;
b_c := (xpart 0.5[b_a,b_b], ypart b_a-line_height-line_distance) ;
texts_t[i] := thelabel.top(texts_t[i],t_c) ;
texts_b[i] := thelabel.bot(texts_b[i],b_c) ;
endfor ;
%
for i=1 upto nofcells-1 : % todo arrows when empty text
- cell_t := cells_t[i] ;
- cell_b := cells_b[i] ;
- next_t := cells_t[i+1] ;
- next_b := cells_b[i+1] ;
text_t := texts_t[i] ;
text_b := texts_b[i] ;
+ cell_t := cells_t[start_t[i]] ;
+ cell_b := cells_b[start_b[i]] ;
+ next_t := cells_t[i+1] ;
+ next_b := cells_b[i+1] ;
if bbwidth(text_t) > 0 :
if bbwidth(cell_t) > 0 :
- drawarrow midtopboundary cell_t
- shifted (if i > 1 : line_offset else : 0 fi, cell_line_width) {up} ..
- midbottomboundary text_t shifted (0,-line_distance) ..
- {down} midtopboundary next_t shifted(if i < nofcells - 1 : -line_offset else : 0 fi,cell_line_width)
- withpen pencircle scaled line_line_width
- withcolor line_line_color ;
+ alternative := if known line_top_shapes[i] : line_top_shapes[i] else : 1 fi ;
+ if (alternative = 1) or (alternative = 2) : drawarrow else : draw fi
+ midtopboundary cell_t
+ shifted (if i > 1 : line_offset else : 0 fi, cell_line_width) {up} ..
+ midbottomboundary text_t
+ shifted (0,-line_distance) ..
+ {down} midtopboundary next_t
+ shifted (if i < nofcells - 1 : -line_offset else : 0 fi,cell_line_width)
+ if (alternative = 2) or (alternative = 4) :
+ dashed evenly scaled (
+ if known line_top_lines [i] : line_top_lines [i] else : line_line_width fi
+ )
+ fi
+ withpen pencircle scaled
+ if known line_top_lines [i] : line_top_lines [i] else : line_line_width fi
+ withcolor
+ if known line_top_colors[i] : line_top_colors[i] else : line_line_color fi
+ ;
else :
fi ;
fi ;
@@ -330,29 +450,49 @@ def step_end_chart =
next_b := next_t ;
fi ;
if bbwidth(cell_b) > 0 :
- drawarrow midbottomboundary cell_b
- shifted (if i > 1 : line_offset else : 0 fi, -cell_line_width) {down} ..
- midtopboundary text_b shifted (0, line_distance) ..
- {up} midbottomboundary next_b shifted (if i < nofcells - 1 : -line_offset else : 0 fi,-cell_line_width)
- withpen pencircle scaled line_line_width
- withcolor line_line_color ;
+ alternative := if known line_bot_shapes[i] : line_bot_shapes[i] else : 1 fi ;
+ if (alternative = 1) or (alternative = 2) : drawarrow else : draw fi
+ midbottomboundary cell_b
+ shifted (if i > 1 : line_offset else : 0 fi, -cell_line_width) {down} ..
+ midtopboundary text_b
+ shifted (0, line_distance) ..
+ {up} midbottomboundary next_b
+ shifted (if i < nofcells - 1 : -line_offset else : 0 fi,-cell_line_width)
+ if (alternative = 2) or (alternative = 4) :
+ dashed evenly scaled (
+ if known line_top_lines [i] : line_top_lines [i] else : line_line_width fi
+ )
+ fi
+ withpen pencircle scaled
+ if known line_bot_lines [i] : line_bot_lines [i] else : line_line_width fi
+ withcolor
+ if known line_bot_colors[i] : line_bot_colors[i] else : line_line_color fi
+ ;
else :
fi ;
fi ;
endfor ;
% draw top and bottom text boxes
for i=1 upto nofcells-1 :
- text_t := texts_t[i] ;
- text_b := texts_b[i] ;
- if bbwidth(text_t) > 0 :
- fill boundingbox text_t withcolor text_fill_color ;
- draw boundingbox text_t withpen pencircle scaled text_line_width withcolor text_line_color ;
- draw text_t ;
+ if bbwidth(texts_t[i]) > 0 :
+ drawpredefinedshape (
+ if known text_top_shapes[i] : text_top_shapes[i] else : 24 fi,
+ texts_t[i],
+ if known text_top_lines [i] : text_top_lines [i] else : text_line_width fi,
+ if known text_top_colors[i] : text_top_colors[i] else : text_line_color fi,
+ if known text_top_fills [i] : text_top_fills [i] else : text_fill_color fi
+ ) ;
+ draw texts_t[i] ;
fi ;
- if bbwidth(text_b) > 0 :
- fill boundingbox text_b withcolor text_fill_color ;
- draw boundingbox text_b withpen pencircle scaled text_line_width withcolor text_line_color ;
- draw text_b ;
+ if bbwidth(texts_b[i]) > 0 :
+ drawpredefinedshape (
+ if known text_bot_shapes[i] : text_bot_shapes[i] else : 24 fi,
+ texts_b[i],
+ if known text_bot_lines [i] : text_bot_lines [i] else : text_line_width fi,
+ if known text_bot_colors[i] : text_bot_colors[i] else : text_line_color fi,
+ if known text_bot_fills [i] : text_bot_fills [i] else : text_fill_color fi
+ ) ;
+ draw texts_b[i] ;
fi ;
endfor ;
if chart_vertical :
@@ -362,6 +502,8 @@ def step_end_chart =
endgroup ;
enddef ;
+% no longer working .. will do someday
+%
% start_begin_step ;
% step_cells ("\strut test 0", "\strut test 0") ;
% step_cells ("\strut test 1", "\vbox{\hsize3cm \strut oeps 1\crlf oeps 1}") ;