From 8f472c629a996f1c08281198210354a253d7f56b Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Thu, 15 Dec 2022 19:13:44 +0100 Subject: 2022-12-15 17:52:00 --- metapost/context/base/mpxl/mp-apos.mpxl | 87 ++++++++++++++++++--------------- metapost/context/base/mpxl/mp-cont.mpxl | 8 +-- 2 files changed, 52 insertions(+), 43 deletions(-) (limited to 'metapost') diff --git a/metapost/context/base/mpxl/mp-apos.mpxl b/metapost/context/base/mpxl/mp-apos.mpxl index 05282e835..a64229715 100644 --- a/metapost/context/base/mpxl/mp-apos.mpxl +++ b/metapost/context/base/mpxl/mp-apos.mpxl @@ -217,12 +217,16 @@ permanent def anch_box_arrows_draw = begingroup ; - save f, t, p, alternative, delta, dashtype, edge, arrow, ff, tt ; - pair f, t, ff, tt ; path p ; string alternative, arrow ; + save f, t, p, alternative, delta, dashtype, edge, arrow, ff, tt, spanpages, spanfirst, spanlast, skip ; + pair f, t, ff, tt ; path p ; string alternative, arrow ; boolean spanpages, spanfirst, spanlast, skip ; dashtype := mpvarn("dashtype") ; delta := mpvard("distance"); alternative := mpvars("alternative") ; arrow := mpvars("arrow") ; + spanpages := false ; + spanfirst := true ; + spanlast := true ; + skip := false ; if positionx(mpvars("rightedge")) > 0 : if alternative = "left" : edge := positionx(mpvars("leftedge")); @@ -243,37 +247,40 @@ def anch_box_arrows_draw = else : f := positionxy(mpvars("from")) ; t := positionxy(mpvars("to")) ; + spanpages := getpospage(mpvars("to")) > getpospage(mpvars("from")) ; + if spanpages : + if getpospage(mpvars("from")) = RealPageNumber : + t := (getposwidth(getposregion(mpvars("from"))),ypart f) ; + spanlast := false ; + elseif getpospage(mpvars("to")) = RealPageNumber : + f := (getposx(getposregion(mpvars("to"))),ypart t) ; + spanfirst := false ; + fi ; + fi % drawdot f withpen pencircle scaled 2pt; % drawdot t withpen pencircle scaled 2pt; -% if alternative = "bottom" : -% f := f yshifted (- abs(ypart f - ypart t)) ; -% elseif alternative = "top" : -% f := f yshifted (abs(ypart f - ypart t)) ; -% elseif alternative = "left" : -% f := f xshifted (- abs(xpart f - xpart t)) ; -% elseif alternative = "right" : -% f := f xshifted (abs(xpart f - xpart t)) ; -% fi ; % - % - if alternative = "bottom" : -ff := (xpart f, min(ypart f, ypart t)); -tt := (xpart t, ypart ff); - p := (f -- (ff yshifted -delta) -- (tt yshifted -delta) -- t) ; + skip := (not spanpages) and ((mpvars("span")) = "yes") ; + if skip : + % we skip the second just in case + elseif alternative = "bottom" : + ff := (xpart f, min(ypart f, ypart t)) ; + tt := (xpart t, ypart ff) ; + p := (if spanfirst: f -- fi (ff yshifted -delta) -- (tt yshifted -delta) if spanlast : -- t fi) ; draw thetextext.bot(mpvars("text"), (point .5 along p) yshifted -.25ExHeight) ; elseif alternative = "top" : -ff := (xpart f, max(ypart f, ypart t)); -tt := (xpart t, ypart ff); - p := (f -- (ff yshifted delta) -- (tt yshifted delta) -- t) ; + ff := (xpart f, max(ypart f, ypart t)) ; + tt := (xpart t, ypart ff) ; + p := (if spanfirst: f -- fi (ff yshifted delta) -- (tt yshifted delta) if spanlast : -- t fi) ; draw thetextext.top(mpvars("text"), (point .5 along p) yshifted .25ExHeight) ; elseif alternative = "left" : -ff := (min(xpart f, xpart t), ypart f); -tt := (xpart ff, ypart t); + ff := (min(xpart f, xpart t), ypart f) ; + tt := (xpart ff, ypart t) ; p := (f -- (ff xshifted - delta) -- (tt xshifted - delta) -- t) ; draw thetextext.lft(mpvars("text"), (point .5 along p) xshifted -ExHeight) ; elseif alternative = "right" : -ff := (max(xpart f, xpart t), ypart f); -tt := (xpart ff, ypart t); + ff := (max(xpart f, xpart t), ypart f) ; + tt := (xpart ff, ypart t) ; p := (f -- (ff xshifted delta) -- (tt xshifted delta) -- t) ; draw thetextext.rt(mpvars("text"), (point .5 along p) xshifted ExHeight) ; elseif alternative = "middle" : @@ -281,22 +288,24 @@ tt := (xpart ff, ypart t); draw thetextext.rt(mpvars("text"), (point .5 along p) xshifted ExHeight) ; fi ; fi ; - % 1 = dashed, 2 = dashed with background - if arrow ="no" : - draw - elseif arrow == "reverse" : - drawarrow reverse - elseif arrow == "both" : - drawdblarrow - else : - drawarrow - fi - p - if dashtype == 1 : - withdashes .5ExHeight + if not skip : + % 1 = dashed, 2 = dashed with background + if arrow ="no" : + draw + elseif arrow == "reverse" : + drawarrow reverse + elseif arrow == "both" : + drawdblarrow + else : + drawarrow fi - withpen pencircle scaled mpvard("rulethickness") - withcolor mpvars("linecolor") ; - positioninregion ; + p + if dashtype == 1 : + withdashes .5ExHeight + fi + withpen pencircle scaled mpvard("rulethickness") + withcolor mpvars("linecolor") ; + positioninregion ; + fi ; endgroup ; enddef ; diff --git a/metapost/context/base/mpxl/mp-cont.mpxl b/metapost/context/base/mpxl/mp-cont.mpxl index a4f1b18ba..1213a1e61 100644 --- a/metapost/context/base/mpxl/mp-cont.mpxl +++ b/metapost/context/base/mpxl/mp-cont.mpxl @@ -137,9 +137,9 @@ newscriptindex mfid_PaperBleed ; mfid_PaperBleed := scriptindex "PaperBleed" immutable % permanent PageFraction, SpineWidth, PaperBleed ; -% mfid_CurrentLayout ; mfid_CurrentLayout := scriptindex "CurrentLayout" ; vardef CurrentLayout = runscript mfid_CurrentLayout enddef ; -% mfid_OverlayLineColor ; mfid_OverlayLineColor := scriptindex "OverlayLineColor ; vardef OverlayLineColor = runscript mfid_OverlayLineColor enddef ; -% mfid_OverlayColor ; mfid_OverlayColor := scriptindex "OverlayColor ; vardef OverlayColor = runscript mfid_OverlayColor enddef ; +newscriptindex mfid_CurrentLayout ; mfid_CurrentLayout := scriptindex "CurrentLayout" ; vardef CurrentLayout = runscript mfid_CurrentLayout enddef ; +newscriptindex mfid_OverlayLineColor ; mfid_OverlayLineColor := scriptindex "OverlayLineColor" ; vardef OverlayLineColor = runscript mfid_OverlayLineColor enddef ; +newscriptindex mfid_OverlayColor ; mfid_OverlayColor := scriptindex "OverlayColor" ; vardef OverlayColor = runscript mfid_OverlayColor enddef ; newscriptindex mfid_OverlayWidth ; mfid_OverlayWidth := scriptindex "OverlayWidth" ; vardef OverlayWidth = runscript mfid_OverlayWidth enddef ; newscriptindex mfid_OverlayHeight ; mfid_OverlayHeight := scriptindex "OverlayHeight" ; vardef OverlayHeight = runscript mfid_OverlayHeight enddef ; newscriptindex mfid_OverlayDepth ; mfid_OverlayDepth := scriptindex "OverlayDepth" ; vardef OverlayDepth = runscript mfid_OverlayDepth enddef ; @@ -148,7 +148,7 @@ newscriptindex mfid_OverlayOffset ; mfid_OverlayOffset := scriptindex "Ove newscriptindex mfid_OverlayRegion ; mfid_OverlayRegion := scriptindex "OverlayRegion" ; vardef OverlayRegion = runscript mfid_OverlayRegion enddef ; immutable % permanent - % CurrentLayout, OverlayLineColor, OverlayColor, + CurrentLayout, OverlayLineColor, OverlayColor, OverlayWidth, OverlayHeight, OverlayDepth, OverlayLineWidth, OverlayOffset, OverlayRegion ; newscriptindex mfid_defaultcolormodel ; mfid_defaultcolormodel := scriptindex "defaultcolormodel" ; vardef defaultcolormodel = runscript mfid_defaultcolormodel enddef ; -- cgit v1.2.3