diff options
Diffstat (limited to 'Master/texmf-dist/metapost/context/base/mp-mlib.mp')
-rw-r--r-- | Master/texmf-dist/metapost/context/base/mp-mlib.mp | 152 |
1 files changed, 139 insertions, 13 deletions
diff --git a/Master/texmf-dist/metapost/context/base/mp-mlib.mp b/Master/texmf-dist/metapost/context/base/mp-mlib.mp index 6722c81e4f4..bf2372ca390 100644 --- a/Master/texmf-dist/metapost/context/base/mp-mlib.mp +++ b/Master/texmf-dist/metapost/context/base/mp-mlib.mp @@ -26,38 +26,153 @@ def resettextexts = _tt_p_ := nullpicture ; enddef ; -extra_endfig := ";draw _tt_p_; " & extra_endfig ; +extra_endfig := ";addto currentpicture also _tt_p_; " & extra_endfig; % was draw _tt_p_ extra_beginfig := extra_beginfig & "resettextexts;"; vardef rawtextext(expr str) = - if _trial_run_ : + if str = "" : + nullpicture + elseif _trial_run_ : image ( _tt_n_ := _tt_n_ + 1 ; _tt_p_ := image ( - draw _tt_p_ ; - draw unitsquare withprescript "tf" withpostscript decimal _tt_n_ & ":" & str ; + addto currentpicture also _tt_p_ ; + addto currentpicture doublepath unitsquare withprescript "tf" withpostscript decimal _tt_n_ & ":" & str ; ) ; - draw unitsquare ; + addto currentpicture doublepath unitsquare withpen pencircle scaled 0 ; ) else : image ( _tt_n_ := _tt_n_ + 1 ; - draw unitsquare + addto currentpicture doublepath unitsquare xscaled _tt_w_[_tt_n_] yscaled (_tt_h_[_tt_n_] + _tt_d_[_tt_n_]) withprescript "ts" withpostscript decimal _tt_n_ & ":" & str ; - ) + ) shifted (0,-_tt_d_[_tt_n_]) + fi +enddef ; + +% not ok yet + +pair laboff.d, laboff.dlft, laboff.drt ; % new positional suffixes +pair laboff.origin, laboff.raw ; % graph mess + +laboff.d := laboff ; labxf.d := labxf ; labyf.d := labyf ; +laboff.dlft := laboff.lft ; labxf.dlft := labxf.lft ; labyf.dlft := labyf.lft ; +laboff.drt := laboff.rt ; labxf.drt := labxf.rt ; labyf.drt := labyf.rt ; + +labtype := 0 ; labtype.lft := 1 ; labtype.rt := 2 ; +labtype.bot := 3 ; labtype.top := 4 ; labtype.ulft := 5 ; +labtype.urt := 6 ; labtype.llft := 7 ; labtype.lrt := 8 ; +labtype.d := 10 ; labtype.dlft := 11 ; labtype.drt := 12 ; +labtype.origin := 0 ; labtype.raw := 0 ; + +% laboff.origin = (infinity,infinity) ; labxf.origin := 0 ; labyf.origin := 0 ; +% laboff.raw = (infinity,infinity) ; labxf.raw := 0 ; labyf.raw := 0 ; + +% todo: thelabel.origin("xxxx",origin) (overflows) + +laboff.origin = (0,0) ; labxf.origin := 0 ; labyf.origin := 0 ; +laboff.raw = (0,0) ; labxf.raw := 0 ; labyf.raw := 0 ; + +pair laboff.l ; laboff.l = laboff.lft ; +pair laboff.r ; laboff.r = laboff.rt ; +pair laboff.b ; laboff.b = laboff.bot ; +pair laboff.t ; laboff.t = laboff.top ; +pair laboff.l_t ; laboff.l_t = laboff.ulft ; +pair laboff.r_t ; laboff.r_t = laboff.urt ; +pair laboff.l_b ; laboff.l_b = laboff.llft ; +pair laboff.r_b ; laboff.r_b = laboff.lrt ; +pair laboff.t_l ; laboff.t_l = laboff.ulft ; +pair laboff.t_r ; laboff.t_r = laboff.urt ; +pair laboff.b_l ; laboff.b_l = laboff.llft ; +pair laboff.b_r ; laboff.b_r = laboff.lrt ; + +labxf.l ; labxf.l = labxf.lft ; +labxf.r ; labxf.r = labxf.rt ; +labxf.b ; labxf.b = labxf.bot ; +labxf.t ; labxf.t = labxf.top ; +labxf.l_t ; labxf.l_t = labxf.ulft ; +labxf.r_t ; labxf.r_t = labxf.urt ; +labxf.l_b ; labxf.l_b = labxf.llft ; +labxf.r_b ; labxf.r_b = labxf.lrt ; +labxf.t_l ; labxf.t_l = labxf.ulft ; +labxf.t_r ; labxf.t_r = labxf.urt ; +labxf.b_l ; labxf.b_l = labxf.llft ; +labxf.b_r ; labxf.b_r = labxf.lrt ; + +labyf.l ; labyf.l = labyf.lft ; +labyf.r ; labyf.r = labyf.rt ; +labyf.b ; labyf.b = labyf.bot ; +labyf.t ; labyf.t = labyf.top ; +labyf.l_t ; labyf.l_t = labyf.ulft ; +labyf.r_t ; labyf.r_t = labyf.urt ; +labyf.l_b ; labyf.l_b = labyf.llft ; +labyf.r_b ; labyf.r_b = labyf.lrt ; +labyf.t_l ; labyf.t_l = labyf.ulft ; +labyf.t_r ; labyf.t_r = labyf.urt ; +labyf.b_l ; labyf.b_l = labyf.llft ; +labyf.b_r ; labyf.b_r = labyf.lrt ; + +labtype.l ; labtype.l = labtype.lft ; +labtype.r ; labtype.r = labtype.rt ; +labtype.b ; labtype.b = labtype.bot ; +labtype.t ; labtype.t = labtype.top ; +labtype.l_t ; labtype.l_t = labtype.ulft ; +labtype.r_t ; labtype.r_t = labtype.urt ; +labtype.l_b ; labtype.l_b = labtype.llft ; +labtype.r_b ; labtype.r_b = labtype.lrt ; +labtype.t_l ; labtype.t_l = labtype.ulft ; +labtype.t_r ; labtype.t_r = labtype.urt ; +labtype.b_l ; labtype.b_l = labtype.llft ; +labtype.b_r ; labtype.b_r = labtype.lrt ; + +vardef thetextext@#(expr p,z) = % adapted copy of thelabel@ + if string p : + thetextext@#(rawtextext(p),z) + else : + p + if (labtype@# >= 10) : shifted (0,ypart center p) fi + shifted (z + labeloffset*laboff@# - (labxf@#*lrcorner p + labyf@#*ulcorner p + (1-labxf@#-labyf@#)*llcorner p)) fi enddef ; vardef textext@#(expr txt) = - interim labeloffset := textextoffset ; - if string txt : - thelabel@#(rawtextext(txt),origin) - else : - thelabel@#(txt,origin) - fi + interim labeloffset := textextoffset ; + if string txt : + thetextext@#(rawtextext(txt),origin) + else : + thetextext@#(txt,origin) + fi +enddef ; + +% \starttext +% \startMPpage +% numeric value ; value = 123 ; +% label.lft(decimal value,origin) ; +% draw "oeps" infont defaultfont ; +% \stopMPpage +% \stoptext + +vardef thelabel@#(expr s, z) = + save p ; picture p ; + if picture s : + p = s ; + else : + p = textext("\definedfont[" & defaultfont & "]" & s) scaled defaultscale ; + fi ; + p shifted (z + labeloffset*laboff@# - (labxf@#*lrcorner p + labyf@#*ulcorner p + (1-labxf@#-labyf@#)*llcorner p)) +enddef; + +let normalinfont = infont ; + +primarydef str infont name = % very naughty ! + if name = "" : + textext(str) + else : + textext("\definedfont[" & name & "]" & str) + fi enddef ; def circular_shade (expr p, n, ca, cb) = @@ -144,13 +259,24 @@ enddef ; def erasegraphictextfile = enddef ; +def externalfigure primary filename = + doexternalfigure (filename) +enddef ; def doexternalfigure (expr filename) text transformation = draw unitsquare transformation withprescript "fg" withpostscript filename ; enddef ; +def register (expr label, width, height, offset) = + draw unitsquare xscaled width yscaled height shifted offset withprescript "ps" withpostscript label ; +enddef ; + extra_beginfig := extra_beginfig & "currentgraphictext := 0 ; " ; extra_endfig := extra_endfig & "finishsavingdata ; " ; extra_endfig := extra_endfig & "resettextexts ; " ; boolean cmykcolors ; cmykcolors := true ; boolean spotcolors ; spotcolors := true ; + +vardef verbatim(expr str) = + ditto & "\detokenize{" & str & "}" & ditto +enddef ; |