summaryrefslogtreecommitdiff
path: root/metapost
diff options
context:
space:
mode:
Diffstat (limited to 'metapost')
-rw-r--r--metapost/context/base/common/metafun.mp (renamed from metapost/context/base/metafun.mp)0
-rw-r--r--metapost/context/base/common/mp-back.mp5
-rw-r--r--metapost/context/base/common/mp-fobg.mp5
-rw-r--r--metapost/context/base/common/mp-symb.mp6
-rw-r--r--metapost/context/base/mpii/metafun.mpii (renamed from metapost/context/base/metafun.mpii)0
-rw-r--r--metapost/context/base/mpii/mp-back.mpii (renamed from metapost/context/base/mp-back.mp)0
-rw-r--r--metapost/context/base/mpii/mp-base.mpii (renamed from metapost/context/base/mp-base.mpii)0
-rw-r--r--metapost/context/base/mpii/mp-butt.mpii (renamed from metapost/context/base/mp-butt.mpii)0
-rw-r--r--metapost/context/base/mpii/mp-char.mpii (renamed from metapost/context/base/mp-char.mpii)0
-rw-r--r--metapost/context/base/mpii/mp-core.mpii (renamed from metapost/context/base/mp-core.mpii)0
-rw-r--r--metapost/context/base/mpii/mp-figs.mpii (renamed from metapost/context/base/mp-figs.mpii)0
-rw-r--r--metapost/context/base/mpii/mp-fobg.mpii (renamed from metapost/context/base/mp-fobg.mp)0
-rw-r--r--metapost/context/base/mpii/mp-form.mpii (renamed from metapost/context/base/mp-form.mpii)0
-rw-r--r--metapost/context/base/mpii/mp-func.mpii (renamed from metapost/context/base/mp-func.mpii)0
-rw-r--r--metapost/context/base/mpii/mp-grid.mpii (renamed from metapost/context/base/mp-grid.mpii)0
-rw-r--r--metapost/context/base/mpii/mp-grph.mpii (renamed from metapost/context/base/mp-grph.mpii)0
-rw-r--r--metapost/context/base/mpii/mp-page.mpii (renamed from metapost/context/base/mp-page.mpii)0
-rw-r--r--metapost/context/base/mpii/mp-shap.mpii (renamed from metapost/context/base/mp-shap.mpii)0
-rw-r--r--metapost/context/base/mpii/mp-spec.mpii (renamed from metapost/context/base/mp-spec.mpii)0
-rw-r--r--metapost/context/base/mpii/mp-step.mpii (renamed from metapost/context/base/mp-step.mpii)0
-rw-r--r--metapost/context/base/mpii/mp-text.mpii (renamed from metapost/context/base/mp-text.mpii)0
-rw-r--r--metapost/context/base/mpii/mp-tool.mpii (renamed from metapost/context/base/mp-tool.mpii)2
-rw-r--r--metapost/context/base/mpii/mp-txts.mpii (renamed from metapost/context/base/mp-txts.mpii)0
-rw-r--r--metapost/context/base/mpiv/metafun.mpiv (renamed from metapost/context/base/metafun.mpiv)0
-rw-r--r--metapost/context/base/mpiv/mp-abck.mpiv (renamed from metapost/context/base/mp-abck.mpiv)0
-rw-r--r--metapost/context/base/mpiv/mp-apos.mpiv (renamed from metapost/context/base/mp-apos.mpiv)0
-rw-r--r--metapost/context/base/mpiv/mp-asnc.mpiv (renamed from metapost/context/base/mp-asnc.mpiv)0
-rw-r--r--metapost/context/base/mpiv/mp-back.mpiv205
-rw-r--r--metapost/context/base/mpiv/mp-bare.mpiv (renamed from metapost/context/base/mp-bare.mpiv)0
-rw-r--r--metapost/context/base/mpiv/mp-base.mpiv (renamed from metapost/context/base/mp-base.mpiv)0
-rw-r--r--metapost/context/base/mpiv/mp-butt.mpiv (renamed from metapost/context/base/mp-butt.mpiv)0
-rw-r--r--metapost/context/base/mpiv/mp-char.mpiv (renamed from metapost/context/base/mp-char.mpiv)0
-rw-r--r--metapost/context/base/mpiv/mp-chem.mpiv (renamed from metapost/context/base/mp-chem.mpiv)0
-rw-r--r--metapost/context/base/mpiv/mp-core.mpiv (renamed from metapost/context/base/mp-core.mpiv)0
-rw-r--r--metapost/context/base/mpiv/mp-cows.mpiv156
-rw-r--r--metapost/context/base/mpiv/mp-crop.mpiv (renamed from metapost/context/base/mp-crop.mpiv)0
-rw-r--r--metapost/context/base/mpiv/mp-figs.mpiv (renamed from metapost/context/base/mp-figs.mpiv)0
-rw-r--r--metapost/context/base/mpiv/mp-fobg.mpiv87
-rw-r--r--metapost/context/base/mpiv/mp-form.mpiv (renamed from metapost/context/base/mp-form.mpiv)0
-rw-r--r--metapost/context/base/mpiv/mp-func.mpiv (renamed from metapost/context/base/mp-func.mpiv)0
-rw-r--r--metapost/context/base/mpiv/mp-grap.mpiv (renamed from metapost/context/base/mp-grap.mpiv)0
-rw-r--r--metapost/context/base/mpiv/mp-grid.mpiv (renamed from metapost/context/base/mp-grid.mpiv)0
-rw-r--r--metapost/context/base/mpiv/mp-grph.mpiv (renamed from metapost/context/base/mp-grph.mpiv)177
-rw-r--r--metapost/context/base/mpiv/mp-idea.mpiv (renamed from metapost/context/base/mp-idea.mpiv)0
-rw-r--r--metapost/context/base/mpiv/mp-luas.mpiv (renamed from metapost/context/base/mp-luas.mpiv)4
-rw-r--r--metapost/context/base/mpiv/mp-mlib.mpiv (renamed from metapost/context/base/mp-mlib.mpiv)269
-rw-r--r--metapost/context/base/mpiv/mp-page.mpiv (renamed from metapost/context/base/mp-page.mpiv)31
-rw-r--r--metapost/context/base/mpiv/mp-shap.mpiv (renamed from metapost/context/base/mp-shap.mpiv)0
-rw-r--r--metapost/context/base/mpiv/mp-step.mpiv (renamed from metapost/context/base/mp-step.mpiv)0
-rw-r--r--metapost/context/base/mpiv/mp-symb.mpiv (renamed from metapost/context/base/mp-symb.mp)0
-rw-r--r--metapost/context/base/mpiv/mp-text.mpiv (renamed from metapost/context/base/mp-text.mpiv)0
-rw-r--r--metapost/context/base/mpiv/mp-tool.mpiv (renamed from metapost/context/base/mp-tool.mpiv)156
-rw-r--r--metapost/context/fonts/mpiv/bidi-symbols.mp (renamed from metapost/context/fonts/bidi-symbols.mp)0
-rw-r--r--metapost/context/fonts/mpiv/bidi-symbols.tex (renamed from metapost/context/fonts/bidi-symbols.tex)0
-rw-r--r--metapost/context/fonts/mpiv/demo-symbols.mp (renamed from metapost/context/fonts/demo-symbols.mp)0
-rw-r--r--metapost/context/fonts/mpiv/demo-symbols.tex (renamed from metapost/context/fonts/demo-symbols.tex)0
-rw-r--r--metapost/context/fonts/mpiv/punkfont-bold.mp (renamed from metapost/context/fonts/punkfont-bold.mp)0
-rw-r--r--metapost/context/fonts/mpiv/punkfont-boldslanted.mp (renamed from metapost/context/fonts/punkfont-boldslanted.mp)0
-rw-r--r--metapost/context/fonts/mpiv/punkfont-characters.mp (renamed from metapost/context/fonts/punkfont-characters.mp)0
-rw-r--r--metapost/context/fonts/mpiv/punkfont-definitions.mp (renamed from metapost/context/fonts/punkfont-definitions.mp)0
-rw-r--r--metapost/context/fonts/mpiv/punkfont-slanted.mp (renamed from metapost/context/fonts/punkfont-slanted.mp)0
-rw-r--r--metapost/context/fonts/mpiv/punkfont.mp (renamed from metapost/context/fonts/punkfont.mp)0
62 files changed, 1025 insertions, 78 deletions
diff --git a/metapost/context/base/metafun.mp b/metapost/context/base/common/metafun.mp
index ae0a6d6fd..ae0a6d6fd 100644
--- a/metapost/context/base/metafun.mp
+++ b/metapost/context/base/common/metafun.mp
diff --git a/metapost/context/base/common/mp-back.mp b/metapost/context/base/common/mp-back.mp
new file mode 100644
index 000000000..ecfb0c816
--- /dev/null
+++ b/metapost/context/base/common/mp-back.mp
@@ -0,0 +1,5 @@
+if known mplib :
+ input mp-back.mpiv
+else :
+ input mp-back.mpii
+fi ;
diff --git a/metapost/context/base/common/mp-fobg.mp b/metapost/context/base/common/mp-fobg.mp
new file mode 100644
index 000000000..b61ea4724
--- /dev/null
+++ b/metapost/context/base/common/mp-fobg.mp
@@ -0,0 +1,5 @@
+if known mplib :
+ input mp-fobg.mpiv
+else :
+ input mp-fobg.mpii
+fi ;
diff --git a/metapost/context/base/common/mp-symb.mp b/metapost/context/base/common/mp-symb.mp
new file mode 100644
index 000000000..b39ceaab7
--- /dev/null
+++ b/metapost/context/base/common/mp-symb.mp
@@ -0,0 +1,6 @@
+if known mplib :
+ input mp-symb.mpiv
+else :
+ input mp-symb.mpii
+fi ;
+
diff --git a/metapost/context/base/metafun.mpii b/metapost/context/base/mpii/metafun.mpii
index 9c55191f7..9c55191f7 100644
--- a/metapost/context/base/metafun.mpii
+++ b/metapost/context/base/mpii/metafun.mpii
diff --git a/metapost/context/base/mp-back.mp b/metapost/context/base/mpii/mp-back.mpii
index f588adea9..f588adea9 100644
--- a/metapost/context/base/mp-back.mp
+++ b/metapost/context/base/mpii/mp-back.mpii
diff --git a/metapost/context/base/mp-base.mpii b/metapost/context/base/mpii/mp-base.mpii
index 7af4bc436..7af4bc436 100644
--- a/metapost/context/base/mp-base.mpii
+++ b/metapost/context/base/mpii/mp-base.mpii
diff --git a/metapost/context/base/mp-butt.mpii b/metapost/context/base/mpii/mp-butt.mpii
index 107886bb5..107886bb5 100644
--- a/metapost/context/base/mp-butt.mpii
+++ b/metapost/context/base/mpii/mp-butt.mpii
diff --git a/metapost/context/base/mp-char.mpii b/metapost/context/base/mpii/mp-char.mpii
index 63a71eff8..63a71eff8 100644
--- a/metapost/context/base/mp-char.mpii
+++ b/metapost/context/base/mpii/mp-char.mpii
diff --git a/metapost/context/base/mp-core.mpii b/metapost/context/base/mpii/mp-core.mpii
index 33e9b386e..33e9b386e 100644
--- a/metapost/context/base/mp-core.mpii
+++ b/metapost/context/base/mpii/mp-core.mpii
diff --git a/metapost/context/base/mp-figs.mpii b/metapost/context/base/mpii/mp-figs.mpii
index d4fcc2b35..d4fcc2b35 100644
--- a/metapost/context/base/mp-figs.mpii
+++ b/metapost/context/base/mpii/mp-figs.mpii
diff --git a/metapost/context/base/mp-fobg.mp b/metapost/context/base/mpii/mp-fobg.mpii
index f8b709572..f8b709572 100644
--- a/metapost/context/base/mp-fobg.mp
+++ b/metapost/context/base/mpii/mp-fobg.mpii
diff --git a/metapost/context/base/mp-form.mpii b/metapost/context/base/mpii/mp-form.mpii
index d1dac32db..d1dac32db 100644
--- a/metapost/context/base/mp-form.mpii
+++ b/metapost/context/base/mpii/mp-form.mpii
diff --git a/metapost/context/base/mp-func.mpii b/metapost/context/base/mpii/mp-func.mpii
index 94e400b91..94e400b91 100644
--- a/metapost/context/base/mp-func.mpii
+++ b/metapost/context/base/mpii/mp-func.mpii
diff --git a/metapost/context/base/mp-grid.mpii b/metapost/context/base/mpii/mp-grid.mpii
index ea28d60af..ea28d60af 100644
--- a/metapost/context/base/mp-grid.mpii
+++ b/metapost/context/base/mpii/mp-grid.mpii
diff --git a/metapost/context/base/mp-grph.mpii b/metapost/context/base/mpii/mp-grph.mpii
index 782942946..782942946 100644
--- a/metapost/context/base/mp-grph.mpii
+++ b/metapost/context/base/mpii/mp-grph.mpii
diff --git a/metapost/context/base/mp-page.mpii b/metapost/context/base/mpii/mp-page.mpii
index 456ee61cc..456ee61cc 100644
--- a/metapost/context/base/mp-page.mpii
+++ b/metapost/context/base/mpii/mp-page.mpii
diff --git a/metapost/context/base/mp-shap.mpii b/metapost/context/base/mpii/mp-shap.mpii
index 17d21314c..17d21314c 100644
--- a/metapost/context/base/mp-shap.mpii
+++ b/metapost/context/base/mpii/mp-shap.mpii
diff --git a/metapost/context/base/mp-spec.mpii b/metapost/context/base/mpii/mp-spec.mpii
index 19d81f312..19d81f312 100644
--- a/metapost/context/base/mp-spec.mpii
+++ b/metapost/context/base/mpii/mp-spec.mpii
diff --git a/metapost/context/base/mp-step.mpii b/metapost/context/base/mpii/mp-step.mpii
index e05f00b6e..e05f00b6e 100644
--- a/metapost/context/base/mp-step.mpii
+++ b/metapost/context/base/mpii/mp-step.mpii
diff --git a/metapost/context/base/mp-text.mpii b/metapost/context/base/mpii/mp-text.mpii
index 5f96f6788..5f96f6788 100644
--- a/metapost/context/base/mp-text.mpii
+++ b/metapost/context/base/mpii/mp-text.mpii
diff --git a/metapost/context/base/mp-tool.mpii b/metapost/context/base/mpii/mp-tool.mpii
index a5bb345a1..f476361c7 100644
--- a/metapost/context/base/mp-tool.mpii
+++ b/metapost/context/base/mpii/mp-tool.mpii
@@ -2373,7 +2373,7 @@ if unknown darkcyan : color darkcyan ; darkcyan := .625(0,1,1) fi ;
if unknown darkmagenta : color darkmagenta ; darkmagenta := .625(1,0,1) fi ;
if unknown darkyellow : color darkyellow ; darkyellow := .625(1,1,0) fi ;
if unknown darkgray : color darkgray ; darkgray := .625(1,1,1) fi ;
-if unknown lightgray : color lightgray ; lightgray := .875(1,1,1) fi ;
+if unknown lightgray : color lightgray ; lightgray := .850(1,1,1) fi ;
% an improved plain mp macro
diff --git a/metapost/context/base/mp-txts.mpii b/metapost/context/base/mpii/mp-txts.mpii
index d3597488f..d3597488f 100644
--- a/metapost/context/base/mp-txts.mpii
+++ b/metapost/context/base/mpii/mp-txts.mpii
diff --git a/metapost/context/base/metafun.mpiv b/metapost/context/base/mpiv/metafun.mpiv
index b1d4f32e7..b1d4f32e7 100644
--- a/metapost/context/base/metafun.mpiv
+++ b/metapost/context/base/mpiv/metafun.mpiv
diff --git a/metapost/context/base/mp-abck.mpiv b/metapost/context/base/mpiv/mp-abck.mpiv
index abd7d8848..abd7d8848 100644
--- a/metapost/context/base/mp-abck.mpiv
+++ b/metapost/context/base/mpiv/mp-abck.mpiv
diff --git a/metapost/context/base/mp-apos.mpiv b/metapost/context/base/mpiv/mp-apos.mpiv
index 7b7737754..7b7737754 100644
--- a/metapost/context/base/mp-apos.mpiv
+++ b/metapost/context/base/mpiv/mp-apos.mpiv
diff --git a/metapost/context/base/mp-asnc.mpiv b/metapost/context/base/mpiv/mp-asnc.mpiv
index 2626e4d58..2626e4d58 100644
--- a/metapost/context/base/mp-asnc.mpiv
+++ b/metapost/context/base/mpiv/mp-asnc.mpiv
diff --git a/metapost/context/base/mpiv/mp-back.mpiv b/metapost/context/base/mpiv/mp-back.mpiv
new file mode 100644
index 000000000..f588adea9
--- /dev/null
+++ b/metapost/context/base/mpiv/mp-back.mpiv
@@ -0,0 +1,205 @@
+%D \module
+%D [ file=mp-back.mp,
+%D version=2000.05.31,
+%D title=\CONTEXT\ \METAPOST\ graphics,
+%D subtitle=backgrounds,
+%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 licen-en.pdf for
+%C details.
+
+if known context_back : endinput ; fi ;
+
+boolean context_back ; context_back := true ;
+
+def some_hash ( expr hash_width ,
+ hash_height ,
+ hash_linewidth ,
+ hash_linecolor ,
+ hash_angle ,
+ hash_gap ) =
+
+ stripe_gap := hash_gap ;
+ stripe_angle := hash_angle ;
+ drawoptions (withpen pencircle scaled hash_linewidth
+ withcolor hash_linecolor) ;
+ path p ; p := unitsquare xscaled hash_width yscaled hash_height ;
+ stripe_path_a () (draw) p ; % next we move it all to quadrant 1
+ currentpicture := currentpicture shifted urcorner currentpicture ;
+
+enddef ;
+
+def some_double_back (expr back_type ,
+ back_width ,
+ back_height ,
+ back_delta ,
+ back_linewidth ,
+ back_linecolor ,
+ back_fillcolor ,
+ back_topcolor ,
+ back_bottomcolor ,
+ back_leftcolor ,
+ back_rightcolor ) =
+
+ numeric ww ; ww := back_width ;
+ numeric hh ; hh := back_height ;
+ numeric dd ; dd := back_delta ;
+
+ color back_nillcolor ; back_nillcolor := back_topcolor ;
+
+ path p ; p := fullsquare xscaled ww yscaled hh ;
+ path q ; q := fullsquare xscaled (ww-2dd) yscaled (hh-2dd) ;
+ path r ; r := llcorner p --
+ lrcorner p shifted (-3dd,0) .. controls lrcorner p ..
+ lrcorner p shifted (0, 3dd) --
+ urcorner p shifted (0,-3dd) .. controls urcorner p ..
+ urcorner p shifted (-3dd,0) --
+ ulcorner p -- cycle ;
+ path s ; s := r xscaled ((ww-2dd)/ww) yscaled ((hh-2dd)/hh) ;
+ path t ; t := llcorner p --
+ lrcorner p --
+ urcorner p shifted (0,-3dd) .. controls urcorner p ..
+ urcorner p shifted (-3dd,0) --
+ ulcorner p shifted ( 3dd,0) .. controls ulcorner p ..
+ ulcorner p shifted (0,-3dd) --
+ llcorner p -- cycle ;
+ path u ; u := t xscaled ((ww-2dd)/ww) yscaled ((hh-2dd)/hh) ;
+ path v ; v := llcorner p shifted ( 3dd,0) --
+ lrcorner p shifted (-3dd,0) .. controls lrcorner p ..
+ lrcorner p shifted (0, 3dd) --
+ urcorner p shifted (0,-3dd) .. controls urcorner p ..
+ urcorner p shifted (-3dd,0) --
+ ulcorner p shifted ( 3dd,0) .. controls ulcorner p ..
+ ulcorner p shifted (0,-3dd) ..
+ llcorner p shifted (0, 3dd) .. controls llcorner p .. cycle ; % {down} .. cycle ;
+ path w ; w := t xscaled ((ww-2dd)/ww) yscaled ((hh-2dd)/hh) ;
+ path a ; a := llcorner p -- ulcorner p --
+ ulcorner q -- llcorner q -- cycle ;
+ path b ; b := llcorner p -- lrcorner p --
+ lrcorner q -- llcorner q -- cycle ;
+ path c ; c := lrcorner p -- urcorner p --
+ urcorner q -- lrcorner q -- cycle ;
+ path d ; d := ulcorner p -- urcorner p --
+ urcorner q -- ulcorner q -- cycle ;
+ path e ; e := llcorner p -- lrcorner p --
+ urcorner p -- urcorner q --
+ lrcorner q -- llcorner q -- cycle ;
+ path f ; f := llcorner p -- ulcorner p --
+ urcorner p -- urcorner q --
+ ulcorner q -- llcorner q -- cycle ;
+
+ linecap := butt ; pickup pencircle scaled back_linewidth ;
+
+ if back_type=1 :
+
+ fill p withcolor back_fillcolor ;
+ fill a withcolor back_leftcolor ;
+ fill b withcolor back_bottomcolor ;
+ fill c withcolor back_rightcolor ;
+ fill d withcolor back_topcolor ;
+ draw a withcolor back_linecolor ;
+ draw d withcolor back_linecolor ;
+ draw b withcolor back_linecolor ;
+ draw c withcolor back_linecolor ;
+
+ elseif back_type=2 :
+
+ fill p withcolor back_fillcolor ;
+ fill e withcolor back_bottomcolor ;
+ fill f withcolor back_topcolor ;
+ draw e withcolor back_linecolor ;
+ draw f withcolor back_linecolor ;
+
+ elseif back_type=3 :
+
+ fill v withcolor back_nillcolor ;
+ fill w withcolor back_fillcolor ;
+ draw v withcolor back_linecolor ;
+ draw w withcolor back_linecolor ;
+
+ elseif back_type=4 :
+
+ fill t withcolor back_nillcolor ;
+ fill u withcolor back_fillcolor ;
+ draw t withcolor back_linecolor ;
+ draw u withcolor back_linecolor ;
+
+ elseif back_type=5 :
+
+ t := t rotatedaround(center t,180) ;
+ u := u rotatedaround(center u,180) ;
+
+ fill t withcolor back_nillcolor ;
+ fill u withcolor back_fillcolor ;
+ draw t withcolor back_linecolor ;
+ draw u withcolor back_linecolor ;
+
+ elseif back_type=6 :
+
+ r := r rotatedaround(center r,180) ;
+ s := s rotatedaround(center s,180) ;
+
+ fill r withcolor back_nillcolor ;
+ fill s withcolor back_fillcolor ;
+ draw r withcolor back_linecolor ;
+ draw s withcolor back_linecolor ;
+
+ elseif back_type=7 :
+
+ fill r withcolor back_nillcolor ;
+ fill s withcolor back_fillcolor ;
+ draw r withcolor back_linecolor ;
+ draw s withcolor back_linecolor ;
+
+fi ;
+
+enddef ;
+
+endinput ;
+
+beginfig (1) ;
+
+some_double_back (1, 4.5cm, 1.5cm, .25cm, 1mm,
+ .5white, .8white, .7white, .6white, .7white, .6white)
+
+currentpicture := currentpicture shifted (0,-3cm) ;
+
+some_double_back (2, 4.5cm, 1.5cm, .25cm, 1mm,
+ .5white, .8white, .7white, .6white, white, white)
+
+currentpicture := currentpicture shifted (0,-3cm) ;
+
+some_double_back (3, 4.5cm, 1.5cm, .25cm, 1mm,
+ .5white, .8white, .7white, white, white, white)
+
+currentpicture := currentpicture shifted (0,-3cm) ;
+
+some_double_back (4, 4.5cm, 1.5cm, .25cm, 1mm,
+ .5white, .8white, .7white, white, white, white)
+
+currentpicture := currentpicture shifted (0,-3cm) ;
+
+some_double_back (5, 4.5cm, 1.5cm, .25cm, 1mm,
+ .5white, .8white, .7white, white, white, white)
+
+currentpicture := currentpicture shifted (0,-3cm) ;
+
+some_double_back (6, 4.5cm, 1.5cm, .25cm, 1mm,
+ .5white, .8white, .7white, white, white, white)
+
+currentpicture := currentpicture shifted (0,-3cm) ;
+
+some_double_back (7, 4.5cm, 1.5cm, .25cm, 1mm,
+ .5white, .8white, .7white, white, white, white)
+
+currentpicture := currentpicture shifted (0,-3cm) ;
+
+some_double_back (8, 4.5cm, 1.5cm, .25cm, 1mm,
+ .5white, .8white, .7white, white, white, white)
+
+endfig ;
+
+end .
diff --git a/metapost/context/base/mp-bare.mpiv b/metapost/context/base/mpiv/mp-bare.mpiv
index c6194b1ee..c6194b1ee 100644
--- a/metapost/context/base/mp-bare.mpiv
+++ b/metapost/context/base/mpiv/mp-bare.mpiv
diff --git a/metapost/context/base/mp-base.mpiv b/metapost/context/base/mpiv/mp-base.mpiv
index 28eb57fb8..28eb57fb8 100644
--- a/metapost/context/base/mp-base.mpiv
+++ b/metapost/context/base/mpiv/mp-base.mpiv
diff --git a/metapost/context/base/mp-butt.mpiv b/metapost/context/base/mpiv/mp-butt.mpiv
index 6f5b90a7e..6f5b90a7e 100644
--- a/metapost/context/base/mp-butt.mpiv
+++ b/metapost/context/base/mpiv/mp-butt.mpiv
diff --git a/metapost/context/base/mp-char.mpiv b/metapost/context/base/mpiv/mp-char.mpiv
index f604accd8..f604accd8 100644
--- a/metapost/context/base/mp-char.mpiv
+++ b/metapost/context/base/mpiv/mp-char.mpiv
diff --git a/metapost/context/base/mp-chem.mpiv b/metapost/context/base/mpiv/mp-chem.mpiv
index b861d3f12..b861d3f12 100644
--- a/metapost/context/base/mp-chem.mpiv
+++ b/metapost/context/base/mpiv/mp-chem.mpiv
diff --git a/metapost/context/base/mp-core.mpiv b/metapost/context/base/mpiv/mp-core.mpiv
index 9b7182908..9b7182908 100644
--- a/metapost/context/base/mp-core.mpiv
+++ b/metapost/context/base/mpiv/mp-core.mpiv
diff --git a/metapost/context/base/mpiv/mp-cows.mpiv b/metapost/context/base/mpiv/mp-cows.mpiv
new file mode 100644
index 000000000..3ad1a98f5
--- /dev/null
+++ b/metapost/context/base/mpiv/mp-cows.mpiv
@@ -0,0 +1,156 @@
+%D \module
+%D [ file=mp-cows.mpiv,
+%D version=2015.05.27,
+%D title=\CONTEXT\ \METAPOST\ graphics,
+%D subtitle=the cow,
+%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 licen-en.pdf for
+%C details.
+
+if known context_cows : endinput ; fi ;
+
+boolean context_cows ; context_cows := true ;
+
+picture cow ; cow := image (
+ fill (245.449005,600.340027)..controls (242.781006,599.398010) and (239.621002,596.020020)..(237.671997,594.070007)
+ ..controls (236.738007,584.421997) and (244.578003,583.629028)..(250.199005,577.440979)
+ ..controls (258.769989,573.698975) and (251.210999,567.718994)..(256.179993,557.421997)
+ ..controls (257.039001,550.940979) and (257.898010,543.890991)..(255.309006,539.781006)
+ ..controls (249.479996,538.921997) and (247.968994,540.218994)..(246.891006,531.429993)
+ ..controls (246.309006,526.968994) and (231.770004,529.059021)..(229.031006,538.270020)
+ ..controls (227.089996,544.968994) and (221.328003,546.698975)..(217.800995,543.171997)
+ ..controls (213.770004,538.059021) and (215.781006,531.218994)..(217.800995,527.468994)
+ ..controls (224.929993,517.320007) and (212.039001,511.421997)..(205.128998,516.737976)
+ ..controls (199.729996,508.679993) and (211.391006,500.039001)..(207.429993,494.500000)
+ ..controls (205.781006,493.988007) and (204.770004,489.171997)..(185.468994,500.539001)
+ ..controls (180.358994,504.140991) and (167.828003,500.761993)..(168.770004,520.629028)
+ ..controls (168.770004,525.820007) and (165.602005,543.531006)..(162.141006,555.909973)
+ ..controls (159.410004,561.237976) and (156.738007,559.078003)..(156.891006,553.898010)
+ ..controls (157.179993,547.851990) and (162.940994,531.218994)..(155.520004,540.218994)
+ ..controls (153.578003,539.210999) and (156.891006,523.578003)..(156.891006,521.640991)
+ ..controls (162.000000,517.031006) and (157.391006,513.578003)..(154.729996,512.281006)
+ ..controls (151.270004,518.328003) and (149.621002,518.039001)..(147.171997,514.440979)
+ ..controls (141.699005,514.078003) and (144.578003,528.190979)..(140.261993,528.620972)
+ ..controls (137.020004,527.762024) and (139.179993,520.059021)..(138.238007,518.762024)
+ ..controls (132.979996,524.737976) and (130.897995,529.270020)..(127.012001,521.640991)
+ ..controls (126.140999,521.640991) and (122.109001,519.190979)..(120.960999,526.539001)
+ ..controls (117.648003,552.737976) and (107.058998,558.359009)..(93.820297,565.129028)
+ ..controls (92.019501,565.629028) and (84.238297,566.710999)..(79.339798,568.148010)
+ ..controls (73.511703,560.879028) and (58.320301,565.629028)..(56.230499,570.309021)
+ ..controls (54.789101,572.690979) and (54.648399,575.210999)..(54.789101,576.500000)
+ ..controls (52.339802,580.101990) and (55.871101,582.698975)..(59.621101,583.059021)
+ ..controls (62.859402,587.159973) and (68.539101,594.940979)..(71.281303,601.559021)
+ ..controls (72.289101,603.070007) and (74.949203,609.340027)..(78.191399,609.551025)
+ ..controls (74.949203,612.940979) and (74.300797,622.512024)..(82.660202,617.328003)
+ ..controls (87.121101,624.020020) and (92.089798,624.309021)..(95.761703,615.820007)
+ ..controls (102.890999,615.379028) and (102.308998,608.690979)..(115.780998,605.520020)
+ ..controls (122.762001,602.859009) and (132.770004,604.578003)..(140.261993,603.718994)
+ ..controls (136.218994,596.879028) and (127.441002,566.859009)..(132.979996,559.801025)
+ ..controls (140.761993,564.698975) and (141.839996,605.379028)..(157.031006,595.659973)
+ ..controls (160.559006,593.929993) and (159.910004,590.039001)..(164.089996,590.179993)
+ ..controls (170.421997,587.448975) and (169.128998,600.770020)..(172.511993,600.770020)
+ ..controls (176.468994,599.762024) and (183.020004,599.039001)..(186.979996,599.539001)
+ ..controls (197.710999,600.770020) and (206.929993,604.078003)..(223.921997,602.500000)
+ ..controls (231.121002,601.781006) and (238.250000,601.059021)..(245.449005,600.340027)
+ --cycle;
+ fill (305.281006,560.948975)..controls (304.628998,560.948975) and (299.949005,561.237976)..(299.378998,561.237976)
+ ..controls (302.398010,550.440979) and (303.980011,536.468994)..(304.199005,525.309021)
+ ..controls (303.699005,521.351990) and (299.808990,517.460999)..(299.378998,525.671997)
+ ..controls (295.851990,530.859009) and (296.421997,540.070007)..(293.398010,540.289001)
+ ..controls (287.351990,539.640991) and (285.339996,513.218994)..(280.011993,509.328003)
+ ..controls (276.261993,512.281006) and (280.730011,524.020020)..(275.539001,524.737976)
+ ..controls (270.500000,524.020020) and (264.308990,526.679993)..(266.691010,534.460999)
+ ..controls (270.289001,543.020020) and (268.339996,554.762024)..(266.539001,561.601990)
+ ..controls (262.371002,578.590027) and (264.019989,587.090027)..(271.578003,596.090027)
+ --(267.480011,604.512024)..controls (275.398010,608.262024) and (285.621002,604.578003)..(290.019989,602.210999)
+ ..controls (294.621002,600.262024) and (300.238007,595.940979)..(301.101990,587.379028)
+ ..controls (303.339996,578.879028) and (304.421997,569.737976)..(305.281006,560.948975)
+ --cycle;
+ pickup pencircle scaled 2.000000bp;
+ draw (84.378899,618.551025)..controls (88.339798,624.379028) and (92.589798,622.940979)..(96.339798,615.671997)
+ ..controls (101.230003,615.601990) and (102.460999,612.429993)..(104.980003,610.781006)
+ ..controls (122.621002,598.390991) and (147.460999,607.179993)..(167.897995,601.921997)
+ ..controls (180.940994,598.539001) and (190.871002,599.762024)..(200.089996,602.059021)
+ ..controls (220.320007,607.250000) and (246.102005,596.159973)..(263.738007,603.859009)
+ ..controls (274.750000,608.620972) and (284.761993,605.659973)..(292.968994,600.909973)
+ ..controls (297.578003,597.960999) and (299.589996,596.090027)..(300.960999,591.262024)
+ ..controls (306.289001,572.539001) and (306.289001,551.020020)..(309.531006,530.570007)
+ ..controls (309.531006,528.840027) and (312.191010,526.101990)..(312.480011,522.070007)
+ ..controls (315.789001,511.339996) and (316.078003,510.121002)..(317.160004,502.199005)
+ ..controls (317.160004,501.339996) and (326.519989,488.449005)..(325.011993,479.019989)
+ ..controls (323.929993,481.250000) and (323.859009,482.828003)..(321.621002,481.679993)
+ ..controls (320.328003,479.300995) and (320.898010,473.898010)..(322.558990,471.738007)
+ ..controls (320.828003,470.808990) and (318.460999,473.468994)..(317.519989,475.199005)
+ ..controls (318.171997,473.039001) and (317.808990,470.808990)..(316.730011,469.300995)
+ ..controls (315.859009,472.250000) and (316.578003,473.179993)..(315.359009,473.898010)
+ ..controls (313.988007,472.898010) and (314.210999,469.300995)..(314.281006,466.199005)
+ ..controls (313.488007,468.070007) and (311.468994,472.460999)..(312.550995,476.421997)
+ ..controls (312.480011,484.199005) and (308.808990,489.101990)..(310.320007,499.101990)
+ ..controls (310.101990,504.429993) and (307.300995,521.059021)..(304.558990,524.301025)
+ ..controls (303.121002,526.250000) and (306.359009,510.769989)..(306.359009,506.160004)
+ ..controls (306.648010,500.898010) and (307.078003,468.718994)..(306.429993,463.101990)
+ ..controls (306.429993,459.218994) and (306.218994,453.960999)..(307.078003,452.160004)
+ ..controls (308.738007,450.789001) and (309.378998,450.500000)..(309.601990,447.980011)
+ ..controls (309.238007,446.621002) and (308.738007,446.039001)..(307.730011,445.539001)
+ ..controls (306.070007,444.601990) and (307.371002,441.789001)..(306.070007,439.851990)
+ ..controls (304.488007,438.769989) and (304.128998,441.859009)..(303.339996,441.859009)
+ ..controls (302.691010,441.000000) and (303.050995,437.980011)..(302.468994,436.179993)
+ ..controls (299.660004,433.800995) and (292.179993,432.500000)..(289.148010,434.660004)
+ ..controls (289.730011,440.640991) and (291.738007,441.578003)..(295.628998,446.621002)
+ ..controls (298.660004,452.589996) and (297.000000,460.941010)..(296.929993,468.140991)
+ ..controls (295.488007,480.378998) and (289.218994,487.300995)..(289.441010,496.441010)
+ ..controls (287.859009,495.718994) and (286.421997,494.570007)..(284.261993,494.859009)
+ ..controls (283.390991,489.460999) and (286.421997,484.558990)..(284.828003,480.820007)
+ ..controls (281.949005,471.960999) and (277.058990,446.621002)..(279.000000,437.761993)
+ ..controls (280.011993,434.738007) and (278.210999,433.148010)..(277.058990,433.941010)
+ ..controls (276.769989,433.941010) and (276.550995,433.941010)..(276.410004,433.941010)
+ ..controls (276.410004,433.941010) and (276.550995,431.421997)..(275.691010,430.921997)
+ ..controls (274.101990,430.339996) and (273.671997,431.710999)..(272.660004,432.140991)
+ ..controls (271.218994,430.851990) and (272.519989,429.480011)..(271.148010,428.039001)
+ ..controls (267.191010,428.039001) and (261.359009,425.378998)..(257.980011,428.261993)
+ ..controls (257.328003,434.160004) and (263.300995,436.679993)..(266.468994,440.710999)
+ ..controls (268.628998,446.621002) and (271.078003,462.890991)..(267.769989,474.621002)
+ ..controls (267.769989,475.558990) and (264.378998,485.281006)..(261.429993,488.660004)
+ ..controls (258.699005,487.660004) and (257.328003,485.500000)..(253.218994,486.289001)
+ ..controls (252.578003,484.339996) and (253.300995,482.328003)..(252.218994,480.101990)
+ ..controls (251.858994,479.519989) and (249.339996,478.578003)..(249.190994,481.390991)
+ ..controls (248.979996,483.050995) and (248.897995,486.359009)..(248.261993,486.718994)
+ ..controls (243.647995,486.718994) and (233.710999,487.078003)..(231.770004,493.921997)
+ ..controls (219.891006,492.339996) and (215.929993,491.261993)..(206.570007,493.421997)
+ ..controls (196.628998,489.671997) and (183.238007,506.160004)..(174.531006,502.199005)
+ ..controls (172.511993,496.148010) and (173.089996,485.640991)..(171.647995,481.390991)
+ ..controls (169.339996,474.769989) and (171.141006,467.140991)..(171.141006,456.410004)
+ ..controls (170.570007,455.398010) and (169.852005,454.460999)..(168.479996,454.460999)
+ ..controls (168.479996,453.101990) and (169.339996,450.859009)..(168.621002,449.421997)
+ ..controls (167.179993,447.621002) and (165.891006,451.800995)..(165.020004,444.601990)
+ ..controls (163.147995,443.738007) and (157.750000,442.218994)..(155.589996,445.179993)
+ ..controls (155.878998,448.988007) and (158.328003,451.300995)..(160.128998,453.378998)
+ ..controls (161.421997,456.910004) and (160.988007,458.281006)..(160.699005,461.808990)
+ ..controls (160.988007,464.980011) and (161.710999,468.578003)..(161.858994,470.089996)
+ ..controls (161.858994,473.039001) and (162.500000,479.300995)..(161.141006,481.179993)
+ --(159.410004,482.691010)..controls (157.179993,487.218994) and (158.328003,494.640991)..(157.608994,500.261993)
+ ..controls (155.809006,500.691010) and (155.809006,500.980011)..(154.011993,498.308990)
+ ..controls (154.011993,494.421997) and (153.500000,486.359009)..(152.352005,483.839996)
+ ..controls (149.690994,479.808990) and (150.839996,459.648010)..(151.421997,448.558990)
+ ..controls (151.781006,446.468994) and (149.690994,447.699005)..(149.761993,444.738007)
+ ..controls (150.050995,442.800995) and (147.891006,443.589996)..(146.089996,444.601990)
+ ..controls (145.147995,445.179993) and (146.589996,439.781006)..(145.371002,439.558990)
+ ..controls (142.339996,438.839996) and (136.871002,438.191010)..(135.218994,440.710999)
+ ..controls (134.570007,444.601990) and (137.878998,448.058990)..(140.621002,451.011993)
+ ..controls (143.141006,455.828003) and (140.897995,465.699005)..(140.468994,476.281006)
+ --(138.891006,478.218994)..controls (134.858994,483.191010) and (139.608994,496.941010)..(136.511993,506.230011)
+ ..controls (120.019997,514.870972) and (122.109001,519.190979)..(118.730003,537.620972)
+ ..controls (115.128998,557.640991) and (93.378899,567.648010)..(79.058601,567.648010)
+ ..controls (73.441399,563.039001) and (66.238297,563.620972)..(58.539101,567.648010)
+ ..controls (55.660198,569.229980) and (54.429699,573.190979)..(54.500000,576.500000)
+ ..controls (52.628899,580.750000) and (55.218800,582.190979)..(59.621101,583.487976)
+ ..controls (62.710899,587.809021) and (68.621101,594.648010)..(69.191399,597.737976)
+ ..controls (70.339798,601.921997) and (75.531303,608.109009)..(77.761703,609.770020)
+ ..controls (75.820297,613.012024) and (74.808601,615.171997)..(77.109398,618.551025)
+ ..controls (79.558601,620.140991) and (81.789101,616.609009)..(84.378899,618.551025)
+ --cycle;
+) ;
diff --git a/metapost/context/base/mp-crop.mpiv b/metapost/context/base/mpiv/mp-crop.mpiv
index 00bcdcb44..00bcdcb44 100644
--- a/metapost/context/base/mp-crop.mpiv
+++ b/metapost/context/base/mpiv/mp-crop.mpiv
diff --git a/metapost/context/base/mp-figs.mpiv b/metapost/context/base/mpiv/mp-figs.mpiv
index aac7c5ad2..aac7c5ad2 100644
--- a/metapost/context/base/mp-figs.mpiv
+++ b/metapost/context/base/mpiv/mp-figs.mpiv
diff --git a/metapost/context/base/mpiv/mp-fobg.mpiv b/metapost/context/base/mpiv/mp-fobg.mpiv
new file mode 100644
index 000000000..f8b709572
--- /dev/null
+++ b/metapost/context/base/mpiv/mp-fobg.mpiv
@@ -0,0 +1,87 @@
+%D \module
+%D [ file=mp-fobg.mp,
+%D version=2004.03.12,
+%D title=\CONTEXT\ \METAPOST\ graphics,
+%D subtitle=Formatting Objects,
+%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 licen-en.pdf for
+%C details.
+
+if known context_fobg : endinput ; fi ;
+
+boolean context_fobg ; context_fobg := true ;
+
+FoNone := 0 ; FoHidden := 1 ; FoDotted := 2 ; FoDashed := 3 ; FoSolid := 4 ;
+FoDouble := 5 ; FoGroove := 6 ; FoRidge := 7 ; FoInset := 8 ; FoOutset := 9 ;
+FoAll := 0 ; FoTop := 1 ; FoBottom := 2 ; FoLeft := 3 ; FoRight := 4 ;
+FoMedium := .5pt ; FoThin := FoMedium/2 ; FoThick := FoMedium*2 ;
+
+color FoBackgroundColor, FoNoColor, FoLineColor[] ; FoNoColor := (-1,-1,-1) ;
+numeric FoLineWidth[], FoLineStyle[] ;
+boolean FoFrame, FoBackground, FoSplit ;
+
+FoFrame := FoBackground := FoSplit := false ;
+FoBackgroundColor := white ;
+FoDashFactor := .5 ;
+FoDotFactor := .375 ;
+
+for i = FoAll upto FoRight :
+ FoLineColor[i] := black ;
+ FoLineWidth[i] := .5pt ;
+ FoLineStyle[i] := FoNone ;
+endfor ;
+
+def DrawFoFrame(expr n, p) =
+ drawoptions(withcolor FoLineColor[n] withpen pencircle scaled FoLineWidth[n]) ;
+ if FoLineStyle[n] = FoNone :
+ % nothing
+ elseif FoLineStyle[n] = FoHidden :
+ % nothing
+ elseif FoLineStyle[n] = FoDotted :
+ draw p dashed (withdots scaled (FoDotFactor*FoLineWidth[n])) ;
+ elseif FoLineStyle[n] = FoDashed :
+ draw p dashed (evenly scaled (FoDashFactor*FoLineWidth[n])) ;
+ elseif FoLineStyle[n] = FoSolid :
+ draw p ;
+ elseif FoLineStyle[n] = FoDouble :
+ draw p enlarged FoLineWidth[n] ; draw p enlarged -FoLineWidth[n] ;
+ elseif FoLineStyle[n] = FoGroove :
+ draw p ;
+ draw p withpen pencircle scaled .5FoLineWidth[n] withcolor (inverted FoLineColor[n] softened .5) ;
+ elseif FoLineStyle[n] = FoRidge :
+ draw p withcolor (inverted FoLineColor[n] softened .5) ;
+ draw p withpen pencircle scaled .5FoLineWidth[n] ;
+ elseif FoLineStyle[n] = FoInset :
+ draw p ; draw p inset 2.5FoLineWidth[n] ;
+ elseif FoLineStyle[n] = FoOutset :
+ draw p ; draw p outset 2.5FoLineWidth[n] ;
+ fi ;
+enddef ;
+
+primarydef p outset d =
+ ((lrcorner p -- urcorner p -- ulcorner p -- llcorner p -- cycle)
+ shifted (d*(-1,1)) cutbefore topboundary p) cutafter leftboundary p
+enddef ;
+
+primarydef p inset d =
+ ((ulcorner p -- llcorner p -- lrcorner p -- urcorner p -- cycle)
+ shifted (d*(1,-1)) cutbefore bottomboundary p) cutafter rightboundary p
+enddef ;
+
+vardef equalpaths(expr p, q) =
+ if length(p) = length(q) :
+ save ok ; boolean ok ; ok := true ;
+ for i = 0 upto length(p)-1 :
+ ok := ok and (round(point i of p) = round(point i of q)) ;
+ endfor ;
+ ok
+ else :
+ false
+ fi
+enddef ;
+
+endinput ;
diff --git a/metapost/context/base/mp-form.mpiv b/metapost/context/base/mpiv/mp-form.mpiv
index 88b15e097..88b15e097 100644
--- a/metapost/context/base/mp-form.mpiv
+++ b/metapost/context/base/mpiv/mp-form.mpiv
diff --git a/metapost/context/base/mp-func.mpiv b/metapost/context/base/mpiv/mp-func.mpiv
index b1b9d6d5d..b1b9d6d5d 100644
--- a/metapost/context/base/mp-func.mpiv
+++ b/metapost/context/base/mpiv/mp-func.mpiv
diff --git a/metapost/context/base/mp-grap.mpiv b/metapost/context/base/mpiv/mp-grap.mpiv
index 4fd8ee5bd..4fd8ee5bd 100644
--- a/metapost/context/base/mp-grap.mpiv
+++ b/metapost/context/base/mpiv/mp-grap.mpiv
diff --git a/metapost/context/base/mp-grid.mpiv b/metapost/context/base/mpiv/mp-grid.mpiv
index b9243b1b9..b9243b1b9 100644
--- a/metapost/context/base/mp-grid.mpiv
+++ b/metapost/context/base/mpiv/mp-grid.mpiv
diff --git a/metapost/context/base/mp-grph.mpiv b/metapost/context/base/mpiv/mp-grph.mpiv
index a3c057a98..5938b9f02 100644
--- a/metapost/context/base/mp-grph.mpiv
+++ b/metapost/context/base/mpiv/mp-grph.mpiv
@@ -118,7 +118,18 @@ def doloadfigure (expr filename) text figureattributes =
endgroup ;
enddef ;
-def graphictext primary t =
+% shared between old and new
+
+boolean mfun_gt_color_fill ;
+boolean mfun_gt_color_draw ;
+boolean mfun_gt_shade_fill ;
+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 ;
@@ -146,7 +157,7 @@ def mfun_no_graphic_text (expr t) text rest =
withpostscript t
enddef ;
-def mfun_finish_graphic_text text x_op_x =
+def mfun_finish_graphic_text text rest =
protectgraphicmacros ; % resets currentpicture
interim linecap := butt ; % normally rounded
interim linejoin := mitered ; % normally rounded
@@ -166,84 +177,158 @@ def mfun_finish_graphic_text text x_op_x =
def fill expr p =
addto scratchpicture contour p withpen currentpen ;
enddef ;
- def f_op_f = enddef ; boolean f_color ; f_color := false ;
- def d_op_d = enddef ; boolean d_color ; d_color := false ;
- def s_op_s = enddef ; boolean s_color ; s_color := false ;
- boolean reverse_fill ; reverse_fill := false ;
- boolean outline_fill ; outline_fill := false ;
+ 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(reverse_fill := true )
+ hide(mfun_gt_reverse_fill := true )
enddef ;
def outlinefill =
- hide(outline_fill := true )
+ hide(mfun_gt_outline_fill := true )
enddef ;
def withshade primary c =
- hide(def s_op_s = normalwithshade c enddef ; s_color := true )
+ hide(def mfun_gt_shade = normalwithshade c enddef ; mfun_gt_shade_fill := true )
enddef ;
def withfillcolor primary c =
- hide(def f_op_f = withcolor c enddef ; f_color := true )
+ hide(def mfun_gt_fill = withcolor c enddef ; mfun_gt_color_fill := true )
enddef ;
def withdrawcolor primary c =
- hide(def d_op_d = withcolor c enddef ; d_color := true )
+ hide(def mfun_gt_draw = withcolor c enddef ; mfun_gt_color_draw := true )
enddef ;
scratchpicture := nullpicture ;
- addto scratchpicture doublepath origin x_op_x ; % pre-roll
+ addto scratchpicture doublepath origin rest ; % pre-roll
for i within scratchpicture : % Below here is a dirty tricky test!
if (urcorner dashpart i) = origin :
- outline_fill := false ;
+ mfun_gt_outline_fill := false ;
fi ;
endfor ;
scratchpicture := nullpicture ;
readfile(data_mpy_file) ;
scratchpicture := (scratchpicture shifted -llcorner scratchpicture) scaled (1/10) ;
- if not d_color and not f_color :
- d_color := true ;
+ if not mfun_gt_color_draw and not mfun_gt_color_fill :
+ mfun_gt_color_draw := true ;
fi
- if s_color :
- d_color := false ;
- f_color := false ;
+ if mfun_gt_shade_fill :
+ mfun_gt_color_draw := false ;
+ mfun_gt_color_fill := false ;
fi ;
currentpicture := figurepicture ;
- if d_color and not reverse_fill :
+ if mfun_gt_shade_fill :
for i within scratchpicture :
- if f_color and outline_fill :
- addto currentpicture doublepath pathpart i _op_ x_op_x f_op_f dashed nullpicture ;
- fi ;
if filled i :
- addto currentpicture doublepath pathpart i _op_ x_op_x d_op_d ;
- fi ;
- endfor ;
- fi ;
- if f_color :
- for i within scratchpicture :
- if filled i :
- addto currentpicture contour pathpart i _op_ x_op_x f_op_f withpen pencircle scaled 0 ;
- fi ;
- endfor ;
- fi ;
- if d_color and reverse_fill :
- for i within scratchpicture :
- if filled i :
- addto currentpicture doublepath pathpart i _op_ x_op_x d_op_d ;
- fi ;
- endfor ;
- fi ;
- if s_color :
- for i within scratchpicture :
- if filled i :
- addto currentpicture contour pathpart i _op_ x_op_x s_op_s ;
+ 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_ x_op_x d_op_d ;
+ 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 new_graphictext primary t = % use outlinetext instead
+ begingroup ;
+ mfun_graphic_text_indeed(t)
+enddef ;
+
+def mfun_graphic_text_indeed(expr t) text rest =
+ interim linecap := butt ; % normally rounded
+ interim linejoin := mitered ; % normally rounded
+ % interim miterlimit := 10 ; % todo
+ %
+ let normalwithshade = withshade ;
+ %
+ save reversefill, outlinefill, withshade, withfillcolor, withdrawcolor ;
+ %
+ def mfun_gt_fill = enddef ;
+ def mfun_gt_draw = enddef ;
+ def mfun_gt_shade = enddef ;
+ %
+ mfun_gt_color_fill := false ;
+ mfun_gt_color_draw := false ;
+ mfun_gt_shade_fill := false ;
+ mfun_gt_reverse_fill := false ;
+ %
+ def reversefill = hide(mfun_gt_reverse_fill := true) enddef ;
+ def outlinefill = enddef ;
+ def withshade primary c = hide(mfun_gt_shade_fill := true; def mfun_gt_shade = normalwithshade c enddef ;) enddef ;
+ def withfillcolor primary c = hide(mfun_gt_color_fill := true; def mfun_gt_fill = withcolor c enddef ;) enddef ;
+ def withdrawcolor primary c = hide(mfun_gt_color_draw := true; def mfun_gt_draw = withcolor c enddef ;) enddef ;
+ %
+ mfun_gt_picture := nullpicture ;
+ addto mfun_gt_picture doublepath origin rest ; % preroll
+ mfun_gt_picture := nullpicture ;
+ %
+ def reversefill = enddef ;
+ def outlinefill = enddef ;
+ def withshade primary c = enddef ;
+ def withfillcolor primary c = enddef ;
+ def withdrawcolor primary c = enddef ;
+ %
+ if mfun_gt_shade_fill :
+ 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 rest)(mfun_gt_default mfun_gt_draw rest) ;
+ else :
+ 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) ;
+ elseif mfun_gt_color_draw :
+ draw outlinetext.d(t)(mfun_gt_default mfun_gt_draw rest) ;
+ else :
+ 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/metapost/context/base/mp-idea.mpiv b/metapost/context/base/mpiv/mp-idea.mpiv
index 462d97553..462d97553 100644
--- a/metapost/context/base/mp-idea.mpiv
+++ b/metapost/context/base/mpiv/mp-idea.mpiv
diff --git a/metapost/context/base/mp-luas.mpiv b/metapost/context/base/mpiv/mp-luas.mpiv
index c919ba215..c30798247 100644
--- a/metapost/context/base/mp-luas.mpiv
+++ b/metapost/context/base/mpiv/mp-luas.mpiv
@@ -56,7 +56,7 @@ vardef mlib_luas_luacall(text t) =
elseif numeric s :
& decimal s
elseif boolean s :
- & if s : "true" else "false" fi
+ & if s : "true" else : "false" fi
fi endfor
)
enddef ;
@@ -74,7 +74,7 @@ vardef mlib_luas_lualist(expr c)(text t) =
elseif numeric s :
& decimal s
elseif boolean s :
- & if s : "true" else "false" fi
+ & if s : "true" else : "false" fi
fi endfor & ")"
)
enddef ;
diff --git a/metapost/context/base/mp-mlib.mpiv b/metapost/context/base/mpiv/mp-mlib.mpiv
index b19f47f1e..326342b70 100644
--- a/metapost/context/base/mp-mlib.mpiv
+++ b/metapost/context/base/mpiv/mp-mlib.mpiv
@@ -205,8 +205,11 @@ extra_beginfig := extra_beginfig & "mfun_reset_tex_texts ;" ;
% fi
% enddef ;
+boolean mfun_onetime_textext ; mfun_onetime_textext := false ;
+
vardef rawtextext(expr s) = % todo: avoid currentpicture
if s = "" :
+ mfun_onetime_textext := false ;
nullpicture
else :
mfun_tt_n := mfun_tt_n + 1 ;
@@ -219,7 +222,10 @@ vardef rawtextext(expr s) = % todo: avoid currentpicture
withprescript "tx_stage=trial"
withprescript "tx_color=" & colordecimals colorpart mfun_tt_o
withpostscript s ;
- addto mfun_tt_p also mfun_tt_c ;
+ 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
@@ -229,6 +235,7 @@ vardef rawtextext(expr s) = % todo: avoid currentpicture
withprescript "tx_number=" & decimal mfun_tt_n
withprescript "tx_stage=final" ;
fi ;
+ mfun_onetime_textext := false ;
mfun_tt_c
fi
enddef ;
@@ -346,7 +353,7 @@ vardef plain_thelabel@#(expr p,z) =
enddef;
def plain_label = % takes two arguments, contrary to textext that takes one
- draw plain_thelabel
+ normaldraw plain_thelabel
enddef ;
let mfun_label = label ;
@@ -362,6 +369,12 @@ def usemetafunlabels =
let thelabel = mfun_thelabel ;
enddef ;
+vardef dotlabel@#(expr s,z) text t_ =
+ label@#(s,z) t_ ;
+ interim linecap := rounded ;
+ normaldraw z withpen pencircle scaled dotlabeldiam t_ ;
+enddef ;
+
plain_compatibility_data := plain_compatibility_data & "save label, thelabel ;" & "useplainlabels ;" ;
% next comes own own:
@@ -385,6 +398,11 @@ vardef textext@#(expr p) = % no draw here
thetextext@#(p,origin)
enddef ;
+vardef onetimetextext@#(expr p) = % no draw here
+ mfun_onetime_textext := true ;
+ thetextext@#(p,origin)
+enddef ;
+
vardef thelabel@#(expr p,z) =
if string p :
thelabel@#(rawtextext("\definedfont[" & defaultfont & "]" & p) scaled defaultscale,z)
@@ -394,7 +412,7 @@ vardef thelabel@#(expr p,z) =
enddef;
def label = % takes two arguments, contrary to textext that takes one
- draw thelabel
+ normaldraw thelabel
enddef ;
vardef anchored@#(expr p, z) = % beware: no "+ mfun_laboff@#" here (never!)
@@ -467,10 +485,33 @@ boolean trace_shades ; trace_shades := false ; % still there
% but this is nicer
-path mfun_shade_path ;
+% fill fullcircle scaled 10cm
+% withshademethod "circular"
+% withshadevector (5cm,1cm)
+% withshadecenter (.1,.5)
+% withshadedomain (.2,.6)
+% withshadefactor 1.2
+% withshadecolors (red,green)
+% ;
+
+path mfun_shade_path ;
+numeric mfun_shade_step ; mfun_shade_step := 0 ;
+
+def withshadestep =
+ hide(mfun_shade_step := mfun_shade_step + 1 ;)
+ mfun_withshadestep
+enddef ;
+
+def mfun_withshadestep (text t) =
+ withprescript "sh_step=" & decimal mfun_shade_step
+ t
+enddef ;
primarydef p withshademethod m =
- hide(mfun_shade_path := p ;)
+ hide(
+ mfun_shade_path := p ;
+ mfun_shade_step := 1 ;
+ )
p
withprescript "sh_domain=0 1"
withprescript "sh_color=into"
@@ -501,6 +542,16 @@ def withshadevector expr a =
withprescript "sh_center_b=" & ddecimal (point ypart a of mfun_shade_path)
enddef ;
+def withshadedirection expr a =
+ withprescript "sh_center_a=" & ddecimal (point xpart a of boundingbox(mfun_shade_path))
+ withprescript "sh_center_b=" & ddecimal (point ypart a of boundingbox(mfun_shade_path))
+enddef ;
+
+pair shadedup ; shadedup := (0.5,2.5) ;
+pair shadeddown ; shadeddown := (2.5,0.5) ;
+pair shadedleft ; shadedleft := (1.5,3.5) ;
+pair shadedright ; shadedright := (3.5,1.5) ;
+
def withshadecenter expr a =
withprescript "sh_center_a=" & ddecimal (
center mfun_shade_path shifted (
@@ -518,10 +569,28 @@ def withshadefactor expr f =
withprescript "sh_factor=" & decimal f
enddef ;
+% def withshadebound (expr a) =
+% if mfun_shade_step > 0 :
+% withprescript "sh_bound_" & decimal mfun_shade_step & "=" & decimal a
+% fi
+% enddef ;
+
+def withshadefraction expr a =
+ if mfun_shade_step > 0 :
+ withprescript "sh_fraction_" & decimal mfun_shade_step & "=" & decimal a
+ fi
+enddef ;
+
def withshadecolors (expr a, b) =
- withprescript "sh_color=into"
- withprescript "sh_color_a=" & colordecimals a
- withprescript "sh_color_b=" & colordecimals b
+ if mfun_shade_step > 0 :
+ withprescript "sh_color=into"
+ withprescript "sh_color_a_" & decimal mfun_shade_step & "=" & colordecimals a
+ withprescript "sh_color_b_" & decimal mfun_shade_step & "=" & colordecimals b
+ else :
+ withprescript "sh_color=into"
+ withprescript "sh_color_a=" & colordecimals a
+ withprescript "sh_color_b=" & colordecimals b
+ fi
enddef ;
primarydef a shadedinto b = % withcolor red shadedinto green
@@ -746,9 +815,186 @@ def register (expr tag, width, height, offset) =
% ) ; % no transformations
enddef ;
+% outlines (todo: pass around less arguments)
+
+numeric currentoutlinetext ; currentoutlinetext := 0 ;
+
+vardef mfun_do_outline_text_flush (expr kind, n, x, y) (text t) =
+ if kind = "f" :
+ mfun_do_outline_text_f (n, x, y) (t)
+ elseif kind = "d" :
+ mfun_do_outline_text_d (n, x, y) (t)
+ elseif kind = "b" :
+ mfun_do_outline_text_b (n, x, y) (t)
+ elseif kind = "r" :
+ mfun_do_outline_text_r (n, x, y) (t)
+ elseif kind = "p" :
+ mfun_do_outline_text_p (n, x, y) (t)
+ else :
+ mfun_do_outline_text_n (n, x, y) (t)
+ fi ;
+enddef ;
+
+numeric mfun_do_outline_n ; mfun_do_outline_n := 0 ;
+
+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 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) (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) (text t) =
+ for i=t :
+ draw i shifted(x,y) ;
+ endfor ;
+enddef ;
+
+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 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) (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 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) (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) ;
+ endfor ;
+enddef ;
+
+vardef mfun_do_outline_text_set_f (text f) text r =
+ def mfun_do_outline_options_f = f enddef ;
+ def mfun_do_outline_options_r = r enddef ;
+enddef ;
+
+vardef mfun_do_outline_text_set_d (text d) text r =
+ def mfun_do_outline_options_d = d enddef ;
+ def mfun_do_outline_options_r = r enddef ;
+enddef ;
+
+vardef mfun_do_outline_text_set_b (text f) (text d) text r =
+ def mfun_do_outline_options_f = f enddef ;
+ def mfun_do_outline_options_d = d enddef ;
+ def mfun_do_outline_options_r = r enddef ;
+enddef ;
+
+vardef mfun_do_outline_text_set_r (text d) (text f) text r =
+ def mfun_do_outline_options_d = d enddef ;
+ def mfun_do_outline_options_f = f enddef ;
+ def mfun_do_outline_options_r = r enddef ;
+enddef ;
+
+vardef mfun_do_outline_text_set_n text r =
+ def mfun_do_outline_options_r = r enddef ;
+enddef ;
+
+vardef mfun_do_outline_text_set_p =
+enddef ;
+
+def mfun_do_outline_options_d = enddef ;
+def mfun_do_outline_options_f = enddef ;
+def mfun_do_outline_options_r = enddef ;
+
+vardef outlinetext@# (expr t) text rest =
+ save kind ; string kind ; kind := str @# ;
+ currentoutlinetext := currentoutlinetext + 1 ;
+ image ( normaldraw image (
+ 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 :
+ % 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 = "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 ;
+ ) mfun_do_outline_options_r ; )
+enddef ;
+
+% A few helpers:
+
+numeric mfun_c_b_llx, mfun_c_b_h, mfun_c_b_w, mfun_c_b_l ;
+
+vardef checkedbounds(expr llx,lly,urx,ury) =
+ mfun_c_b_llx := min(xpart llcorner currentpicture,llx) ;
+ mfun_c_b_urx := max(xpart urcorner currentpicture,urx) ;
+ mfun_c_b_lly := min(ypart llcorner currentpicture,lly) ;
+ mfun_c_b_ury := max(ypart urcorner currentpicture,ury) ;
+ (mfun_c_b_llx,mfun_c_b_lly) --
+ (mfun_c_b_urx,mfun_c_b_lly) --
+ (mfun_c_b_urx,mfun_c_b_ury) --
+ (mfun_c_b_llx,mfun_c_b_ury) -- cycle
+enddef ;
+
+vardef checkbounds(expr llx,lly,urx,ury) =
+ setbounds currentpicture to checkedbounds(llx,lly,urx,ury) ;
+enddef ;
+
+vardef strut(expr ht,dp) =
+ setbounds currentpicture to checkedbounds(0,0,ht,dp) ;
+enddef ;
+
+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 ; " ;
+extra_beginfig := extra_beginfig & "currentoutlinetext := 0 ; " ;
extra_endfig := extra_endfig & "finishsavingdata ; " ;
extra_endfig := extra_endfig & "mfun_reset_tex_texts ; " ;
@@ -1205,8 +1451,11 @@ vardef formatted(expr f, x) = textext(varfmt(f, x)) enddef ;
% new
-def eofill text t = fill t withpostscript "evenodd" enddef ;
-%%% eoclip text t = clip t withpostscript "evenodd" enddef ; % no postscripts yet
+def fillup text t = draw t withpostscript "both" enddef ; % we use draw because we need the proper boundingbox
+def eofillup text t = draw t withpostscript "eoboth" enddef ; % we use draw because we need the proper boundingbox
+def eofill text t = fill t withpostscript "evenodd" enddef ;
+def nofill text t = fill t withpostscript "collect" enddef ;
+%%% eoclip text t = clip t withpostscript "evenodd" enddef ; % no postscripts yet
% def withrule expr r =
% if (t = "even-odd") or (t = "evenodd") : withpostscript "evenodd" fi
diff --git a/metapost/context/base/mp-page.mpiv b/metapost/context/base/mpiv/mp-page.mpiv
index a6fa3fba3..2e4a2b437 100644
--- a/metapost/context/base/mp-page.mpiv
+++ b/metapost/context/base/mpiv/mp-page.mpiv
@@ -662,3 +662,34 @@ def Enlarged (expr p, d) =
urEnlarged (p,d) --
ulEnlarged (p,d) -- cycle)
enddef ;
+
+% for the moment we put these here:
+
+string RuleDirection ; RuleDirection := "" ;
+string RuleOption ; RuleOption := "" ;
+numeric RuleWidth ; RuleWidth := 0 ;
+numeric RuleHeight ; RuleHeight := 0 ;
+numeric RuleDepth ; RuleDepth := 0 ;
+numeric RuleThickness ; RuleThickness := 0 ;
+numeric RuleFactor ; RuleFactor := 0 ;
+numeric RuleOffset ; RuleOffset := 0 ;
+ def RuleColor = (.5white) enddef ;
+
+def FakeWord(expr RuleWidth, RuleHeight, RuleDepth, RuleThickness) (text RuleColor) =
+ fill unitsquare
+ xscaled RuleWidth
+ yscaled (RuleDepth-RuleThickness/2)
+ withcolor RuleColor ;
+ fill unitsquare
+ xscaled RuleWidth
+ yscaled (RuleHeight-RuleDepth-RuleThickness/2)
+ shifted (0,RuleDepth+RuleThickness)
+ withcolor RuleColor ;
+enddef ;
+
+def FakeRule(expr RuleWidth, RuleHeight, RuleDepth, RuleThickness) (text RuleColor) =
+ fill unitsquare
+ xscaled RuleWidth
+ yscaled RuleHeight
+ withcolor RuleColor ;
+enddef ;
diff --git a/metapost/context/base/mp-shap.mpiv b/metapost/context/base/mpiv/mp-shap.mpiv
index 713656510..713656510 100644
--- a/metapost/context/base/mp-shap.mpiv
+++ b/metapost/context/base/mpiv/mp-shap.mpiv
diff --git a/metapost/context/base/mp-step.mpiv b/metapost/context/base/mpiv/mp-step.mpiv
index f7a7ba5de..f7a7ba5de 100644
--- a/metapost/context/base/mp-step.mpiv
+++ b/metapost/context/base/mpiv/mp-step.mpiv
diff --git a/metapost/context/base/mp-symb.mp b/metapost/context/base/mpiv/mp-symb.mpiv
index a84c84e82..a84c84e82 100644
--- a/metapost/context/base/mp-symb.mp
+++ b/metapost/context/base/mpiv/mp-symb.mpiv
diff --git a/metapost/context/base/mp-text.mpiv b/metapost/context/base/mpiv/mp-text.mpiv
index b68e8412a..b68e8412a 100644
--- a/metapost/context/base/mp-text.mpiv
+++ b/metapost/context/base/mpiv/mp-text.mpiv
diff --git a/metapost/context/base/mp-tool.mpiv b/metapost/context/base/mpiv/mp-tool.mpiv
index e497e2f72..76459d25c 100644
--- a/metapost/context/base/mp-tool.mpiv
+++ b/metapost/context/base/mpiv/mp-tool.mpiv
@@ -330,6 +330,11 @@ vardef set_outer_boundingbox text q = % obsolete
setbounds q to outerboundingbox q;
enddef;
+% secondarydef a boundedto b = % will this cleanup ?
+% hide(picture mfun_a_b ; mfun_a_b := a ; setbounds mfun_a_b to b;)
+% mfun_a_b
+% enddef ;
+
%D Some missing functions can be implemented rather straightforward (thanks to
%D Taco and others):
@@ -817,13 +822,33 @@ def colortype(expr c) =
enddef ;
vardef whitecolor(expr c) =
- if cmykcolor c : (0,0,0,0) elseif rgbcolor c : (1,1,1) else : 1 fi
+ if cmykcolor c : (0,0,0,0) elseif rgbcolor c : (1,1,1) else : 1 fi
enddef ;
vardef blackcolor expr c =
if cmykcolor c : (0,0,0,1) elseif rgbcolor c : (0,0,0) else : 0 fi
enddef ;
+vardef complementary expr c = (
+ if cmykcolor c : (1,1,1,1) -
+ elseif rgbcolor c : (1,1,1) -
+ elseif pair c : (1,1) -
+ elseif numeric c : 1 -
+ fi c
+) enddef ;
+
+vardef complemented expr c =
+ save m ;
+ if cmykcolor c : m := max(cyanpart c, magentapart c, yellowpart c, blackpart c) ;
+ ( (m,m,m,m) -
+ elseif rgbcolor c : m := max(redpart c, greenpart c, bluepart c) ;
+ ( (m,m,m) -
+ elseif pair c : m := max(xpart c, ypart c) ;
+ ( (m,m) -
+ elseif numeric c : ( m -
+ fi c )
+enddef ;
+
%D Well, this is the dangerous and naive version:
def drawfill text t =
@@ -876,6 +901,12 @@ primarydef p rightenlarged d = ( llcorner p -- (lrcorner p) shifted (d,0) -- (u
primarydef p topenlarged d = ( llcorner p -- lrcorner p -- (urcorner p) shifted (0,d) -- (ulcorner p) shifted (0,d) -- cycle ) enddef ;
primarydef p bottomenlarged d = ( llcorner p shifted (0,-d) -- lrcorner p shifted (0,-d) -- urcorner p -- ulcorner p -- cycle ) enddef ;
+%D Handy as stepper:
+
+vardef rotation(expr i, n) =
+ if (n == 0) : 0 else : i * 360 / n fi
+enddef ;
+
%D Handy for testing/debugging:
primarydef p crossed d = (
@@ -1074,14 +1105,16 @@ def draworiginoptions (text t) = def _ori_opt_ = t enddef ; enddef ;
def drawboundoptions (text t) = def _bnd_opt_ = t enddef ; enddef ;
def drawpathoptions (text t) = def _pth_opt_ = t enddef ; enddef ;
+numeric drawoptionsfactor ; drawoptionsfactor := pt ;
+
def resetdrawoptions =
- drawlineoptions (withpen pencircle scaled 1pt withcolor .5white) ;
- drawpointoptions (withpen pencircle scaled 4pt withcolor black) ;
- drawcontroloptions(withpen pencircle scaled 2.5pt withcolor black) ;
+ drawlineoptions (withpen pencircle scaled 1.0 drawoptionsfactor withcolor .5white) ;
+ drawpointoptions (withpen pencircle scaled 4.0 drawoptionsfactor withcolor black) ;
+ drawcontroloptions(withpen pencircle scaled 2.5 drawoptionsfactor withcolor black) ;
drawlabeloptions () ;
- draworiginoptions (withpen pencircle scaled 1pt withcolor .5white) ;
+ draworiginoptions (withpen pencircle scaled 1.0 drawoptionsfactor withcolor .5white) ;
drawboundoptions (dashed evenly _ori_opt_) ;
- drawpathoptions (withpen pencircle scaled 5pt withcolor .8white) ;
+ drawpathoptions (withpen pencircle scaled 5.0 drawoptionsfactor withcolor .8white) ;
enddef ;
resetdrawoptions ;
@@ -1094,20 +1127,42 @@ enddef ;
%D Arrow.
+newinternal ahvariant ; ahvariant := 0 ;
+newinternal ahdimple ; ahdimple := 1/5 ;
+
+vardef arrowhead expr p =
+ save q, e, r ;
+ pair e ; e = point length p of p ;
+ path q ; q = gobble(p shifted -e cutafter makepath(pencircle scaled (2ahlength))) cuttings ;
+ if ahvariant > 0:
+ path r ; r = gobble(p shifted -e cutafter makepath(pencircle scaled ((1-ahdimple)*2ahlength))) cuttings ;
+ fi
+ (q rotated (ahangle/2) & reverse q rotated -(ahangle/2)
+ if ahvariant = 1 :
+ -- point 0 of r --
+ elseif ahvariant = 2 :
+ ... point 0 of r ...
+ else :
+ --
+ fi
+ cycle
+ ) shifted e
+enddef ;
+
vardef drawarrowpath expr p =
save autoarrows ; boolean autoarrows ; autoarrows := true ;
drawarrow p _pth_opt_
enddef ;
def midarrowhead expr p =
- arrowhead p cutafter (point length(p cutafter point .5 along p)+ahlength on p)
+ arrowhead p cutafter (point length(p cutafter point .5 along p) + ahlength on p)
enddef ;
vardef arrowheadonpath (expr p, s) =
save autoarrows ; boolean autoarrows ;
autoarrows := true ;
set_ahlength(scaled ahfactor) ; % added
- arrowhead p if s<1 : cutafter (point (s*arclength(p)+.5ahlength) on p) fi
+ arrowhead p if s < 1 : cutafter (point (s*arclength(p) + (ahlength/2)) on p) fi
enddef ;
%D Points.
@@ -1152,13 +1207,25 @@ def mfun_draw_controllines text t =
enddef;
boolean swappointlabels ; swappointlabels := false ;
+numeric pointlabelscale ; pointlabelscale := 0 ;
+string pointlabelfont ; pointlabelfont := "" ;
def mfun_draw_pointlabels text t =
for _i_=0 upto length(_c_) :
pair _u_ ; _u_ := unitvector(direction _i_ of _c_) rotated if swappointlabels : - fi 90 ;
pair _p_ ; _p_ := (point _i_ of _c_) ;
- _u_ := 12 * defaultscale * _u_ ;
+ begingroup ;
+ if pointlabelscale > 0 :
+ save defaultscale ; numeric defaultscale ;
+ defaultscale := pointlabelscale ;
+ fi ;
+ if pointlabelfont <> "" :
+ save defaultfont ; string defaultfont ;
+ defaultfont := pointlabelfont ;
+ fi ;
+ _u_ := 10 * drawoptionsfactor * defaultscale * _u_ ;
normaldraw thelabel ( decimal _i_, _p_ shifted if cycle _c_ and (_i_=0) : - fi _u_ ) _lab_opt_ t ;
+ endgroup ;
endfor ;
enddef;
@@ -1233,6 +1300,14 @@ def drawwholepath expr p =
drawpointlabels p ;
enddef ;
+def drawpathonly expr p =
+ drawpath p ;
+ drawcontrollines p ;
+ drawcontrolpoints p ;
+ drawpoints p ;
+ drawpointlabels p ;
+enddef ;
+
%D Tracing.
def visualizeddraw expr c =
@@ -1263,11 +1338,29 @@ def do_visualizedfill text t =
drawpointlabels _c_ ;
enddef ;
+def detaileddraw expr c =
+ if picture c : normaldraw c else : path _c_ ; _c_ := c ; do_detaileddraw fi
+enddef ;
+
+def do_detaileddraw text t =
+ drawpath _c_ t ;
+ drawcontrollines _c_ ;
+ drawcontrolpoints _c_ ;
+ drawpoints _c_ ;
+ % % for labels we need an third run (as the second will mark the numbers); i could preroll them
+ % % but then the hash needs to handle that as well (as now we keep numbering)
+ % drawpointlabels _c_ ;
+enddef ;
+
def visualizepaths =
let fill = visualizedfill ;
let draw = visualizeddraw ;
enddef ;
+def detailpaths =
+ let draw = detaileddraw ;
+enddef ;
+
def naturalizepaths =
let fill = normalfill ;
let draw = normaldraw ;
@@ -1314,7 +1407,10 @@ enddef ;
%D \METAPOST\ definitions.
vardef arrowpath expr p = % patch by Peter Rolf: supports squared pen and shifting (hh: maybe just use center of head as first)
- (p cutafter makepath(pencircle scaled 2(ahlength*cosd(.5ahangle)) shifted point length p of p))
+ (p cutafter makepath(pencircle
+ scaled (if ahvariant > 0 : (1-ahdimple)* fi 2ahlength*cosd(ahangle/2))
+ shifted point length p of p
+ ))
enddef;
% def _finarr text t =
@@ -1323,18 +1419,24 @@ enddef;
% filldraw arrowhead _apth t ;
% enddef;
-def _finarr text t =
- if autoarrows : set_ahlength (t) fi ;
- draw arrowpath _apth t ; % arrowpath added
- fill arrowhead _apth t ;
- draw arrowhead _apth t ;
-enddef;
+% def _finarr text t =
+% if autoarrows : set_ahlength (t) fi ;
+% draw arrowpath _apth t ; % arrowpath added
+% fill arrowhead _apth t ;
+% draw arrowhead _apth t ;
+% enddef;
+
+% def _finarr text t =
+% if autoarrows : set_ahlength (t) fi ;
+% draw arrowpath _apth t ; % arrowpath added
+% fill arrowhead _apth t ;
+% draw arrowhead _apth t undashed ;
+% enddef;
def _finarr text t =
if autoarrows : set_ahlength (t) fi ;
draw arrowpath _apth t ; % arrowpath added
- fill arrowhead _apth t ;
- draw arrowhead _apth t undashed ;
+ fillup arrowhead _apth t ;
enddef;
%D Handy too ......
@@ -1631,6 +1733,22 @@ enddef ;
let greyed = grayed ;
+vardef hsvtorgb(expr h,s,v) =
+ save H, S, V, x ;
+ H = h mod 360 ;
+ S = if s < 0 : 0 elseif s > 1 : 1 else: s fi ;
+ V = if v < 0 : 0 elseif v > 1 : 1 else: v fi ;
+ x = 1 - abs(H mod 120 - 60)/60 ;
+ V * ( (1-S) * (1,1,1) + S *
+ if H < 60 : (1,x,0)
+ elseif H < 120 : (x,1,0)
+ elseif H < 180 : (0,1,x)
+ elseif H < 240 : (0,x,1)
+ elseif H < 300 : (x,0,1)
+ else : (1,0,x)
+ fi )
+enddef ;
+
% yes or no: "text" infont "cmr12" at 24pt ;
% let normalinfont = infont ;
@@ -2110,7 +2228,7 @@ if unknown darkcyan : color darkcyan ; darkcyan := .625(0,1,1) fi ;
if unknown darkmagenta : color darkmagenta ; darkmagenta := .625(1,0,1) fi ;
if unknown darkyellow : color darkyellow ; darkyellow := .625(1,1,0) fi ;
if unknown darkgray : color darkgray ; darkgray := .625(1,1,1) fi ;
-if unknown lightgray : color lightgray ; lightgray := .875(1,1,1) fi ;
+if unknown lightgray : color lightgray ; lightgray := .850(1,1,1) fi ;
% an improved plain mp macro
diff --git a/metapost/context/fonts/bidi-symbols.mp b/metapost/context/fonts/mpiv/bidi-symbols.mp
index abe48b951..abe48b951 100644
--- a/metapost/context/fonts/bidi-symbols.mp
+++ b/metapost/context/fonts/mpiv/bidi-symbols.mp
diff --git a/metapost/context/fonts/bidi-symbols.tex b/metapost/context/fonts/mpiv/bidi-symbols.tex
index ba659ccb7..ba659ccb7 100644
--- a/metapost/context/fonts/bidi-symbols.tex
+++ b/metapost/context/fonts/mpiv/bidi-symbols.tex
diff --git a/metapost/context/fonts/demo-symbols.mp b/metapost/context/fonts/mpiv/demo-symbols.mp
index 822854c94..822854c94 100644
--- a/metapost/context/fonts/demo-symbols.mp
+++ b/metapost/context/fonts/mpiv/demo-symbols.mp
diff --git a/metapost/context/fonts/demo-symbols.tex b/metapost/context/fonts/mpiv/demo-symbols.tex
index e9af4a027..e9af4a027 100644
--- a/metapost/context/fonts/demo-symbols.tex
+++ b/metapost/context/fonts/mpiv/demo-symbols.tex
diff --git a/metapost/context/fonts/punkfont-bold.mp b/metapost/context/fonts/mpiv/punkfont-bold.mp
index 1c62963f9..1c62963f9 100644
--- a/metapost/context/fonts/punkfont-bold.mp
+++ b/metapost/context/fonts/mpiv/punkfont-bold.mp
diff --git a/metapost/context/fonts/punkfont-boldslanted.mp b/metapost/context/fonts/mpiv/punkfont-boldslanted.mp
index 3e5fa1561..3e5fa1561 100644
--- a/metapost/context/fonts/punkfont-boldslanted.mp
+++ b/metapost/context/fonts/mpiv/punkfont-boldslanted.mp
diff --git a/metapost/context/fonts/punkfont-characters.mp b/metapost/context/fonts/mpiv/punkfont-characters.mp
index da0015b02..da0015b02 100644
--- a/metapost/context/fonts/punkfont-characters.mp
+++ b/metapost/context/fonts/mpiv/punkfont-characters.mp
diff --git a/metapost/context/fonts/punkfont-definitions.mp b/metapost/context/fonts/mpiv/punkfont-definitions.mp
index 2901a9d03..2901a9d03 100644
--- a/metapost/context/fonts/punkfont-definitions.mp
+++ b/metapost/context/fonts/mpiv/punkfont-definitions.mp
diff --git a/metapost/context/fonts/punkfont-slanted.mp b/metapost/context/fonts/mpiv/punkfont-slanted.mp
index 5c1ff46b2..5c1ff46b2 100644
--- a/metapost/context/fonts/punkfont-slanted.mp
+++ b/metapost/context/fonts/mpiv/punkfont-slanted.mp
diff --git a/metapost/context/fonts/punkfont.mp b/metapost/context/fonts/mpiv/punkfont.mp
index 2a03aae81..2a03aae81 100644
--- a/metapost/context/fonts/punkfont.mp
+++ b/metapost/context/fonts/mpiv/punkfont.mp