summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2019-08-24 23:32:35 +0200
committerContext Git Mirror Bot <phg@phi-gamma.net>2019-08-24 23:32:35 +0200
commitfca2d946bc4d3ef525c3a2c9016e3b88d6d09812 (patch)
treed0fb4d8a17342fcf08a4b033cf61a47fd6e0aa98
parentf6e7648f6126ffe087071531f03c674be32930f1 (diff)
downloadcontext-fca2d946bc4d3ef525c3a2c9016e3b88d6d09812.tar.gz
2019-08-24 22:49:00
-rw-r--r--context/data/scite/context/lexers/data/scite-context-data-metapost.lua2
-rw-r--r--context/data/scite/context/scite-context-data-metapost.properties2
-rw-r--r--context/data/textadept/context/data/scite-context-data-metapost.lua2
-rw-r--r--context/data/vscode/extensions/context/syntaxes/context-syntax-mps.json2
-rw-r--r--doc/context/documents/general/qrcs/setup-cs.pdfbin887589 -> 919178 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-en.pdfbin893320 -> 917677 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-fr.pdfbin885332 -> 916916 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-it.pdfbin891090 -> 920898 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-cs.pdfbin383689 -> 329449 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-en.pdfbin380157 -> 327336 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-fr.pdfbin383760 -> 328450 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-it.pdfbin383022 -> 328857 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-nl.pdfbin381871 -> 327986 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-ro.pdfbin620281 -> 537640 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-nl.pdfbin880927 -> 914112 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-ro.pdfbin885331 -> 916929 bytes
-rw-r--r--metapost/context/base/mpiv/mp-lmtx.mpxl521
-rw-r--r--metapost/context/base/mpiv/mp-luas.mpxl30
-rw-r--r--metapost/context/base/mpiv/mp-mlib.mpiv87
-rw-r--r--metapost/context/base/mpiv/mp-tool.mpiv11
-rw-r--r--scripts/context/lua/mtx-install.lua14
-rw-r--r--tex/context/base/mkii/cont-new.mkii2
-rw-r--r--tex/context/base/mkii/context.mkii2
-rw-r--r--tex/context/base/mkii/mult-en.mkii8
-rw-r--r--tex/context/base/mkiv/colo-ini.lua54
-rw-r--r--tex/context/base/mkiv/cont-new.mkiv2
-rw-r--r--tex/context/base/mkiv/context.mkiv2
-rw-r--r--tex/context/base/mkiv/context.mkxl4
-rw-r--r--tex/context/base/mkiv/mlib-lmp.lua17
-rw-r--r--tex/context/base/mkiv/mlib-lua.lua114
-rw-r--r--tex/context/base/mkiv/mlib-scn.lua103
-rw-r--r--tex/context/base/mkiv/mult-mps.lua2
-rw-r--r--tex/context/base/mkiv/status-files.pdfbin26616 -> 26096 bytes
-rw-r--r--tex/context/base/mkiv/status-lua.pdfbin267867 -> 230173 bytes
-rw-r--r--tex/context/base/mkiv/supp-box.lua12
-rw-r--r--tex/context/base/mkiv/syst-con.lua8
-rw-r--r--tex/context/interface/mkii/keys-en.xml8
-rw-r--r--tex/context/interface/mkiv/i-context.pdfbin893320 -> 917677 bytes
-rw-r--r--tex/context/interface/mkiv/i-readme.pdfbin61165 -> 24422 bytes
-rw-r--r--tex/generic/context/luatex/luatex-fonts-merged.lua2
40 files changed, 870 insertions, 141 deletions
diff --git a/context/data/scite/context/lexers/data/scite-context-data-metapost.lua b/context/data/scite/context/lexers/data/scite-context-data-metapost.lua
index 6b30a4d89..fb48511b1 100644
--- a/context/data/scite/context/lexers/data/scite-context-data-metapost.lua
+++ b/context/data/scite/context/lexers/data/scite-context-data-metapost.lua
@@ -1,5 +1,5 @@
return {
- ["commands"]={ "upto", "downto", "beginfig", "endfig", "beginglyph", "endglyph", "rotatedaround", "reflectedabout", "arrowhead", "currentpen", "currentpicture", "cuttings", "defaultfont", "extra_beginfig", "extra_endfig", "down", "evenly", "fullcircle", "halfcircle", "identity", "in", "left", "pensquare", "penrazor", "penspec", "origin", "quartercircle", "right", "unitsquare", "up", "withdots", "abs", "bbox", "ceiling", "center", "cutafter", "cutbefore", "dir", "directionpoint", "div", "dotprod", "intersectionpoint", "inverse", "mod", "round", "unitvector", "whatever", "cutdraw", "draw", "drawarrow", "drawdblarrow", "fill", "filldraw", "drawdot", "loggingall", "interact", "tracingall", "tracingnone", "pickup", "undraw", "unfill", "unfilldraw", "buildcycle", "dashpattern", "decr", "dotlabel", "dotlabels", "drawoptions", "incr", "label", "labels", "max", "min", "thelabel", "z", "beginchar", "blacker", "capsule_end", "change_width", "define_blacker_pixels", "define_corrected_pixels", "define_good_x_pixels", "define_good_y_pixels", "define_horizontal_corrected_pixels", "define_pixels", "define_whole_blacker_pixels", "define_whole_pixels", "define_whole_vertical_blacker_pixels", "define_whole_vertical_pixels", "endchar", "extra_beginchar", "extra_endchar", "extra_setup", "font_coding_scheme", "clearxy", "clearit", "clearpen", "shipit", "font_extra_space", "exitunless", "relax", "hide", "gobble", "gobbled", "stop", "blankpicture", "counterclockwise", "tensepath", "takepower", "direction", "softjoin", "makelabel", "rotatedabout", "flex", "superellipse", "image", "nullpen", "savepen", "clearpen", "penpos", "penlabels", "range", "thru", "z", "laboff", "bye", "red", "green", "blue", "cyan", "magenta", "yellow", "black", "white", "background", "mm", "pt", "dd", "bp", "cm", "pc", "cc", "in", "triplet", "quadruplet" },
+ ["commands"]={ "upto", "downto", "beginfig", "endfig", "beginglyph", "endglyph", "rotatedaround", "reflectedabout", "arrowhead", "currentpen", "currentpicture", "cuttings", "defaultfont", "extra_beginfig", "extra_endfig", "down", "evenly", "fullcircle", "halfcircle", "identity", "in", "left", "pensquare", "penrazor", "penspec", "origin", "quartercircle", "right", "unitsquare", "up", "withdots", "abs", "bbox", "ceiling", "center", "cutafter", "cutbefore", "dir", "directionpoint", "div", "dotprod", "intersectionpoint", "inverse", "mod", "round", "unitvector", "whatever", "cutdraw", "draw", "drawarrow", "drawdblarrow", "fill", "filldraw", "drawdot", "loggingall", "interact", "tracingall", "tracingnone", "pickup", "undraw", "unfill", "unfilldraw", "buildcycle", "dashpattern", "decr", "dotlabel", "dotlabels", "drawoptions", "incr", "label", "labels", "max", "min", "thelabel", "z", "beginchar", "blacker", "capsule_end", "change_width", "define_blacker_pixels", "define_corrected_pixels", "define_good_x_pixels", "define_good_y_pixels", "define_horizontal_corrected_pixels", "define_pixels", "define_whole_blacker_pixels", "define_whole_pixels", "define_whole_vertical_blacker_pixels", "define_whole_vertical_pixels", "endchar", "extra_beginchar", "extra_endchar", "extra_setup", "font_coding_scheme", "clearxy", "clearit", "clearpen", "shipit", "font_extra_space", "exitunless", "relax", "hide", "gobble", "gobbled", "stop", "blankpicture", "counterclockwise", "tensepath", "takepower", "direction", "softjoin", "makelabel", "rotatedabout", "flex", "superellipse", "image", "nullpen", "savepen", "clearpen", "penpos", "penlabels", "range", "thru", "z", "laboff", "bye", "red", "green", "blue", "cyan", "magenta", "yellow", "black", "white", "background", "mm", "pt", "dd", "bp", "cm", "pc", "cc", "in", "triplet", "quadruplet", "totransform" },
["disabled"]={ "verbatimtex", "troffmode" },
["internals"]={ "mitered", "rounded", "beveled", "butt", "squared", "eps", "epsilon", "infinity", "bboxmargin", "ahlength", "ahangle", "labeloffset", "dotlabeldiam", "defaultpen", "defaultscale", "join_radius", "charscale", "ditto", "EOF", "pen_lft", "pen_rt", "pen_top", "pen_bot" },
["metafont"]={ "autorounding", "beginchar", "blacker", "boundarychar", "capsule_def", "capsule_end", "change_width", "chardp", "chardx", "chardy", "charexists", "charext", "charht", "charic", "charlist", "charwd", "cull", "cullit", "currenttransform", "currentwindow", "define_blacker_pixels", "define_corrected_pixels", "define_good_x_pixels", "define_good_y_pixels", "define_horizontal_corrected_pixels", "define_pixels", "define_whole_blacker_pixels", "define_whole_pixels", "define_whole_vertical_blacker_pixels", "define_whole_vertical_pixels", "designsize", "display", "displaying", "endchar", "extensible", "extra_beginchar", "extra_endchar", "extra_setup", "fillin", "font_coding_scheme", "font_extra_space", "font_identifier", "font_normal_shrink", "font_normal_space", "font_normal_stretch", "font_quad", "font_size", "font_slant", "font_x_height", "fontdimen", "fontmaking", "gfcorners", "granularity", "grayfont", "headerbyte", "hppp", "hround", "imagerules", "italcorr", "kern", "labelfont", "ligtable", "lowres_fix", "makebox", "makegrid", "maketicks", "mode_def", "mode_setup", "nodisplays", "notransforms", "numspecial", "o_correction", "openit", "openwindow", "pixels_per_inch", "proofing", "proofoffset", "proofrule", "proofrulethickness", "rulepen", "screenchars", "screenrule", "screenstrokes", "screen_cols", "screen_rows", "showit", "slantfont", "smode", "smoothing", "titlefont", "totalweight", "tracingedges", "tracingpens", "turningcheck", "unitpixel", "vppp", "vround", "xoffset", "yoffset" },
diff --git a/context/data/scite/context/scite-context-data-metapost.properties b/context/data/scite/context/scite-context-data-metapost.properties
index 32863ed08..9673550a3 100644
--- a/context/data/scite/context/scite-context-data-metapost.properties
+++ b/context/data/scite/context/scite-context-data-metapost.properties
@@ -28,7 +28,7 @@ laboff bye red green blue \
cyan magenta yellow black white \
background mm pt dd bp \
cm pc cc in triplet \
-quadruplet
+quadruplet totransform
keywordclass.metapost.disabled=\
verbatimtex troffmode
diff --git a/context/data/textadept/context/data/scite-context-data-metapost.lua b/context/data/textadept/context/data/scite-context-data-metapost.lua
index 6b30a4d89..fb48511b1 100644
--- a/context/data/textadept/context/data/scite-context-data-metapost.lua
+++ b/context/data/textadept/context/data/scite-context-data-metapost.lua
@@ -1,5 +1,5 @@
return {
- ["commands"]={ "upto", "downto", "beginfig", "endfig", "beginglyph", "endglyph", "rotatedaround", "reflectedabout", "arrowhead", "currentpen", "currentpicture", "cuttings", "defaultfont", "extra_beginfig", "extra_endfig", "down", "evenly", "fullcircle", "halfcircle", "identity", "in", "left", "pensquare", "penrazor", "penspec", "origin", "quartercircle", "right", "unitsquare", "up", "withdots", "abs", "bbox", "ceiling", "center", "cutafter", "cutbefore", "dir", "directionpoint", "div", "dotprod", "intersectionpoint", "inverse", "mod", "round", "unitvector", "whatever", "cutdraw", "draw", "drawarrow", "drawdblarrow", "fill", "filldraw", "drawdot", "loggingall", "interact", "tracingall", "tracingnone", "pickup", "undraw", "unfill", "unfilldraw", "buildcycle", "dashpattern", "decr", "dotlabel", "dotlabels", "drawoptions", "incr", "label", "labels", "max", "min", "thelabel", "z", "beginchar", "blacker", "capsule_end", "change_width", "define_blacker_pixels", "define_corrected_pixels", "define_good_x_pixels", "define_good_y_pixels", "define_horizontal_corrected_pixels", "define_pixels", "define_whole_blacker_pixels", "define_whole_pixels", "define_whole_vertical_blacker_pixels", "define_whole_vertical_pixels", "endchar", "extra_beginchar", "extra_endchar", "extra_setup", "font_coding_scheme", "clearxy", "clearit", "clearpen", "shipit", "font_extra_space", "exitunless", "relax", "hide", "gobble", "gobbled", "stop", "blankpicture", "counterclockwise", "tensepath", "takepower", "direction", "softjoin", "makelabel", "rotatedabout", "flex", "superellipse", "image", "nullpen", "savepen", "clearpen", "penpos", "penlabels", "range", "thru", "z", "laboff", "bye", "red", "green", "blue", "cyan", "magenta", "yellow", "black", "white", "background", "mm", "pt", "dd", "bp", "cm", "pc", "cc", "in", "triplet", "quadruplet" },
+ ["commands"]={ "upto", "downto", "beginfig", "endfig", "beginglyph", "endglyph", "rotatedaround", "reflectedabout", "arrowhead", "currentpen", "currentpicture", "cuttings", "defaultfont", "extra_beginfig", "extra_endfig", "down", "evenly", "fullcircle", "halfcircle", "identity", "in", "left", "pensquare", "penrazor", "penspec", "origin", "quartercircle", "right", "unitsquare", "up", "withdots", "abs", "bbox", "ceiling", "center", "cutafter", "cutbefore", "dir", "directionpoint", "div", "dotprod", "intersectionpoint", "inverse", "mod", "round", "unitvector", "whatever", "cutdraw", "draw", "drawarrow", "drawdblarrow", "fill", "filldraw", "drawdot", "loggingall", "interact", "tracingall", "tracingnone", "pickup", "undraw", "unfill", "unfilldraw", "buildcycle", "dashpattern", "decr", "dotlabel", "dotlabels", "drawoptions", "incr", "label", "labels", "max", "min", "thelabel", "z", "beginchar", "blacker", "capsule_end", "change_width", "define_blacker_pixels", "define_corrected_pixels", "define_good_x_pixels", "define_good_y_pixels", "define_horizontal_corrected_pixels", "define_pixels", "define_whole_blacker_pixels", "define_whole_pixels", "define_whole_vertical_blacker_pixels", "define_whole_vertical_pixels", "endchar", "extra_beginchar", "extra_endchar", "extra_setup", "font_coding_scheme", "clearxy", "clearit", "clearpen", "shipit", "font_extra_space", "exitunless", "relax", "hide", "gobble", "gobbled", "stop", "blankpicture", "counterclockwise", "tensepath", "takepower", "direction", "softjoin", "makelabel", "rotatedabout", "flex", "superellipse", "image", "nullpen", "savepen", "clearpen", "penpos", "penlabels", "range", "thru", "z", "laboff", "bye", "red", "green", "blue", "cyan", "magenta", "yellow", "black", "white", "background", "mm", "pt", "dd", "bp", "cm", "pc", "cc", "in", "triplet", "quadruplet", "totransform" },
["disabled"]={ "verbatimtex", "troffmode" },
["internals"]={ "mitered", "rounded", "beveled", "butt", "squared", "eps", "epsilon", "infinity", "bboxmargin", "ahlength", "ahangle", "labeloffset", "dotlabeldiam", "defaultpen", "defaultscale", "join_radius", "charscale", "ditto", "EOF", "pen_lft", "pen_rt", "pen_top", "pen_bot" },
["metafont"]={ "autorounding", "beginchar", "blacker", "boundarychar", "capsule_def", "capsule_end", "change_width", "chardp", "chardx", "chardy", "charexists", "charext", "charht", "charic", "charlist", "charwd", "cull", "cullit", "currenttransform", "currentwindow", "define_blacker_pixels", "define_corrected_pixels", "define_good_x_pixels", "define_good_y_pixels", "define_horizontal_corrected_pixels", "define_pixels", "define_whole_blacker_pixels", "define_whole_pixels", "define_whole_vertical_blacker_pixels", "define_whole_vertical_pixels", "designsize", "display", "displaying", "endchar", "extensible", "extra_beginchar", "extra_endchar", "extra_setup", "fillin", "font_coding_scheme", "font_extra_space", "font_identifier", "font_normal_shrink", "font_normal_space", "font_normal_stretch", "font_quad", "font_size", "font_slant", "font_x_height", "fontdimen", "fontmaking", "gfcorners", "granularity", "grayfont", "headerbyte", "hppp", "hround", "imagerules", "italcorr", "kern", "labelfont", "ligtable", "lowres_fix", "makebox", "makegrid", "maketicks", "mode_def", "mode_setup", "nodisplays", "notransforms", "numspecial", "o_correction", "openit", "openwindow", "pixels_per_inch", "proofing", "proofoffset", "proofrule", "proofrulethickness", "rulepen", "screenchars", "screenrule", "screenstrokes", "screen_cols", "screen_rows", "showit", "slantfont", "smode", "smoothing", "titlefont", "totalweight", "tracingedges", "tracingpens", "turningcheck", "unitpixel", "vppp", "vround", "xoffset", "yoffset" },
diff --git a/context/data/vscode/extensions/context/syntaxes/context-syntax-mps.json b/context/data/vscode/extensions/context/syntaxes/context-syntax-mps.json
index 716bbbf42..c2f6b96c1 100644
--- a/context/data/vscode/extensions/context/syntaxes/context-syntax-mps.json
+++ b/context/data/vscode/extensions/context/syntaxes/context-syntax-mps.json
@@ -115,7 +115,7 @@
"name" : "context.number.number.mps"
},
"plain" : {
- "match" : "(z|z|yellow|withdots|white|whatever|upto|up|unitvector|unitsquare|unfilldraw|unfill|undraw|triplet|tracingnone|tracingall|thru|thelabel|tensepath|takepower|superellipse|stop|softjoin|shipit|savepen|round|rotatedaround|rotatedabout|right|relax|reflectedabout|red|range|quartercircle|quadruplet|pt|pickup|pensquare|penspec|penrazor|penpos|penlabels|pc|origin|nullpen|mod|mm|min|max|makelabel|magenta|loggingall|left|laboff|labels|label|inverse|intersectionpoint|interact|incr|in|in|image|identity|hide|halfcircle|green|gobbled|gobble|fullcircle|font_extra_space|font_coding_scheme|flex|filldraw|fill|extra_setup|extra_endfig|extra_endchar|extra_beginfig|extra_beginchar|exitunless|evenly|endglyph|endfig|endchar|drawoptions|drawdot|drawdblarrow|drawarrow|draw|downto|down|dotprod|dotlabels|dotlabel|div|directionpoint|direction|dir|define_whole_vertical_pixels|define_whole_vertical_blacker_pixels|define_whole_pixels|define_whole_blacker_pixels|define_pixels|define_horizontal_corrected_pixels|define_good_y_pixels|define_good_x_pixels|define_corrected_pixels|define_blacker_pixels|defaultfont|decr|dd|dashpattern|cyan|cuttings|cutdraw|cutbefore|cutafter|currentpicture|currentpen|counterclockwise|cm|clearxy|clearpen|clearpen|clearit|change_width|center|ceiling|cc|capsule_end|bye|buildcycle|bp|blue|blankpicture|blacker|black|beginglyph|beginfig|beginchar|bbox|background|arrowhead|abs)(?=[^a-zA-Z\u005C_@!?-ÿ])",
+ "match" : "(z|z|yellow|withdots|white|whatever|upto|up|unitvector|unitsquare|unfilldraw|unfill|undraw|triplet|tracingnone|tracingall|totransform|thru|thelabel|tensepath|takepower|superellipse|stop|softjoin|shipit|savepen|round|rotatedaround|rotatedabout|right|relax|reflectedabout|red|range|quartercircle|quadruplet|pt|pickup|pensquare|penspec|penrazor|penpos|penlabels|pc|origin|nullpen|mod|mm|min|max|makelabel|magenta|loggingall|left|laboff|labels|label|inverse|intersectionpoint|interact|incr|in|in|image|identity|hide|halfcircle|green|gobbled|gobble|fullcircle|font_extra_space|font_coding_scheme|flex|filldraw|fill|extra_setup|extra_endfig|extra_endchar|extra_beginfig|extra_beginchar|exitunless|evenly|endglyph|endfig|endchar|drawoptions|drawdot|drawdblarrow|drawarrow|draw|downto|down|dotprod|dotlabels|dotlabel|div|directionpoint|direction|dir|define_whole_vertical_pixels|define_whole_vertical_blacker_pixels|define_whole_pixels|define_whole_blacker_pixels|define_pixels|define_horizontal_corrected_pixels|define_good_y_pixels|define_good_x_pixels|define_corrected_pixels|define_blacker_pixels|defaultfont|decr|dd|dashpattern|cyan|cuttings|cutdraw|cutbefore|cutafter|currentpicture|currentpen|counterclockwise|cm|clearxy|clearpen|clearpen|clearit|change_width|center|ceiling|cc|capsule_end|bye|buildcycle|bp|blue|blankpicture|blacker|black|beginglyph|beginfig|beginchar|bbox|background|arrowhead|abs)(?=[^a-zA-Z\u005C_@!?-ÿ])",
"name" : "context.plain.plain.mps"
},
"primitive" : {
diff --git a/doc/context/documents/general/qrcs/setup-cs.pdf b/doc/context/documents/general/qrcs/setup-cs.pdf
index f8f7ffcbf..28b72fd56 100644
--- a/doc/context/documents/general/qrcs/setup-cs.pdf
+++ b/doc/context/documents/general/qrcs/setup-cs.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-en.pdf b/doc/context/documents/general/qrcs/setup-en.pdf
index 1db2bc0f7..b4bc1a04e 100644
--- a/doc/context/documents/general/qrcs/setup-en.pdf
+++ b/doc/context/documents/general/qrcs/setup-en.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-fr.pdf b/doc/context/documents/general/qrcs/setup-fr.pdf
index 51c46b3ac..975fb72ce 100644
--- a/doc/context/documents/general/qrcs/setup-fr.pdf
+++ b/doc/context/documents/general/qrcs/setup-fr.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-it.pdf b/doc/context/documents/general/qrcs/setup-it.pdf
index 0ff818eff..65fdba70f 100644
--- a/doc/context/documents/general/qrcs/setup-it.pdf
+++ b/doc/context/documents/general/qrcs/setup-it.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-cs.pdf b/doc/context/documents/general/qrcs/setup-mapping-cs.pdf
index 1ef5ee54b..5cccfa40d 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-cs.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-cs.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-en.pdf b/doc/context/documents/general/qrcs/setup-mapping-en.pdf
index f92fc92ca..2362842b1 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-en.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-en.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-fr.pdf b/doc/context/documents/general/qrcs/setup-mapping-fr.pdf
index 414e87ad1..ba0ba43f5 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-fr.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-fr.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-it.pdf b/doc/context/documents/general/qrcs/setup-mapping-it.pdf
index d62976e97..d58c2077a 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-it.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-it.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-nl.pdf b/doc/context/documents/general/qrcs/setup-mapping-nl.pdf
index 0aa2bcce1..3f540be02 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-nl.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-nl.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-ro.pdf b/doc/context/documents/general/qrcs/setup-mapping-ro.pdf
index 5fc80cc5a..7b58461ff 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-ro.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-ro.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-nl.pdf b/doc/context/documents/general/qrcs/setup-nl.pdf
index 75d251a34..22cf3e16f 100644
--- a/doc/context/documents/general/qrcs/setup-nl.pdf
+++ b/doc/context/documents/general/qrcs/setup-nl.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-ro.pdf b/doc/context/documents/general/qrcs/setup-ro.pdf
index 5d44fabf3..79c905423 100644
--- a/doc/context/documents/general/qrcs/setup-ro.pdf
+++ b/doc/context/documents/general/qrcs/setup-ro.pdf
Binary files differ
diff --git a/metapost/context/base/mpiv/mp-lmtx.mpxl b/metapost/context/base/mpiv/mp-lmtx.mpxl
index 45e216eef..9026255b3 100644
--- a/metapost/context/base/mpiv/mp-lmtx.mpxl
+++ b/metapost/context/base/mpiv/mp-lmtx.mpxl
@@ -18,6 +18,51 @@ if known context_lmtx : endinput ; fi ;
boolean context_lmtx ; context_lmtx := true ;
+presetparameters "text" [
+ offset = 0,
+ strut = "auto",
+ style = "",
+ color = "",
+ text = "",
+ anchor = "",
+ format = "",
+ position = origin,
+] ;
+
+def lmt_text = applyparameters "text" "lmt_do_text" enddef ;
+
+vardef lmt_do_text =
+ image (
+ pushparameters "text" ;
+ save style, anchor, txt, fmt, strt ;
+ string style, anchor, txt, fmt, strt ;
+ interim textextoffset := getparameter "offset" ;
+ style := getparameter "style" ;
+ anchor := getparameter "anchor" ;
+ strt := getparameter "strut" ;
+ fmt := getparameter "format" ;
+ txt := getparameter "text" ;
+ if fmt <> "" :
+ txt := "\formatone{" & fmt & "}{" & txt & "}"
+ fi ;
+ if strt == "yes" :
+ txt := "\strut " & txt ;
+ elseif strt == "auto" :
+ txt := "\setstrut\strut " & txt ;
+ fi ;
+ if style <> "" :
+ txt := "\style[" & style & "]{" & txt & "}" ;
+ fi ;
+ draw
+ if anchor == "" : thetextext else : scantokens("thetextext." & anchor) fi (
+ txt,
+ getparameter "position"
+ )
+ withcolor getparameter "color" ;
+ popparameters ;
+ )
+enddef ;
+
presetparameters "grid" [
nx = 1, dx = 1,
ny = 1, dy = 1,
@@ -841,3 +886,479 @@ enddef ;
vardef OverlayMesh(expr p, s) =
lmt_mesh [ paths = { meshed(p,OverlayBox,s) } ]
enddef ;
+
+% charts
+
+presetparameters "chart" [
+ originsize = 1mm,
+ trace = false,
+ showlabels = true,
+ center = false,
+
+ samples = { },
+
+ cumulative = false,
+ percentage = false,
+ maximum = 0,
+ distance = 1mm,
+
+ % labels = { },
+ labelstyle = "",
+ labelformat = "",
+ % labelstrut = "auto",
+ % labelanchor = "",
+ % labeloffset = 0,
+ labelfraction = 0.8,
+ labelcolor = "",
+
+ backgroundcolor = "",
+ drawcolor = "white",
+ fillcolors = { % use color palet
+ "darkred", "darkgreen", "darkblue",
+ "darkyellow", "darkmagenta", "darkcyan",
+ "darkgray"
+ },
+ colormode = "global",
+
+ linewidth = .25mm,
+
+ legendcolor = "",
+ legendstyle = "",
+ legend = { },
+] ;
+
+presetparameters "chart:circle" "chart" [
+ height = 5cm,
+ width = 5mm,
+ labelanchor = "",
+ labeloffset = 0,
+ labelstrut = "no",
+] ;
+
+presetparameters "chart:histogram" "chart" [
+ height = 5cm,
+ width = 5mm,
+ labelanchor = "bot",
+ labeloffset = 1mm,
+ labelstrut = "auto",
+] ;
+
+presetparameters "chart:bar" "chart" [
+ height = 5mm,
+ width = 5cm,
+ labelanchor = "lft",
+ labeloffset = 1mm,
+ labelstrut = "no",
+] ;
+
+def lmt_chart_circle = applyparameters "chart:circle" "lmt_do_chart_circle" enddef ;
+def lmt_chart_histogram = applyparameters "chart:histogram" "lmt_do_chart_histogram" enddef ;
+def lmt_chart_bar = applyparameters "chart:bar" "lmt_do_chart_bar" enddef ;
+
+def lmt_do_chart_start (expr what) =
+ pushparameters what ;
+ save width, height, distance, linewidth, labelgap, labelfraction, value, nofsamples, nofsamplesets ;
+ save fillcolor, drawcolor, labelcolor, labelstyle, labelformat, labelstrut, labelanchor, colormode ;
+ string fillcolor, drawcolor, labelcolor, labelstyle, labelformat, labelstrut, labelanchor, colormode ;
+ height := getparameter "height" ;
+ width := getparameter "width" ;
+ distance := getparameter "distance" ;
+ linewidth := getparameter "linewidth" ;
+ drawcolor := getparameter "drawcolor" ;
+ colormode := getparameter "colormode" ;
+ labelcolor := getparameter "labelcolor" ;
+ labelgap := getparameter "labeloffset" ;
+ labelstyle := getparameter "labelstyle" ;
+ labelformat := getparameter "labelformat" ;
+ labelstrut := getparameter "labelstrut" ;
+ labelanchor := getparameter "labelanchor" ;
+ labelfraction := getparameter "labelfraction" ;
+ nofsamplesets := getparametercount "samples" ;
+ nofsamples := getmaxparametercount "samples" ;
+enddef ;
+
+def lmt_do_chart_stop =
+ if getparameter "center" :
+ currentpicture := currentpicture shifted - center currentpicture ;
+ fi
+ if (getparameter "backgroundcolor") <> "" :
+ addbackground withcolor getparameter "backgroundcolor" ;
+ fi
+ if getparameter "trace" :
+ save b ; path b ; b := boundingbox currentpicture ;
+ draw image (
+ draw fullcircle scaled 1mm ;
+ draw b
+ )
+ dashed evenly scaled 1/4
+ withpen pencircle scaled .125mm
+ withcolor "darkgray" ;
+ fi
+ popparameters ;
+enddef ;
+
+vardef lmt_do_chart_text(expr s, i, value) =
+ lmt_text [
+ style = labelstyle,
+ format = labelformat,
+ strut = labelstrut,
+ anchor = labelanchor,
+ offset = labelgap,
+ color = labelcolor,
+ text = (getparameterdefault "labels" s i (decimal value))
+ ]
+enddef ;
+
+def lmt_do_chart_legend =
+ n := getparametercount "legend" ;
+ if n > 0 :
+ save dx, dy, p, l, w, o, d, ddy ; picture l ;
+ dx := xpart urcorner currentpicture + EmWidth ;
+ dy := ypart urcorner currentpicture ;
+ labelcolor := getparameter "legendcolor" ;
+ labelstyle := getparameter "legendstyle" ;
+ w := 2EmWidth ;
+ o := .25EmWidth ;
+ d := ExHeight ;
+ ddy := .8LineHeight ;
+ for i=1 upto n :
+ dy := dy - ddy ;
+ l := lmt_text [
+ text = getparameter "legend" i,
+ anchor = "rt"
+ style = labelstyle,
+ color = labelcolor,
+ ] ;
+ fill leftboundary l rightenlarged w
+ shifted (dx,dy+d)
+ withcolor getparameter "fillcolors" i ;
+ draw l
+ shifted (dx+w+o,dy+d) ;
+ endfor ;
+ fi ;
+enddef ;
+
+vardef lmt_do_chart_circle =
+ image (
+ lmt_do_chart_start("chart:circle") ;
+ if (nofsamplesets > 0) and (nofsamples > 0) :
+ nofsamplesets := 1 ;
+ save p, r, s, first, last, total, factor, n, percentage ;
+ path p, r, s[] ; boolean percentage ;
+ percentage := getparameter "percentage" ;
+ total := 0 ;
+ for i = 1 upto nofsamples :
+ total := total + getparameter "samples" (1) i ; % () is needed else 1i
+ endfor ;
+ factor := 100/total ;
+ first := 0 ;
+ p := fullcircle ysized (height) ;
+ r := origin -- (2*height,0) ;
+ for i = 1 upto nofsamples :
+ fillcolor := getparameter "fillcolors" i ;
+ value := (getparameter "samples" (1) i) * factor ;
+ last := first + (360 / 100) * value ;
+ s[i] := ((p cutbefore (r rotated first)) cutafter (r rotated last)) ;
+ fill origin -- s[i] -- cycle withcolor fillcolor ;
+ first := last ;
+ endfor ;
+ if linewidth > 0 :
+ if drawcolor == "" :
+ drawcolor := backgroundcolor ;
+ fi ;
+ for i = 1 upto nofsamples :
+ interim linecap := butt ;
+ draw origin -- (point 0 of s[i]) withpen pencircle scaled linewidth withcolor drawcolor ;
+ draw origin -- (point length(s[i]) of s[i]) withpen pencircle scaled linewidth withcolor drawcolor ;
+ endfor ;
+ fi ;
+ if getparameter "showlabels" :
+ first := 0 ;
+ for i = 1 upto nofsamples :
+ value := getparameter "samples" (1) i ;
+ last := first + (360/100) * value * factor ;
+ draw lmt_do_chart_text (s,i,value)
+ shifted ((labelfraction*(height/2),0) rotated ((first+last)/2)) ;
+ first := last ;
+ endfor ;
+ fi ;
+ lmt_do_chart_legend ;
+ n := getparameter "originsize" ;
+ if n > 0 :
+ fill fullcircle scaled n withcolor "white" ;
+ fi ;
+ fi ;
+ lmt_do_chart_stop ;
+ )
+enddef ;
+
+vardef lmt_do_chart_histogram =
+ image (
+ lmt_do_chart_start("chart:histogram") ;
+ if (nofsamplesets > 0) and (nofsamples > 0) :
+ save value, maximum, cumulative, maxwidth ; boolean cumulative ;
+ maximum := getparameter "maximum" ;
+ cumulative := getparameter "cumulative" ;
+ if labelanchor = "center" :
+ labelanchor := "vcenter" ;
+ fi ;
+ if maximum = 0 :
+ for s = 1 upto nofsamplesets :
+ for i = 1 upto nofsamples :
+ value := getparameter "samples" s i ;
+ maximum := if cumulative :
+ maximum + value ;
+ else :
+ max(maximum,value) ;
+ fi ;
+ endfor ;
+ endfor ;
+ fi ;
+ if nofsamplesets = 1 :
+ distance := 0 ;
+ fi ;
+ maxwidth := nofsamplesets * nofsamples * width + (nofsamples - 1)* distance ;
+ value := 0 ;
+ for s = 1 upto nofsamplesets :
+ for i = 1 upto nofsamples :
+ value := if cumulative : value + fi (getparameter "samples" s i) * height / maximum ;
+ fill unitsquare xyscaled (width,value)
+ if linewidth > 0 :
+ if i > 1 : leftenlarged (-linewidth/2) fi
+ if i < nofsamples : rightenlarged (-linewidth/2) fi
+ fi
+ shifted (nofsamplesets*(i-1)*width+(s-1)*width+(i-1)*distance,0)
+ withcolor getparameter "fillcolors" if colormode = "local" : s else : i fi ;
+ endfor ;
+ endfor ;
+ setbounds currentpicture to unitsquare xyscaled (maxwidth,height) ;
+ for s = 1 upto nofsamplesets :
+ if getparameter "showlabels" :
+ for i = 1 upto nofsamples :
+ draw lmt_do_chart_text (s,i,getparameter "samples" s i)
+ shifted (nofsamplesets*((i-1)*width)+width/2+(s-1)*width+(i-1)*distance,0) ;
+ endfor ;
+ fi ;
+ endfor ;
+ lmt_do_chart_legend ;
+ fi ;
+ lmt_do_chart_stop ;
+ )
+enddef ;
+
+vardef lmt_do_chart_bar =
+
+ image (
+ lmt_do_chart_start("chart:bar") ;
+ if (nofsamplesets > 0) and (nofsamples > 0) :
+ save value, maximum, cumulative, maxheight ; boolean cumulative ;
+ maximum := getparameter "maximum" ;
+ cumulative := getparameter "cumulative" ;
+ if labelanchor = "center" :
+ labelanchor := "hcenter" ;
+ fi ;
+ if maximum = 0 :
+ for s = 1 upto nofsamplesets :
+ for i = 1 upto nofsamples :
+ value := getparameter "samples" s i ;
+ maximum := if cumulative : maximum + value else : max(maximum,value) fi ;
+ endfor ;
+ endfor ;
+ fi ;
+ if nofsamplesets = 1 :
+ distance := 0 ;
+ fi ;
+ maxheight := nofsamplesets * nofsamples * height + (nofsamples - 1)* distance ;
+ for s = 1 upto nofsamplesets :
+ value := 0 ;
+ for i = 1 upto nofsamples :
+ value := if cumulative : value + fi (getparameter "samples" s i) * width / maximum ;
+ fill unitsquare xyscaled (value,height)
+ if linewidth > 0 :
+ if i > 1 : topenlarged (-linewidth/2) fi
+ if i < nofsamples : bottomenlarged (-linewidth/2) fi
+ fi
+ shifted (0,maxheight-nofsamplesets*i*height+(s-1)*height-(i-1)*distance)
+ withcolor getparameter "fillcolors" if colormode = "local" : s else : i fi ;
+ endfor ;
+ endfor ;
+ setbounds currentpicture to unitsquare xyscaled (width,maxheight) ;
+ if getparameter "showlabels" :
+ for s = 1 upto nofsamplesets :
+ for i = 1 upto nofsamples :
+ draw lmt_do_chart_text (s,i,getparameter "samples" s i)
+ shifted (0,maxheight-nofsamplesets*(i*height)+height/2+(s-1)*height-(i-1)*distance) ;
+ endfor ;
+ endfor ;
+ fi ;
+ lmt_do_chart_legend ;
+ fi ;
+ lmt_do_chart_stop ;
+ )
+enddef ;
+
+% more complex than needed but i want to trace so i need the vars
+
+presetparameters "shade" [
+ alternative = "circular",
+ path = origin -- cycle,
+ trace = false
+
+ % alternative = "circular" | "linear"
+ % domain = { a, b }
+ % radius = a | { a, b }
+ % factor = a
+ % origin = (a,b) | { (a,b), {c, d) }
+ % vector = { a, b }
+ % colors = { a, b }
+ % center = a | { a, b }
+ % direction = "up" | "down" | "left" | "right" | { a, b }
+
+] ;
+
+def lmt_shade = applyparameters "shade" "lmt_do_shade" enddef ;
+
+vardef lmt_do_shade =
+ image (
+ pushparameters "shade" ;
+
+ save domain_min, domain_max, radius_a, radius_b, factor ;
+ save color_a, color_b, center_a, center_b, alternative, s ;
+ string color_a, color_b, alternative, s ; pair center_a, center_b ;
+
+ alternative := getparameter "alternative" ;
+
+ mfun_with_shade_method_analyze(getparameter "path") ;
+
+ domain_min := 0 ;
+ domain_max := 1 ;
+
+ color_a := "white" ;
+ color_b := "black" ;
+
+ if alternative = "circular" :
+ center_a := center mfun_shade_path ;
+ center_b := center_a ;
+ radius_a := 0 ;
+ radius_b := mfun_max_radius(mfun_shade_path) ;
+ factor := 1.2 ;
+ else :
+ center_a := llcorner mfun_shade_path ;
+ center_b := urcorner mfun_shade_path ;
+ radius_a := 0 ;
+ radius_b := 0 ;
+ factor := 0;
+ fi ;
+
+ if hasparameter "domain" :
+ domain_min := getparameter "domain" 1 ;
+ domain_max := getparameter "domain" 2 ;
+ fi
+ if hasparameter "radius" :
+ if numeric getparameter "radius" :
+ radius_a := 0 ;
+ radius_b := getparameter "radius" ;
+ else :
+ radius_a := getparameter "radius" 1 ;
+ radius_b := getparameter "radius" 2 ;
+ fi ;
+ factor := 1 ;
+ fi
+ if hasparameter "factor" :
+ factor := getparameter "factor" ;
+ fi
+ if hasparameter "origin" :
+ if pair getparameter "origin" :
+ center_a := getparameter "origin" ;
+ center_b := center_b ;
+ else :
+ center_a := getparameter "origin" 1 ;
+ center_b := getparameter "origin" 2 ;
+ fi ;
+ fi
+ if hasparameter "vector" :
+ center_a := point (getparameter "vector" 1) of mfun_shade_path ;
+ center_b := point (getparameter "vector" 2) of mfun_shade_path ;
+ fi
+ if hasparameter "colors" :
+ color_a := getparameter "colors" 1 ;
+ color_b := getparameter "colors" 2 ;
+ fi
+ if hasparameter "center" :
+ if numeric getparameter "center" :
+ center_a := center mfun_shade_path shifted (
+ (getparameter "center") * bbwidth (mfun_shade_path)/2,
+ (getparameter "center") * bbheight(mfun_shade_path)/2
+ ) ;
+ else :
+ center_a := center mfun_shade_path shifted (
+ (getparameter "center" 1) * bbwidth (mfun_shade_path)/2,
+ (getparameter "center" 2) * bbheight(mfun_shade_path)/2
+ ) ;
+ fi
+ fi
+ if hasparameter "direction" :
+ save a, b, bb ; path bb ;
+ bb := boundingbox(mfun_shade_path) ;
+ a := b := -1 ;
+ if string getparameter "direction" :
+ s := getparameter "direction" ;
+ if s = "up" :
+ p_a := xpart shadedup ;
+ p_b := ypart shadedup ;
+ elseif s = "down" :
+ p_a := xpart shadeddown ;
+ p_b := ypart shadeddown ;
+ elseif s = "left" :
+ p_a := xpart shadedleft ;
+ p_b := ypart shadedleft ;
+ elseif s = "right" :
+ p_a := xpart shadedright ;
+ p_b := ypart shadedright ;
+ fi
+ else :
+ p_a := getparameter "direction" 1 ;
+ p_a := getparameter "direction" 2 ;
+ fi
+ if p_a >= 0 :
+ center_a := point p_a of bb ;
+ fi
+ if p_b >= 0 :
+ center_b := point p_b of bb ;
+ fi
+ fi ;
+ fill mfun_shade_path
+ withprescript "sh_domain=" & decimal domain_min & " " & decimal domain_max
+ withprescript "sh_transform=yes"
+ withprescript "sh_color=into"
+ withprescript "sh_color_a=" & colordecimals color_a
+ withprescript "sh_color_b=" & colordecimals color_b
+ withprescript "sh_first=" & ddecimal point 0 of mfun_shade_path % used for support scaling
+ withprescript "sh_set_x=" & ddecimal (mfun_shade_nx,mfun_shade_lx) %
+ withprescript "sh_set_y=" & ddecimal (mfun_shade_ny,mfun_shade_ly) %
+ if alternative = "linear" :
+ withprescript "sh_type=linear"
+ withprescript "sh_factor=1"
+ withprescript "sh_center_a=" & ddecimal center_a
+ withprescript "sh_center_b=" & ddecimal center_b
+ else :
+ withprescript "sh_type=circular"
+ withprescript "sh_factor=1.2"
+ withprescript "sh_center_a=" & ddecimal center_a
+ withprescript "sh_center_b=" & ddecimal center_b
+ withprescript "sh_radius_a=" & decimal radius_a
+ withprescript "sh_radius_b=" & decimal radius_b
+ fi ;
+ if getparameter "trace" :
+ draw fullcircle scaled 1mm shifted center_a ;
+ draw fullsquare scaled 2mm shifted center_b ;
+ draw textext.top("\strut\ttx center a") scaled .2 shifted center_a shifted (0, 2mm) ;
+ draw textext.bot("\strut\ttx center b") scaled .2 shifted center_b shifted (0,-2mm) ;
+ if alternative = "circular" :
+ draw fullcircle scaled ( radius_a * 2) shifted center_a dashed evenly ;
+ draw fullcircle scaled (factor * radius_b * 2) shifted -center_b dashed evenly ;
+ fi
+ fi
+ popparameters ;
+ )
+enddef ;
diff --git a/metapost/context/base/mpiv/mp-luas.mpxl b/metapost/context/base/mpiv/mp-luas.mpxl
index 0fcac55e6..23c76ab40 100644
--- a/metapost/context/base/mpiv/mp-luas.mpxl
+++ b/metapost/context/base/mpiv/mp-luas.mpxl
@@ -200,18 +200,19 @@ extra_endfig := extra_endfig & " runscript mfid_path_reset ; " ;
vardef utflen(expr s) = lua.mp.utflen(s) enddef ;
vardef utfsub(expr s,f,t) = lua.mp.utfsub(s,f,t) enddef ;
-newinternal mfid_getparameters ; mfid_getparameters := scriptindex "getparameters" ;
-newinternal mfid_presetparameters ; mfid_presetparameters := scriptindex "presetparameters" ;
-newinternal mfid_hasparameter ; mfid_hasparameter := scriptindex "hasparameter" ;
-newinternal mfid_getparameter ; mfid_getparameter := scriptindex "getparameter" ;
-newinternal mfid_getparameterdefault ; mfid_getparameterdefault := scriptindex "getparameterdefault" ;
-newinternal mfid_getparametercount ; mfid_getparametercount := scriptindex "getparametercount" ;
-newinternal mfid_getparameterpath ; mfid_getparameterpath := scriptindex "getparameterpath" ;
-newinternal mfid_getparametertext ; mfid_getparametertext := scriptindex "getparametertext" ;
-newinternal mfid_getparameteroption ; mfid_getparameteroption := scriptindex "getparameteroption" ;
-newinternal mfid_applyparameters ; mfid_applyparameters := scriptindex "applyparameters" ;
-newinternal mfid_pushparameters ; mfid_pushparameters := scriptindex "pushparameters" ;
-newinternal mfid_popparameters ; mfid_popparameters := scriptindex "popparameters" ;
+newinternal mfid_getparameters ; mfid_getparameters := scriptindex "getparameters" ;
+newinternal mfid_presetparameters ; mfid_presetparameters := scriptindex "presetparameters" ;
+newinternal mfid_hasparameter ; mfid_hasparameter := scriptindex "hasparameter" ;
+newinternal mfid_getparameter ; mfid_getparameter := scriptindex "getparameter" ;
+newinternal mfid_getparameterdefault ; mfid_getparameterdefault := scriptindex "getparameterdefault" ;
+newinternal mfid_getparametercount ; mfid_getparametercount := scriptindex "getparametercount" ;
+newinternal mfid_getmaxparametercount ; mfid_getmaxparametercount := scriptindex "getmaxparametercount" ;
+newinternal mfid_getparameterpath ; mfid_getparameterpath := scriptindex "getparameterpath" ;
+newinternal mfid_getparametertext ; mfid_getparametertext := scriptindex "getparametertext" ;
+newinternal mfid_getparameteroption ; mfid_getparameteroption := scriptindex "getparameteroption" ;
+newinternal mfid_applyparameters ; mfid_applyparameters := scriptindex "applyparameters" ;
+newinternal mfid_pushparameters ; mfid_pushparameters := scriptindex "pushparameters" ;
+newinternal mfid_popparameters ; mfid_popparameters := scriptindex "popparameters" ;
def getparameters = runscript mfid_getparameters enddef ;
def presetparameters = runscript mfid_presetparameters enddef ;
@@ -219,6 +220,7 @@ def hasparameter = runscript mfid_hasparameter enddef ;
def getparameter = runscript mfid_getparameter enddef ;
def getparameterdefault = runscript mfid_getparameterdefault enddef ;
def getparametercount = runscript mfid_getparametercount enddef ;
+def getmaxparametercount = runscript mfid_getmaxparametercount enddef ;
def getparameterpath = runscript mfid_getparameterpath enddef ;
def getparametertext = runscript mfid_getparametertext enddef ;
def getparameteroption = runscript mfid_getparameteroption enddef ;
@@ -234,3 +236,7 @@ newinternal mfid_day ; mfid_day := scriptindex "day" ; vardef day =
newinternal mfid_hour ; mfid_hour := scriptindex "hour" ; vardef hour = runscript mfid_hour enddef ;
newinternal mfid_minute ; mfid_minute := scriptindex "minute" ; vardef minute = runscript mfid_minute enddef ;
newinternal mfid_second ; mfid_second := scriptindex "second" ; vardef second = runscript mfid_second enddef ;
+
+newinternal mfid_definecolor ; mfid_definecolor := scriptindex "definecolor" ;
+
+def definecolor = runscript mfid_definecolor ; enddef ; % the semicolon prevents lookahead
diff --git a/metapost/context/base/mpiv/mp-mlib.mpiv b/metapost/context/base/mpiv/mp-mlib.mpiv
index 61ffba24c..8ccb6a695 100644
--- a/metapost/context/base/mpiv/mp-mlib.mpiv
+++ b/metapost/context/base/mpiv/mp-mlib.mpiv
@@ -280,21 +280,21 @@ vardef fontsize expr name =
fi
enddef ;
-pair mfun_laboff ; mfun_laboff := (0,0) ;
-pair mfun_laboff.lft ; mfun_laboff.lft := (-1,0) ;
-pair mfun_laboff.rt ; mfun_laboff.rt := (1,0) ;
-pair mfun_laboff.bot ; mfun_laboff.bot := (0,-1) ;
-pair mfun_laboff.top ; mfun_laboff.top := (0,1) ;
-pair mfun_laboff.ulft ; mfun_laboff.ulft := (-.7,.7) ;
-pair mfun_laboff.urt ; mfun_laboff.urt := (.7,.7) ;
-pair mfun_laboff.llft ; mfun_laboff.llft := -(.7,.7) ;
-pair mfun_laboff.lrt ; mfun_laboff.lrt := (.7,-.7) ;
-
-pair mfun_laboff.d ; mfun_laboff.d := mfun_laboff ;
-pair mfun_laboff.dlft ; mfun_laboff.dlft := mfun_laboff.lft ;
-pair mfun_laboff.drt ; mfun_laboff.drt := mfun_laboff.rt ;
-pair mfun_laboff.origin ; mfun_laboff.origin := origin ;
-pair mfun_laboff.raw ; mfun_laboff.raw := origin ;
+pair mfun_laboff ; mfun_laboff := origin ;
+pair mfun_laboff.lft ; mfun_laboff.lft := (-1,0) ;
+pair mfun_laboff.rt ; mfun_laboff.rt := (1,0) ;
+pair mfun_laboff.bot ; mfun_laboff.bot := (0,-1) ;
+pair mfun_laboff.top ; mfun_laboff.top := (0,1) ;
+pair mfun_laboff.ulft ; mfun_laboff.ulft := (-.7,.7) ;
+pair mfun_laboff.urt ; mfun_laboff.urt := (.7,.7) ;
+pair mfun_laboff.llft ; mfun_laboff.llft := -(.7,.7) ;
+pair mfun_laboff.lrt ; mfun_laboff.lrt := (.7,-.7) ;
+
+pair mfun_laboff.d ; mfun_laboff.d := mfun_laboff ;
+pair mfun_laboff.dflt ; mfun_laboff.dflt := mfun_laboff.lft ;
+pair mfun_laboff.drt ; mfun_laboff.drt := mfun_laboff.rt ;
+pair mfun_laboff.origin ; mfun_laboff.origin := mfun_laboff ;
+pair mfun_laboff.raw ; mfun_laboff.raw := mfun_laboff ;
pair mfun_laboff.l ; mfun_laboff.l := mfun_laboff.lft ;
pair mfun_laboff.r ; mfun_laboff.r := mfun_laboff.rt ;
@@ -319,11 +319,11 @@ mfun_labxf.urt := mfun_labxf.r_t := mfun_labxf.t_r := 0 ;
mfun_labxf.llft := mfun_labxf.l_b := mfun_labxf.b_l := 1 ;
mfun_labxf.lrt := mfun_labxf.r_b := mfun_labxf.b_r := 0 ;
-mfun_labxf.d := mfun_labxf ;
-mfun_labxf.dlft := mfun_labxf.lft ;
-mfun_labxf.drt := mfun_labxf.rt ;
-mfun_labxf.origin := 0 ;
-mfun_labxf.raw := 0 ;
+mfun_labxf.d := mfun_labxf ;
+mfun_labxf.dflt := mfun_labxf.lft ;
+mfun_labxf.drt := mfun_labxf.rt ;
+mfun_labxf.origin := 0 ;
+mfun_labxf.raw := 0 ;
mfun_labyf := 0.5 ;
mfun_labyf.lft := mfun_labyf.l := 0.5 ;
@@ -335,11 +335,11 @@ mfun_labyf.urt := mfun_labyf.r_t := mfun_labyf.t_r := 0 ;
mfun_labyf.llft := mfun_labyf.l_b := mfun_labyf.b_l := 1 ;
mfun_labyf.lrt := mfun_labyf.r_b := mfun_labyf.b_r := 1 ;
-mfun_labyf.d := mfun_labyf ;
-mfun_labyf.dlft := mfun_labyf.lft ;
-mfun_labyf.drt := mfun_labyf.rt ;
-mfun_labyf.origin := 0 ;
-mfun_labyf.raw := 0 ;
+mfun_labyf.d := mfun_labyf ;
+mfun_labyf.dflt := mfun_labyf.lft ;
+mfun_labyf.drt := mfun_labyf.rt ;
+mfun_labyf.origin := 0 ;
+mfun_labyf.raw := 0 ;
mfun_labtype := 0 ;
mfun_labtype.lft := mfun_labtype.l := 1 ;
@@ -351,20 +351,27 @@ mfun_labtype.urt := mfun_labtype.r_t := mfun_labtype.t_r := 6 ;
mfun_labtype.llft := mfun_labtype.l_b := mfun_labtype.b_l := 7 ;
mfun_labtype.lrt := mfun_labtype.r_b := mfun_labtype.b_r := 8 ;
mfun_labtype.d := 10 ;
-mfun_labtype.dlft := 11 ;
+mfun_labtype.dflt := 11 ;
mfun_labtype.drt := 12 ;
mfun_labtype.origin := 0 ;
mfun_labtype.raw := 0 ;
-% installlabel.foo ( 0, 1, 1, (.5,-1) ) ;
-
vardef installlabel@# (expr type, x, y, offset) =
- numeric labtype@# ; labtype@# := type ;
- pair laboff @# ; laboff @# := offset ;
- numeric labxf @# ; labxf @# := x ;
- numeric labyf @# ; labyf @# := y ;
+ numeric mfun_labtype@# ; mfun_labtype@# := type ;
+ pair mfun_laboff @# ; mfun_laboff @# := offset ;
+ numeric mfun_labxf @# ; mfun_labxf @# := x ;
+ numeric mfun_labyf @# ; mfun_labyf @# := y ;
enddef ;
+installlabel.center (0, 0.5, 0.5, (0,0)) ;
+installlabel.c (0, 0.5, 0.5, (0,0)) ;
+
+installlabel.hcenter(0, 0.5, 0.5, (1,0)) ;
+installlabel.h (0, 0.5, 0.5, (1,0)) ;
+
+installlabel.vcenter(0, 0.5, 0.5, (0,1)) ;
+installlabel.v (0, 0.5, 0.5, (0,1)) ;
+
vardef mfun_labshift@#(expr p) =
(mfun_labxf@#*lrcorner p +
mfun_labyf@#*ulcorner p +
@@ -688,6 +695,15 @@ def mfun_with_shade_method_analyze(expr p) =
endfor ;
enddef ;
+vardef mfun_max_radius(expr p) =
+ max (
+ (xpart center p - xpart llcorner p) ++ (ypart center p - ypart llcorner p),
+ (xpart center p - xpart ulcorner p) ++ (ypart ulcorner p - ypart center p),
+ (xpart lrcorner p - xpart center p) ++ (ypart center p - ypart lrcorner p),
+ (xpart urcorner p - xpart center p) ++ (ypart urcorner p - ypart center p)
+ )
+enddef ;
+
primarydef p withshademethod m =
hide(mfun_with_shade_method_analyze(p))
p
@@ -710,12 +726,7 @@ primarydef p withshademethod m =
withprescript "sh_center_a=" & ddecimal center p
withprescript "sh_center_b=" & ddecimal center p
withprescript "sh_radius_a=" & decimal 0
- withprescript "sh_radius_b=" & decimal ( max (
- (xpart center p - xpart llcorner p) ++ (ypart center p - ypart llcorner p),
- (xpart center p - xpart ulcorner p) ++ (ypart ulcorner p - ypart center p),
- (xpart lrcorner p - xpart center p) ++ (ypart center p - ypart lrcorner p),
- (xpart urcorner p - xpart center p) ++ (ypart urcorner p - ypart center p)
- ) )
+ withprescript "sh_radius_b=" & decimal mfun_max_radius(p)
fi
enddef ;
diff --git a/metapost/context/base/mpiv/mp-tool.mpiv b/metapost/context/base/mpiv/mp-tool.mpiv
index 2442beb1c..3bae73aad 100644
--- a/metapost/context/base/mpiv/mp-tool.mpiv
+++ b/metapost/context/base/mpiv/mp-tool.mpiv
@@ -3638,3 +3638,14 @@ vardef mfun_timestamp =
if ((time-(time div 60)*60) < 10) : "0" & fi
decimal (time-(time div 60)*60)
enddef ;
+
+vardef totransform(expr x, y, xx, xy, yx, yy) =
+ save t ; transform t ;
+ xpart t = x ;
+ ypart t = y ;
+ xxpart t = xx ;
+ xypart t = xy ;
+ yxpart t = yx ;
+ yypart t = yy ;
+ t
+enddef ;
diff --git a/scripts/context/lua/mtx-install.lua b/scripts/context/lua/mtx-install.lua
index 66f1556c9..bad5c8393 100644
--- a/scripts/context/lua/mtx-install.lua
+++ b/scripts/context/lua/mtx-install.lua
@@ -127,6 +127,8 @@ function install.identify()
-- We have to be in "...../tex" where subdirectories are prefixed with
-- "texmf". We strip the "tex/texm*/" from the name in the list.
+ local hashdata = sha2 and sha2.HASH256 or md5.hex
+
local function collect(root,tree)
local path = root .. "/" .. tree
@@ -141,12 +143,12 @@ function install.identify()
local total = 0
for i=1,#files do
- local name = files[i]
- local size = filesize(name)
- local base = gsub(name,pattern,"")
- local stamp = md5.hex(io.loaddata(name))
- details[i] = { base, size, stamp }
- total = total + size
+ local name = files[i]
+ local size = filesize(name)
+ local base = gsub(name,pattern,"")
+ local stamp = hashdata(io.loaddata(name))
+ details[i] = { base, size, stamp }
+ total = total + size
end
report("%-20s : %4i files, %3.0f MB",tree,#files,total/(1000*1000))
diff --git a/tex/context/base/mkii/cont-new.mkii b/tex/context/base/mkii/cont-new.mkii
index 8102353cb..f4666bcd9 100644
--- a/tex/context/base/mkii/cont-new.mkii
+++ b/tex/context/base/mkii/cont-new.mkii
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2019.08.20 17:20}
+\newcontextversion{2019.08.24 22:42}
%D This file is loaded at runtime, thereby providing an
%D excellent place for hacks, patches, extensions and new
diff --git a/tex/context/base/mkii/context.mkii b/tex/context/base/mkii/context.mkii
index d745ff9da..1663c168f 100644
--- a/tex/context/base/mkii/context.mkii
+++ b/tex/context/base/mkii/context.mkii
@@ -20,7 +20,7 @@
%D your styles an modules.
\edef\contextformat {\jobname}
-\edef\contextversion{2019.08.20 17:20}
+\edef\contextversion{2019.08.24 22:42}
%D For those who want to use this:
diff --git a/tex/context/base/mkii/mult-en.mkii b/tex/context/base/mkii/mult-en.mkii
index 52f51af5d..65721ddaa 100644
--- a/tex/context/base/mkii/mult-en.mkii
+++ b/tex/context/base/mkii/mult-en.mkii
@@ -637,6 +637,7 @@
\setinterfaceconstant{aligntitle}{aligntitle}
\setinterfaceconstant{alternative}{alternative}
\setinterfaceconstant{anchor}{anchor}
+\setinterfaceconstant{anchoring}{anchoring}
\setinterfaceconstant{andtext}{andtext}
\setinterfaceconstant{apa}{apa}
\setinterfaceconstant{arguments}{arguments}
@@ -866,6 +867,7 @@
\setinterfaceconstant{hfil}{hfil}
\setinterfaceconstant{hidenumber}{hidenumber}
\setinterfaceconstant{hoffset}{hoffset}
+\setinterfaceconstant{horizontal}{horizontal}
\setinterfaceconstant{horoffset}{horoffset}
\setinterfaceconstant{hyphen}{hyphen}
\setinterfaceconstant{hyphens}{hyphens}
@@ -966,9 +968,12 @@
\setinterfaceconstant{menu}{menu}
\setinterfaceconstant{method}{method}
\setinterfaceconstant{middle}{middle}
+\setinterfaceconstant{middlecolor}{middlecolor}
\setinterfaceconstant{middlecommand}{middlecommand}
\setinterfaceconstant{middlespeech}{middlespeech}
+\setinterfaceconstant{middlestyle}{middlestyle}
\setinterfaceconstant{middletext}{middletext}
+\setinterfaceconstant{middlewidth}{middlewidth}
\setinterfaceconstant{midsentence}{midsentence}
\setinterfaceconstant{min}{min}
\setinterfaceconstant{mindepth}{mindepth}
@@ -1286,6 +1291,7 @@
\setinterfaceconstant{vcompact}{vcompact}
\setinterfaceconstant{vector}{vector}
\setinterfaceconstant{veroffset}{veroffset}
+\setinterfaceconstant{vertical}{vertical}
\setinterfaceconstant{vfactor}{vfactor}
\setinterfaceconstant{vfil}{vfil}
\setinterfaceconstant{viewerprefix}{viewerprefix}
@@ -1296,6 +1302,7 @@
\setinterfaceconstant{white}{white}
\setinterfaceconstant{width}{width}
\setinterfaceconstant{words}{words}
+\setinterfaceconstant{xanchor}{xanchor}
\setinterfaceconstant{xfactor}{xfactor}
\setinterfaceconstant{xhtml}{xhtml}
\setinterfaceconstant{xmax}{xmax}
@@ -1303,6 +1310,7 @@
\setinterfaceconstant{xoffset}{xoffset}
\setinterfaceconstant{xscale}{xscale}
\setinterfaceconstant{xstep}{xstep}
+\setinterfaceconstant{yanchor}{yanchor}
\setinterfaceconstant{yfactor}{yfactor}
\setinterfaceconstant{ymax}{ymax}
\setinterfaceconstant{yoffset}{yoffset}
diff --git a/tex/context/base/mkiv/colo-ini.lua b/tex/context/base/mkiv/colo-ini.lua
index 473427198..c7b1d4de4 100644
--- a/tex/context/base/mkiv/colo-ini.lua
+++ b/tex/context/base/mkiv/colo-ini.lua
@@ -109,6 +109,8 @@ colors.pushset = pushset
colors.popset = popset
colors.setlist = setlist
+-- todo: set at the lua end
+
local ctx_colordefagc = context.colordefagc
local ctx_colordefagt = context.colordefagt
local ctx_colordefalc = context.colordefalc
@@ -508,6 +510,56 @@ local function defineprocesscolor(name,str,global,freeze) -- still inconsistent
colorset[name] = true-- maybe we can store more
end
+local function defineprocesscolordirect(settings)
+ if settings then
+ local name = settings.name
+ if name then
+ local r = settings.r
+ local g = settings.g
+ local b = settings.b
+ if r or g or b then
+ -- we can consider a combined rgb cmyk s definition
+ register_color(name,'rgb', r or 0, g or 0, b or 0)
+ else
+ local c = settings.c
+ local m = settings.m
+ local y = settings.y
+ local k = settings.k
+ if c or m or y or k then
+ register_color(name,'cmyk',c or 0, m or 0, y or 0, k or 0)
+ else
+ local h = settings.h
+ local s = settings.s
+ local v = settings.v
+ if v then
+ r, g, b = colors.hsvtorgb(h or 0, s or 1, v or 1) -- maybe later native
+ register_color(name,'rgb',r,g,b)
+ else
+ local x = settings.x or h
+ if x then
+ r, g, b = lpegmatch(hexpattern,x) -- can be inlined
+ if r and g and b then
+ register_color(name,'rgb',r,g,b)
+ else
+ register_color(name,'gray',r or 0)
+ end
+ else
+ register_color(name,'gray',s or 0)
+ end
+ end
+ end
+ end
+ local a = settings.a
+ local t = settings.t
+ if a and t then
+ transparencies.register(name,transparent[a] or a or 1,t or 1)
+ end
+ colorset[name] = true-- maybe we can store more
+ valid[name] = true
+ end
+ end
+end
+
local function isblack(ca) -- maybe commands
local cv = ca > 0 and colorvalues[ca]
return (cv and cv[2] == 0) or false
@@ -657,6 +709,8 @@ colors.defineprocesscolor = defineprocesscolor
colors.definespotcolor = definespotcolor
colors.definemultitonecolor = definemultitonecolor
+colors.defineprocesscolordirect = defineprocesscolordirect -- test for mp
+
-- will move to mlib-col as colors in mp are somewhat messy due to the fact
-- that we cannot cast .. so we really need to use (s,s,s) for gray in order
-- to be able to map onto 'color'
diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv
index 6b6f3e909..47ee3650e 100644
--- a/tex/context/base/mkiv/cont-new.mkiv
+++ b/tex/context/base/mkiv/cont-new.mkiv
@@ -13,7 +13,7 @@
% \normalend % uncomment this to get the real base runtime
-\newcontextversion{2019.08.20 17:20}
+\newcontextversion{2019.08.24 22:42}
%D This file is loaded at runtime, thereby providing an excellent place for
%D hacks, patches, extensions and new features.
diff --git a/tex/context/base/mkiv/context.mkiv b/tex/context/base/mkiv/context.mkiv
index c92be96d4..a768bffde 100644
--- a/tex/context/base/mkiv/context.mkiv
+++ b/tex/context/base/mkiv/context.mkiv
@@ -45,7 +45,7 @@
%D {YYYY.MM.DD HH:MM} format.
\edef\contextformat {\jobname}
-\edef\contextversion{2019.08.20 17:20}
+\edef\contextversion{2019.08.24 22:42}
\edef\contextkind {beta}
%D Kind of special:
diff --git a/tex/context/base/mkiv/context.mkxl b/tex/context/base/mkiv/context.mkxl
index 6c210c12c..a6e36cfaf 100644
--- a/tex/context/base/mkiv/context.mkxl
+++ b/tex/context/base/mkiv/context.mkxl
@@ -29,7 +29,7 @@
%D {YYYY.MM.DD HH:MM} format.
\edef\contextformat {\jobname}
-\edef\contextversion{2019.08.20 17:20}
+\edef\contextversion{2019.08.24 22:42}
\edef\contextkind {beta}
%D Kind of special:
@@ -462,7 +462,7 @@
\loadmkxlfile{meta-ini} % LMTX
\loadmarkfile{meta-tex}
\loadmarkfile{meta-fun}
-\loadmarkfile{meta-pag}
+\loadmkxlfile{meta-pag}
\loadmarkfile{meta-grd}
\loadmarkfile{meta-fnt}
\loadmarkfile{meta-nod}
diff --git a/tex/context/base/mkiv/mlib-lmp.lua b/tex/context/base/mkiv/mlib-lmp.lua
index 292265be1..93a758681 100644
--- a/tex/context/base/mkiv/mlib-lmp.lua
+++ b/tex/context/base/mkiv/mlib-lmp.lua
@@ -6,23 +6,15 @@ if not modules then modules = { } end modules ['mlib-lmp'] = {
license = "see context related readme files",
}
-local get = mp.get
local aux = mp.aux
-local scan = mp.scan
-
local mpnumeric = aux.numeric
local mppair = aux.pair
local mpquoted = aux.quoted
-local scannumber = scan.number
-local scanpath = scan.path
-
-local registerscript = metapost.registerscript
+-- todo: use a stack?
do
- -- todo: use a stack?
-
local p = nil
local n = 0
@@ -33,6 +25,10 @@ do
if CONTEXTLMTXMODE > 0 then
+ local scan = mp.scan
+ local scannumber = scan.number
+ local scanpath = scan.path
+
local function mf_path_length()
p = scanpath()
n = p and #p or 1
@@ -68,6 +64,8 @@ do
end
end
+ local registerscript = metapost.registerscript
+
registerscript("pathreset", mf_path_reset)
registerscript("pathlengthof", mf_path_length)
registerscript("pathpointof", mf_path_point)
@@ -76,6 +74,7 @@ do
else
+ local get = mp.get
local mpgetpath = get.path
local function mf_path_length(name)
diff --git a/tex/context/base/mkiv/mlib-lua.lua b/tex/context/base/mkiv/mlib-lua.lua
index 70792e426..80d893319 100644
--- a/tex/context/base/mkiv/mlib-lua.lua
+++ b/tex/context/base/mkiv/mlib-lua.lua
@@ -61,51 +61,55 @@ do
local currentmpx = nil
local stack = { }
- local get_numeric = mplib.get_numeric
- local get_integer = mplib.get_integer
- local get_string = mplib.get_string
- local get_boolean = mplib.get_boolean
- local get_path = mplib.get_path
-
- get.numeric = function(s) return get_numeric(currentmpx,s) end
- get.number = function(s) return get_numeric(currentmpx,s) end
- get.integer = function(s) return get_integer(currentmpx,s) end
- get.string = function(s) return get_string (currentmpx,s) end
- get.boolean = function(s) return get_boolean(currentmpx,s) end
- get.path = function(s) return get_path (currentmpx,s) end
-
- local set_path = mplib.set_path
-
- set.path = function(s,t) return set_path(currentmpx,s,t) end -- not working yet
-
- local scan_next = mplib.scan_next
- local scan_expression = mplib.scan_expression
- local scan_token = mplib.scan_token
- local scan_symbol = mplib.scan_symbol
- local scan_numeric = mplib.scan_numeric
- local scan_integer = mplib.scan_integer
- local scan_boolean = mplib.scan_boolean
- local scan_string = mplib.scan_string
- local scan_pair = mplib.scan_pair
- local scan_color = mplib.scan_color
- local scan_cmykcolor = mplib.scan_cmykcolor
- local scan_transform = mplib.scan_transform
- local scan_path = mplib.scan_path
-
- scan.next = function(k) return scan_next (currentmpx,k) end
- scan.expression = function(k) return scan_expression(currentmpx,k) end
- scan.token = function(k) return scan_token (currentmpx,k) end
- scan.symbol = function(k) return scan_symbol (currentmpx,k) end
- scan.numeric = function() return scan_numeric (currentmpx) end
- scan.number = function() return scan_numeric (currentmpx) end
- scan.integer = function() return scan_integer (currentmpx) end
- scan.boolean = function() return scan_boolean (currentmpx) end
- scan.string = function() return scan_string (currentmpx) end
- scan.pair = function(t) return scan_pair (currentmpx,t) end
- scan.color = function(t) return scan_color (currentmpx,t) end
- scan.cmykcolor = function(t) return scan_cmykcolor (currentmpx,t) end
- scan.transform = function(t) return scan_transform (currentmpx,t) end
- scan.path = function(t) return scan_path (currentmpx,t) end
+ if CONTEXTLMTXMODE > 0 then
+
+ local scan_next = mplib.scan_next
+ local scan_expression = mplib.scan_expression
+ local scan_token = mplib.scan_token
+ local scan_symbol = mplib.scan_symbol
+ local scan_numeric = mplib.scan_numeric
+ local scan_integer = mplib.scan_integer
+ local scan_boolean = mplib.scan_boolean
+ local scan_string = mplib.scan_string
+ local scan_pair = mplib.scan_pair
+ local scan_color = mplib.scan_color
+ local scan_cmykcolor = mplib.scan_cmykcolor
+ local scan_transform = mplib.scan_transform
+ local scan_path = mplib.scan_path
+
+ scan.next = function(k) return scan_next (currentmpx,k) end
+ scan.expression = function(k) return scan_expression(currentmpx,k) end
+ scan.token = function(k) return scan_token (currentmpx,k) end
+ scan.symbol = function(k,e) return scan_symbol (currentmpx,k,e) end
+ scan.numeric = function() return scan_numeric (currentmpx) end
+ scan.number = function() return scan_numeric (currentmpx) end
+ scan.integer = function() return scan_integer (currentmpx) end
+ scan.boolean = function() return scan_boolean (currentmpx) end
+ scan.string = function() return scan_string (currentmpx) end
+ scan.pair = function(t) return scan_pair (currentmpx,t) end
+ scan.color = function(t) return scan_color (currentmpx,t) end
+ scan.cmykcolor = function(t) return scan_cmykcolor (currentmpx,t) end
+ scan.transform = function(t) return scan_transform (currentmpx,t) end
+ scan.path = function(t) return scan_path (currentmpx,t) end
+
+ else
+
+ local get_numeric = mplib.get_numeric
+ local get_integer = mplib.get_integer
+ local get_string = mplib.get_string
+ local get_boolean = mplib.get_boolean
+ local get_path = mplib.get_path
+ local set_path = mplib.set_path
+
+ get.numeric = function(s) return get_numeric(currentmpx,s) end
+ get.number = function(s) return get_numeric(currentmpx,s) end
+ get.integer = function(s) return get_integer(currentmpx,s) end
+ get.string = function(s) return get_string (currentmpx,s) end
+ get.boolean = function(s) return get_boolean(currentmpx,s) end
+ get.path = function(s) return get_path (currentmpx,s) end
+ set.path = function(s,t) return set_path (currentmpx,s,t) end -- not working yet
+
+ end
function metapost.pushscriptrunner(mpx)
insert(stack,mpx)
@@ -184,6 +188,7 @@ do
local f_ctrl = formatters["(%F,%F) .. controls (%F,%F) and (%F,%F)"]
local f_triplet = formatters["(%F,%F,%F)"]
local f_quadruple = formatters["(%F,%F,%F,%F)"]
+ local f_transform = formatters["totransform(%F,%F,%F,%F,%F,%F)"]
local f_points = formatters["%p"]
local f_pair_pt = formatters["(%p,%p)"]
@@ -209,7 +214,11 @@ do
elseif t == "string" then
buffer[n] = value
elseif t == "table" then
- buffer[n] = "(" .. concat(value,",") .. ")"
+ if #t == 6 then
+ buffer[n] = "totransform(" .. concat(value,",") .. ")"
+ else
+ buffer[n] = "(" .. concat(value,",") .. ")"
+ end
else -- boolean or whatever
buffer[n] = tostring(value)
end
@@ -351,6 +360,16 @@ do
end
end
+ local function mptransform(x,y,xx,xy,yx,yy)
+ n = n + 1
+ inspect(x)
+ if type(x) == "table" then
+ buffer[n] = f_transform(x[1],x[2],x[3],x[4],x[5],x[6])
+ else
+ buffer[n] = f_transform(x,y,xx,xy,yx,yy)
+ end
+ end
+
-- we have three kind of connectors:
--
-- .. ... -- (true)
@@ -482,6 +501,7 @@ do
aux.size = mpsize
aux.fprint = mpfprint
aux.quoted = mpquoted
+ aux.transform = mptransform
-- we need access to the variables
@@ -1058,6 +1078,8 @@ end
do
-- a bit overkill: just a find(str,"mf_object=") can be enough
+ --
+ -- todo : share with mlib-pps.lua metapost,isobject
local mpboolean = aux.boolean
diff --git a/tex/context/base/mkiv/mlib-scn.lua b/tex/context/base/mkiv/mlib-scn.lua
index 454f3e281..a7c1924eb 100644
--- a/tex/context/base/mkiv/mlib-scn.lua
+++ b/tex/context/base/mkiv/mlib-scn.lua
@@ -70,6 +70,7 @@ local mppair = mp.pair
local mppath = mp.path
local mptriplet = mp.triplet
local mpquadruple = mp.quadruple
+local mptransform = mp.transform
local mpvalue = mp.value
local report = logs.reporter("metapost")
@@ -89,6 +90,7 @@ local string_code <const> = codes.string
local capsule_code <const> = codes.capsule
local nullary_code <const> = codes.nullary
local tag_code <const> = codes.tag
+local definedmacro_code <const> = codes.definedmacro
local typescanners = nil
local tokenscanners = nil
@@ -140,11 +142,16 @@ scanset = function() -- can be optimized, we now read twice
end
end
+local function scan_pair () return scanpair (true) end
+local function scan_color () return scancolor (true) end
+local function scan_cmykcolor() return scancmykcolor(true) end
+local function scan_transform() return scantransform(true) end
+
tokenscanners = {
[leftbrace_code] = scanset,
[numeric_code] = scannumeric,
[string_code] = scanstring,
- [nullary_code] = scanboolean, -- todo
+ [nullary_code] = scanboolean, -- todo
}
typescanners = {
@@ -152,11 +159,11 @@ typescanners = {
[types.numeric] = scannumeric,
[types.string] = scanstring,
[types.boolean] = scanboolean,
- [types.pair] = function() return scanpair (true) end,
- [types.color] = function() return scancolor (true) end,
- [types.cmykcolor] = function() return scancmykcolor(true) end,
- [types.transform] = function() return scantransform(true) end,
- [types.path] = function() return scanpath () end,
+ [types.pair] = scan_pair,
+ [types.color] = scan_color,
+ [types.cmykcolor] = scan_cmykcolor,
+ [types.transform] = scan_transform,
+ [types.path] = scanpath,
}
table.setmetatableindex(tokenscanners,function()
@@ -164,6 +171,8 @@ table.setmetatableindex(tokenscanners,function()
return typescanners[e] or scanexpression
end)
+-- a key like 'color' has code 'declare'
+
local function scanparameters(fenced)
local data = { }
local close = "]"
@@ -175,7 +184,8 @@ local function scanparameters(fenced)
return data
end
while true do
- local s = scansymbol()
+ -- local s = scansymbol()
+ local s = scansymbol(false,false)
if s == close then
break;
elseif s == "," then
@@ -186,7 +196,15 @@ local function scanparameters(fenced)
-- optional equal or :
scantoken()
end
- data[s] = tokenscanners[scantoken(true)]()
+ local kind = scantoken(true)
+ if kind == leftdelimiter_code or kind == tag_code or kind == capsule_code then
+ kind = scanexpression(true)
+ data[s] = (typescanners[kind] or scanexpression)()
+ elseif kind == leftbracket_code then
+ data[s] = get_parameters(true)
+ else
+ data[s] = tokenscanners[kind]()
+ end
end
end
return data
@@ -204,9 +222,7 @@ local function get_parameters(nested)
return data
end
while true do
- -- a key like 'color' has code 'declare'
- -- print(scansymbol(true),scantoken(true),codes[scantoken(true)])
- local s = scansymbol()
+ local s = scansymbol(false,false)
if s == "]" then
break;
elseif s == "," then
@@ -218,7 +234,7 @@ local function get_parameters(nested)
scantoken()
end
local kind = scantoken(true)
- if kind == leftdelimiter_code or kind == tag_code then
+ if kind == leftdelimiter_code or kind == tag_code or kind == capsule_code then
kind = scanexpression(true)
data[s] = (typescanners[kind] or scanexpression)()
elseif kind == leftbracket_code then
@@ -232,7 +248,7 @@ local function get_parameters(nested)
end
local function getparameters()
- local namespace = scanstring()
+ local namespace = scanstring()
-- same as below
local parameters = get_parameters()
local presets = presets[namespace]
@@ -273,7 +289,16 @@ end
local function presetparameters()
local namespace = scanstring()
- presets[namespace] = get_parameters()
+ local parent = nil
+ local t = scantoken(true)
+ if t == string_code then
+ parent = presets[scanstring()]
+ end
+ local p = get_parameters()
+ if parent then
+ setmetatableindex(p,parent)
+ end
+ presets[namespace] = p
end
local function collectnames()
@@ -282,13 +307,13 @@ local function collectnames()
while true do
local t = scantoken(true)
-- (1) not really needed
- if t == numeric_code or t == capsule_code then
+ if t == numeric_code then
n = n + 1 l[n] = scaninteger(1)
elseif t == string_code then
n = n + 1 l[n] = scanstring(1)
elseif t == nullary_code then
n = n + 1 l[n] = scanboolean(1)
- elseif t == leftdelimiter_code or t == tag_code then
+ elseif t == leftdelimiter_code or t == tag_code or t == capsule_code then
t = scanexpression(true)
n = n + 1 l[n] = (typescanners[t] or scanexpression)()
else
@@ -316,6 +341,8 @@ local function get(v)
return mptriplet(v)
elseif n == 4 then
return mpquadruple(v)
+ elseif n == 6 then
+ return mptransform(v)
end
end
return mpnumeric(0)
@@ -477,6 +504,37 @@ local function getparametercount()
return mpnumeric(type(v) == "table" and #v or 0)
end
+local function getmaxparametercount()
+ local list, n = collectnames()
+ local v = namespaces
+ for i=1,n do
+ v = v[list[i]]
+ if not v then
+ break
+ end
+ end
+ local n = 0
+ if type(v) == "table" then
+ local v1 = v[1]
+ if type(v1) == "table" then
+ n = #v1
+ for i=2,#v do
+ local vi = v[i]
+ if type(vi) == "table" then
+ local vn = #vi
+ if vn > n then
+ n = vn
+ end
+ else
+ break;
+ end
+ end
+ end
+
+ end
+ return mpnumeric(n)
+end
+
local validconnectors = {
[".."] = true,
["..."] = true,
@@ -565,6 +623,7 @@ metapost.registerscript("hasparameter", hasparameter)
metapost.registerscript("getparameter", getparameter)
metapost.registerscript("getparameterdefault", getparameterdefault)
metapost.registerscript("getparametercount", getparametercount)
+metapost.registerscript("getmaxparametercount",getmaxparametercount)
metapost.registerscript("getparameterpath", getparameterpath)
metapost.registerscript("getparametertext", getparametertext)
metapost.registerscript("getparameteroption", getparameteroption)
@@ -585,6 +644,18 @@ function metapost.getparameter(list)
return v
end
+function metapost.getparameterset(namespace)
+ return namespaces[namespace]
+end
+
+-- goodies
+
+metapost.registerscript("definecolor", function()
+ scantoken() -- we scan the semicolon
+ local s = get_parameters()
+ attributes.colors.defineprocesscolordirect(s)
+end)
+
-- tex scanners
local scanners = tokens.scanners
diff --git a/tex/context/base/mkiv/mult-mps.lua b/tex/context/base/mkiv/mult-mps.lua
index 335a4c612..701b7b6da 100644
--- a/tex/context/base/mkiv/mult-mps.lua
+++ b/tex/context/base/mkiv/mult-mps.lua
@@ -117,7 +117,7 @@ return {
--
"mm", "pt", "dd", "bp", "cm", "pc", "cc", "in",
--
- "triplet", "quadruplet",
+ "triplet", "quadruplet", "totransform",
},
internals = { -- we need to remove duplicates above
--
diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf
index bb3bed49a..13031a23c 100644
--- a/tex/context/base/mkiv/status-files.pdf
+++ b/tex/context/base/mkiv/status-files.pdf
Binary files differ
diff --git a/tex/context/base/mkiv/status-lua.pdf b/tex/context/base/mkiv/status-lua.pdf
index 1a4c6ffb3..640a7f161 100644
--- a/tex/context/base/mkiv/status-lua.pdf
+++ b/tex/context/base/mkiv/status-lua.pdf
Binary files differ
diff --git a/tex/context/base/mkiv/supp-box.lua b/tex/context/base/mkiv/supp-box.lua
index 0469369a9..a8599cffe 100644
--- a/tex/context/base/mkiv/supp-box.lua
+++ b/tex/context/base/mkiv/supp-box.lua
@@ -489,15 +489,23 @@ do
trackers.register("nodes.boxes",function(v) trace = v end)
- function boxes.save(category,name,box)
+ function boxes.save(category,name,b)
name = tonumber(name) or name
- local b = takebox(box)
+ local b = takebox(b)
if trace then
report("category %a, name %a, %s (%s)",category,name,"save",b and "content" or "empty")
end
cache[category][name] = b or false
end
+ function boxes.savenode(category,name,n)
+ name = tonumber(name) or name
+ if trace then
+ report("category %a, name %a, %s (%s)",category,name,"save",n and "content" or "empty")
+ end
+ cache[category][name] = tonut(n) or false
+ end
+
function boxes.found(category,name)
name = tonumber(name) or name
return cache[category][name] and true or false
diff --git a/tex/context/base/mkiv/syst-con.lua b/tex/context/base/mkiv/syst-con.lua
index 0fa685b2d..1af2d9a5d 100644
--- a/tex/context/base/mkiv/syst-con.lua
+++ b/tex/context/base/mkiv/syst-con.lua
@@ -66,3 +66,11 @@ implement { name = "tand", actions = { math.tand, nicenumber, context }, argumen
-- only as commands
function commands.format(fmt,...) context((gsub(fmt,"@","%%")),...) end
+
+implement {
+ name = "formatone",
+ public = true,
+ protected = true,
+ arguments = "2 strings",
+ actions = function(f,s) context((gsub(f,"@","%%")),s) end,
+}
diff --git a/tex/context/interface/mkii/keys-en.xml b/tex/context/interface/mkii/keys-en.xml
index 3b554fabd..3b2b69e0b 100644
--- a/tex/context/interface/mkii/keys-en.xml
+++ b/tex/context/interface/mkii/keys-en.xml
@@ -643,6 +643,7 @@
<cd:constant name='aligntitle' value='aligntitle'/>
<cd:constant name='alternative' value='alternative'/>
<cd:constant name='anchor' value='anchor'/>
+ <cd:constant name='anchoring' value='anchoring'/>
<cd:constant name='andtext' value='andtext'/>
<cd:constant name='apa' value='apa'/>
<cd:constant name='arguments' value='arguments'/>
@@ -872,6 +873,7 @@
<cd:constant name='hfil' value='hfil'/>
<cd:constant name='hidenumber' value='hidenumber'/>
<cd:constant name='hoffset' value='hoffset'/>
+ <cd:constant name='horizontal' value='horizontal'/>
<cd:constant name='horoffset' value='horoffset'/>
<cd:constant name='hyphen' value='hyphen'/>
<cd:constant name='hyphens' value='hyphens'/>
@@ -972,9 +974,12 @@
<cd:constant name='menu' value='menu'/>
<cd:constant name='method' value='method'/>
<cd:constant name='middle' value='middle'/>
+ <cd:constant name='middlecolor' value='middlecolor'/>
<cd:constant name='middlecommand' value='middlecommand'/>
<cd:constant name='middlespeech' value='middlespeech'/>
+ <cd:constant name='middlestyle' value='middlestyle'/>
<cd:constant name='middletext' value='middletext'/>
+ <cd:constant name='middlewidth' value='middlewidth'/>
<cd:constant name='midsentence' value='midsentence'/>
<cd:constant name='min' value='min'/>
<cd:constant name='mindepth' value='mindepth'/>
@@ -1292,6 +1297,7 @@
<cd:constant name='vcompact' value='vcompact'/>
<cd:constant name='vector' value='vector'/>
<cd:constant name='veroffset' value='veroffset'/>
+ <cd:constant name='vertical' value='vertical'/>
<cd:constant name='vfactor' value='vfactor'/>
<cd:constant name='vfil' value='vfil'/>
<cd:constant name='viewerprefix' value='viewerprefix'/>
@@ -1302,6 +1308,7 @@
<cd:constant name='white' value='white'/>
<cd:constant name='width' value='width'/>
<cd:constant name='words' value='words'/>
+ <cd:constant name='xanchor' value='xanchor'/>
<cd:constant name='xfactor' value='xfactor'/>
<cd:constant name='xhtml' value='xhtml'/>
<cd:constant name='xmax' value='xmax'/>
@@ -1309,6 +1316,7 @@
<cd:constant name='xoffset' value='xoffset'/>
<cd:constant name='xscale' value='xscale'/>
<cd:constant name='xstep' value='xstep'/>
+ <cd:constant name='yanchor' value='yanchor'/>
<cd:constant name='yfactor' value='yfactor'/>
<cd:constant name='ymax' value='ymax'/>
<cd:constant name='yoffset' value='yoffset'/>
diff --git a/tex/context/interface/mkiv/i-context.pdf b/tex/context/interface/mkiv/i-context.pdf
index 1db2bc0f7..b4bc1a04e 100644
--- a/tex/context/interface/mkiv/i-context.pdf
+++ b/tex/context/interface/mkiv/i-context.pdf
Binary files differ
diff --git a/tex/context/interface/mkiv/i-readme.pdf b/tex/context/interface/mkiv/i-readme.pdf
index 32cb31641..4bd125888 100644
--- a/tex/context/interface/mkiv/i-readme.pdf
+++ b/tex/context/interface/mkiv/i-readme.pdf
Binary files differ
diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua
index f858dfc1a..26baa531e 100644
--- a/tex/generic/context/luatex/luatex-fonts-merged.lua
+++ b/tex/generic/context/luatex/luatex-fonts-merged.lua
@@ -1,6 +1,6 @@
-- merged file : c:/data/develop/context/sources/luatex-fonts-merged.lua
-- parent file : c:/data/develop/context/sources/luatex-fonts.lua
--- merge date : 08/20/19 17:20:16
+-- merge date : 08/24/19 22:42:50
do -- begin closure to overcome local limits and interference