summaryrefslogtreecommitdiff
path: root/metapost
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2021-04-29 23:51:45 +0200
committerContext Git Mirror Bot <phg@phi-gamma.net>2021-04-29 23:51:45 +0200
commit6addefa380c1008fbc164890e8e95dd855a361c5 (patch)
treeec10a53afe218fba3b917a07caca414f2d165044 /metapost
parentb79e123941f1d1b3cc13d05ee4d4d37c72c6a253 (diff)
downloadcontext-6addefa380c1008fbc164890e8e95dd855a361c5.tar.gz
2021-04-29 23:07:00
Diffstat (limited to 'metapost')
-rw-r--r--metapost/context/base/mpxl/metafun.mpxl1
-rw-r--r--metapost/context/base/mpxl/mp-asnc.mpxl131
2 files changed, 132 insertions, 0 deletions
diff --git a/metapost/context/base/mpxl/metafun.mpxl b/metapost/context/base/mpxl/metafun.mpxl
index 7f9530120..12db6b5af 100644
--- a/metapost/context/base/mpxl/metafun.mpxl
+++ b/metapost/context/base/mpxl/metafun.mpxl
@@ -46,6 +46,7 @@ input "mp-func.mpxl" ;
input "mp-node.mpxl" ;
input "mp-apos.mpxl" ;
input "mp-abck.mpxl" ;
+input "mp-asnc.mpxl" ;
input "mp-blob.mpxl" ;
input "mp-lmtx.mpxl" ;
input "mp-text.mpxl" ;
diff --git a/metapost/context/base/mpxl/mp-asnc.mpxl b/metapost/context/base/mpxl/mp-asnc.mpxl
new file mode 100644
index 000000000..0e5d3491b
--- /dev/null
+++ b/metapost/context/base/mpxl/mp-asnc.mpxl
@@ -0,0 +1,131 @@
+%D \module
+%D [ file=mp-asnc.mpiv,
+%D version=2012.02.19, % was mp-core: 1999.08.01, anchoring
+%D title=\CONTEXT\ \METAPOST\ graphics,
+%D subtitle=anchored background macros,
+%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 See anch-snc.mkxl for historic comments.
+
+if known context_asnc : endinput ; fi ;
+
+boolean context_asnc ; context_asnc := true ;
+
+newscriptindex mfid_asnc_collect ; mfid_asnc_collect := scriptindex "asnc_collect" ; def asnc_collect (expr category,realpage,region) = runscript mfid_asnc_collect (category) (realpage) (region) enddef ;
+
+newscriptindex mfid_asnc_extend ; mfid_asnc_extend := scriptindex "asnc_extend" ; def asnc_extend = runscript mfid_asnc_extend enddef ;
+newscriptindex mfid_asnc_prune ; mfid_asnc_prune := scriptindex "asnc_prune" ; def asnc_prune = runscript mfid_asnc_prune enddef ;
+newscriptindex mfid_asnc_collapse ; mfid_asnc_collapse := scriptindex "asnc_collapse" ; def asnc_collapse = runscript mfid_asnc_collapse enddef ;
+newscriptindex mfid_asnc_getsize ; mfid_asnc_getsize := scriptindex "asnc_getsize" ; def asnc_getsize = runscript mfid_asnc_getsize enddef ;
+newscriptindex mfid_asnc_getx ; mfid_asnc_getx := scriptindex "asnc_getx" ; def asnc_getx = runscript mfid_asnc_getx enddef ;
+newscriptindex mfid_asnc_gety ; mfid_asnc_gety := scriptindex "asnc_gety" ; def asnc_gety = runscript mfid_asnc_gety enddef ;
+newscriptindex mfid_asnc_getw ; mfid_asnc_getw := scriptindex "asnc_getw" ; def asnc_getw = runscript mfid_asnc_getw enddef ;
+newscriptindex mfid_asnc_geth ; mfid_asnc_geth := scriptindex "asnc_geth" ; def asnc_geth = runscript mfid_asnc_geth enddef ;
+newscriptindex mfid_asnc_getd ; mfid_asnc_getd := scriptindex "asnc_getd" ; def asnc_getd = runscript mfid_asnc_getd enddef ;
+
+newscriptindex mfid_asnc_gettop ; mfid_asnc_gettop := scriptindex "asnc_gettop" ; def asnc_gettop (expr n) = (runscript mfid_asnc_gettop n) enddef ;
+newscriptindex mfid_asnc_getbottom ; mfid_asnc_getbottom := scriptindex "asnc_getbottom"; def asnc_getbottom(expr n) = (runscript mfid_asnc_getbottom n) enddef ;
+newscriptindex mfid_asnc_getkind ; mfid_asnc_getkind := scriptindex "asnc_getkind" ; def asnc_getkind (expr n) = (runscript mfid_asnc_getkind n) enddef ;
+newscriptindex mfid_asnc_gettask ; mfid_asnc_gettask := scriptindex "asnc_gettask" ; def asnc_gettask (expr n) = (runscript mfid_asnc_gettask n) enddef ;
+
+presetparameters "synchronizer" [
+ color = "darkgray", % default color
+ colors = {
+ "darkred"
+ "darkgreen"
+ "darkblue",
+ "darkyellow",
+ "darkmagenta",
+ "darkcyan",
+ "darkgray"
+ },
+ index = 1,
+ hoffset = 0,
+ voffset = 0,
+ region = "",
+ width = 1cm,
+ extend = false,
+ prune = true,
+ collapse = true,
+ draw = true,
+ fill = true,
+ page = "auto", % yes | clip | auto | no
+] ;
+
+def lmt_synchronizer = applyparameters "synchronizer" "lmt_do_synchronizer" enddef ;
+
+vardef lmt_do_synchronizer =
+ pushparameters "synchronizer" ;
+ begingroup ;
+ save index, dx, dy, width, count, page, region, paths, tasks, kinds ;
+ path paths[] ; numeric tasks[] ; numeric kinds[] ;
+ %
+ numeric index ; index := getparameter "index" ;
+ numeric dx ; dx := getparameter "hoffset" ;
+ numeric dy ; dy := getparameter "voffset" ;
+ numeric width ; width := getparameter "width" ;
+ numeric count ; count := 0 ;
+ string page ; page := getparameter "page" ;
+ string region ; region := getparameter "region" ;
+ %
+ count := asnc_collect(index,RealPageNumber,region) ;
+ if getparameter "extend" :
+ count := asnc_extend ; % to top of text area
+ fi ;
+ if getparameter "prune" :
+ count := asnc_prune ; % clip top / bottom
+ fi ;
+ if getparameter "collapse" :
+ count := asnc_collapse ;
+ fi ;
+ if count > 0 :
+ save k, t, b, l, r, y ;
+ numeric l ; l := dx ;
+ numeric r ; r := dx + width ;
+ numeric y ; y := asnc_gety + dy ;
+ for i=1 upto count :
+ k := asnc_getkind(i) ;
+ t := asnc_gettop(i) - y ;
+ b := asnc_getbottom(i) - y ;
+ paths[i] = ((l,t) -- (r,t) -- (r,b) -- (l,b) -- cycle) ;
+ tasks[i] = asnc_gettask(i) ;
+ kinds[i] = k ;
+ endfor ;
+ if page = "auto" :
+ page := if region == "" : "clip" else : "no" fi ;
+ fi ;
+ if (page = "clip") or (page = "yes") :
+ StartPage ;
+ fi ;
+ if getparameter "fill" :
+ for i=1 upto count :
+ fill paths[i]
+ withcolor getparameterdefault "colors" i (getparameter "color") ;
+ ;
+ endfor ;
+ fi ;
+ if getparameter "draw" :
+ for i=1 upto count :
+ draw paths[i]
+ withcolor getparameterdefault "colors" i (getparameter "color") ;
+ ;
+ endfor ;
+ fi ;
+ if page = "clip" :
+ clip currentpicture to Page ;
+ setbounds currentpicture to Page ;
+ fi ;
+ if (page = "clip") or (page = "yes") :
+ StopPage ;
+ fi ;
+ fi ;
+ endgroup ;
+ popparameters ;
+enddef ;
+