summaryrefslogtreecommitdiff
path: root/metapost/context/base/mpiv/mp-blob.mpiv
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2019-01-17 23:06:17 +0100
committerContext Git Mirror Bot <phg@phi-gamma.net>2019-01-17 23:06:17 +0100
commit823bd4a7d8ff32c05807b02e650ecbd60b43e95d (patch)
treef6ac3760c1d5da04f8570587b76572cd4fb44ecd /metapost/context/base/mpiv/mp-blob.mpiv
parent17527db3823d6123f4e462d13244430c40b78adb (diff)
downloadcontext-823bd4a7d8ff32c05807b02e650ecbd60b43e95d.tar.gz
2019-01-17 22:18:00
Diffstat (limited to 'metapost/context/base/mpiv/mp-blob.mpiv')
-rw-r--r--metapost/context/base/mpiv/mp-blob.mpiv241
1 files changed, 72 insertions, 169 deletions
diff --git a/metapost/context/base/mpiv/mp-blob.mpiv b/metapost/context/base/mpiv/mp-blob.mpiv
index 318c78f4f..d1fc7357b 100644
--- a/metapost/context/base/mpiv/mp-blob.mpiv
+++ b/metapost/context/base/mpiv/mp-blob.mpiv
@@ -28,36 +28,17 @@ enddef ;
extra_endfig := extra_endfig & "mfun_reset_tex_blobs ; " ;
-if mfun_use_one_pass :
-
- 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 ;
-
-else :
-
- 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_stage=inject"
- withprescript "tb_blob=" & decimal lua.mp.mf_blob_index(mfun_blob_n,n) ;
- mfun_blob_c
- enddef ;
-
-fi ;
+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:
@@ -66,144 +47,66 @@ newinternal tracingfollowtext ; tracingfollowtext := 0 ;
newinternal autoscaleupfollowtext ; autoscaleupfollowtext := 2 ;
newinternal autoscaledownfollowtext ; autoscaledownfollowtext := 0 ;
-if mfun_use_one_pass :
-
- 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 ;
+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 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) ;
+ draw boundingbox pic[i] withpen pencircle scaled .25pt withcolor red ;
+ draw ap withpen pencircle scaled .50pt withcolor green ;
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 ;
-
-else :
-
- vardef followtext(expr pth, txt) =
- image (
- mfun_blob_n := mfun_blob_n + 1 ;
- if mfun_trial_run :
- draw fullcircle scaled 100bp
- withprescript "mf_object=followtext"
- withprescript "ft_stage=trial"
- withprescript "ft_category=" & decimal mfun_blob_n
- withpostscript txt ;
- else :
- 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_stage=final"
- withprescript "ft_category=" & decimal mfun_blob_n ;
- fi ;
- )
- enddef ;
-
-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 ;