diff options
Diffstat (limited to 'Master/texmf-dist/metapost')
15 files changed, 634 insertions, 898 deletions
diff --git a/Master/texmf-dist/metapost/context/base/mpii/mp-text.mpii b/Master/texmf-dist/metapost/context/base/mpii/mp-text.mpii index b7787a42d65..5f96f6788e1 100644 --- a/Master/texmf-dist/metapost/context/base/mpii/mp-text.mpii +++ b/Master/texmf-dist/metapost/context/base/mpii/mp-text.mpii @@ -56,11 +56,12 @@ boolean hobbiestextext ; hobbiestextext := false ; % enddef ; vardef textext@#(expr txt) = + save _s_ ; string _s_ ; interim labeloffset := textextoffset ; noftexpictures := noftexpictures + 1 ; if string txt : if hobbiestextext : % the tex.mp method as fallback (see tex.mp) - write "btex " & txt & " etex" to "mptextmp.mp" ; + write _s_ & "btex " & txt & " etex" to "mptextmp.mp" ; write EOF to "mptextmp.mp" ; scantokens "input mptextmp" else : diff --git a/Master/texmf-dist/metapost/context/base/mpiv/metafun.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/metafun.mpiv index fa43d3460b5..818fd7c56c8 100644 --- a/Master/texmf-dist/metapost/context/base/mpiv/metafun.mpiv +++ b/Master/texmf-dist/metapost/context/base/mpiv/metafun.mpiv @@ -38,7 +38,6 @@ input "mp-func.mpiv" ; % under construction input "mp-node.mpiv" ; % relatively small so preloaded input "mp-apos.mpiv" ; input "mp-abck.mpiv" ; -input "mp-blob.mpiv" ; string metafunversion ; metafunversion = "metafun iv" & " " & diff --git a/Master/texmf-dist/metapost/context/base/mpiv/minifun.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/minifun.mpiv deleted file mode 100644 index 6d877fddb51..00000000000 --- a/Master/texmf-dist/metapost/context/base/mpiv/minifun.mpiv +++ /dev/null @@ -1,45 +0,0 @@ -%D \module -%D [ file=minifun.mp, -%D version=2018.06.02, -%D title=\CONTEXT\ \METAPOST\ graphics, -%D subtitle=format generation file, -%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 mreadme.pdf for -%C details. - -%D This is a minimal \METAFUN\ instance which can be handy for isolated -%D subruns. - -prologues := 0 ; -mpprocset := 1 ; - -input "mp-base.mpiv" ; -input "mp-tool.mpiv" ; -input "mp-mlib.mpiv" ; -input "mp-luas.mpiv" ; -input "mp-page.mpiv" ; - -string minifunversion ; minifunversion = - "minifun iv" & " " & - decimal year & "-" & - decimal month & "-" & - decimal day & " " & - if ((time div 60) < 10) : "0" & fi - decimal (time div 60) & ":" & - if ((time-(time div 60)*60) < 10) : "0" & fi - decimal (time-(time div 60)*60) ; - -let normalend = end ; - -if known mplib : - def end = ; message "" ; message minifunversion ; message "" ; endinput ; enddef ; - def bye = ; message "" ; message minifunversion ; message "" ; endinput ; enddef ; -else : - def end = ; message "" ; message minifunversion ; message "" ; normalend ; enddef ; -fi ; - -% dump ; % obsolete in mplib diff --git a/Master/texmf-dist/metapost/context/base/mpiv/mp-asnc.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-asnc.mpiv index 2eb4091242e..fba182a6485 100644 --- a/Master/texmf-dist/metapost/context/base/mpiv/mp-asnc.mpiv +++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-asnc.mpiv @@ -15,103 +15,163 @@ if known context_asnc : endinput ; fi ; boolean context_asnc ; context_asnc := true ; -%D This is a rather old mechanism that we once needed in an actually nice -%D design. Those were the times that processing a rather complex xml file -%D with pdftex into a 400 page document took 45 minutes (a few runs) while -%D nowadays with luatex and mkiv we express runtime in seconds. -%D -%D The logic is mostly the same but some work is delegated to Lua so that -%D we save memory and also run faster. As this was not really a used module -%D the interface also was upgraded. As we know the bottlenecks in mp we also -%D work around it a bit. - -numeric mfun_sync_count ; -numeric mfun_sync_page ; - -vardef StartSync(expr n) = - numeric CurrentSyncClass ; CurrentSyncClass := n ; - numeric SyncHOffset ; SyncHOffset := 0 ; - numeric SyncVOffset ; SyncVOffset := 0 ; - numeric SyncWidth ; SyncWidth := 0 ; - path SyncPaths[] ; - numeric SyncTasks[] ; - numeric SyncKinds[] ; - % - mfun_sync_page := RealPageNumber ; - mfun_sync_count := 0 ; -enddef ; - -def StopSync = - % maybe some cleanup -enddef ; - -vardef CollectSyncDataPage = - mfun_sync_count := lua.mp.sync_collect(CurrentSyncClass,mfun_sync_page) ; -enddef ; - -vardef CollectSyncDataRegion(expr region) = - mfun_sync_count := lua.mp.sync_collect(CurrentSyncClass,mfun_sync_page,region) ; -enddef ; - -vardef MakeSyncPaths = - if mfun_sync_count > 0 : - save k, t, b ; - save l ; l := SyncHOffset ; - save r ; r := SyncHOffset + SyncWidth ; - save y ; y := lua.mp.sync_get_y() + SyncVOffset ; - for i=1 upto mfun_sync_count : - k := lua.mp.sync_get_kind(i) ; - t := lua.mp.sync_get_top(i) - y ; - b := lua.mp.sync_get_bottom(i) - y ; - SyncPaths[i] = ((l,t) -- (r,t) -- (r,b) -- (l,b) -- cycle) ; - SyncTasks[i] = lua.mp.sync_get_task(i) ; - SyncKinds[i] = k ; - endfor ; +% will be replaced + +numeric sync_n[], sync_p[][], sync_w[][], sync_h[][], sync_d[][], sync_t[][] ; +pair sync_xy[][] ; color sync_c[][] ; + +def ResetSyncTasks = + path SyncPaths[] ; numeric SyncTasks[], NOfSyncPaths, CurrentSyncClass ; + NOfSyncPaths := CurrentSyncClass := 0 ; + if unknown SyncLeftOffset : numeric SyncLeftOffset ; SyncLeftOffset := 0 ; fi ; + if unknown SyncWidth : numeric SyncWidth ; SyncWidth := 0 ; fi ; + if unknown SyncThreshold : numeric SyncThreshold ; SyncThreshold := LineHeight ; fi ; + if unknown SyncColor : color SyncColor ; SyncColor := .5white ; fi ; + if (SyncLeftOffset = 0) and (SyncWidth = 0) : + SyncWidth := if known TextWidth : TextWidth else : -1cm fi ; fi ; enddef ; -% Extend to the top of the text area. +ResetSyncTasks ; -vardef ExtendSyncPaths = - mfun_sync_count := lua.mp.sync_extend() ; +vardef SyncBox(expr n, i, leftoffset, width, topoffset, bottomoffset) = + save o ; pair o ; o := (xpart llcorner PlainTextArea,ypart sync_xy[n][i]) ; + o shifted (leftoffset,sync_h[n][i]+topoffset) -- + o shifted (width+leftoffset,sync_h[n][i]+topoffset) -- + o shifted (width+leftoffset,bottomoffset) -- + o shifted (leftoffset,bottomoffset) -- cycle enddef ; -% Clip to the text area. - -vardef PruneSyncPaths = - mfun_sync_count := lua.mp.sync_prune() ; +def SetSyncColor(expr n, i, c) = + sync_c[n][i] := c ; enddef ; -% Remove duplicate tasks - -vardef CollapseSyncPaths = - mfun_sync_count := lua.mp.sync_collapse() ; +def SetSyncThreshold(expr n, i, th) = + sync_th[n][i] := th ; enddef ; -def SetSyncColor(expr n, i, c) = - lua.mp.sync_set_color(n,i,c) ; +vardef TheSyncColor(expr n, i) = + if known sync_c[n][i] : sync_c[n][i] else : SyncColor fi enddef ; -vardef TheSyncColor(expr n, i) = - lua.mp.sync_get_color(n,i) +vardef TheSyncThreshold(expr n, i) = + if known sync_th[n][i] : sync_th[n][i] else : SyncThreshold fi enddef ; -vardef SyncPathColor(expr i) = - lua.mp.sync_get_color(CurrentSyncClass,SyncTasks[i]) +vardef PrepareSyncTasks(expr n, collapse, extendtop, prestartnext) = + ResetSyncTasks ; + if known sync_n[n] : + CurrentSyncClass := n ; + save ok, l, d ; boolean ok ; ok := false ; NOfSyncPaths := l := 0 ; + for i=1 upto sync_n[n] : + if RealPageNumber > sync_p[n][i] : + l := i ; + elseif RealPageNumber = sync_p[n][i] : + NOfSyncPaths := NOfSyncPaths + 1 ; + if not ok : + if i>1 : + if sync_t[n][i-1] = sync_t[n][i] : + SyncPaths[NOfSyncPaths] := SyncBox(n, i, SyncLeftOffset, SyncWidth, PaperHeight, -PaperHeight) ; + SyncTasks[NOfSyncPaths] := i ; + else : + SyncPaths[NOfSyncPaths] := SyncBox(n, i-1, SyncLeftOffset, SyncWidth, PaperHeight, -PaperHeight) ; + SyncTasks[NOfSyncPaths] := i-1 ; + NOfSyncPaths := NOfSyncPaths + 1 ; + SyncPaths[NOfSyncPaths] := SyncBox(n, i, SyncLeftOffset, SyncWidth, 0, -PaperHeight) ; + SyncTasks[NOfSyncPaths] := i ; + fi ; + else : + SyncPaths[NOfSyncPaths] := SyncBox(n, i, SyncLeftOffset, SyncWidth, 0, -PaperHeight) ; + SyncTasks[NOfSyncPaths] := i ; + fi ; + else : + SyncPaths[NOfSyncPaths] := SyncBox(n, i, SyncLeftOffset, SyncWidth, 0, -PaperHeight) ; + SyncTasks[NOfSyncPaths] := i ; + fi ; + ok := true ; + fi ; + endfor ; + if (NOfSyncPaths = 0) and (l > 0) : + NOfSyncPaths := 1 ; + SyncPaths[NOfSyncPaths] := SyncBox(n, l, SyncLeftOffset, SyncWidth, PaperHeight, -PaperHeight) ; + SyncTasks[NOfSyncPaths] := l ; + fi ; + if NOfSyncPaths > 0 : + for i = 1 upto NOfSyncPaths-1 : + SyncPaths[i] := topboundary SyncPaths[i] -- reverse topboundary SyncPaths[i+1] -- cycle ; + endfor ; + if unknown SyncThresholdMethod : + numeric SyncThresholdMethod ; SyncThresholdMethod := 2 ; + fi ; + if extendtop : + if SyncThresholdMethod = 1 : + if NOfSyncPaths>1 : + d := ypart (ulcorner PlainTextArea - sync_xy[n][SyncTasks[2]]) ; + if (SyncTasks[2]>1) and (d > 0pt) and (d <= TheSyncThreshold(n,sync_t[n][SyncTasks[2]])) and (sync_p[n][SyncTasks[2]] = RealPageNumber) : + SyncPaths[2] := SyncPaths[2] topenlarged PaperHeight ; + fi ; + fi ; + else : + for i = 1 upto NOfSyncPaths : + d := ypart (ulcorner PlainTextArea - sync_xy[n][SyncTasks[i]]) ; + if (d > 0) and (d <= TheSyncThreshold(n,sync_t[n][SyncTasks[i]])) and (sync_p[n][SyncTasks[i]] = RealPageNumber) : + SyncPaths[i] := SyncPaths[i] topenlarged PaperHeight ; + fi ; + endfor ; + fi ; + fi ; + if prestartnext : + if NOfSyncPaths>1 : + if SyncTasks[NOfSyncPaths] < sync_n[n] : % there is a next one + d := ypart (ulcorner PlainTextArea - sync_xy[n][SyncTasks[NOfSyncPaths]+1]) ; + if (d > 0) and (d <= TheSyncThreshold(n, sync_t[n][SyncTasks[i]])) and (sync_p[n][SyncTasks[NOfSyncPaths]+1] = RealPageNumber+1) : + SyncPaths[NOfSyncPaths+1] := + (xpart ulcorner SyncPaths[NOfSyncPaths],ypart llcorner PlainTextArea) -- + (xpart urcorner SyncPaths[NOfSyncPaths],ypart llcorner PlainTextArea) -- + lrcorner SyncPaths[NOfSyncPaths] -- + llcorner SyncPaths[NOfSyncPaths] -- cycle ; + SyncTasks[NOfSyncPaths+1] := SyncTasks[NOfSyncPaths]+1 ; + NOfSyncPaths := NOfSyncPaths + 1 ; + fi ; + fi ; + fi ; + else : + if NOfSyncPaths>1 : + d := ypart (sync_xy[n][SyncTasks[NOfSyncPaths]] - llcorner PlainTextArea) ; + if (d < TheSyncThreshold(n, SyncTasks[NOfSyncPaths])) : + NOfSyncPaths := NOfSyncPaths - 1 ; + SyncPaths[NOfSyncPaths] := SyncPaths[NOfSyncPaths] bottomenlarged PaperHeight ; + fi ; + fi ; + fi ; + if (NOfSyncPaths>1) and collapse : + save j ; numeric j ; j := 1 ; + for i = 2 upto NOfSyncPaths : + if sync_t[n][SyncTasks[i]] = sync_t[n][SyncTasks[j]] : + SyncPaths[j] := boundingbox image (draw SyncPaths[i] ; draw SyncPaths[j] ; ) ; + SyncTasks[j] := SyncTasks[i] ; + else : + j := j + 1 ; + SyncPaths[j] := SyncPaths[i] ; + SyncTasks[j] := SyncTasks[i] ; + fi ; + endfor ; + NOfSyncPaths := j ; + fi ; + fi ; + fi ; enddef ; -def DrawSyncPaths = - for i=1 upto NOfSyncPaths : - draw SyncPaths[i] withcolor SyncPathColor(i) ; - endfor ; +def SyncTask(expr n) = + if known SyncTasks[n] : SyncTasks[n] else : 0 fi enddef ; -def FillSyncPaths = - for i=1 upto NOfSyncPaths : - fill SyncPaths[i] withcolor SyncPathColor(i) ; +def FlushSyncTasks = + for i = 1 upto NOfSyncPaths : + ProcessSyncTask(SyncPaths[i], TheSyncColor(CurrentSyncClass,sync_t[CurrentSyncClass][SyncTasks[i]])) ; endfor ; enddef ; -vardef NOfSyncPaths = - mfun_sync_count +def ProcessSyncTask(expr p, c) = + fill p withcolor c ; enddef ; diff --git a/Master/texmf-dist/metapost/context/base/mpiv/mp-bare.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-bare.mpiv index 8f517b268c3..c6194b1ee00 100644 --- a/Master/texmf-dist/metapost/context/base/mpiv/mp-bare.mpiv +++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-bare.mpiv @@ -14,71 +14,75 @@ if known context_bare : endinput ; fi ; boolean context_bare ; context_bare := true ; -vardef colordecimals primary c = - if cmykcolor c : - decimal cyanpart c & ":" & decimal magentapart c & ":" & decimal yellowpart c & ":" & decimal blackpart c - elseif rgbcolor c : - decimal redpart c & ":" & decimal greenpart c & ":" & decimal bluepart c - else : - decimal c - fi -enddef ; - -rgbcolor mfun_tt_r ; +numeric mfun_tt_w[], mfun_tt_h[], mfun_tt_d[] ; numeric mfun_tt_n ; mfun_tt_n := 0 ; +picture mfun_tt_p ; mfun_tt_p := nullpicture ; picture mfun_tt_o ; mfun_tt_o := nullpicture ; picture mfun_tt_c ; mfun_tt_c := nullpicture ; +if unknown mfun_trial_run : + boolean mfun_trial_run ; + mfun_trial_run := false ; +fi ; + +if unknown mfun_first_run : + boolean mfun_first_run ; + mfun_first_run := true ; +fi ; + def mfun_reset_tex_texts = mfun_tt_n := 0 ; + mfun_tt_p := nullpicture ; mfun_tt_o := nullpicture ; % redundant mfun_tt_c := nullpicture ; % redundant enddef ; def mfun_flush_tex_texts = + addto currentpicture also mfun_tt_p +enddef ; + +extra_beginfig := extra_beginfig & "mfun_reset_tex_texts ;" ; +extra_endfig := "mfun_flush_tex_texts ; mfun_reset_tex_texts ; " & extra_endfig ; + +vardef colordecimals primary c = + if cmykcolor c : + decimal cyanpart c & ":" & decimal magentapart c & ":" & decimal yellowpart c & ":" & decimal blackpart c + elseif rgbcolor c : + decimal redpart c & ":" & decimal greenpart c & ":" & decimal bluepart c + else : + decimal c + fi enddef ; -vardef rawtextext(expr s) = - if s = "" : +vardef rawtextext(expr str) = % todo: avoid currentpicture + if str = "" : nullpicture else : mfun_tt_n := mfun_tt_n + 1 ; mfun_tt_c := nullpicture ; - mfun_tt_o := nullpicture ; - addto mfun_tt_o doublepath origin _op_ ; % save drawoptions - mfun_tt_r := runscript("mp.SomeText(" & decimal mfun_tt_n & "," & ditto & s & ditto & ")") ; - addto mfun_tt_c doublepath unitsquare - xscaled redpart mfun_tt_r - yscaled (greenpart mfun_tt_r + bluepart mfun_tt_r) - shifted (0,-bluepart mfun_tt_r) - withprescript "mf_object=text" - withprescript "tx_index=" & decimal mfun_tt_n - withprescript "tx_color=" & colordecimals colorpart mfun_tt_o - ; + if mfun_trial_run : + mfun_tt_o := nullpicture ; + addto mfun_tt_o doublepath origin _op_ ; % save drawoptions + addto mfun_tt_c doublepath unitsquare + withprescript "tx_number=" & decimal mfun_tt_n + withprescript "tx_stage=trial" + withprescript "tx_color=" & colordecimals colorpart mfun_tt_o + withpostscript str ; + addto mfun_tt_p also mfun_tt_c ; + elseif known mfun_tt_d[mfun_tt_n] : + addto mfun_tt_c doublepath unitsquare + xscaled mfun_tt_w[mfun_tt_n] + yscaled (mfun_tt_h[mfun_tt_n] + mfun_tt_d[mfun_tt_n]) + shifted (0,-mfun_tt_d[mfun_tt_n]) + withprescript "tx_number=" & decimal mfun_tt_n + withprescript "tx_stage=final" ; + else : + addto mfun_tt_c doublepath unitsquare ; % unitpicture + fi ; mfun_tt_c fi enddef ; -vardef rawmadetext = - mfun_tt_n := mfun_tt_n + 1 ; - mfun_tt_c := nullpicture ; - mfun_tt_o := nullpicture ; - addto mfun_tt_o doublepath origin _op_ ; % save drawoptions - mfun_tt_r := runscript("mp.MadeText(" & decimal mfun_tt_n & ")") ; - addto mfun_tt_c doublepath unitsquare - xscaled redpart mfun_tt_r - yscaled (greenpart mfun_tt_r + bluepart mfun_tt_r) - shifted (0,-bluepart mfun_tt_r) - withprescript "mf_object=text" - withprescript "tx_index=" & decimal mfun_tt_n - withprescript "tx_color=" & colordecimals colorpart mfun_tt_o - ; - mfun_tt_c -enddef ; - -extra_beginfig := extra_beginfig & "mfun_reset_tex_texts ;" ; -extra_endfig := "mfun_flush_tex_texts ; mfun_reset_tex_texts ; " & extra_endfig ; - primarydef str infont name = % nasty hack if name = "" : rawtextext(str) diff --git a/Master/texmf-dist/metapost/context/base/mpiv/mp-base.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-base.mpiv index 617855473c2..0cc209302ea 100644 --- a/Master/texmf-dist/metapost/context/base/mpiv/mp-base.mpiv +++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-base.mpiv @@ -201,7 +201,7 @@ let graycolor = numeric ; % color part (will be overloaded) def colorpart primary t = - if colormodel t = 7: + if colormodel t=7: (cyanpart t, magentapart t, yellowpart t, blackpart t) elseif colormodel t = 5 : (redpart t, greenpart t, bluepart t) @@ -250,7 +250,7 @@ vardef whatever = ? enddef ; -% unary operators (with patched round) +% unary operators let abs = length ; @@ -258,14 +258,7 @@ vardef round primary u = if numeric u : floor(u+.5) elseif pair u : - (floor(xpart u+.5), floor(ypart u+.5)) - elseif path u : - % added by HH - for i=0 upto length u-1 : - round(point i of u) .. - controls round(postcontrol i of u) and round(precontrol i+1 of u) .. - endfor - if cycle u : cycle else : point infinity of u fi + (round xpart u, round ypart u) else : u fi @@ -330,65 +323,22 @@ primarydef w dotprod z = (xpart w * xpart z + ypart w * ypart z) enddef ; -% primarydef x**y = -% if y = 2 : -% x*x -% else : -% takepower y of x -% fi -% enddef ; -% -% def takepower expr y of x = -% if x>0 : -% mexp(y*mlog x) -% elseif (x=0) and (y>0) : -% 0 -% else : -% 1 -% if y = floor y : -% if y >= 0 : -% for n=1 upto y : -% *x -% endfor -% else : -% for n=-1 downto y : -% /x -% endfor -% fi -% else : -% hide(errmessage "Undefined power: " & decimal x & "**" & decimal y) -% fi -% fi -% enddef ; - -% for big number systems: - primarydef x**y = - if y = 0 : - 1 - elseif x = 0 : - 0 - elseif y < 0 : - 1/(x**-y) - elseif y = 1 : - x - elseif y = 2 : + if y = 2 : x*x - elseif y = 3 : - x*x*x else : takepower y of x fi enddef ; def takepower expr y of x = - if y=0 : % isn't x**0 = 1 even if x=0 ? - 1 - elseif x=0 : + if x>0 : + mexp(y*mlog x) + elseif (x=0) and (y>0) : 0 else : + 1 if y = floor y : - 1 if y >= 0 : for n=1 upto y : *x @@ -398,14 +348,47 @@ def takepower expr y of x = /x endfor fi - elseif x>0 : - mexp(y*mlog x) else : - -mexp(y*mlog -x) + hide(errmessage "Undefined power: " & decimal x & "**" & decimal y) fi fi enddef ; +% for big number systems: +% +% primarydef x**y = +% if y = 1 : +% x +% elseif y = 2 : +% x*x +% elseif y = 3 : +% x*x*x +% else : +% takepower y of x +% fi +% enddef ; +% +% vardef takepower expr y of x = +% if (x=0) and (y>0) : +% 0 +% else : +% 1 +% if y = floor y : +% if y >= 0 : +% for n=1 upto y : +% *x +% endfor +% else : +% for n=-1 downto y : +% /x +% endfor +% fi +% else : +% hide(errmessage "Undefined power: " & decimal x & "**" & decimal y) +% fi +% fi +% enddef ; + vardef direction expr t of p = postcontrol t of p - precontrol t of p enddef ; diff --git a/Master/texmf-dist/metapost/context/base/mpiv/mp-blob.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-blob.mpiv deleted file mode 100644 index d1fc7357ba8..00000000000 --- a/Master/texmf-dist/metapost/context/base/mpiv/mp-blob.mpiv +++ /dev/null @@ -1,112 +0,0 @@ -%D \module -%D [ file=mp-blob.mpiv, -%D version=2018.04.08, -%D title=\CONTEXT\ \METAPOST\ graphics, -%D subtitle=Blobs, -%D author=Hans Hagen, -%D date=\currentdate, -%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] -%C -%C This module is part of the \CONTEXT\ macro||package and is -%C therefore copyrighted by \PRAGMA. See mreadme.pdf for -%C details. - -%D This is a follow up on good old \type {meta-imp-txt}. - -if known context_blob : endinput ; fi ; - -boolean context_blob ; context_blob := true ; - -numeric mfun_blob_n ; mfun_blob_n := 0 ; -picture mfun_blob_c ; -color mfun_blob_b ; - -def mfun_reset_tex_blobs = - mfun_blob_n := 0 ; - mfun_blob_c := nullpicture ; -enddef ; - -extra_endfig := extra_endfig & "mfun_reset_tex_blobs ; " ; - -vardef mfun_inject_blob(expr n) = - mfun_blob_c := nullpicture ; - mfun_blob_b := lua.mp.mf_blob_dimensions(mfun_blob_n,n) ; - addto mfun_blob_c doublepath unitsquare - xscaled redpart mfun_blob_b - yscaled (greenpart mfun_blob_b + bluepart mfun_blob_b) - shifted (0,- bluepart mfun_blob_b) - withprescript "mf_object=texblob" - withprescript "tb_blob=" & decimal lua.mp.mf_blob_index(mfun_blob_n,n) ; - mfun_blob_c -enddef ; - -% An example of usage: - -newinternal followtextalternative ; followtextalternative := 1 ; -newinternal tracingfollowtext ; tracingfollowtext := 0 ; -newinternal autoscaleupfollowtext ; autoscaleupfollowtext := 2 ; -newinternal autoscaledownfollowtext ; autoscaledownfollowtext := 0 ; - -vardef followtext(expr pth, txt) = - image ( - mfun_blob_n := mfun_blob_n + 1 ; - lua.mp.mf_inject_blob(mfun_blob_n,txt); - save pat, al, at, pl, pc, wid, pos, ap, ad, pic, len, n, sc ; - path pat ; pat := pth ; - numeric al, at, pl, pc, wid, pos, len[], n, sc ; - pair ap, ad ; - picture pic[] ; - len[0] := 0 ; - n := lua.mp.mf_blob_size(mfun_blob_n) ; - sc := 0 ; - for i=1 upto n : - pic[i] := mfun_inject_blob(i) ; - pic[i] := pic[i] shifted - llcorner pic[i] ; - len[i] := len[i-1] + lua.mp.mf_blob_width(mfun_blob_n,i) ; - endfor ; - al := arclength pth ; - if al = 0 : - al := len[n] ; - pat := origin -- (al,0) ; - fi ; - if ((al < len[n]) and (autoscaleupfollowtext > 0)) or - ((al > len[n]) and (autoscaledownfollowtext > 0)) : - sc := len[n] /al ; - pat := pat scaled sc ; - al := arclength pat ; - fi ; - if followtextalternative = 1 : - pl := (al-len[n])/(if n>1 : (n-1) else : 1 fi) ; - pc := 0 ; - else : % centered / MP - pl := 0 ; - pc := arclength pat/2 - len[n]/2 ; - fi ; - if tracingfollowtext = 1 : - draw pat withpen pencircle scaled 1pt withcolor blue ; - fi ; - for i=1 upto n : - wid := lua.mp.mf_blob_width(mfun_blob_n,i) ; - pos := len[i]-wid/2 + (i-1)*pl + pc ; - at := arctime pos of pat ; - ap := point at of pat ; - ad := direction at of pat ; - pic[i] := pic[i] shifted (-wid/2,0) rotated(angle(ad)) shifted ap ; - draw pic[i] ; - if tracingfollowtext = 1 : - draw boundingbox pic[i] withpen pencircle scaled .25pt withcolor red ; - draw ap withpen pencircle scaled .50pt withcolor green ; - fi ; - endfor ; - if ((autoscaleupfollowtext = 2) or (autoscaledownfollowtext = 2)) and - (sc <> 0) and (sc <> 1): - currentpicture := currentpicture scaled (1/sc) ; - fi ; - if tracingfollowtext = 1 : - draw boundingbox currentpicture withpen pencircle scaled .25pt withcolor blue ; - fi ; - draw fullcircle scaled 100bp - withprescript "mf_object=followtext" - withprescript "ft_category=" & decimal mfun_blob_n ; - ) -enddef ; diff --git a/Master/texmf-dist/metapost/context/base/mpiv/mp-grap.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-grap.mpiv index 0299c0587a1..e799f629c0f 100644 --- a/Master/texmf-dist/metapost/context/base/mpiv/mp-grap.mpiv +++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-grap.mpiv @@ -266,27 +266,19 @@ enddef ; graph_margin_fraction.low=-.07 ; % bbox fraction for default range start graph_margin_fraction.high=1.07 ; % bbox fraction for default range stop -%def graph_with_pen_and_color(expr q) = -% withpen penpart q -% withcolor -% if colormodel q=1 : -% false -% elseif colormodel q=3 : -% (greypart q) -% elseif colormodel q=5 : -% (redpart q, greenpart q, bluepart q) -% elseif colormodel q=7 : -% (cyanpart q, magentapart q, yellowpart q, blackpart q) -% fi -% withprescript prescriptpart q -% withpostscript postscriptpart q -%enddef ; - def graph_with_pen_and_color(expr q) = - withproperties q + withpen penpart q withcolor + if colormodel q=1 : + false + elseif colormodel q=3 : + (greypart q) + elseif colormodel q=5 : + (redpart q, greenpart q, bluepart q) + elseif colormodel q=7 : + (cyanpart q, magentapart q, yellowpart q, blackpart q) + fi enddef ; - % Add picture component q to picture @# and change part p to tp, % where p is something from q that needs coordinate transformation. % The type of p is pair or path. diff --git a/Master/texmf-dist/metapost/context/base/mpiv/mp-grph.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-grph.mpiv index d4316eb914c..04d4920f6f1 100644 --- a/Master/texmf-dist/metapost/context/base/mpiv/mp-grph.mpiv +++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-grph.mpiv @@ -65,6 +65,8 @@ enddef ; numeric currentgraphictext ; currentgraphictext := 0 ; +def data_mpy_file = job_name & "-mpgraph.mpy" enddef ; + def begingraphictextfig (expr n) = foundpicture := n ; scratchpicture := nullpicture ; @@ -115,7 +117,7 @@ def mfun_load_figure (expr filename) text figureattributes = endgroup ; enddef ; -% We only use the new method now. +% shared between old and new boolean mfun_gt_color_fill ; boolean mfun_gt_color_draw ; @@ -124,12 +126,148 @@ boolean mfun_gt_reverse_fill ; boolean mfun_gt_outline_fill ; picture mfun_gt_picture ; +% this is the old version: + +def old_graphictext primary t = + hide ( + if mfun_trial_run : + let mfun_graphic_text = mfun_no_graphic_text ; + else : + let mfun_graphic_text = mfun_do_graphic_text ; + fi + ) + mfun_graphic_text(t) +enddef ; + +def mfun_do_graphic_text (expr t) = + % withprescript "gt_stage=final" + begingroup ; + save figurepicture ; picture figurepicture ; + figurepicture := currentpicture ; currentpicture := nullpicture ; + currentgraphictext := currentgraphictext + 1 ; + mfun_finish_graphic_text % picks up directives +enddef ; + +def mfun_no_graphic_text (expr t) text rest = + currentgraphictext := currentgraphictext + 1 ; + draw unitsquare + withprescript "gt_stage=trial" + withprescript "gt_index=" & decimal currentgraphictext + withpostscript t +enddef ; + +def mfun_finish_graphic_text text rest = + protectgraphicmacros ; % resets currentpicture + interim linecap := butt ; % normally rounded + interim linejoin := mitered ; % normally rounded + interim miterlimit := 10 ; % todo + let normalwithshade = withshade ; + save foundpicture, scratchpicture, str ; + save fill, draw, withshade, reversefill, outlinefill ; + save withfillcolor, withdrawcolor ; % quite important + numeric foundpicture ; picture scratchpicture ; string str ; + def draw expr p = + % the first, naive implementation was: + % addto scratchpicture doublepath p withpen currentpen ; + % but it is better to turn lines into fills + addto scratchpicture contour boundingbox + image (addto currentpicture doublepath p withpen currentpen) ; + enddef ; + def fill expr p = + addto scratchpicture contour p withpen currentpen ; + enddef ; + def mfun_gt_fill = enddef ; boolean mfun_gt_color_fill ; mfun_gt_color_fill := false ; + def mfun_gt_draw = enddef ; boolean mfun_gt_color_draw ; mfun_gt_color_draw := false ; + def mfun_gt_shade = enddef ; boolean mfun_gt_shade_fill ; mfun_gt_shade_fill := false ; + boolean mfun_gt_reverse_fill ; mfun_gt_reverse_fill := false ; + boolean mfun_gt_outline_fill ; mfun_gt_outline_fill := false ; + def reversefill = + hide(mfun_gt_reverse_fill := true ) + enddef ; + def outlinefill = + hide(mfun_gt_outline_fill := true ) + enddef ; + def withshade primary c = + hide(def mfun_gt_shade = normalwithshade c enddef ; mfun_gt_shade_fill := true ) + enddef ; + def withfillcolor primary c = + hide(def mfun_gt_fill = withcolor c enddef ; mfun_gt_color_fill := true ) + enddef ; + def withdrawcolor primary c = + hide(def mfun_gt_draw = withcolor c enddef ; mfun_gt_color_draw := true ) + enddef ; + scratchpicture := nullpicture ; + addto scratchpicture doublepath origin rest ; % pre-roll + for i within scratchpicture : % Below here is a dirty tricky test! + if (urcorner dashpart i) = origin : + mfun_gt_outline_fill := false ; + fi ; + endfor ; + scratchpicture := nullpicture ; + readfile(data_mpy_file) ; + scratchpicture := (scratchpicture shifted -llcorner scratchpicture) scaled (1/10) ; + if not mfun_gt_color_draw and not mfun_gt_color_fill : + mfun_gt_color_draw := true ; + fi + if mfun_gt_shade_fill : + mfun_gt_color_draw := false ; + mfun_gt_color_fill := false ; + fi ; + currentpicture := figurepicture ; + if mfun_gt_shade_fill : + for i within scratchpicture : + if filled i : + addto currentpicture contour pathpart i _op_ rest mfun_gt_shade ; + fi ; + endfor ; + else : + if mfun_gt_color_draw and not mfun_gt_reverse_fill : + for i within scratchpicture : + if mfun_gt_color_fill and mfun_gt_outline_fill : + addto currentpicture doublepath pathpart i _op_ rest mfun_gt_fill dashed nullpicture ; + fi ; + if filled i : + addto currentpicture doublepath pathpart i _op_ rest mfun_gt_draw ; + fi ; + endfor ; + fi ; + if mfun_gt_color_fill : + for i within scratchpicture : + if filled i : + addto currentpicture contour pathpart i _op_ rest mfun_gt_fill withpen pencircle scaled 0 ; + fi ; + endfor ; + fi ; + if mfun_gt_color_draw and mfun_gt_reverse_fill : + for i within scratchpicture : + if filled i : + addto currentpicture doublepath pathpart i _op_ rest mfun_gt_draw ; + fi ; + endfor ; + fi ; + for i within scratchpicture : + if stroked i : + addto currentpicture doublepath pathpart i _op_ rest mfun_gt_draw ; + fi ; + endfor ; + fi ; + endgroup ; +enddef ; + +% and this is the new one: + +% boolean mfun_gt_color_fill ; +% boolean mfun_gt_color_draw ; +% boolean mfun_gt_shade_fill ; +% boolean mfun_gt_reverse_fill ; +% picture mfun_gt_picture ; + def mfun_gt_default = % somewhat compatible scaled 11.5 withpen pencircle scaled .1 enddef ; -def graphictext primary t = % use outlinetext instead +def new_graphictext primary t = % use outlinetext instead begingroup ; mfun_graphic_text_indeed(t) enddef ; @@ -172,21 +310,24 @@ def mfun_graphic_text_indeed(expr t) text rest = draw outlinetext.f(t)(mfun_gt_shade) rest; elseif mfun_gt_color_fill and mfun_gt_color_draw : if mfun_gt_reverse_fill : - draw outlinetext.r(t)(mfun_gt_default mfun_gt_fill)(mfun_gt_default mfun_gt_draw) rest; + draw outlinetext.r(t)(mfun_gt_default mfun_gt_fill rest)(mfun_gt_default mfun_gt_draw rest) ; else : - draw outlinetext.b(t)(mfun_gt_default mfun_gt_draw)(mfun_gt_default mfun_gt_fill) rest; + draw outlinetext.b(t)(mfun_gt_default mfun_gt_draw rest)(mfun_gt_default mfun_gt_fill rest); fi ; elseif mfun_gt_color_fill : - draw outlinetext.f(t)(mfun_gt_default mfun_gt_fill) rest; + draw outlinetext.f(t)(mfun_gt_default mfun_gt_fill rest) ; elseif mfun_gt_color_draw : - draw outlinetext.d(t)(mfun_gt_default mfun_gt_draw) rest ; + draw outlinetext.d(t)(mfun_gt_default mfun_gt_draw rest) ; else : - draw outlinetext.d(t)(mfun_gt_default) rest ; + draw outlinetext.d(t)(mfun_gt_default rest) ; fi ; % endgroup ; enddef ; +let graphictext = old_graphictext ; +%%% graphictext = new_graphictext ; % more than 10 times faster + % example % % beginfig (1) ; diff --git a/Master/texmf-dist/metapost/context/base/mpiv/mp-luas.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-luas.mpiv index e5cfe0371eb..d35701ec632 100644 --- a/Master/texmf-dist/metapost/context/base/mpiv/mp-luas.mpiv +++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-luas.mpiv @@ -49,95 +49,41 @@ boolean context_luas ; context_luas := true ; % % Fourth variant: -string mfun_lua_bs ; mfun_lua_bs := "[===[" ; -string mfun_lua_es ; mfun_lua_es := "]===]" ; +string mfun_lua_bs ; mfun_lua_bs := "[[" ; +string mfun_lua_es ; mfun_lua_es := "]]" ; vardef mlib_luas_luacall(text t) = runscript("" for s = t : if string s : & s - % & mfun_lua_bs & s & mfun_lua_es elseif numeric s : & decimal s elseif boolean s : & if s : "true" else : "false" fi - elseif pair s : - & mfun_pair_to_table(s) - elseif path s : - & mfun_path_to_table(s) - elseif rgbcolor s : - & mfun_rgb_to_table(s) - elseif cmykcolor s : - & mfun_cmyk_to_table(s) else : & ditto & tostring(s) & ditto fi endfor ) enddef ; -% vardef mlib_luas_lualist(expr c)(text t) = -% save b ; boolean b ; b := false ; -% runscript(c & "(" for s = t : -% if b : -% & "," -% else : -% hide(b := true) -% fi -% if string s : -% % & ditto & s & ditto -% & mfun_lua_bs & s & mfun_lua_es -% elseif numeric s : -% & decimal s -% elseif boolean s : -% & if s : "true" else : "false" fi -% elseif pair s : -% & mfun_pair_to_table(s) -% elseif path s : -% & mfun_path_to_table(s) -% elseif rgbcolor s : -% & mfun_rgb_to_table(s) -% elseif cmykcolor s : -% & mfun_cmyk_to_table(s) -% else : -% & ditto & tostring(s) & ditto -% fi endfor & ")" -% ) -% enddef ; - -newinternal mfun_luas_b ; - -def mlib_luas_luadone = - exitif numeric begingroup mfun_luas_b := 1 ; endgroup ; -enddef ; - vardef mlib_luas_lualist(expr c)(text t) = - interim mfun_luas_b := 0 ; - runscript(c & for s = t : - if mfun_luas_b = 0 : - "(" - % hide(mfun_luas_b := 1) - mlib_luas_luadone + save b ; boolean b ; b := false ; + runscript(c & "(" for s = t : + if b : + & "," else : - "," + hide(b := true) fi - & if string s : - mfun_lua_bs & s & mfun_lua_es + % & ditto & s & ditto + & mfun_lua_bs & s & mfun_lua_es elseif numeric s : - decimal s + & decimal s elseif boolean s : - if s : "true" else : "false" fi - elseif pair s : - mfun_pair_to_table(s) - elseif path s : - mfun_path_to_table(s) - elseif rgbcolor s : - mfun_rgb_to_table(s) - elseif cmykcolor s : - mfun_cmyk_to_table(s) + & if s : "true" else : "false" fi else : - ditto & tostring(s) & ditto - fi & endfor if mfun_luas_b = 0 : "()" else : ")" fi + & ditto & tostring(s) & ditto + fi endfor & ")" ) enddef ; @@ -161,14 +107,9 @@ vardef MP@#(text t) = enddef ; def message expr t = - lua.mp.report(tostring(t)) ; + if t <> "" : lua.mp.report(t) fi ; enddef ; -% Modes: - -vardef texmode (expr s) = lua.mp("mode", s) enddef ; -vardef systemmode(expr s) = lua.mp("systemmode",s) enddef ; - % A few helpers vardef isarray suffix a = lua.mp.isarray (str a) enddef ; @@ -177,15 +118,19 @@ vardef dimension suffix a = lua.mp.dimension(str a) enddef ; % More access -vardef getmacro(expr k) = lua.mp._get_macro_(k) enddef ; -vardef getdimen(expr k) = lua.mp._get_dimen_(k) enddef ; -vardef getcount(expr k) = lua.mp._get_count_(k) enddef ; -vardef gettoks (expr k) = lua.mp._get_toks_ (k) enddef ; +def getdimen(expr k) = lua.mp._get_dimen_(k) enddef ; +def getcount(expr k) = lua.mp._get_count_(k) enddef ; +def gettoks (expr k) = lua.mp._get_toks_ (k) enddef ; +def setdimen(expr k, v) = lua.mp._set_dimen_(k,v) enddef ; +def setcount(expr k, v) = lua.mp._set_count_(k,v) enddef ; +def settoks (expr k, v) = lua.mp._set_toks_ (k,v) enddef ; -def setmacro(expr k,v) = lua.mp._set_macro_(k,v) enddef ; -def setdimen(expr k,v) = lua.mp._set_dimen_(k,v) enddef ; -def setcount(expr k,v) = lua.mp._set_count_(k,v) enddef ; -def settoks (expr k,v) = lua.mp._set_toks_ (k,v) enddef ; +% vardef getdimen(expr k) = save getdimen ; lua.mp.getdimen(k) enddef ; +% vardef getcount(expr k) = save getcount ; lua.mp.getcount(k) enddef ; +% vardef gettoks (expr k) = save gettoks ; lua.mp.gettoks (k) enddef ; +% vardef setdimen(expr k,v) = save setdimen ; lua.mp.setdimen(k,v) enddef ; +% vardef setcount(expr k,v) = save setcount ; lua.mp.setcount(k,v) enddef ; +% vardef settoks (expr k,v) = save settoks ; lua.mp.settoks (k,v) enddef ; vardef positionpath (expr name) = lua.mp.positionpath (name) enddef ; vardef positioncurve (expr name) = lua.mp.positioncurve (name) enddef ; @@ -209,43 +154,6 @@ vardef positionatanchor(expr name) = currentpicture := currentpicture shifted - positionxy(name) ; enddef ; + vardef texvar(expr name) = lua.mp.texvar(name) enddef ; vardef texstr(expr name) = lua.mp.texstr(name) enddef ; - -%D New experimental feature for Alan-The-Number-Cruncher: - -% \startMPcode{doublefun} -% path p ; p := ( -% for i=1 upto 20000 : -% origin randomized 10000 .. -% endfor cycle -% ) xysized (TextWidth,TextHeight) ; -% draw for i inpath p: -% pointof i .. controls (leftof i) and (rightof i) .. -% endfor cycle ; -% \stopMPcode - -% def inpath suffix p = -% = 1 step 1 until lua.mp.mf_path_length(str p) -% enddef ; - -% def inpath suffix p = -% % = 1 step 1 until lua.mp.mf_path_length(str p) -% = 1 step 1 until (begingroup save n ; n := lua.mp.mf_path_length(str p) ; if n = 0 : 1 else : n fi endgroup) -% enddef ; - -def inpath suffix p = % permits p[0] - = 1 step 1 until - begingroup - save mfun_inpath_r,mfun_inpath_n ; path mfun_inpath_r ; - mfun_inpath_r = p ; - mfun_inpath_n := lua.mp.mf_path_length(str mfun_inpath_r) ; - if mfun_inpath_n = 0 : 1 else : mfun_inpath_n fi - endgroup -enddef ; - -vardef pointof primary i = lua.mp.mf_path_point(i) enddef ; -vardef leftof primary i = lua.mp.mf_path_left (i) enddef ; -vardef rightof primary i = lua.mp.mf_path_right(i) enddef ; - -extra_endfig := extra_endfig & " lua.mp.mf_path_reset() ; " ; diff --git a/Master/texmf-dist/metapost/context/base/mpiv/mp-mlib.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-mlib.mpiv index 1317967570d..115fe63aeac 100644 --- a/Master/texmf-dist/metapost/context/base/mpiv/mp-mlib.mpiv +++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-mlib.mpiv @@ -16,18 +16,6 @@ if known context_mlib : endinput ; fi ; boolean context_mlib ; context_mlib := true ; -numeric LUATEXFUNCTIONALITY ; LUATEXFUNCTIONALITY := runscript("mp.print(LUATEXFUNCTIONALITY)") ; - -%D Objects: - -vardef isobject expr p = - if picture p : - lua.mp.isobject(prescriptpart p) - else : - false - fi -enddef ; - %D Color and transparency %D %D Separable: @@ -72,16 +60,16 @@ def namedcolor expr n = withprescript "sp_name=" & n enddef ; -% def mfun_spotcolor(expr n, v) = +% def spotcolor(expr n, v) = % 1 -% withprescript "sp_type=xspot" +% withprescript "sp_type=spot" % withprescript "sp_name=" & n % withprescript "sp_value=" & (if numeric v : decimal v else : v fi) % enddef ; - -% def mfun_multispotcolor(expr name, fractions, components, value) = +% +% def multitonecolor(expr name, fractions, components, value) = % 1 -% withprescript "sp_type=multispot" +% withprescript "sp_type=multitone" % withprescript "sp_name=" & name % withprescript "sp_fractions=" & decimal fractions % withprescript "sp_components=" & components @@ -91,12 +79,10 @@ enddef ; def spotcolor(expr name, v) = (1) withprescript "sp_type=spot" - withprescript "sp_name=" & name + withprescript "sp_name=" & name withprescript "sp_value=" & colordecimals v enddef ; -% In this case a mixed color will be calculated: - def multitonecolor(expr name)(text t) = (1) withprescript "sp_type=multitone" @@ -106,7 +92,7 @@ enddef ; def transparent(expr a, t)(text c) = % use withtransparency instead (1) % this permits withcolor x intoshade y - withprescript "tr_alternative=" & decimal transparency_alternative_to_number(a) + withprescript "tr_alternative=" & decimal transparency_alternative_to_number(a) withprescript "tr_transparency=" & decimal t withcolor c enddef ; @@ -188,52 +174,72 @@ extra_beginfig := extra_beginfig & "mfun_reset_tex_texts ;" ; % flush twice: once in location in order to pick up e.g. color properties, % and once at the end because we need to flush missing ones. -boolean mfun_onetime_textext ; mfun_onetime_textext := false ; - -def notcached = withprescript "tx_cache=no" enddef ; +% see mp-keep.mpiv for older code -% todo: onetime +% vardef rawtextext(expr s) = % todo: avoid currentpicture +% if s = "" : +% nullpicture +% else : +% mfun_tt_n := mfun_tt_n + 1 ; +% mfun_tt_c := nullpicture ; +% if mfun_trial_run : +% mfun_tt_o := nullpicture ; +% addto mfun_tt_o doublepath origin _op_ ; % save drawoptions +% addto mfun_tt_c doublepath unitsquare +% withprescript "tx_number=" & decimal mfun_tt_n +% withprescript "tx_stage=trial" +% withprescript "tx_color=" & colordecimals colorpart mfun_tt_o +% withpostscript s ; +% addto mfun_tt_p also mfun_tt_c ; +% elseif known mfun_tt_d[mfun_tt_n] : +% addto mfun_tt_c doublepath unitsquare +% xscaled mfun_tt_w[mfun_tt_n] +% yscaled (mfun_tt_h[mfun_tt_n] + mfun_tt_d[mfun_tt_n]) +% shifted (0,-mfun_tt_d[mfun_tt_n]) +% withprescript "tx_number=" & decimal mfun_tt_n +% withprescript "tx_stage=final" ; +% else : +% addto mfun_tt_c doublepath unitsquare ; % unitpicture +% fi ; +% mfun_tt_c +% fi +% enddef ; -rgbcolor mfun_tt_r ; +boolean mfun_onetime_textext ; mfun_onetime_textext := false ; -vardef rawtextext(expr s) = +vardef rawtextext(expr s) = % todo: avoid currentpicture if s = "" : + mfun_onetime_textext := false ; nullpicture else : mfun_tt_n := mfun_tt_n + 1 ; mfun_tt_c := nullpicture ; - mfun_tt_o := nullpicture ; - addto mfun_tt_o doublepath origin _op_ ; % save drawoptions - mfun_tt_r := lua.mp.mf_some_text(mfun_tt_n,s) ; - addto mfun_tt_c doublepath unitsquare - xscaled wdpart mfun_tt_r - yscaled (htpart mfun_tt_r + dppart mfun_tt_r) - shifted (0,-dppart mfun_tt_r) - withprescript "mf_object=text" - withprescript "tx_index=" & decimal mfun_tt_n - withprescript "tx_color=" & colordecimals colorpart mfun_tt_o - ; + if mfun_trial_run : + mfun_tt_o := nullpicture ; + addto mfun_tt_o doublepath origin _op_ ; % save drawoptions + addto mfun_tt_c doublepath unitsquare + withprescript "tx_number=" & decimal mfun_tt_n + withprescript "tx_stage=trial" + withprescript "tx_color=" & colordecimals colorpart mfun_tt_o + withpostscript s ; + if not mfun_onetime_textext : + addto mfun_tt_p also mfun_tt_c + withprescript "tx_global=yes" ; + fi ; + else : + mfun_tt_b := lua.mp.tt_dimensions(mfun_tt_n) ; + 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 "tx_number=" & decimal mfun_tt_n + withprescript "tx_stage=final" ; + fi ; + mfun_onetime_textext := false ; mfun_tt_c fi enddef ; -vardef rawmadetext = - mfun_tt_n := mfun_tt_n + 1 ; - mfun_tt_c := nullpicture ; - mfun_tt_o := nullpicture ; - addto mfun_tt_o doublepath origin _op_ ; % save drawoptions - mfun_tt_r := lua.mp.mf_made_text(mfun_tt_n) ; - addto mfun_tt_c doublepath unitsquare - xscaled wdpart mfun_tt_r - yscaled (htpart mfun_tt_r + dppart mfun_tt_r) - shifted (0,-dppart mfun_tt_r) - withprescript "mf_object=text" - withprescript "tx_index=" & decimal mfun_tt_n - withprescript "tx_color=" & colordecimals colorpart mfun_tt_o - ; - mfun_tt_c -enddef ; - vardef validtexbox(expr category, name) = if category == "" : false @@ -249,12 +255,11 @@ enddef ; vardef rawtexbox(expr category, name) = mfun_tt_c := nullpicture ; if validtexbox(category,name) : - mfun_tt_b := lua.mp.mf_tb_dimensions(category, name) ; + mfun_tt_b := lua.mp.tb_dimensions(category, name) ; addto mfun_tt_c doublepath unitsquare - xscaled wdpart mfun_tt_b - yscaled (htpart mfun_tt_b + dppart mfun_tt_b) - shifted (0,- dppart mfun_tt_b) - withprescript "mf_object=box" + 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 @@ -363,25 +368,13 @@ vardef installlabel@# (expr type, x, y, offset) = numeric labyf @# ; labyf @# := y ; enddef ; -vardef mfun_labshift@#(expr p) = - (mfun_labxf@#*lrcorner p + - mfun_labyf@#*ulcorner p + - (1-mfun_labxf@#-mfun_labyf@#)*llcorner p) -enddef ; - -vardef mfun_picshift@#(expr p) = - (mfun_labxf@#*ulcorner p + - mfun_labyf@#*lrcorner p + - (1-mfun_labxf@#-mfun_labyf@#)*urcorner p) -enddef ; - % we save the plain variant vardef plain_thelabel@#(expr p,z) = if string p : plain_thelabel@#(rawtextext("\definedfont[" & defaultfont & "]" & p) scaled defaultscale,z) else : - p shifted (z + labeloffset*laboff@# - mfun_labshift@#(p)) + p shifted (z + labeloffset*laboff@# - (labxf@#*lrcorner p + labyf@#*ulcorner p + (1-labxf@#-labyf@#)*llcorner p)) fi enddef; @@ -410,22 +403,7 @@ enddef ; plain_compatibility_data := plain_compatibility_data & "save label, thelabel ;" & "useplainlabels ;" ; -% vardef thetextext@#(expr p,z) = -% % interim labeloffset := textextoffset ; -% if string p : -% thetextext@#(rawtextext(p),z) -% elseif numeric p : -% thetextext@#(rawtextext(decimal p),z) -% else : -% p -% if (mfun_labtype@# >= 10) : -% shifted (0,ypart center p) -% fi -% shifted (z + textextoffset*mfun_laboff@# - mfun_labshift@#(p)) -% fi -% enddef ; - -newinternal anchortextexts ; anchortextexts := 0 ; % disabled by default +% next comes own own: vardef thetextext@#(expr p,z) = % interim labeloffset := textextoffset ; @@ -433,18 +411,12 @@ vardef thetextext@#(expr p,z) = thetextext@#(rawtextext(p),z) elseif numeric p : thetextext@#(rawtextext(decimal p),z) - elseif pair p : - thetextext@#(rawtextext(ddecimal p),z) else : - if anchortextexts > 0 : - image(draw p withprescript "tx_anchor=" & ddecimal z) - else : - p - fi - if (mfun_labtype@# >= 10) : - shifted (0,ypart center p) - fi - shifted (z + textextoffset*mfun_laboff@# - mfun_labshift@#(p)) + 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)) fi enddef ; @@ -461,38 +433,56 @@ enddef ; pair mfun_tt_z ; -vardef rawfmttext(text t) = +vardef rawfmttext(text t) = % todo: avoid currentpicture mfun_tt_n := mfun_tt_n + 1 ; mfun_tt_c := nullpicture ; - mfun_tt_o := nullpicture ; - addto mfun_tt_o doublepath origin _op_ ; % save drawoptions - mfun_tt_r := lua.mp.mf_formatted_text(mfun_tt_n,t) ; - addto mfun_tt_c doublepath unitsquare - xscaled wdpart mfun_tt_r - yscaled (htpart mfun_tt_r + dppart mfun_tt_r) - shifted (0,-dppart mfun_tt_r) - withprescript "mf_object=text" - withprescript "tx_index=" & decimal mfun_tt_n - withprescript "tx_color=" & colordecimals colorpart mfun_tt_o - ; - for s = t : - if pair s : mfun_tt_z := s ; fi - endfor ; + if mfun_trial_run : + mfun_tt_o := nullpicture ; + addto mfun_tt_o doublepath origin _op_ ; % save drawoptions + addto mfun_tt_c doublepath unitsquare + withprescript "tx_number=" & decimal mfun_tt_n + withprescript "tx_stage=trial" + withprescript "tx_color=" & colordecimals colorpart mfun_tt_o + % begin of fmt specific + withprescript "tx_type=format" + for s = t : + if string s : withpostscript "s:" & s + elseif numeric s : withpostscript "n:" & decimal s + elseif boolean s : withpostscript "b:" & if s : "true" else : "false" fi + elseif pair s : hide(mfun_tt_z := s ; ) + fi + endfor ; + % end of fmt specific + if not mfun_onetime_textext : + addto mfun_tt_p also mfun_tt_c + withprescript "tx_global=yes" ; + fi ; + else : + mfun_tt_b := lua.mp.tt_dimensions(mfun_tt_n) ; + 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 "tx_number=" & decimal mfun_tt_n + withprescript "tx_stage=final" ; + % begin of fmt specific + for s = t : + if pair s : mfun_tt_z := s ; fi + endfor ; + % end of fmt specific + fi ; + mfun_onetime_textext := false ; mfun_tt_c enddef ; vardef thefmttext@#(text t) = - mfun_tt_z := origin ; % initialization + mfun_tt_z := origin ; save p ; picture p ; p := rawfmttext(t) ; - if anchortextexts > 0 : - image(draw p withprescript "tx_anchor=" & ddecimal mfun_tt_z) - else : - p - fi + p if (mfun_labtype@# >= 10) : shifted (0,ypart center p) fi - shifted (mfun_tt_z + textextoffset*mfun_laboff@# - mfun_labshift@#(p)) + shifted (mfun_tt_z + textextoffset*mfun_laboff@# - (mfun_labxf@#*lrcorner p + mfun_labyf@#*ulcorner p + (1-mfun_labxf@#-mfun_labyf@#)*llcorner p)) enddef ; vardef fmttext@#(text t) = % no draw here @@ -514,44 +504,18 @@ vardef thetexbox@#(expr category, name, z) = if (mfun_labtype@# >= 10) : shifted (0,ypart center p) fi - shifted (z + textextoffset*mfun_laboff@# - mfun_labshift@#(p)) + 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) -% else : -% p shifted (z + labeloffset*mfun_laboff@# - (mfun_labxf@#*lrcorner p + mfun_labyf@#*ulcorner p + (1-mfun_labxf@#-mfun_labyf@#)*llcorner p)) -% fi -% enddef; - -vardef theoffset@#(expr z) = - if pair z : - z - elseif path z : - if mfun_laboff@# = origin : - center z - else : - ((center z)-- mfun_picshift@#(z)) intersectionpoint (z if not cycle z: --cycle fi) - fi - else : % picture - mfun_picshift@#(z) - fi -enddef; - vardef thelabel@#(expr p,z) = if string p : thelabel@#(rawtextext("\definedfont[" & defaultfont & "]" & p) scaled defaultscale,z) - elseif numeric p : - thelabel@#(decimal p,z) - elseif pair p : - thelabel@#("(" & decimal(xpart p) & "," & decimal(ypart p) & ")",z) else : - p shifted (theoffset@#(z) + labeloffset*mfun_laboff@# - mfun_labshift@#(p)) + p shifted (z + labeloffset*mfun_laboff@# - (mfun_labxf@#*lrcorner p + mfun_labyf@#*ulcorner p + (1-mfun_labxf@#-mfun_labyf@#)*llcorner p)) fi enddef; @@ -564,7 +528,7 @@ vardef anchored@#(expr p, z) = % beware: no "+ mfun_laboff@#" here (never!) if (mfun_labtype@# >= 10) : shifted (0,ypart center p) fi - shifted (z + mfun_labshift@#(p)) + shifted (z + (mfun_labxf@#*lrcorner p + mfun_labyf@#*ulcorner p + (1-mfun_labxf@#-mfun_labyf@#)*llcorner p)) enddef ; let normalinfont = infont ; @@ -1020,16 +984,18 @@ def withmask primary filename = withprescript "fg_mask=" & filename enddef ; -vardef externalfigure primary filename = - mfun_tt_c := nullpicture ; - mfun_tt_r := lua.mp.mf_external_figure(filename) ; - addto mfun_tt_c doublepath unitsquare - xscaled wdpart mfun_tt_r - yscaled htpart mfun_tt_r - withprescript "mf_object=figure" - withprescript "fg_name=" & filename ; - ; - mfun_tt_c +def externalfigure primary filename = + if false : + rawtextext("\externalfigure[" & filename & "]") + else : + image ( + addto currentpicture doublepath unitsquare + withprescript "fg_name=" & filename ; + ) +% unitsquare +% withpen pencircle scaled 0 +% withprescript "fg_name=" & filename + fi enddef ; def figure primary filename = @@ -1049,85 +1015,101 @@ enddef ; numeric currentoutlinetext ; currentoutlinetext := 0 ; -vardef mfun_do_outline_text_flush (expr kind, n, x, y, c) (text t) = +vardef mfun_do_outline_text_flush (expr kind, n, x, y) (text t) = if kind = "f" : - mfun_do_outline_text_f (n, x, y, c) (t) + mfun_do_outline_text_f (n, x, y) (t) elseif kind = "d" : - mfun_do_outline_text_d (n, x, y, c) (t) + mfun_do_outline_text_d (n, x, y) (t) elseif kind = "b" : - mfun_do_outline_text_b (n, x, y, c) (t) + mfun_do_outline_text_b (n, x, y) (t) elseif kind = "r" : - mfun_do_outline_text_r (n, x, y, c) (t) + mfun_do_outline_text_r (n, x, y) (t) elseif kind = "p" : - mfun_do_outline_text_p (n, x, y, c) (t) + mfun_do_outline_text_p (n, x, y) (t) elseif kind = "u" : - mfun_do_outline_text_u (n, x, y, c) (t) + mfun_do_outline_text_u (n, x, y) (t) else : - mfun_do_outline_text_n (n, x, y, c) (t) + mfun_do_outline_text_n (n, x, y) (t) fi ; enddef ; vardef mfun_do_outline_rule_flush (expr kind, x, y, w, h) = - mfun_do_outline_text_flush (kind, 1, x, y, "") (fullsquare xyscaled(w,h)) + mfun_do_outline_text_flush (kind, 1, x, y) (fullsquare xyscaled(w,h)) enddef ; numeric mfun_do_outline_n ; mfun_do_outline_n := 0 ; -vardef mfun_do_outline_text_f (expr n, x, y, c) (text t) = +vardef mfun_do_outline_text_f (expr n, x, y) (text t) = mfun_do_outline_n := 0 ; for i=t : mfun_do_outline_n := mfun_do_outline_n + 1 ; - if mfun_do_outline_n = n : fill else : nofill fi (i shifted(x,y)) mfun_do_outline_options_f withpen pencircle scaled 0 withprescript c ; + if mfun_do_outline_n = n : + fill i shifted(x,y) mfun_do_outline_options_f withpen pencircle scaled 0 + else : + nofill i shifted(x,y) + fi ; endfor ; enddef ; -vardef mfun_do_outline_text_u (expr n, x, y, c) (text t) = +vardef mfun_do_outline_text_u (expr n, x, y) (text t) = mfun_do_outline_n := 0 ; for i=t : mfun_do_outline_n := mfun_do_outline_n + 1 ; - if mfun_do_outline_n = n : fillup else : nofill fi (i shifted(x,y)) mfun_do_outline_options_f withprescript c ; + if mfun_do_outline_n = n : + fillup i shifted(x,y) mfun_do_outline_options_f + else : + nofill i shifted(x,y) + fi ; endfor ; enddef ; -vardef mfun_do_outline_text_d (expr n, x, y, c) (text t) = +vardef mfun_do_outline_text_d (expr n, x, y) (text t) = for i=t : draw i shifted(x,y) mfun_do_outline_options_d ; endfor ; enddef ; -vardef mfun_do_outline_text_p (expr n, x, y, c) (text t) = +vardef mfun_do_outline_text_p (expr n, x, y) (text t) = for i=t : - draw i shifted(x,y) withprescript c ; + draw i shifted(x,y) ; endfor ; enddef ; -vardef mfun_do_outline_text_b (expr n, x, y, c) (text t) = +vardef mfun_do_outline_text_b (expr n, x, y) (text t) = mfun_do_outline_n := 0 ; for i=t : mfun_do_outline_n := mfun_do_outline_n + 1 ; - if mfun_do_outline_n = n : fill else : nofill fi (i shifted(x,y)) mfun_do_outline_options_f ; + if mfun_do_outline_n = n : + fill i shifted(x,y) mfun_do_outline_options_f + else : + nofill i shifted(x,y) + fi ; endfor ; for i=t : draw i shifted(x,y) mfun_do_outline_options_d ; endfor ; enddef ; -vardef mfun_do_outline_text_r (expr n, x, y, c) (text t) = +vardef mfun_do_outline_text_r (expr n, x, y) (text t) = mfun_do_outline_n := 0 ; for i=t : draw i shifted(x,y) mfun_do_outline_options_d ; endfor ; for i=t : mfun_do_outline_n := mfun_do_outline_n + 1 ; - if mfun_do_outline_n = n : fill else : nofill fi (i shifted(x,y)) mfun_do_outline_options_f; + if mfun_do_outline_n = n : + fill i shifted(x,y) mfun_do_outline_options_f + else : + nofill i shifted(x,y) + fi ; endfor ; enddef ; -vardef mfun_do_outline_text_n (expr n, x, y, c) (text t) = +vardef mfun_do_outline_text_n (expr n, x, y) (text t) = mfun_do_outline_n := 0 ; for i=t : mfun_do_outline_n := mfun_do_outline_n + 1 ; - if mfun_do_outline_n = n : fill else : nofill fi (i shifted(x,y)) ; + if mfun_do_outline_n = n : fill else : nofill fi i shifted(x,y) ; endfor ; enddef ; @@ -1164,39 +1146,6 @@ def mfun_do_outline_options_d = enddef ; def mfun_do_outline_options_f = enddef ; def mfun_do_outline_options_r = enddef ; -def outlinetexttopath(text o, p, n) = - scantokens("numeric " & str n & ";") ; - scantokens("path " & str p & "[];") ; - n := 0 ; - for i within o : p[incr(n)] := pathpart i ; endfor ; -enddef ; - -def filloutlinetext(expr o) = - draw image ( - save n, m ; numeric n, m ; n := m := 0 ; - for i within o : - n := n + 1 ; - endfor ; - for i within o : - m := m + 1 ; - if n = m : - eofill - else : - nofill - fi pathpart i ; - endfor ; - ) -enddef ; - -def drawoutlinetext(expr o) = - draw image ( - % nicer for properties - for i within o : - draw pathpart i ; - endfor ; - ) -enddef ; - vardef outlinetext@# (expr t) text rest = save kind ; string kind ; kind := str @# ; currentoutlinetext := currentoutlinetext + 1 ; @@ -1204,25 +1153,32 @@ vardef outlinetext@# (expr t) text rest = def mfun_do_outline_options_f = enddef ; def mfun_do_outline_options_r = enddef ; image ( normaldraw image ( - % lua.mp.report("set outline text",currentoutlinetext); - lua.mp.mf_outline_text(currentoutlinetext,t,kind) ; - % lua.mp.report("get outline text",currentoutlinetext); - if kind = "f" : - mfun_do_outline_text_set_f rest ; - elseif kind = "d" : - mfun_do_outline_text_set_d rest ; - elseif kind = "b" : - mfun_do_outline_text_set_b rest ; - elseif kind = "u" : - mfun_do_outline_text_set_f rest ; - elseif kind = "r" : - mfun_do_outline_text_set_r rest ; - elseif kind = "p" : - mfun_do_outline_text_set_p ; + if mfun_trial_run : + % lua.mp.report("set outline text",currentoutlinetext); + normaldraw unitsquare + withprescript "ot_stage=trial" + withprescript "ot_index=" & decimal currentoutlinetext + withprescript "ot_kind=" & kind + withpostscript t ; else : - mfun_do_outline_text_set_n rest ; + % lua.mp.report("get outline text",currentoutlinetext); + if kind = "f" : + mfun_do_outline_text_set_f rest ; + elseif kind = "d" : + mfun_do_outline_text_set_d rest ; + elseif kind = "b" : + mfun_do_outline_text_set_b rest ; + elseif kind = "u" : + mfun_do_outline_text_set_f rest ; + elseif kind = "r" : + mfun_do_outline_text_set_r rest ; + elseif kind = "p" : + mfun_do_outline_text_set_p ; + else : + mfun_do_outline_text_set_n rest ; + fi ; + lua.mp.get_outline_text(currentoutlinetext) ; fi ; - lua.mp.mf_get_outline_text(currentoutlinetext) ; ) mfun_do_outline_options_r ; ) enddef ; @@ -1253,6 +1209,7 @@ vardef rule(expr wd,ht,dp) = image (fill (0,-dp)--(wd,-dp)--(wd,ht)--(0,ht)--cycle) enddef ; + % Housekeeping extra_beginfig := extra_beginfig & "currentgraphictext := 0 ; " ; @@ -1297,9 +1254,9 @@ def withproperties expr p = withcolor (cyanpart p,magentapart p,yellowpart p,blackpart p) fi withpen penpart p - if length (dashpart p) > 0 : + % if dashpart p <> nullpicture : % fails dashed dashpart p - fi + % fi withprescript prescriptpart p withpostscript postscriptpart p enddef ; @@ -1400,42 +1357,7 @@ vardef mfun_cmykcolor_to_string(expr c) = decimal blackpart c enddef ; -vardef mfun_pair_to_table(expr p) = - "{" & decimal xpart p & - "," & decimal ypart p & - "}" -enddef ; - -vardef mfun_point_to_table(expr p,i) = - "{" & decimal xpart (point i of p) & - "," & decimal ypart (point i of p) & - "," & decimal xpart (precontrol i of p) & - "," & decimal ypart (precontrol i of p) & - "," & decimal xpart (postcontrol i of p) & - "," & decimal ypart (postcontrol i of p) & - "}" -enddef ; - -vardef mfun_path_to_table(expr p) = - "{" & mfun_point_to_table(p,0) for i=1 upto length(p) : & "," & mfun_point_to_table(p,i) endfor & "}" -enddef ; - -vardef mfun_rgb_to_table(expr c) = - "{" & decimal redpart c & - "," & decimal greenpart c & - "," & decimal bluepart c & - "}" -enddef ; - -vardef mfun_cmyk_to_table(expr c) = - "{" & decimal cyanpart c & - "," & decimal magentapart c & - "," & decimal yellowpart c & - "," & decimal blackpart c & - "}" -enddef ; - -vardef mfun_grey_to_string(expr n) = +vardef mfun_greycolor_to_string(expr n) = decimal n enddef ; @@ -1646,8 +1568,8 @@ enddef ; vardef strfmt(expr f, x) = "\MPgraphformat{" & escaped_format(f) & "}{" & mfun_tagged_string(x) & "}" enddef ; vardef varfmt(expr f, x) = "\MPformatted{" & escaped_format(f) & "}{" & mfun_tagged_string(x) & "}" enddef ; -vardef format@# (expr f, x) = textext@#(strfmt(f, x)) enddef ; -vardef formatted@#(expr f, x) = textext@#(varfmt(f, x)) enddef ; +vardef format (expr f, x) = textext(strfmt(f, x)) enddef ; +vardef formatted(expr f, x) = textext(varfmt(f, x)) enddef ; % could be this (something to discuss with alan as it involves graph): % @@ -1674,15 +1596,12 @@ def nofill text t = fill t withpostscript "collect" enddef ; % so we can do: withcolor "red" -% We do a low level runscript: -% -% lua.mp.namedcolor(s) % conflicts with macro namedcolor -% lua.mp.mf_named_color(s) % okay but, can also be -% lua.mp("mf_named_color",s) % which gives expansion mess - -def resolvedcolor primary s = % no vardef +vardef resolvedcolor primary s = + % lua.mp.namedcolor(s) % conflicts with macro namedcolor + % lua.mp.NamedColor(s) % okay but, can also be + % lua.mp("NamedColor",s) % which gives expansion mess if string s : - runscript("mp.mf_named_color('" & s & "')") % faster anyway + runscript("mp.NamedColor('" & s & "')") % faster anyway else : s fi @@ -1695,10 +1614,6 @@ def comment expr str = special "metapost.comment[[" & str & "]]" ; enddef ; -vardef report(text t) = - lua.mp.report(t) -enddef ; - % This overloads a dummy: vardef uniquelist(suffix list) = diff --git a/Master/texmf-dist/metapost/context/base/mpiv/mp-node.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-node.mpiv index 5829558e65f..79391220b44 100644 --- a/Master/texmf-dist/metapost/context/base/mpiv/mp-node.mpiv +++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-node.mpiv @@ -53,8 +53,6 @@ vardef makenode@#(text t) = for a = t : if (path a) or (unknown a) : mfun_makenode@#(t,) - elseif (string a) and (length(a) = 0) : - mfun_makenode@#(t,) else : mfun_makenode@#(nodepath, t,) fi @@ -66,8 +64,6 @@ vardef node@#(text t) = for a = t : if (path a) or (unknown a) : mfun_node@#(t,) - elseif (string a) and (length(a) = 0) : - mfun_node@#(t,) else : mfun_node@#(nodepath, t,) fi @@ -79,8 +75,6 @@ vardef nodeboundingpoint@#(text t) = for a = t : if (path a) or (unknown a) : mfun_nodeboundingpoint@#(t) - elseif (string a) and (length(a) = 0) : - mfun_nodeboundingpoint@#(t) else : mfun_nodeboundingpoint@#(nodepath,a) fi @@ -237,7 +231,7 @@ vardef betweennodes@#(suffix p)(expr f)(suffix q)(text s) = for a = s : if unknown t : t = a ; - mfun_nodeboundingpoint@#(q,t) + mfun_nodeboundingpoint@#(p,f) + nodeboundingpoint@#(q,t) + nodeboundingpoint@#(p,f) else : + relative@#(a) fi diff --git a/Master/texmf-dist/metapost/context/base/mpiv/mp-page.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-page.mpiv index eba66a005d2..6e93bdaaeb2 100644 --- a/Master/texmf-dist/metapost/context/base/mpiv/mp-page.mpiv +++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-page.mpiv @@ -188,8 +188,6 @@ fi ; string CurrentLayout ; CurrentLayout := "default" ; -% runscript("mp.PaperHeight()") % way faster of course - vardef PaperHeight = lua.mp.PaperHeight () enddef ; vardef PaperWidth = lua.mp.PaperWidth () enddef ; vardef PrintPaperHeight = lua.mp.PrintPaperHeight () enddef ; @@ -321,9 +319,8 @@ vardef OverlayHeight = lua.mp.OverlayHeight () enddef ; vardef OverlayDepth = lua.mp.OverlayDepth () enddef ; vardef OverlayLineWidth = lua.mp.OverlayLineWidth() enddef ; vardef OverlayOffset = lua.mp.OverlayOffset () enddef ; -vardef OverlayRegion = lua.mp.OverlayRegion () enddef ; -vardef defaultcolormodel = lua.mp.mf_default_color_model() enddef ; +vardef defaultcolormodel = lua.mp.defaultcolormodel() enddef ; % def OverlayLineColor = lua.mp.OverlayLineColor() enddef ; % def OverlayColor = lua.mp.OverlayColor () enddef ; diff --git a/Master/texmf-dist/metapost/context/base/mpiv/mp-tool.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-tool.mpiv index 2cdb5fb3983..75706e09be9 100644 --- a/Master/texmf-dist/metapost/context/base/mpiv/mp-tool.mpiv +++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-tool.mpiv @@ -17,8 +17,6 @@ boolean context_tool ; context_tool := true ; let @## = @# ; -let noexpand = quote ; - %D New, version number testing: %D %D \starttyping @@ -244,19 +242,19 @@ boolean savingdata ; savingdata := false ; boolean savingdatadone ; savingdatadone := false ; def savedata expr txt = - lua.mp.mf_save_data(txt); + lua.mp.save_data(txt); enddef ; def startsavingdata = - lua.mp.mf_start_saving_data(); + lua.mp.start_saving_data(); enddef ; def stopsavingdata = - lua.mp.mf_stop_saving_data() ; + lua.mp.stop_saving_data() ; enddef ; def finishsavingdata = - lua.mp.mf_finish_saving_data() ; + lua.mp.finish_saving_data() ; enddef ; %D Instead of a keystroke eating save and allocation @@ -304,7 +302,7 @@ def newpair text v = forsuffixes i=v : save i ; pair i ; endfor ; endd %D set_inner_boundingbox p %D \stoptyping -path mfun_boundingbox_stack[] ; +path mfun_boundingbox_stack ; numeric mfun_boundingbox_stack_depth ; mfun_boundingbox_stack_depth := 0 ; @@ -316,7 +314,7 @@ enddef ; def popboundingbox text p = setbounds p to mfun_boundingbox_stack[mfun_boundingbox_stack_depth] ; - mfun_boundingbox_stack[mfun_boundingbox_stack_depth] := origin -- cycle ; + mfun_boundingbox_stack[mfun_boundingbox_stack_depth] := origin ; mfun_boundingbox_stack_depth := mfun_boundingbox_stack_depth - 1 ; enddef ; @@ -325,7 +323,7 @@ let pop_boundingbox = popboundingbox ; % downward compatible vardef boundingbox primary p = if (path p) or (picture p) : - llcorner p -- lrcorner p -- urcorner p -- ulcorner p + llcorner p -- lrcorner p -- urcorner p -- ulcorner p else : origin fi -- cycle @@ -397,14 +395,6 @@ vardef boundingpoint@#(expr p) = fi enddef ; -def mirrored primary a = - a scaled -1 -enddef ; - -primarydef a mirroredabout b = - (a shifted -b) scaled -1 shifted b -enddef ; - %D Some missing functions can be implemented rather straightforward (thanks to %D Taco and others): @@ -2891,15 +2881,13 @@ enddef ; % This could be standard mplib 2 behaviour: -% vardef rcomponent expr p = if rgbcolor p : redpart elseif cmykcolor p : 1 - cyanpart fi p enddef ; - vardef rcomponent expr p = if rgbcolor p : redpart p elseif cmykcolor p : 1 - cyanpart p else : p fi enddef ; vardef gcomponent expr p = if rgbcolor p : greenpart p elseif cmykcolor p : 1 - magentapart p else : p fi enddef ; vardef bcomponent expr p = if rgbcolor p : bluepart p elseif cmykcolor p : 1 - yellowpart p else : p fi enddef ; vardef ccomponent expr p = if cmykcolor p : cyanpart p elseif rgbcolor p : 1 - redpart p else : p fi enddef ; vardef mcomponent expr p = if cmykcolor p : magentapart p elseif rgbcolor p : 1 - greenpart p else : p fi enddef ; vardef ycomponent expr p = if cmykcolor p : yellowpart p elseif rgbcolor p : 1 - bluepart p else : p fi enddef ; -vardef kcomponent expr p = if cmykcolor p : blackpart p elseif rgbcolor p : 0 else : p fi enddef ; +vardef bcomponent expr p = if cmykcolor p : blackpart p elseif rgbcolor p : 0 else : p fi enddef ; % draw image (...) ... ; % prescripts prepended to first, postscripts appended to last % draw decorated (...) ... ; % prescripts prepended to each, postscripts appended to each @@ -3417,7 +3405,8 @@ primarydef p crossingunder q = a := hold[hold] ; hold := hold - 1 ; fi if i = crossingnumbermax : - message("crossingunder reached maximum " & decimal i & " intersections."); + message("crossingunder reached maximum " & decimal i & + " intersections."); fi endfor @@ -3565,40 +3554,3 @@ enddef ; vardef tocycle(suffix p)(text t) = topath(p,t) t cycle enddef ; - -% reimplemented to support paths and pictures - -def drawdot expr p = - if pair p : - addto currentpicture doublepath p - withpen currentpen _op_ - elseif path p : - draw image ( - for i=0 upto length p : - addto currentpicture doublepath point i of p - withpen currentpen _op_ ; - endfor ; - ) - elseif picture p : - draw image ( - save pp ; path pp ; - for i within p : - if stroked i or filled i : - pp := pathpart i ; - for j=0 upto length pp : - addto currentpicture doublepath point j of pp - withpen currentpen _op_ ; - endfor ; - fi ; - endfor ; - ) - fi -enddef ; - -% vardef textlength(text t) = -% save n ; n := 0 ; -% for i = t : -% n := n + 1 ; -% endfor; -% n -% enddef; diff --git a/Master/texmf-dist/metapost/context/base/mpiv/mp-tres.mpiv b/Master/texmf-dist/metapost/context/base/mpiv/mp-tres.mpiv index c331d71affe..335670a989f 100644 --- a/Master/texmf-dist/metapost/context/base/mpiv/mp-tres.mpiv +++ b/Master/texmf-dist/metapost/context/base/mpiv/mp-tres.mpiv @@ -96,14 +96,14 @@ primarydef p XYZscaled q = (q*Xpart p,q*Ypart p,q*Zpart p) enddef ; -vardef projection primary t = - (if triplet t : +vardef projection expr t = + if triplet t : (Xpart t, Ypart t) transformed Txy shifted (0,Zpart t) - elseif pair t : + elseif pair t : t transformed Txy - else : + else : origin transformed Txy - fi) + fi enddef ; %D This overloads the plain macro \type {abs} (being \type {length}): @@ -166,59 +166,6 @@ vardef draw_vector@# (expr v, s) text t = fi enddef ; -%D Transform a (2D) path to a 3D plane - -def XYpath primary p = - (for i=0 upto (length p) if cycle p: -1 fi : - if i>0 : .. fi - projection (xpart point i of p, - ypart point i of p, - 0) - ..controls - projection (xpart postcontrol i of p, - ypart postcontrol i of p, - 0) - and - projection (xpart precontrol (i+1) of p, - ypart precontrol (i+1) of p, - 0) - endfor if cycle p: ..cycle fi) -enddef ; - -def XZpath primary p = - (for i=0 upto (length p) if cycle p: -1 fi : - if i>0 : .. fi - projection (xpart point i of p, - 0, - ypart point i of p) - ..controls - projection (xpart postcontrol i of p, - 0, - ypart postcontrol i of p) - and - projection (xpart precontrol (i+1) of p, - 0, - ypart precontrol (i+1) of p) - endfor if cycle p: ..cycle fi) -enddef ; - -def YZpath primary p = - (for i=0 upto (length p) if cycle p: -1 fi : - if i>0 : .. fi - projection (0, - xpart point i of p, - ypart point i of p) - ..controls - projection (0, - xpart postcontrol i of p, - ypart postcontrol i of p) - and - projection (0, - xpart precontrol (i+1) of p, - ypart precontrol (i+1) of p) - endfor if cycle p: ..cycle fi) -enddef ; - %D Some constants... triplet Origin, Xunitvector, Yunitvector, Zunitvector ; |