diff options
author | Taco Hoekwater <taco@elvenkind.com> | 2009-08-23 11:11:32 +0000 |
---|---|---|
committer | Taco Hoekwater <taco@elvenkind.com> | 2009-08-23 11:11:32 +0000 |
commit | 8fc3039c82d48605b5ca8b2eda3f4fdd755681e1 (patch) | |
tree | 3cd9bbdd599bc4d1ac0409e167fee2136e4c0ec9 /Master/texmf-dist/metapost/context/base/mp-core.mp | |
parent | 850fc99b7cd3ae7a20065531fe866ff7bae642ec (diff) |
this is context 2009.08.19 17:10
git-svn-id: svn://tug.org/texlive/trunk@14827 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/metapost/context/base/mp-core.mp')
-rw-r--r-- | Master/texmf-dist/metapost/context/base/mp-core.mp | 202 |
1 files changed, 112 insertions, 90 deletions
diff --git a/Master/texmf-dist/metapost/context/base/mp-core.mp b/Master/texmf-dist/metapost/context/base/mp-core.mp index 2b62559b8bc..7c5d5a1c1b1 100644 --- a/Master/texmf-dist/metapost/context/base/mp-core.mp +++ b/Master/texmf-dist/metapost/context/base/mp-core.mp @@ -1,15 +1,3 @@ -%D \module -%D [ file=mp-core.mp, -%D version=2000.something, % 1999.08.12, -%D title=\CONTEXT\ \METAPOST\ graphics, -%D subtitle=core interfacing, -%D author=Hans Hagen, -%D date=\currentdate, -%D copyright={PRAGMA / Hans Hagen \& Ton Otten}] -%C -%C This module is part of the \CONTEXT\ macro||package and is -%C therefore copyrighted by \PRAGMA. See licen-en.pdf for -%C details. if unknown context_tool : input mp-tool ; fi ; if known context_core : endinput ; fi ; @@ -135,7 +123,6 @@ def initialize_area_par (expr fn,fx,fy,fw,fh,fd, numeric mpos ; mpos := 6 ; freeze_box(mpos) ; -% do_initialize_area (fpos, tpos) ; do_initialize_par (fpos, tpos, mpos, ffpos, 0,0,0,0,0,0) ; enddef ; @@ -359,6 +346,8 @@ boolean force_multi_par_chain ; force_multi_par_chain := true ; boolean one_piece_multi_par ; one_piece_multi_par := false ; boolean check_multi_par_chain ; check_multi_par_chain := true ; % extra page check +boolean multi_column_first_page_hack; multi_column_first_page_hack := true ; % seems to work ok + def simplify_multi_pars = % boundingbox ipv shape als optie for i := 1 upto nofmultipars : multipars[i] := boundingbox multipars[i] ; @@ -422,7 +411,6 @@ def prepare_multi_pars (expr fn,fx,fy,fw,fh,fd, pair par_start_pos ; -% par_start_pos := llxy[fpos] if par_indent<0: shifted (-par_indent,0) fi ; par_start_pos := llxy[fpos] if par_indent <0: shifted (-par_indent, 0) fi @@ -442,8 +430,6 @@ def prepare_multi_pars (expr fn,fx,fy,fw,fh,fd, numeric multi_par_pages ; multi_par_pages := nxy[tpos]-nxy[fpos]+1 ; - ii := 0 ; nn := NOfTextAreas+1 ; nofmultipars := 0 ; - vardef snapped_multi_pos (expr p) = if snap_multi_par_tops : if abs(ypart p - ypart ulcorner multipar) < par_line_height : @@ -516,15 +502,13 @@ def prepare_multi_pars (expr fn,fx,fy,fw,fh,fd, vardef left_top_hang (expr same_area) = -par_hang_after := ra + estimated_par_lines(py-fy) ; + par_hang_after := ra + estimated_par_lines(py-fy) ; if (par_hang_indent>0) and (par_hang_after<0) and obey_multi_par_hang : pair _ul_ ; _ul_ := (xpart ulcorner multipar, ypart snapped_multi_pos(ulxy[fpos])); pair _pa_ ; _pa_ := _ul_ shifted (0,par_hang_after*par_line_height) ; -% _pa_ := (xpart _pa_,max(ypart _pa_,ypart llcorner multipar)) ; _pa_ := (xpart _pa_,max(ypart _pa_ -TopSkipCorrection,ypart llcorner multipar)) ; if same_area : -% _pa_ := (xpart _pa_,max(ypart _pa_,ypart llxy[tpos])) ; _pa_ := (xpart _pa_,max(ypart _pa_ -TopSkipCorrection,ypart llxy[tpos])) ; fi ; if obey_multi_par_more and (round(par_line_height)>0) : @@ -541,8 +525,7 @@ par_hang_after := ra + estimated_par_lines(py-fy) ; vardef right_top_hang (expr same_area) = -% par_hang_after := ra - estimated_par_lines(py-fy) ; -par_hang_after := ra + estimated_par_lines(py-fy) ; + par_hang_after := ra + estimated_par_lines(py-fy) ; if (par_hang_indent<0) and (par_hang_after<0) and obey_multi_par_hang : pair _ur_ ; _ur_ := (xpart urcorner multipar, ypart snapped_multi_pos(urxy[fpos])) ; @@ -569,17 +552,15 @@ par_hang_after := ra + estimated_par_lines(py-fy) ; pair _ul_ ; _ul_ := ulcorner multipar ; pair _pa_ ; _pa_ := _ul_ shifted (0,par_hang_after*par_line_height) ; _pa_ := (xpart _pa_,max(ypart _pa_,ypart llcorner multipar)) ; - -if t : - _pa_ := (xpart _pa_,max(ypart _pa_,ypart llxy[tpos])); -fi ; -if abs(ypart _pa_-ypart llxy[tpos])<par_line_height : - _pa_ := (xpart _pa_,ypart llxy[tpos]); -fi ; -if abs(ypart _pa_-ypart llcorner multipar)<par_line_height : - _pa_ := (xpart _pa_,ypart llcorner multipar); -fi ; - + if t : + _pa_ := (xpart _pa_,max(ypart _pa_,ypart llxy[tpos])); + fi ; + if abs(ypart _pa_-ypart llxy[tpos])<par_line_height : + _pa_ := (xpart _pa_,ypart llxy[tpos]); + fi ; + if abs(ypart _pa_-ypart llcorner multipar)<par_line_height : + _pa_ := (xpart _pa_,ypart llcorner multipar); + fi ; (xpart _ul_, ypart _pa_) -- (xpart _ul_ + par_hang_indent, ypart _pa_) -- (xpart _ul_ + par_hang_indent, ypart _ul_) @@ -588,27 +569,15 @@ fi ; fi enddef ; -% here - vardef x_right_top_hang (expr i, t) = par_hang_after := min(0,ra + estimated_multi_par_height(i,t)) ; if (par_hang_indent<0) and (par_hang_after<0) : pair _ur_ ; _ur_ := urcorner multipar ; pair _pa_ ; _pa_ := _ur_ shifted (0,par_hang_after*par_line_height) ; _pa_ := (xpart _pa_,max(ypart _pa_,ypart lrcorner multipar)) ; -if t : - _pa_ := (xpart _pa_,max(ypart _pa_,ypart snapped_multi_pos(urxy[tpos]))) ; -fi ; - -%todo -% -%if abs(ypart _pa_-ypart llxy[tpos])<par_line_height : -% _pa_ := (xpart _pa_,ypart llxy[tpos]); -%fi ; -%if abs(ypart _pa_-ypart llcorner multipar)<par_line_height : -% _pa_ := (xpart _pa_,ypart llcorner multipar); -%fi ; - + if t : + _pa_ := (xpart _pa_,max(ypart _pa_,ypart snapped_multi_pos(urxy[tpos]))) ; + fi ; (xpart _ur_ + par_hang_indent, ypart _ur_) -- (xpart _ur_ + par_hang_indent, ypart _pa_) -- (xpart _ur_, ypart _pa_) @@ -702,17 +671,13 @@ fi ; enddef ; def test_multipar = -% multipar := -% llcorner multipar -- -% urcorner multipar -- -% lrcorner multipar -- -% ulcorner multipar -- -% cycle ; multipar := boundingbox multipar ; enddef ; % first loop + ii := 0 ; nn := NOfTextAreas+1 ; nofmultipars := 0 ; + if enable_multi_par_fallback and (nxy[fpos]=RealPageNumber) and (nxy[tpos]=RealPageNumber) and not @@ -908,8 +873,7 @@ fi ; x_left_top_hang(i,true) -- x_right_top_hang(i,true) -- x_right_bottom_hang(i,true) -- -% ulxy[tpos] -- -snapped_multi_pos(ulxy[tpos]) -- + snapped_multi_pos(ulxy[tpos]) -- llxy[tpos] -- x_left_bottom_hang(i,true) -- cycle ; @@ -920,8 +884,7 @@ snapped_multi_pos(ulxy[tpos]) -- ulcorner multipar -- urcorner multipar -- (xpart lrcorner multipar, ypart urxy[tpos]) -- -% ulxy[tpos] -- -snapped_multi_pos(ulxy[tpos]) -- + snapped_multi_pos(ulxy[tpos]) -- llxy[tpos] -- (xpart llcorner multipar, ypart llxy[tpos]) -- cycle ; @@ -930,47 +893,50 @@ snapped_multi_pos(ulxy[tpos]) -- save_multipar (i,3,multipar) ; - else : + elseif multi_column_first_page_hack and ((nxy[fpos]=RealPageNumber) and (nxy[tpos]>=RealPageNumber) and (NOfTextColumns>1)) : - % handled later + save_multipar (i,2,multipar) ; + else : + % handled later fi ; endfor ; % second loop -if force_multi_par_chain or (ii > 1) : + if force_multi_par_chain or (ii > 1) : - for i=ii+1 upto nn-1 : + for i=ii+1 upto nn-1 : - % rest of chain / todo : hang + % rest of chain / todo : hang -% we need to test, else we get a <lineheight bottom one -% triggering a whole text frame; weird +% hm, the second+ column in column sets now gets lost in a NOfTextColumns -if (not check_multi_par_chain) or ((nxy[fpos]<RealPageNumber) and (nxy[tpos]>RealPageNumber)) : + if (not check_multi_par_chain) or + ((nxy[fpos]<RealPageNumber) and (nxy[tpos]>RealPageNumber)) + : - multipar := set_multipar(i) ; + multipar := set_multipar(i) ; - if obey_multi_par_hang and obey_multi_par_more : + if obey_multi_par_hang and obey_multi_par_more : - multipar := - x_left_top_hang(i,false) -- - x_right_top_hang(i,false) -- - x_right_bottom_hang(i,false) -- - x_left_bottom_hang(i,false) -- - cycle ; + multipar := + x_left_top_hang(i,false) -- + x_right_top_hang(i,false) -- + x_right_bottom_hang(i,false) -- + x_left_bottom_hang(i,false) -- + cycle ; - fi ; + fi ; - save_multipar(i,2,multipar) ; + save_multipar(i,2,multipar) ; -fi ; + fi ; - endfor ; + endfor ; -fi ; + fi ; % end of normal/fallback @@ -1079,9 +1045,6 @@ def sort_multi_pars = fi ; enddef ; -% This collapses successive areas (possibly interrupted by -% floats. First we need to sort the areas, since they are -% normally in de order start, end, inbetween. def collapse_multi_pars = if nofmultipars>1 : @@ -1110,20 +1073,40 @@ multirefs[_nofmultipars_] := multirefs[i+1] ; fi ; enddef ; +% def draw_multi_pars = +% for i=1 upto nofmultipars : +% do_draw_par(multipars[i]) ; +% if boxgridtype= 1 : +% draw baseline_grid (multipars[i],up,true ) ; % withcolor boxgridcolor ; +% elseif boxgridtype= 2 : +% draw baseline_grid (multipars[i],up,false) ; % withcolor boxgridcolor ; +% elseif boxgridtype= 3 : +% draw baseline_grid (multipars[i],up,true ) ; % withcolor boxgridcolor ; +% draw baseline_grid (multipars[i],up,true ) +% shifted (0,ExHeight) ; % withcolor boxgridcolor ; +% elseif boxgridtype= 4 : +% draw baseline_grid (multipars[i],up,true ) +% shifted (0,ExHeight/2) ; % withcolor boxgridcolor ; +% elseif boxgridtype=11 : +% draw graphic_grid(multipars[i],boxgriddistance,boxgriddistance,boxgriddistance/2,boxgriddistance/2) ; +% elseif boxgridtype=12 : +% draw graphic_grid(multipars[i],boxgriddistance,boxgriddistance,0,0) ; +% fi ; +% endfor ; +% enddef ; + def draw_multi_pars = for i=1 upto nofmultipars : do_draw_par(multipars[i]) ; if boxgridtype= 1 : - draw baseline_grid (multipars[i],up,true ) ; % withcolor boxgridcolor ; + draw baseline_grid (multipars[i],if multilocs[i]=1: down else: up fi,true) ; % withcolor boxgridcolor ; elseif boxgridtype= 2 : - draw baseline_grid (multipars[i],up,false) ; % withcolor boxgridcolor ; + draw baseline_grid (multipars[i],if multilocs[i]=1: down else: up fi,false) ; % withcolor boxgridcolor ; elseif boxgridtype= 3 : - draw baseline_grid (multipars[i],up,true ) ; % withcolor boxgridcolor ; - draw baseline_grid (multipars[i],up,true ) - shifted (0,ExHeight) ; % withcolor boxgridcolor ; + draw baseline_grid (multipars[i],if multilocs[i]=1: down else: up fi,true) ; % withcolor boxgridcolor ; + draw baseline_grid (multipars[i],if multilocs[i]=1: down else: up fi,true) shifted (0,ExHeight) ; % withcolor boxgridcolor ; elseif boxgridtype= 4 : - draw baseline_grid (multipars[i],up,true ) - shifted (0,ExHeight/2) ; % withcolor boxgridcolor ; + draw baseline_grid (multipars[i],if multilocs[i]=1: down else: up fi,true) shifted (0,ExHeight/2) ; % withcolor boxgridcolor ; elseif boxgridtype=11 : draw graphic_grid(multipars[i],boxgriddistance,boxgriddistance,boxgriddistance/2,boxgriddistance/2) ; elseif boxgridtype=12 : @@ -1231,7 +1214,6 @@ let draw_area = draw_box ; let anchor_area = anchor_box ; let anchor_par = anchor_box ; -% new and experimental and yet undocumented numeric sync_n[], sync_p[][], sync_w[][], sync_h[][], sync_d[][], sync_t[][] ; pair sync_xy[][] ; color sync_c[][] ; @@ -1286,7 +1268,6 @@ vardef PrepareSyncTasks(expr n, collapse, extendtop, prestartnext) = NOfSyncPaths := NOfSyncPaths + 1 ; if not ok : if i>1 : -% not yet correct when two of the same follow each other if sync_t[n][i-1] = sync_t[n][i] : SyncPaths[NOfSyncPaths] := SyncBox(n, i, SyncLeftOffset, SyncWidth, PaperHeight, -PaperHeight) ; SyncTasks[NOfSyncPaths] := i ; @@ -1394,3 +1375,44 @@ def ProcessSyncTask(expr p, c) = enddef ; endinput ; + +end + +% for Jelle Huisman +% +% \setupcolors[state=start] +% \dontcomplain +% \definecolumnset[example][n=3,distance=5mm] +% \startMPextensions +% multi_column_first_page_hack := true ; +% \stopMPextensions +% \startuseMPgraphic{mpos:par:trick} +% for i=1 upto nofmultipars-1 : draw (rightboundary multipars[i]) shifted (2.5mm, 0) ; endfor ; +% \stopuseMPgraphic +% \definetextbackground[test][mp=mpos:par:trick,method=mpos:par:columnset] +% \starttext +% \definecolumnsetspan[chapter][n=3] +% \startcolumnset[example] +% \startcolumnsetspan[chapter] +% \chapter{Chapter One} +% \stopcolumnsetspan +% \starttextbackground[test] \dorecurse {3}{\input knuth } \stoptextbackground +% \stopcolumnset +% \startcolumnset[example] +% \startcolumnsetspan[chapter] +% \chapter{Chapter One} +% \stopcolumnsetspan +% \starttextbackground[test] \dorecurse {10}{\input knuth } \stoptextbackground +% \stopcolumnset +% \stoptext +% +% fast variant: +% +% \startuseMPgraphic{whatever} +% for i=1 upto NOfTextColumns-1 : +% draw (rightboundary TextColumns[i]) shifted (2.5mm,0) shifted -\MPxy\textanchor ; +% endfor ; +% setbounds currentpicture to OverlayBox ; +% \stopuseMPgraphic +% \defineoverlay[whatever][\useMPgraphic{whatever}] +% \setupbackgrounds[text][background=whatever] |