From 7a559b447d7318c984e38e98bf36fd83ef8a74e9 Mon Sep 17 00:00:00 2001 From: Marius Date: Thu, 20 Oct 2011 13:00:13 +0300 Subject: beta 2011.10.20 11:44 --- metapost/context/base/mp-char.mpiv | 346 ++++++++++++--------- metapost/context/base/mp-tool.mpiv | 2 +- tex/context/base/cont-new.mkii | 2 +- tex/context/base/cont-new.mkiv | 2 +- tex/context/base/context-version.pdf | Bin 4105 -> 4112 bytes tex/context/base/context-version.png | Bin 105305 -> 105750 bytes tex/context/base/context.mkii | 2 +- tex/context/base/context.mkiv | 2 +- tex/context/base/m-chart.lua | 77 ++++- tex/context/base/status-files.pdf | Bin 24095 -> 24113 bytes tex/context/base/status-lua.pdf | Bin 163918 -> 163916 bytes tex/generic/context/luatex/luatex-fonts-merged.lua | 2 +- 12 files changed, 269 insertions(+), 166 deletions(-) diff --git a/metapost/context/base/mp-char.mpiv b/metapost/context/base/mp-char.mpiv index 83fa20155..91d50b912 100644 --- a/metapost/context/base/mp-char.mpiv +++ b/metapost/context/base/mp-char.mpiv @@ -11,7 +11,10 @@ %C therefore copyrighted by \PRAGMA. See licen-en.pdf for %C details. -%D This is ancient code .. but I see no need to rewrite it. +%D This is ancient code .. but I see no need to rewrite it. This is +%D already a partial rewrite but more could be delegated to \LUA\ +%D when used in \CONTEXT\ but it does not pay off now to look into +%D that. if unknown context_shap : input "mp-shap.mpiv" ; fi ; if known context_flow : endinput ; fi ; @@ -119,38 +122,41 @@ def flow_new_chart = flow_dash_pattern := nullpicture ; - numeric flow_xypoint ; flow_xypoint := 0 ; - numeric flow_cpath ; flow_cpath := 0 ; - - pair flow_xypoints [] ; - boolean flow_xyfree [][] ; - path flow_xypath [][] ; - numeric flow_xysx [][] ; - numeric flow_xysy [][] ; - color flow_xyfill [][] ; - color flow_xydraw [][] ; - numeric flow_xyline [][] ; - boolean flow_xypeep [][] ; - picture flow_xytext [][] ; - picture flow_xylabel_l[][] ; - picture flow_xylabel_r[][] ; - picture flow_xylabel_t[][] ; - picture flow_xylabel_b[][] ; - picture flow_xyexit_l [][] ; - picture flow_xyexit_r [][] ; - picture flow_xyexit_t [][] ; - picture flow_xyexit_b [][] ; - path flow_cpaths [] ; - numeric flow_cline [] ; - color flow_ccolor [] ; - boolean flow_carrow [] ; - boolean flow_cdash [] ; - boolean flow_ccross [] ; - - picture flow_tpicture[][] ; - picture flow_bpicture[][] ; - picture flow_lpicture[][] ; - picture flow_rpicture[][] ; + numeric flow_xypoint ; flow_xypoint := 0 ; + numeric flow_cpath ; flow_cpath := 0 ; + + pair flow_xypoints [] ; + boolean flow_xyfree [][] ; + path flow_xypath [][] ; + numeric flow_xysx [][] ; + numeric flow_xysy [][] ; + color flow_xyfill [][] ; + color flow_xydraw [][] ; + numeric flow_xyline [][] ; + boolean flow_xypeep [][] ; + picture flow_xytext [][] ; + picture flow_xylabel_l [][] ; + picture flow_xylabel_r [][] ; + picture flow_xylabel_t [][] ; + picture flow_xylabel_b [][] ; + picture flow_xyexit_l [][] ; + picture flow_xyexit_r [][] ; + picture flow_xyexit_t [][] ; + picture flow_xyexit_b [][] ; + picture flow_xycomment_txt[][][][] ; + string flow_xycomment_loc[][][][] ; + numeric flow_xycomment_len[][][][] ; + path flow_cpaths [] ; + numeric flow_cline [] ; + color flow_ccolor [] ; + boolean flow_carrow [] ; + boolean flow_cdash [] ; + boolean flow_ccross [] ; + picture flow_tpicture [][] ; + picture flow_bpicture [][] ; + picture flow_lpicture [][] ; + picture flow_rpicture [][] ; + path flow_centers [][][] ; predefined_shapes[61] := (fullcircle scaled (1.5*predefined_shapes_yradius) xscaled (flow_grid_height/flow_grid_width)) ; predefined_shapes[62] := (fullcircle scaled (2.0*predefined_shapes_yradius) xscaled (flow_grid_height/flow_grid_width)) ; @@ -160,11 +166,11 @@ enddef ; flow_new_chart ; def flow_y_pos(expr y) = - if flow_reverse_y : +% if flow_reverse_y : flow_max_y + 1 - y - else : - y - fi +% else : +% y +% fi enddef ; def flow_initialize_grid(expr maxx, maxy) = @@ -381,17 +387,22 @@ vardef flow_connection_path = flow_xypoints[flow_xypoint]) enddef ; -def flow_draw_connection = +def flow_draw_connection(expr i,xfrom,yfrom,xto,yto) = % 'i' is a comment reference if flow_xypoint > 0 : flow_collapse_points ; flow_trim_points ; - flow_cpath := flow_cpath + 1 ; + flow_cpath := flow_cpath + 1 ; % maybe also store as x,y flow_cpaths[flow_cpath] := flow_connection_path flow_scaled_to_grid ; flow_cline[flow_cpath] := flow_connection_line_width ; flow_ccolor[flow_cpath] := flow_connection_line_color ; flow_carrow[flow_cpath] := flow_arrowtip ; flow_cdash[flow_cpath] := flow_dashline ; flow_ccross[flow_cpath] := flow_showcrossing ; + if flow_reverse_connection : + flow_centers[xto] [yto] [i] := flow_cpaths[flow_cpath] ; + else : + flow_centers[xfrom][yfrom][i] := flow_cpaths[flow_cpath] ; + fi ; else : message("no connection defined") ; fi ; @@ -450,46 +461,85 @@ def flow_draw_midpoint (expr n) = endgroup ; enddef ; -def flow_flush_picture(expr x, yy) = - begingroup ; save y ; numeric y ; +def flow_flush_picture(expr x, yy) = % more in lua + begingroup ; + save y ; numeric y ; y := flow_y_pos(yy) ; - if known flow_xytext[x][y] : + if known flow_xytext[x][y] : % maybe test on path for comments begingroup ; % flow_xypath[x][y] save p, offset ; path p ; pair offset ; offset := flow_xy_offset((x+0.5)*flow_grid_width,(flow_max_y-y+1.5)*flow_grid_height) ; offset := offset shifted (-flow_xyline[x][y]/4,-flow_xyline[x][y]/4) ; % terrible hack (some compensation) - p := fullsquare - xscaled flow_grid_width - yscaled flow_grid_height - shifted offset ; - if known flow_xytext[x][y]: - draw flow_xytext[x][y] shifted offset ; + p := fullsquare xscaled flow_grid_width yscaled flow_grid_height shifted offset ; + % + save loc ; string loc ; + save len ; numeric len ; + save txt ; picture txt ; + save cen ; path cen ; + % + txt := flow_xytext[x][y] ; if known txt : + draw txt shifted offset ; fi ; - if known flow_xylabel_t[x][y] : - label.urt(flow_xylabel_t[x][y],0.5[ulcorner p,urcorner p]) ; + % is simple comment (sort of obsolete) + txt := flow_xylabel_t[x][y] ; if known txt : + label.urt(txt,0.5[ulcorner p,urcorner p]) ; fi ; - if known flow_xylabel_b[x][y] : - label.lrt(flow_xylabel_b[x][y],0.5[llcorner p,lrcorner p]) ; + txt := flow_xylabel_b[x][y] ; if known txt : + label.lrt(txt,0.5[llcorner p,lrcorner p]) ; fi ; - if known flow_xylabel_l[x][y] : - label.ulft(flow_xylabel_l[x][y],0.5[ulcorner p,llcorner p]) ; + txt := flow_xylabel_l[x][y] ; if known txt : + label.ulft(txt,0.5[ulcorner p,llcorner p]) ; fi ; - if known flow_xylabel_r[x][y] : - label.urt (flow_xylabel_r[x][y],0.5[urcorner p,lrcorner p]) ; + txt := flow_xylabel_r[x][y] ; if known txt : + label.urt (txt,0.5[urcorner p,lrcorner p]) ; fi ; - if known flow_xyexit_t[x][y] : - label.top(flow_xyexit_t[x][y],0.5[ulcorner p,urcorner p] shifted (0, flow_grid_height/2)) ; + % is shifted comment + txt := flow_xyexit_t[x][y] ; if known txt : + label.top(txt,0.5[ulcorner p,urcorner p] shifted (0, flow_grid_height/2)) ; fi ; - if known flow_xyexit_b[x][y] : - label.bot(flow_xyexit_b[x][y],0.5[llcorner p,lrcorner p] shifted (0,-flow_grid_height/2)) ; + txt := flow_xyexit_b[x][y] ; if known txt : + label.bot(txt,0.5[llcorner p,lrcorner p] shifted (0,-flow_grid_height/2)) ; fi ; - if known flow_xyexit_l[x][y] : - label.lft(flow_xyexit_l[x][y],0.5[ulcorner p,llcorner p] shifted (-flow_grid_width/2,0)) ; + txt := flow_xyexit_l[x][y] ; if known txt : + label.lft(txt,0.5[ulcorner p,llcorner p] shifted (-flow_grid_width/2,0)) ; fi ; - if known flow_xyexit_r[x][y] : - label.rt (flow_xyexit_r[x][y],0.5[urcorner p,lrcorner p] shifted ( flow_grid_width/2,0)) ; + txt := flow_xyexit_r[x][y] ; if known txt : + label.rt (txt,0.5[urcorner p,lrcorner p] shifted ( flow_grid_width/2,0)) ; fi ; + % along the path or anchored + for i=1 upto infinity : + cen := flow_centers[x][y][i] ; + if unknown cen : + break ; + else : + for j=1 upto infinity : + txt := flow_xycomment_txt[x][y][i][j] ; + if unknown txt : + break ; + else : % todo: see how we can store suffix + loc := flow_xycomment_loc[x][y][i][j] ; + len := flow_xycomment_len[x][y][i][j] ; + pair a ; + if len <> 0 : + a := point len along cen ; + fi ; + if loc = "tl" : label.ulft(txt,if len = 0 : 0.5[ulcorner p,urcorner p] else : a fi) ; + elseif loc = "t" : label.top (txt,if len = 0 : 0.5[ulcorner p,urcorner p] else : a fi) ; + elseif loc = "tr" : label.urt (txt,if len = 0 : 0.5[ulcorner p,urcorner p] else : a fi) ; + elseif loc = "bl" : label.llft(txt,if len = 0 : 0.5[llcorner p,lrcorner p] else : a fi) ; + elseif loc = "b" : label.bot (txt,if len = 0 : 0.5[llcorner p,lrcorner p] else : a fi) ; + elseif loc = "br" : label.lrt (txt,if len = 0 : 0.5[llcorner p,lrcorner p] else : a fi) ; + elseif loc = "lt" : label.ulft(txt,if len = 0 : 0.5[ulcorner p,llcorner p] else : a fi) ; + elseif loc = "l" : label.lft (txt,if len = 0 : 0.5[ulcorner p,llcorner p] else : a fi) ; + elseif loc = "lb" : label.lrt (txt,if len = 0 : 0.5[ulcorner p,llcorner p] else : a fi) ; + elseif loc = "rt" : label.urt (txt,if len = 0 : 0.5[urcorner p,lrcorner p] else : a fi) ; + elseif loc = "r" : label.rt (txt,if len = 0 : 0.5[urcorner p,lrcorner p] else : a fi) ; + elseif loc = "rb" : label.lrt (txt,if len = 0 : 0.5[urcorner p,lrcorner p] else : a fi) ; fi ; + fi ; + endfor ; + fi ; + endfor ; endgroup ; fi ; endgroup ; @@ -499,15 +549,21 @@ def flow_chart_draw_text(expr x, y, p) = flow_xytext[x][y] := p ; enddef ; -def flow_chart_draw_label_t(expr x, y, p) = flow_xylabel_t[x][y] := p ; enddef ; -def flow_chart_draw_label_b(expr x, y, p) = flow_xylabel_b[x][y] := p ; enddef ; -def flow_chart_draw_label_l(expr x, y, p) = flow_xylabel_l[x][y] := p ; enddef ; -def flow_chart_draw_label_r(expr x, y, p) = flow_xylabel_r[x][y] := p ; enddef ; +def flow_chart_draw_label_t (expr x, y, p) = flow_xylabel_t [x][y] := p ; enddef ; +def flow_chart_draw_label_b (expr x, y, p) = flow_xylabel_b [x][y] := p ; enddef ; +def flow_chart_draw_label_l (expr x, y, p) = flow_xylabel_l [x][y] := p ; enddef ; +def flow_chart_draw_label_r (expr x, y, p) = flow_xylabel_r [x][y] := p ; enddef ; -def flow_chart_draw_exit_t (expr x, y, p) = flow_xyexit_t [x][y] := p ; enddef ; -def flow_chart_draw_exit_b (expr x, y, p) = flow_xyexit_b [x][y] := p ; enddef ; -def flow_chart_draw_exit_l (expr x, y, p) = flow_xyexit_l [x][y] := p ; enddef ; -def flow_chart_draw_exit_r (expr x, y, p) = flow_xyexit_r [x][y] := p ; enddef ; +def flow_chart_draw_exit_t (expr x, y, p) = flow_xyexit_t [x][y] := p ; enddef ; +def flow_chart_draw_exit_b (expr x, y, p) = flow_xyexit_b [x][y] := p ; enddef ; +def flow_chart_draw_exit_l (expr x, y, p) = flow_xyexit_l [x][y] := p ; enddef ; +def flow_chart_draw_exit_r (expr x, y, p) = flow_xyexit_r [x][y] := p ; enddef ; + +def flow_chart_draw_comment (expr x, y, i, j, p, l, n) = + flow_xycomment_txt[x][y][i][j] := p ; + flow_xycomment_loc[x][y][i][j] := l ; + flow_xycomment_len[x][y][i][j] := n ; +enddef ; boolean flow_reverse_connection ; flow_reverse_connection := false ; @@ -613,7 +669,7 @@ vardef flow_valid_connection (expr xfrom, yfrom, xto, yto) = endgroup enddef ; -def flow_connect_top_bottom (expr xfrom, yyfrom, zfrom) (expr xto, yyto, zto) = +def flow_connect_top_bottom (expr n) (expr xfrom, yyfrom, zfrom) (expr xto, yyto, zto) = yfrom := flow_y_pos(yyfrom) ; yto := flow_y_pos(yyto) ; if flow_points_initialized(xfrom,yfrom,xto,yto,6) : @@ -638,11 +694,11 @@ def flow_connect_top_bottom (expr xfrom, yyfrom, zfrom) (expr xto, yyto, zto) = flow_xypoints[5] := flow_xypoints[5] shifted (0,flow_dsp_y) ; fi %%%% end experiment - flow_draw_connection ; + flow_draw_connection(n,xfrom,yyfrom,xto,yyto) ; fi ; enddef ; -def flow_connect_left_right (expr xfrom,yyfrom,zfrom) (expr xto,yyto,zto) = +def flow_connect_left_right (expr n) (expr xfrom,yyfrom,zfrom) (expr xto,yyto,zto) = yfrom := flow_y_pos(yyfrom) ; yto := flow_y_pos(yyto) ; if flow_points_initialized(xfrom,yfrom,xto,yto,6) : @@ -662,11 +718,11 @@ def flow_connect_left_right (expr xfrom,yyfrom,zfrom) (expr xto,yyto,zto) = flow_xypoints[4] := flow_xypoints[4] shifted (0,-flow_dsp_y) ; fi ; %%%% end experiment - flow_draw_connection ; - fi ; + flow_draw_connection(n,xfrom,yyfrom,xto,yyto) ; + fi ; enddef ; -def flow_connect_left_top (expr xfrom,yyfrom,zfrom) (expr xto,yyto,zto) = +def flow_connect_left_top (expr n) (expr xfrom,yyfrom,zfrom) (expr xto,yyto,zto) = yfrom := flow_y_pos(yyfrom) ; yto := flow_y_pos(yyto) ; if flow_points_initialized(xfrom,yfrom,xto,yto,5) : @@ -678,11 +734,11 @@ def flow_connect_left_top (expr xfrom,yyfrom,zfrom) (expr xto,yyto,zto) = if not flow_valid_connection(xfrom,yfrom,xto,yto) : flow_xypoints[3] := flow_xy_on_grid(2,4) ; fi ; - flow_draw_connection ; + flow_draw_connection(n,xfrom,yyfrom,xto,yyto) ; fi ; enddef ; -def flow_connect_left_bottom (expr xfrom,yyfrom,zfrom) (expr xto,yyto,zto) = +def flow_connect_left_bottom (expr n) (expr xfrom,yyfrom,zfrom) (expr xto,yyto,zto) = yfrom := flow_y_pos(yyfrom) ; yto := flow_y_pos(yyto) ; if flow_points_initialized(xfrom,yfrom,xto,yto,5) : @@ -694,11 +750,11 @@ def flow_connect_left_bottom (expr xfrom,yyfrom,zfrom) (expr xto,yyto,zto) = if not flow_valid_connection(xfrom,yfrom,xto,yto) : flow_xypoints[3] := flow_xy_on_grid(2,4) ; fi ; - flow_draw_connection ; + flow_draw_connection(n,xfrom,yyfrom,xto,yyto) ; fi ; enddef ; -def flow_connect_right_top (expr xfrom,yyfrom,zfrom) (expr xto,yyto,zto) = +def flow_connect_right_top (expr n) (expr xfrom,yyfrom,zfrom) (expr xto,yyto,zto) = yfrom := flow_y_pos(yyfrom) ; yto := flow_y_pos(yyto) ; if flow_points_initialized(xfrom,yfrom,xto,yto,5) : @@ -710,11 +766,11 @@ def flow_connect_right_top (expr xfrom,yyfrom,zfrom) (expr xto,yyto,zto) = if not flow_valid_connection(xfrom,yfrom,xto,yto) : flow_xypoints[3] := flow_xy_on_grid(2,4) ; fi ; - flow_draw_connection ; + flow_draw_connection(n,xfrom,yyfrom,xto,yyto) ; fi ; enddef ; -def flow_connect_right_bottom (expr xfrom,yyfrom,zfrom) (expr xto,yyto,zto) = +def flow_connect_right_bottom (expr n) (expr xfrom,yyfrom,zfrom) (expr xto,yyto,zto) = yfrom := flow_y_pos(yyfrom) ; yto := flow_y_pos(yyto) ; if flow_points_initialized(xfrom,yfrom,xto,yto,5) : @@ -737,11 +793,11 @@ def flow_connect_right_bottom (expr xfrom,yyfrom,zfrom) (expr xto,yyto,zto) = flow_xypoints[4] := flow_xypoints[4] shifted (0,flow_dsp_y) ; fi %%%% end experiment - flow_draw_connection ; + flow_draw_connection(n,xfrom,yyfrom,xto,yyto) ; fi ; enddef ; -def flow_connect_left_left (expr xfrom,yyfrom,zfrom) (expr xto,yyto,zto) = +def flow_connect_left_left (expr n) (expr xfrom,yyfrom,zfrom) (expr xto,yyto,zto) = yfrom := flow_y_pos(yyfrom) ; yto := flow_y_pos(yyto) ; if flow_points_initialized(xfrom,yfrom,xto,yto,6) : @@ -755,11 +811,11 @@ def flow_connect_left_left (expr xfrom,yyfrom,zfrom) (expr xto,yyto,zto) = flow_xypoints[3] := flow_y_on_grid(2,yfrom,yto,zfrom) ; flow_xypoints[4] := flow_xy_on_grid(5,3) ; fi ; - flow_draw_connection ; + flow_draw_connection(n,xfrom,yyfrom,xto,yyto) ; fi ; enddef ; -def flow_connect_right_right (expr xfrom,yyfrom,zfrom) (expr xto,yyto,zto) = +def flow_connect_right_right (expr n) (expr xfrom,yyfrom,zfrom) (expr xto,yyto,zto) = yfrom := flow_y_pos(yyfrom) ; yto := flow_y_pos(yyto) ; if flow_points_initialized(xfrom,yfrom,xto,yto,6) : @@ -773,11 +829,11 @@ def flow_connect_right_right (expr xfrom,yyfrom,zfrom) (expr xto,yyto,zto) = flow_xypoints[3] := flow_y_on_grid(2,yfrom,yto,zfrom) ; flow_xypoints[4] := flow_xy_on_grid(5,3) ; fi ; - flow_draw_connection ; + flow_draw_connection(n,xfrom,yyfrom,xto,yyto) ; fi ; enddef ; -def flow_connect_top_top (expr xfrom,yyfrom,zfrom) (expr xto,yyto,zto) = +def flow_connect_top_top (expr n) (expr xfrom,yyfrom,zfrom) (expr xto,yyto,zto) = yfrom := flow_y_pos(yyfrom) ; yto := flow_y_pos(yyto) ; if flow_points_initialized(xfrom,yfrom,xto,yto,6) : @@ -799,11 +855,11 @@ def flow_connect_top_top (expr xfrom,yyfrom,zfrom) (expr xto,yyto,zto) = flow_xypoints[5] := flow_xypoints[5] shifted (0,flow_dsp_y) ; fi ; %%%% end experiment - flow_draw_connection ; + flow_draw_connection(n,xfrom,yyfrom,xto,yyto) ; fi ; enddef ; -def flow_connect_bottom_bottom (expr xfrom,yyfrom,zfrom) (expr xto,yyto,zto) = +def flow_connect_bottom_bottom (expr n) (expr xfrom,yyfrom,zfrom) (expr xto,yyto,zto) = yfrom := flow_y_pos(yyfrom) ; yto := flow_y_pos(yyto) ; if flow_points_initialized(xfrom,yfrom,xto,yto,6) : @@ -828,38 +884,38 @@ def flow_connect_bottom_bottom (expr xfrom,yyfrom,zfrom) (expr xto,yyto,zto) = flow_xypoints[5] := flow_xypoints[5] shifted (0,flow_dsp_y) ; fi %%%% end experiment - flow_draw_connection ; + flow_draw_connection(n,xfrom,yyfrom,xto,yyto) ; fi ; enddef ; -def flow_connect_bottom_top (expr xfrom,yfrom,zfrom) (expr xto,yto,zto) = +def flow_connect_bottom_top (expr n) (expr xfrom,yfrom,zfrom) (expr xto,yto,zto) = flow_reverse_connection := true ; - flow_connect_top_bottom (xto,yto,zto) (xfrom,yfrom,zfrom) ; + flow_connect_top_bottom (n) (xto,yto,zto) (xfrom,yfrom,zfrom) ; enddef ; -def flow_connect_right_left (expr xfrom,yfrom,zfrom) (expr xto,yto,zto) = +def flow_connect_right_left (expr n) (expr xfrom,yfrom,zfrom) (expr xto,yto,zto) = flow_reverse_connection := true ; - flow_connect_left_right (xto,yto,zto) (xfrom,yfrom,zfrom) ; + flow_connect_left_right (n) (xto,yto,zto) (xfrom,yfrom,zfrom) ; enddef ; -def flow_connect_top_left (expr xfrom,yfrom,zfrom) (expr xto,yto,zto) = +def flow_connect_top_left (expr n) (expr xfrom,yfrom,zfrom) (expr xto,yto,zto) = flow_reverse_connection := true ; - flow_connect_left_top(xto,yto,zto) (xfrom,yfrom,zfrom) ; + flow_connect_left_top (n) (xto,yto,zto) (xfrom,yfrom,zfrom) ; enddef ; -def flow_connect_bottom_left (expr xfrom,yfrom,zfrom) (expr xto,yto,zto) = +def flow_connect_bottom_left (expr n) (expr xfrom,yfrom,zfrom) (expr xto,yto,zto) = flow_reverse_connection := true ; - flow_connect_left_bottom (xto,yto,zto) (xfrom,yfrom,zfrom) ; + flow_connect_left_bottom (n) (xto,yto,zto) (xfrom,yfrom,zfrom) ; enddef ; -def flow_connect_top_right (expr xfrom,yfrom,zfrom) (expr xto,yto,zto) = +def flow_connect_top_right (expr n) (expr xfrom,yfrom,zfrom) (expr xto,yto,zto) = flow_reverse_connection := true ; - flow_connect_right_top (xto,yto,zto) (xfrom,yfrom,zfrom) ; + flow_connect_right_top (n) (xto,yto,zto) (xfrom,yfrom,zfrom) ; enddef ; -def flow_connect_bottom_right (expr xfrom,yfrom,zfrom) (expr xto,yto,zto) = +def flow_connect_bottom_right (expr n) (expr xfrom,yfrom,zfrom) (expr xto,yto,zto) = flow_reverse_connection := true ; - flow_connect_right_bottom (xto,yto,zto) (xfrom,yfrom,zfrom) ; + flow_connect_right_bottom (n) (xto,yto,zto) (xfrom,yfrom,zfrom) ; enddef ; def flow_draw_test_shape(expr x, y) = @@ -895,55 +951,55 @@ def flow_show_connection(expr n, m) = flow_draw_test_shape(6,2) ; flow_draw_test_shape(4,6) ; if (m=1) : - flow_connect_top_bottom (2,2,0) (4,5,0) ; - flow_connect_top_bottom (3,3,0) (5,1,0) ; - flow_connect_top_bottom (2,5,0) (1,3,0) ; - flow_connect_top_bottom (6,2,0) (4,6,0) ; + flow_connect_top_bottom (0) (2,2,0) (4,5,0) ; + flow_connect_top_bottom (0) (3,3,0) (5,1,0) ; + flow_connect_top_bottom (0) (2,5,0) (1,3,0) ; + flow_connect_top_bottom (0) (6,2,0) (4,6,0) ; elseif (m=2) : - flow_connect_top_top (2,2,0) (4,5,0) ; - flow_connect_top_top (3,3,0) (5,1,0) ; - flow_connect_top_top (2,5,0) (1,3,0) ; - flow_connect_top_top (6,2,0) (4,6,0) ; + flow_connect_top_top (0) (2,2,0) (4,5,0) ; + flow_connect_top_top (0) (3,3,0) (5,1,0) ; + flow_connect_top_top (0) (2,5,0) (1,3,0) ; + flow_connect_top_top (0) (6,2,0) (4,6,0) ; elseif (m=3) : - flow_connect_bottom_bottom (2,2,0) (4,5,0) ; - flow_connect_bottom_bottom (3,3,0) (5,1,0) ; - flow_connect_bottom_bottom (2,5,0) (1,3,0) ; - flow_connect_bottom_bottom (6,2,0) (4,6,0) ; + flow_connect_bottom_bottom (0) (2,2,0) (4,5,0) ; + flow_connect_bottom_bottom (0) (3,3,0) (5,1,0) ; + flow_connect_bottom_bottom (0) (2,5,0) (1,3,0) ; + flow_connect_bottom_bottom (0) (6,2,0) (4,6,0) ; elseif (m=4) : - flow_connect_left_right (2,2,0) (4,5,0) ; - flow_connect_left_right (3,3,0) (5,1,0) ; - flow_connect_left_right (2,5,0) (1,3,0) ; - flow_connect_left_right (6,2,0) (4,6,0) ; + flow_connect_left_right (0) (2,2,0) (4,5,0) ; + flow_connect_left_right (0) (3,3,0) (5,1,0) ; + flow_connect_left_right (0) (2,5,0) (1,3,0) ; + flow_connect_left_right (0) (6,2,0) (4,6,0) ; elseif (m=5) : - flow_connect_left_left (2,2,0) (4,5,0) ; - flow_connect_left_left (3,3,0) (5,1,0) ; - flow_connect_left_left (2,5,0) (1,3,0) ; - flow_connect_left_left (6,2,0) (4,6,0) ; + flow_connect_left_left (0) (2,2,0) (4,5,0) ; + flow_connect_left_left (0) (3,3,0) (5,1,0) ; + flow_connect_left_left (0) (2,5,0) (1,3,0) ; + flow_connect_left_left (0) (6,2,0) (4,6,0) ; elseif (m=6) : - flow_connect_right_right (2,2,0) (4,5,0) ; - flow_connect_right_right (3,3,0) (5,1,0) ; - flow_connect_right_right (2,5,0) (1,3,0) ; - flow_connect_right_right (6,2,0) (4,6,0) ; + flow_connect_right_right (0) (2,2,0) (4,5,0) ; + flow_connect_right_right (0) (3,3,0) (5,1,0) ; + flow_connect_right_right (0) (2,5,0) (1,3,0) ; + flow_connect_right_right (0) (6,2,0) (4,6,0) ; elseif (m=7) : - flow_connect_left_top (2,2,0) (4,5,0) ; - flow_connect_left_top (3,3,0) (5,1,0) ; - flow_connect_left_top (2,5,0) (1,3,0) ; - flow_connect_left_top (6,2,0) (4,6,0) ; + flow_connect_left_top (0) (2,2,0) (4,5,0) ; + flow_connect_left_top (0) (3,3,0) (5,1,0) ; + flow_connect_left_top (0) (2,5,0) (1,3,0) ; + flow_connect_left_top (0) (6,2,0) (4,6,0) ; elseif (m=8) : - flow_connect_left_bottom (2,2,0) (4,5,0) ; - flow_connect_left_bottom (3,3,0) (5,1,0) ; - flow_connect_left_bottom (2,5,0) (1,3,0) ; - flow_connect_left_bottom (6,2,0) (4,6,0) ; + flow_connect_left_bottom (0) (2,2,0) (4,5,0) ; + flow_connect_left_bottom (0) (3,3,0) (5,1,0) ; + flow_connect_left_bottom (0) (2,5,0) (1,3,0) ; + flow_connect_left_bottom (0) (6,2,0) (4,6,0) ; elseif (m=9) : - flow_connect_right_top (2,2,0) (4,5,0) ; - flow_connect_right_top (3,3,0) (5,1,0) ; - flow_connect_right_top (2,5,0) (1,3,0) ; - flow_connect_right_top (6,2,0) (4,6,0) ; + flow_connect_right_top (0) (2,2,0) (4,5,0) ; + flow_connect_right_top (0) (3,3,0) (5,1,0) ; + flow_connect_right_top (0) (2,5,0) (1,3,0) ; + flow_connect_right_top (0) (6,2,0) (4,6,0) ; else : - flow_connect_right_bottom (2,2,0) (4,5,0) ; - flow_connect_right_bottom (3,3,0) (5,1,0) ; - flow_connect_right_bottom (2,5,0) (1,3,0) ; - flow_connect_right_bottom (6,2,0) (4,6,0) ; + flow_connect_right_bottom (0) (2,2,0) (4,5,0) ; + flow_connect_right_bottom (0) (3,3,0) (5,1,0) ; + flow_connect_right_bottom (0) (2,5,0) (1,3,0) ; + flow_connect_right_bottom (0) (6,2,0) (4,6,0) ; fi ; flow_end_chart ; diff --git a/metapost/context/base/mp-tool.mpiv b/metapost/context/base/mp-tool.mpiv index 79110e752..65a76f8fa 100644 --- a/metapost/context/base/mp-tool.mpiv +++ b/metapost/context/base/mp-tool.mpiv @@ -1190,7 +1190,7 @@ primarydef pct along pat = % also negative enddef ; primarydef len on pat = - (arctime if len>0 : len else : (arclength(pat)+len) fi of pat) of pat + ((arctime if len>0 : len else : (arclength(pat)+len) fi of pat) of pat) enddef ; % this cuts of a piece from both ends diff --git a/tex/context/base/cont-new.mkii b/tex/context/base/cont-new.mkii index 184b572cc..9ac76e424 100644 --- a/tex/context/base/cont-new.mkii +++ b/tex/context/base/cont-new.mkii @@ -11,7 +11,7 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -\newcontextversion{2011.10.19 23:10} +\newcontextversion{2011.10.20 11:44} %D This file is loaded at runtime, thereby providing an %D excellent place for hacks, patches, extensions and new diff --git a/tex/context/base/cont-new.mkiv b/tex/context/base/cont-new.mkiv index 1e045568d..438df663c 100644 --- a/tex/context/base/cont-new.mkiv +++ b/tex/context/base/cont-new.mkiv @@ -11,7 +11,7 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -\newcontextversion{2011.10.19 23:10} +\newcontextversion{2011.10.20 11:44} %D This file is loaded at runtime, thereby providing an %D excellent place for hacks, patches, extensions and new diff --git a/tex/context/base/context-version.pdf b/tex/context/base/context-version.pdf index 3753826da..86bb8863b 100644 Binary files a/tex/context/base/context-version.pdf and b/tex/context/base/context-version.pdf differ diff --git a/tex/context/base/context-version.png b/tex/context/base/context-version.png index f031c57fb..6463ff5a7 100644 Binary files a/tex/context/base/context-version.png and b/tex/context/base/context-version.png differ diff --git a/tex/context/base/context.mkii b/tex/context/base/context.mkii index 98ee11df7..03e9469dd 100644 --- a/tex/context/base/context.mkii +++ b/tex/context/base/context.mkii @@ -20,7 +20,7 @@ %D your styles an modules. \edef\contextformat {\jobname} -\edef\contextversion{2011.10.19 23:10} +\edef\contextversion{2011.10.20 11:44} %D For those who want to use this: diff --git a/tex/context/base/context.mkiv b/tex/context/base/context.mkiv index 49ca9eec4..d5e4549ec 100644 --- a/tex/context/base/context.mkiv +++ b/tex/context/base/context.mkiv @@ -20,7 +20,7 @@ %D your styles an modules. \edef\contextformat {\jobname} -\edef\contextversion{2011.10.19 23:10} +\edef\contextversion{2011.10.20 11:44} %D For those who want to use this: diff --git a/tex/context/base/m-chart.lua b/tex/context/base/m-chart.lua index 1d76e9845..2b1761558 100644 --- a/tex/context/base/m-chart.lua +++ b/tex/context/base/m-chart.lua @@ -101,10 +101,29 @@ local validshapes = { } local validlabellocations = { - l = "l", left = "l", - r = "r", right = "r", - t = "t", top = "t", - b = "b", bottom = "b", + l = "l", left = "l", + r = "r", right = "r", + t = "t", top = "t", + b = "b", bottom = "b", + lt = "lt", + rt = "rt", + lb = "lb", + rb = "rb", +} + +local validcommentlocations = { + l = "l", left = "l", + r = "r", right = "r", + t = "t", top = "t", + b = "b", bottom = "b", + lt = "lt", + rt = "rt", + lb = "lb", + rb = "rb", + tl = "lt", + tr = "rt", + bl = "lb", + br = "rb", } setmetatableindex(validshapes,function(t,k) @@ -180,7 +199,6 @@ end function commands.flow_start_cell(settings) temp = { labels = { }, - comments = { }, exits = { }, connections = { }, settings = settings, @@ -231,11 +249,20 @@ function commands.flow_set_label(location,text) } end -function commands.flow_set_comment(name,str) - temp.comments[#temp.comments+1] = { - location = location, - text = text, - } +function commands.flow_set_comment(location,text) + local connections = temp.connections + if connections then + local connection = connections[#connections] + if connection then + local comments = connection.comments + if comments then + comments[#comments+1] = { + location = location, + text = text, + } + end + end + end end function commands.flow_set_exit(location,text) @@ -408,6 +435,7 @@ function commands.flow_set_connection(location,displacement,name) dx = dx or 0, dy = dy or 0, name = name, + comments = { }, } end @@ -453,7 +481,6 @@ local function process_cells(chart,xoffset,yoffset) context("flow_shape_line_width := %s ; " , points(shapesettings.rulethickness)) end context("flow_peepshape := false ;") -- todo --- context("flow_new_shape(%s,%s,%s) ;",cell.x+xoffset,cell.y+yoffset,shapedata.number) context("flow_new_shape(%s,%s,%s) ;",cell.x+xoffset,cell.y+yoffset,shapedata.number) context("flow_end_sub_chart ;") end @@ -523,7 +550,7 @@ local function process_connections(chart,xoffset,yoffset) context("flow_dsp_x := %s ; flow_dsp_y := %s ;",connection.dx or 0, connection.dy or 0) context("flow_connection_line_color := \\MPcolor{%s} ;",linesettings.color) context("flow_connection_line_width := 2pt ;",points(linesettings.rulethickness)) - context("flow_connect_%s_%s(%s,%s,%s) (%s,%s,%s) ;",where_cell,where_other,cellx,celly,what_cell,otherx,othery,what_other) + context("flow_connect_%s_%s (%s) (%s,%s,%s) (%s,%s,%s) ;",where_cell,where_other,j,cellx,celly,what_cell,otherx,othery,what_other) context("flow_dsp_x := 0 ; flow_dsp_y := 0 ;") end end @@ -535,6 +562,8 @@ end local texttemplate = "\\setvariables[flowcell:text][x=%s,y=%s,text={%s},align={%s},figure={%s},destination={%s}]" +local splitter = lpeg.splitat(":") + local function process_texts(chart,xoffset,yoffset) local data = chart.data local hash = chart.hash @@ -577,9 +606,24 @@ local function process_texts(chart,xoffset,yoffset) end end end - local comments = cell.comments - for i=1,#comments do - -- invisible + local connections = cell.connections + for i=1,#connections do + local comments = connections[i].comments + for j=1,#comments do + local comment = comments[j] + local text = comment.text + local location = comment.location or "" + local length = 0 + local loc, len = lpegmatch(splitter,location) + if loc then + location = loc + length = tonumber(len) or 0 + end + location = validcommentlocations[location] + if text and location then + context('flow_chart_draw_comment(%s,%s,%s,%s,textext("%s"),"%s",%s) ;',x,y,i,j,text,location,length) + end + end end end end @@ -702,10 +746,13 @@ local function makechart(chart) local gridwidth = shapewidth + 2*settings.chart.dx local shapeheight = settings.chart.height local gridheight = shapeheight + 2*settings.chart.dy + local chartoffset = settings.chart.offset + context("flow_grid_width := %s ;", points(gridwidth)) context("flow_grid_height := %s ;", points(gridheight)) context("flow_shape_width := %s ;", points(shapewidth)) context("flow_shape_height := %s ;", points(shapeheight)) + context("flow_chart_offset := %s ;", points(chartoffset)) -- local radius = settings.line.radius local rulethickness = settings.line.rulethickness diff --git a/tex/context/base/status-files.pdf b/tex/context/base/status-files.pdf index d299bfc1a..f73987ff8 100644 Binary files a/tex/context/base/status-files.pdf and b/tex/context/base/status-files.pdf differ diff --git a/tex/context/base/status-lua.pdf b/tex/context/base/status-lua.pdf index ec6a091ca..1022b300b 100644 Binary files a/tex/context/base/status-lua.pdf and b/tex/context/base/status-lua.pdf differ diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua index 4f82f9b8f..1a110f706 100644 --- a/tex/generic/context/luatex/luatex-fonts-merged.lua +++ b/tex/generic/context/luatex/luatex-fonts-merged.lua @@ -1,6 +1,6 @@ -- merged file : luatex-fonts-merged.lua -- parent file : luatex-fonts.lua --- merge date : 10/19/11 23:10:36 +-- merge date : 10/20/11 11:44:39 do -- begin closure to overcome local limits and interference -- cgit v1.2.3