On 1/16/2017 8:31 PM, Sergey Slyusarev wrote:
the (subtle) difference between the two [*MPinclusions and 
*/MPinitializations/] is not a bug but a feature

If I understood correctly, *MPinitializations affects everything and can't be 
assigned to a specific instance (or can it?),
in some cases (like mine) this difference is not so subtle.

Look at the following example (not so minimal):

\startMPinitializations

picture p;

p := image(

draw fullsquare scaled 1cm;

draw textext("1");

);

\stopMPinitializations

\startMPinitializations

picture s;

s := image(

draw (fullsquare rotated 45) scaled 1cm;

draw textext("2");

);

\stopMPinitializations

\defineMPinstance[foo][initializations=yes]

\startMPcode{foo}

picture q;

q := image(

draw fullcircle scaled 1cm;

draw textext("3");

);

draw q;

\stopMPcode

\startMPcode{foo}

draw p;

draw q shifted (2cm, 0);

draw s shifted (4cm, 0);

\stopMPcode

\defineMPinstance[bar][initializations=yes]

\startMPcode{bar}

picture r;

r := image(

draw fullcircle scaled 1cm;

draw textext("4");

);

draw r;

\stopMPcode

\startMPcode{bar}

draw p;

draw r shifted (2cm, 0);

draw s shifted (4cm, 0);

\stopMPcode


First, it shows why *MPinitializations can't replace *MPinclusions for
me (it affects all instances),

and second, it silently produces produces some really unexpected results:

It looks like it should produce (by line)

A circle with "3" inside (yes)

A square with "1" inside (yes); A circle with "3" inside again (no,
instead it produces circle with "2" inside); A rhombus with "2" inside
(no, instead it produces a rhombus with "1")

and so on.

(tested on http://live.contextgarden.net/)

In fact, I failed to declare picture variable inside with text inside
one *MPcode environment and pass it to another safely

(text either disappears or changes to other text, and this time ConTeXt
returns no error), that surely is a bug?

no, it's the way it works ... but keep in mind that textexts are something bound to a specific code snippet so you can bets do something like this:

\starttext

\defineMPinstance[foo][definitions=yes]
\defineMPinstance[bar][definitions=yes]

\startMPdefinitions{foo}
    vardef p =
        image(
            draw fullsquare scaled 1cm;
            draw textext("1");
        )
    enddef ;
\stopMPdefinitions

\startMPdefinitions{bar}
    vardef p =
        image(
            draw (fullsquare rotated 45) scaled 1cm;
            draw textext("2");
        )
    enddef;
\stopMPdefinitions

\startMPcode{foo}
    draw p;
    draw image(
        draw fullcircle scaled 1cm;
        draw textext("3");
    );
    draw p;
\stopMPcode

\startMPcode{bar}
    draw p;
    draw image(
        draw fullcircle scaled 1cm;
        draw textext("4");
    );
\stopMPcode

\stoptext



-----------------------------------------------------------------
                                          Hans Hagen | PRAGMA ADE
              Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
       tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl
-----------------------------------------------------------------
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the 
Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki     : http://contextgarden.net
___________________________________________________________________________________

Reply via email to