From ba4875d8c328257fa3cb4d140d07ced41b8a576c Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Fri, 9 Jul 2021 19:19:20 +0200 Subject: 2021-07-09 18:16:00 --- .../lexers/data/scite-context-data-metapost.lua | 2 +- .../context/scite-context-data-metapost.properties | 108 ++--- .../context/data/scite-context-data-metapost.lua | 2 +- .../context/syntaxes/context-syntax-mps.json | 2 +- metapost/context/base/mpiv/mp-base.mpiv | 2 - metapost/context/base/mpxl/mp-base.mpxl | 3 +- scripts/context/lua/mtx-context.lua | 22 +- tex/context/base/mkii/cont-new.mkii | 2 +- tex/context/base/mkii/context.mkii | 2 +- tex/context/base/mkiv/cont-new.mkiv | 2 +- tex/context/base/mkiv/context.mkiv | 2 +- tex/context/base/mkiv/mult-mps.lua | 4 +- tex/context/base/mkiv/status-files.pdf | Bin 23611 -> 23613 bytes tex/context/base/mkiv/status-lua.pdf | Bin 248505 -> 248476 bytes tex/context/base/mkxl/cont-new.mkxl | 2 +- tex/context/base/mkxl/context.mkxl | 2 +- tex/context/base/mkxl/core-ini.mkxl | 3 +- tex/context/base/mkxl/core-sys.lmt | 27 +- tex/context/base/mkxl/file-job.lmt | 1 + tex/context/base/mkxl/luat-fio.lmt | 4 +- tex/context/base/mkxl/meta-ini.mkxl | 1 + tex/context/base/mkxl/mlib-ctx.lmt | 2 + tex/context/base/mkxl/mlib-pdf.lmt | 464 +++++++++++---------- tex/context/base/mkxl/mlib-pps.lmt | 8 + tex/context/base/mkxl/node-par.lmt | 10 +- tex/context/base/mkxl/trac-deb.lmt | 4 +- tex/context/base/mkxl/typo-drp.lmt | 9 + tex/context/base/mkxl/typo-drp.mkxl | 63 ++- tex/generic/context/luatex/luatex-basics-nod.lua | 2 +- tex/generic/context/luatex/luatex-fonts-merged.lua | 4 +- 30 files changed, 440 insertions(+), 319 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 fb4de1e06..a751375e2 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 @@ -3,7 +3,7 @@ return { ["disabled"]={ "verbatimtex", "troffmode" }, ["internals"]={ "mitered", "rounded", "beveled", "butt", "squared", "eps", "epsilon", "infinity", "bboxmargin", "ahlength", "ahangle", "labeloffset", "dotlabeldiam", "defaultpen", "defaultscale", "join_radius", "charscale", "inicatcoderegime", "texcatcoderegime", "luacatcoderegime", "notcatcoderegime", "vrbcatcoderegime", "prtcatcoderegime", "ctxcatcoderegime", "txtcatcoderegime", "catcoderegime", "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" }, - ["primitives"]={ "charcode", "day", "linecap", "linejoin", "miterlimit", "month", "pausing", "prologues", "showstopping", "time", "tracingcapsules", "tracingchoices", "mpprocset", "tracingcommands", "tracingequations", "tracinglostchars", "tracingmacros", "tracingonline", "tracingoutput", "tracingrestores", "tracingspecs", "tracingstats", "tracingtitles", "truecorners", "warningcheck", "year", "false", "nullpicture", "pencircle", "penspec", "true", "and", "angle", "arclength", "arctime", "ASCII", "boolean", "bot", "char", "color", "cosd", "cycle", "decimal", "directiontime", "floor", "fontsize", "hex", "infont", "intersectiontimes", "known", "void", "length", "llcorner", "lrcorner", "makepath", "makepen", "mexp", "mlog", "normaldeviate", "not", "numeric", "oct", "odd", "or", "path", "pair", "pen", "penoffset", "picture", "point", "postcontrol", "precontrol", "reverse", "rotated", "scaled", "shifted", "sind", "slanted", "sqrt", "str", "string", "subpath", "substring", "transform", "transformed", "ulcorner", "uniformdeviate", "unknown", "urcorner", "xpart", "xscaled", "xxpart", "xypart", "ypart", "yscaled", "yxpart", "yypart", "zscaled", "addto", "clip", "input", "interim", "let", "newinternal", "save", "setbounds", "setgroup", "shipout", "show", "showdependencies", "showtoken", "showvariable", "special", "begingroup", "endgroup", "of", "curl", "tension", "and", "controls", "def", "vardef", "enddef", "expr", "suffix", "text", "primary", "secondary", "tertiary", "primarydef", "secondarydef", "tertiarydef", "randomseed", "also", "contour", "doublepath", "withcolor", "withcmykcolor", "withpen", "dashed", "envelope", "if", "else", "elseif", "fi", "for", "endfor", "forever", "exitif", "within", "forsuffixes", "step", "until", "charlist", "extensible", "fontdimen", "headerbyte", "kern", "ligtable", "boundarychar", "chardp", "charext", "charht", "charic", "charwd", "designsize", "fontmaking", "charexists", "cullit", "currenttransform", "gfcorners", "grayfont", "hround", "imagerules", "lowres_fix", "nodisplays", "notransforms", "openit", "displaying", "currentwindow", "screen_rows", "screen_cols", "pixels_per_inch", "cull", "display", "openwindow", "numspecial", "totalweight", "autorounding", "fillin", "proofing", "tracingpens", "xoffset", "chardx", "granularity", "smoothing", "turningcheck", "yoffset", "chardy", "hppp", "tracingedges", "vppp", "extra_beginfig", "extra_endfig", "mpxbreak", "endinput", "message", "delimiters", "turningnumber", "errmessage", "scantokens", "end", "outer", "inner", "write", "to", "readfrom", "closefrom", "withprescript", "withpostscript", "top", "bot", "lft", "rt", "ulft", "urt", "llft", "lrt", "redpart", "greenpart", "bluepart", "cyanpart", "magentapart", "yellowpart", "blackpart", "prescriptpart", "postscriptpart", "rgbcolor", "cmykcolor", "colormodel", "graypart", "greypart", "greycolor", "graycolor", "dashpart", "penpart", "stroked", "filled", "textual", "clipped", "bounded", "pathpart", "expandafter", "minute", "hour", "outputformat", "outputtemplate", "filenametemplate", "fontmapfile", "fontmapline", "fontpart", "fontsize", "glyph", "restoreclipcolor", "troffmode", "runscript", "maketext", "numbersystem", "overloadmode", "setproperty" }, + ["primitives"]={ "charcode", "day", "linecap", "linejoin", "miterlimit", "stacking", "month", "pausing", "prologues", "showstopping", "time", "tracingcapsules", "tracingchoices", "mpprocset", "tracingcommands", "tracingequations", "tracinglostchars", "tracingmacros", "tracingonline", "tracingoutput", "tracingrestores", "tracingspecs", "tracingstats", "tracingtitles", "truecorners", "warningcheck", "year", "false", "nullpicture", "pencircle", "penspec", "true", "and", "angle", "arclength", "arctime", "ASCII", "boolean", "bot", "char", "color", "cosd", "cycle", "decimal", "directiontime", "floor", "fontsize", "hex", "infont", "intersectiontimes", "known", "void", "length", "llcorner", "lrcorner", "makepath", "makepen", "mexp", "mlog", "normaldeviate", "not", "numeric", "oct", "odd", "or", "path", "pair", "pen", "penoffset", "picture", "point", "postcontrol", "precontrol", "reverse", "rotated", "scaled", "shifted", "sind", "slanted", "sqrt", "str", "string", "subpath", "substring", "transform", "transformed", "ulcorner", "uniformdeviate", "unknown", "urcorner", "xpart", "xscaled", "xxpart", "xypart", "ypart", "yscaled", "yxpart", "yypart", "zscaled", "addto", "clip", "input", "interim", "let", "newinternal", "save", "setbounds", "setgroup", "shipout", "show", "showdependencies", "showtoken", "showvariable", "special", "begingroup", "endgroup", "of", "curl", "tension", "and", "controls", "def", "vardef", "enddef", "expr", "suffix", "text", "primary", "secondary", "tertiary", "primarydef", "secondarydef", "tertiarydef", "randomseed", "also", "contour", "doublepath", "withcolor", "withcmykcolor", "withpen", "withstacking", "dashed", "envelope", "if", "else", "elseif", "fi", "for", "endfor", "forever", "exitif", "within", "forsuffixes", "step", "until", "charlist", "extensible", "fontdimen", "headerbyte", "kern", "ligtable", "boundarychar", "chardp", "charext", "charht", "charic", "charwd", "designsize", "fontmaking", "charexists", "cullit", "currenttransform", "gfcorners", "grayfont", "hround", "imagerules", "lowres_fix", "nodisplays", "notransforms", "openit", "displaying", "currentwindow", "screen_rows", "screen_cols", "pixels_per_inch", "cull", "display", "openwindow", "numspecial", "totalweight", "autorounding", "fillin", "proofing", "tracingpens", "xoffset", "chardx", "granularity", "smoothing", "turningcheck", "yoffset", "chardy", "hppp", "tracingedges", "vppp", "extra_beginfig", "extra_endfig", "mpxbreak", "endinput", "message", "delimiters", "turningnumber", "errmessage", "scantokens", "end", "outer", "inner", "write", "to", "readfrom", "closefrom", "withprescript", "withpostscript", "top", "bot", "lft", "rt", "ulft", "urt", "llft", "lrt", "redpart", "greenpart", "bluepart", "cyanpart", "magentapart", "yellowpart", "blackpart", "prescriptpart", "postscriptpart", "rgbcolor", "cmykcolor", "colormodel", "graypart", "greypart", "greycolor", "graycolor", "dashpart", "penpart", "stroked", "filled", "textual", "clipped", "bounded", "pathpart", "expandafter", "minute", "hour", "outputformat", "outputtemplate", "filenametemplate", "fontmapfile", "fontmapline", "fontpart", "fontsize", "glyph", "restoreclipcolor", "troffmode", "runscript", "maketext", "numbersystem", "overloadmode", "setproperty" }, ["shortcuts"]={ "..", "...", "--", "---", "&", "\\" }, ["tex"]={ "btex", "etex", "verbatimtex" }, } \ No newline at end of file diff --git a/context/data/scite/context/scite-context-data-metapost.properties b/context/data/scite/context/scite-context-data-metapost.properties index bb704c6bd..8580072df 100644 --- a/context/data/scite/context/scite-context-data-metapost.properties +++ b/context/data/scite/context/scite-context-data-metapost.properties @@ -69,60 +69,60 @@ unitpixel vppp vround xoffset yoffset keywordclass.metapost.primitives=\ charcode day linecap linejoin \ -miterlimit month pausing prologues showstopping \ -time tracingcapsules tracingchoices mpprocset tracingcommands \ -tracingequations tracinglostchars tracingmacros tracingonline tracingoutput \ -tracingrestores tracingspecs tracingstats tracingtitles truecorners \ -warningcheck year false nullpicture pencircle \ -penspec true and angle arclength \ -arctime ASCII boolean bot char \ -color cosd cycle decimal directiontime \ -floor fontsize hex infont intersectiontimes \ -known void length llcorner lrcorner \ -makepath makepen mexp mlog normaldeviate \ -not numeric oct odd or \ -path pair pen penoffset picture \ -point postcontrol precontrol reverse rotated \ -scaled shifted sind slanted sqrt \ -str string subpath substring transform \ -transformed ulcorner uniformdeviate unknown urcorner \ -xpart xscaled xxpart xypart ypart \ -yscaled yxpart yypart zscaled addto \ -clip input interim let newinternal \ -save setbounds setgroup shipout show \ -showdependencies showtoken showvariable special begingroup \ -endgroup of curl tension and \ -controls def vardef enddef expr \ -suffix text primary secondary tertiary \ -primarydef secondarydef tertiarydef randomseed also \ -contour doublepath withcolor withcmykcolor withpen \ -dashed envelope if else elseif \ -fi for endfor forever exitif \ -within forsuffixes step until charlist \ -extensible fontdimen headerbyte kern ligtable \ -boundarychar chardp charext charht charic \ -charwd designsize fontmaking charexists cullit \ -currenttransform gfcorners grayfont hround imagerules \ -lowres_fix nodisplays notransforms openit displaying \ -currentwindow screen_rows screen_cols pixels_per_inch cull \ -display openwindow numspecial totalweight autorounding \ -fillin proofing tracingpens xoffset chardx \ -granularity smoothing turningcheck yoffset chardy \ -hppp tracingedges vppp extra_beginfig extra_endfig \ -mpxbreak endinput message delimiters turningnumber \ -errmessage scantokens end outer inner \ -write to readfrom closefrom withprescript \ -withpostscript top bot lft rt \ -ulft urt llft lrt redpart \ -greenpart bluepart cyanpart magentapart yellowpart \ -blackpart prescriptpart postscriptpart rgbcolor cmykcolor \ -colormodel graypart greypart greycolor graycolor \ -dashpart penpart stroked filled textual \ -clipped bounded pathpart expandafter minute \ -hour outputformat outputtemplate filenametemplate fontmapfile \ -fontmapline fontpart fontsize glyph restoreclipcolor \ -troffmode runscript maketext numbersystem overloadmode \ -setproperty +miterlimit stacking month pausing prologues \ +showstopping time tracingcapsules tracingchoices mpprocset \ +tracingcommands tracingequations tracinglostchars tracingmacros tracingonline \ +tracingoutput tracingrestores tracingspecs tracingstats tracingtitles \ +truecorners warningcheck year false nullpicture \ +pencircle penspec true and angle \ +arclength arctime ASCII boolean bot \ +char color cosd cycle decimal \ +directiontime floor fontsize hex infont \ +intersectiontimes known void length llcorner \ +lrcorner makepath makepen mexp mlog \ +normaldeviate not numeric oct odd \ +or path pair pen penoffset \ +picture point postcontrol precontrol reverse \ +rotated scaled shifted sind slanted \ +sqrt str string subpath substring \ +transform transformed ulcorner uniformdeviate unknown \ +urcorner xpart xscaled xxpart xypart \ +ypart yscaled yxpart yypart zscaled \ +addto clip input interim let \ +newinternal save setbounds setgroup shipout \ +show showdependencies showtoken showvariable special \ +begingroup endgroup of curl tension \ +and controls def vardef enddef \ +expr suffix text primary secondary \ +tertiary primarydef secondarydef tertiarydef randomseed \ +also contour doublepath withcolor withcmykcolor \ +withpen withstacking dashed envelope if \ +else elseif fi for endfor \ +forever exitif within forsuffixes step \ +until charlist extensible fontdimen headerbyte \ +kern ligtable boundarychar chardp charext \ +charht charic charwd designsize fontmaking \ +charexists cullit currenttransform gfcorners grayfont \ +hround imagerules lowres_fix nodisplays notransforms \ +openit displaying currentwindow screen_rows screen_cols \ +pixels_per_inch cull display openwindow numspecial \ +totalweight autorounding fillin proofing tracingpens \ +xoffset chardx granularity smoothing turningcheck \ +yoffset chardy hppp tracingedges vppp \ +extra_beginfig extra_endfig mpxbreak endinput message \ +delimiters turningnumber errmessage scantokens end \ +outer inner write to readfrom \ +closefrom withprescript withpostscript top bot \ +lft rt ulft urt llft \ +lrt redpart greenpart bluepart cyanpart \ +magentapart yellowpart blackpart prescriptpart postscriptpart \ +rgbcolor cmykcolor colormodel graypart greypart \ +greycolor graycolor dashpart penpart stroked \ +filled textual clipped bounded pathpart \ +expandafter minute hour outputformat outputtemplate \ +filenametemplate fontmapfile fontmapline fontpart fontsize \ +glyph restoreclipcolor troffmode runscript maketext \ +numbersystem overloadmode setproperty keywordclass.metapost.shortcuts=\ .. ... -- --- \ 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 fb4de1e06..a751375e2 100644 --- a/context/data/textadept/context/data/scite-context-data-metapost.lua +++ b/context/data/textadept/context/data/scite-context-data-metapost.lua @@ -3,7 +3,7 @@ return { ["disabled"]={ "verbatimtex", "troffmode" }, ["internals"]={ "mitered", "rounded", "beveled", "butt", "squared", "eps", "epsilon", "infinity", "bboxmargin", "ahlength", "ahangle", "labeloffset", "dotlabeldiam", "defaultpen", "defaultscale", "join_radius", "charscale", "inicatcoderegime", "texcatcoderegime", "luacatcoderegime", "notcatcoderegime", "vrbcatcoderegime", "prtcatcoderegime", "ctxcatcoderegime", "txtcatcoderegime", "catcoderegime", "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" }, - ["primitives"]={ "charcode", "day", "linecap", "linejoin", "miterlimit", "month", "pausing", "prologues", "showstopping", "time", "tracingcapsules", "tracingchoices", "mpprocset", "tracingcommands", "tracingequations", "tracinglostchars", "tracingmacros", "tracingonline", "tracingoutput", "tracingrestores", "tracingspecs", "tracingstats", "tracingtitles", "truecorners", "warningcheck", "year", "false", "nullpicture", "pencircle", "penspec", "true", "and", "angle", "arclength", "arctime", "ASCII", "boolean", "bot", "char", "color", "cosd", "cycle", "decimal", "directiontime", "floor", "fontsize", "hex", "infont", "intersectiontimes", "known", "void", "length", "llcorner", "lrcorner", "makepath", "makepen", "mexp", "mlog", "normaldeviate", "not", "numeric", "oct", "odd", "or", "path", "pair", "pen", "penoffset", "picture", "point", "postcontrol", "precontrol", "reverse", "rotated", "scaled", "shifted", "sind", "slanted", "sqrt", "str", "string", "subpath", "substring", "transform", "transformed", "ulcorner", "uniformdeviate", "unknown", "urcorner", "xpart", "xscaled", "xxpart", "xypart", "ypart", "yscaled", "yxpart", "yypart", "zscaled", "addto", "clip", "input", "interim", "let", "newinternal", "save", "setbounds", "setgroup", "shipout", "show", "showdependencies", "showtoken", "showvariable", "special", "begingroup", "endgroup", "of", "curl", "tension", "and", "controls", "def", "vardef", "enddef", "expr", "suffix", "text", "primary", "secondary", "tertiary", "primarydef", "secondarydef", "tertiarydef", "randomseed", "also", "contour", "doublepath", "withcolor", "withcmykcolor", "withpen", "dashed", "envelope", "if", "else", "elseif", "fi", "for", "endfor", "forever", "exitif", "within", "forsuffixes", "step", "until", "charlist", "extensible", "fontdimen", "headerbyte", "kern", "ligtable", "boundarychar", "chardp", "charext", "charht", "charic", "charwd", "designsize", "fontmaking", "charexists", "cullit", "currenttransform", "gfcorners", "grayfont", "hround", "imagerules", "lowres_fix", "nodisplays", "notransforms", "openit", "displaying", "currentwindow", "screen_rows", "screen_cols", "pixels_per_inch", "cull", "display", "openwindow", "numspecial", "totalweight", "autorounding", "fillin", "proofing", "tracingpens", "xoffset", "chardx", "granularity", "smoothing", "turningcheck", "yoffset", "chardy", "hppp", "tracingedges", "vppp", "extra_beginfig", "extra_endfig", "mpxbreak", "endinput", "message", "delimiters", "turningnumber", "errmessage", "scantokens", "end", "outer", "inner", "write", "to", "readfrom", "closefrom", "withprescript", "withpostscript", "top", "bot", "lft", "rt", "ulft", "urt", "llft", "lrt", "redpart", "greenpart", "bluepart", "cyanpart", "magentapart", "yellowpart", "blackpart", "prescriptpart", "postscriptpart", "rgbcolor", "cmykcolor", "colormodel", "graypart", "greypart", "greycolor", "graycolor", "dashpart", "penpart", "stroked", "filled", "textual", "clipped", "bounded", "pathpart", "expandafter", "minute", "hour", "outputformat", "outputtemplate", "filenametemplate", "fontmapfile", "fontmapline", "fontpart", "fontsize", "glyph", "restoreclipcolor", "troffmode", "runscript", "maketext", "numbersystem", "overloadmode", "setproperty" }, + ["primitives"]={ "charcode", "day", "linecap", "linejoin", "miterlimit", "stacking", "month", "pausing", "prologues", "showstopping", "time", "tracingcapsules", "tracingchoices", "mpprocset", "tracingcommands", "tracingequations", "tracinglostchars", "tracingmacros", "tracingonline", "tracingoutput", "tracingrestores", "tracingspecs", "tracingstats", "tracingtitles", "truecorners", "warningcheck", "year", "false", "nullpicture", "pencircle", "penspec", "true", "and", "angle", "arclength", "arctime", "ASCII", "boolean", "bot", "char", "color", "cosd", "cycle", "decimal", "directiontime", "floor", "fontsize", "hex", "infont", "intersectiontimes", "known", "void", "length", "llcorner", "lrcorner", "makepath", "makepen", "mexp", "mlog", "normaldeviate", "not", "numeric", "oct", "odd", "or", "path", "pair", "pen", "penoffset", "picture", "point", "postcontrol", "precontrol", "reverse", "rotated", "scaled", "shifted", "sind", "slanted", "sqrt", "str", "string", "subpath", "substring", "transform", "transformed", "ulcorner", "uniformdeviate", "unknown", "urcorner", "xpart", "xscaled", "xxpart", "xypart", "ypart", "yscaled", "yxpart", "yypart", "zscaled", "addto", "clip", "input", "interim", "let", "newinternal", "save", "setbounds", "setgroup", "shipout", "show", "showdependencies", "showtoken", "showvariable", "special", "begingroup", "endgroup", "of", "curl", "tension", "and", "controls", "def", "vardef", "enddef", "expr", "suffix", "text", "primary", "secondary", "tertiary", "primarydef", "secondarydef", "tertiarydef", "randomseed", "also", "contour", "doublepath", "withcolor", "withcmykcolor", "withpen", "withstacking", "dashed", "envelope", "if", "else", "elseif", "fi", "for", "endfor", "forever", "exitif", "within", "forsuffixes", "step", "until", "charlist", "extensible", "fontdimen", "headerbyte", "kern", "ligtable", "boundarychar", "chardp", "charext", "charht", "charic", "charwd", "designsize", "fontmaking", "charexists", "cullit", "currenttransform", "gfcorners", "grayfont", "hround", "imagerules", "lowres_fix", "nodisplays", "notransforms", "openit", "displaying", "currentwindow", "screen_rows", "screen_cols", "pixels_per_inch", "cull", "display", "openwindow", "numspecial", "totalweight", "autorounding", "fillin", "proofing", "tracingpens", "xoffset", "chardx", "granularity", "smoothing", "turningcheck", "yoffset", "chardy", "hppp", "tracingedges", "vppp", "extra_beginfig", "extra_endfig", "mpxbreak", "endinput", "message", "delimiters", "turningnumber", "errmessage", "scantokens", "end", "outer", "inner", "write", "to", "readfrom", "closefrom", "withprescript", "withpostscript", "top", "bot", "lft", "rt", "ulft", "urt", "llft", "lrt", "redpart", "greenpart", "bluepart", "cyanpart", "magentapart", "yellowpart", "blackpart", "prescriptpart", "postscriptpart", "rgbcolor", "cmykcolor", "colormodel", "graypart", "greypart", "greycolor", "graycolor", "dashpart", "penpart", "stroked", "filled", "textual", "clipped", "bounded", "pathpart", "expandafter", "minute", "hour", "outputformat", "outputtemplate", "filenametemplate", "fontmapfile", "fontmapline", "fontpart", "fontsize", "glyph", "restoreclipcolor", "troffmode", "runscript", "maketext", "numbersystem", "overloadmode", "setproperty" }, ["shortcuts"]={ "..", "...", "--", "---", "&", "\\" }, ["tex"]={ "btex", "etex", "verbatimtex" }, } \ No newline at end of file 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 6d3e20180..035bffbc3 100644 --- a/context/data/vscode/extensions/context/syntaxes/context-syntax-mps.json +++ b/context/data/vscode/extensions/context/syntaxes/context-syntax-mps.json @@ -119,7 +119,7 @@ "name" : "context.plain.plain.mps" }, "primitive" : { - "match" : "(zscaled|yypart|yxpart|yscaled|ypart|yoffset|yellowpart|year|xypart|xxpart|xscaled|xpart|xoffset|write|withprescript|withpostscript|withpen|within|withcolor|withcmykcolor|warningcheck|vppp|void|vardef|urt|urcorner|until|unknown|uniformdeviate|ulft|ulcorner|turningnumber|turningcheck|truecorners|true|troffmode|transformed|transform|tracingtitles|tracingstats|tracingspecs|tracingrestores|tracingpens|tracingoutput|tracingonline|tracingmacros|tracinglostchars|tracingequations|tracingedges|tracingcommands|tracingchoices|tracingcapsules|totalweight|top|to|time|textual|text|tertiarydef|tertiary|tension|suffix|substring|subpath|stroked|string|str|step|sqrt|special|smoothing|slanted|sind|showvariable|showtoken|showstopping|showdependencies|show|shipout|shifted|setproperty|setgroup|setbounds|secondarydef|secondary|screen_rows|screen_cols|scantokens|scaled|save|runscript|rt|rotated|rgbcolor|reverse|restoreclipcolor|redpart|readfrom|randomseed|proofing|prologues|primarydef|primary|prescriptpart|precontrol|postscriptpart|postcontrol|point|pixels_per_inch|picture|penspec|penpart|penoffset|pencircle|pen|pausing|pathpart|path|pair|overloadmode|outputtemplate|outputformat|outer|or|openwindow|openit|of|odd|oct|numspecial|numeric|numbersystem|nullpicture|notransforms|not|normaldeviate|nodisplays|newinternal|mpxbreak|mpprocset|month|mlog|miterlimit|minute|mexp|message|maketext|makepen|makepath|magentapart|lrt|lrcorner|lowres_fix|llft|llcorner|linejoin|linecap|ligtable|lft|let|length|known|kern|intersectiontimes|interim|input|inner|infont|imagerules|if|hround|hppp|hour|hex|headerbyte|greypart|greycolor|greenpart|graypart|grayfont|graycolor|granularity|glyph|gfcorners|forsuffixes|forever|for|fontsize|fontsize|fontpart|fontmapline|fontmapfile|fontmaking|fontdimen|floor|fillin|filled|filenametemplate|fi|false|extra_endfig|extra_beginfig|extensible|expr|expandafter|exitif|errmessage|envelope|endinput|endgroup|endfor|enddef|end|elseif|else|doublepath|displaying|display|directiontime|designsize|delimiters|def|decimal|day|dashpart|dashed|cycle|cyanpart|currentwindow|currenttransform|curl|cullit|cull|cosd|controls|contour|colormodel|color|cmykcolor|closefrom|clipped|clip|charwd|charlist|charic|charht|charext|charexists|chardy|chardx|chardp|charcode|char|bounded|boundarychar|bot|bot|boolean|bluepart|blackpart|begingroup|autorounding|arctime|arclength|angle|and|and|also|addto|ASCII)(?=[^a-zA-Z\u005C_@!?-ÿ])", + "match" : "(zscaled|yypart|yxpart|yscaled|ypart|yoffset|yellowpart|year|xypart|xxpart|xscaled|xpart|xoffset|write|withstacking|withprescript|withpostscript|withpen|within|withcolor|withcmykcolor|warningcheck|vppp|void|vardef|urt|urcorner|until|unknown|uniformdeviate|ulft|ulcorner|turningnumber|turningcheck|truecorners|true|troffmode|transformed|transform|tracingtitles|tracingstats|tracingspecs|tracingrestores|tracingpens|tracingoutput|tracingonline|tracingmacros|tracinglostchars|tracingequations|tracingedges|tracingcommands|tracingchoices|tracingcapsules|totalweight|top|to|time|textual|text|tertiarydef|tertiary|tension|suffix|substring|subpath|stroked|string|str|step|stacking|sqrt|special|smoothing|slanted|sind|showvariable|showtoken|showstopping|showdependencies|show|shipout|shifted|setproperty|setgroup|setbounds|secondarydef|secondary|screen_rows|screen_cols|scantokens|scaled|save|runscript|rt|rotated|rgbcolor|reverse|restoreclipcolor|redpart|readfrom|randomseed|proofing|prologues|primarydef|primary|prescriptpart|precontrol|postscriptpart|postcontrol|point|pixels_per_inch|picture|penspec|penpart|penoffset|pencircle|pen|pausing|pathpart|path|pair|overloadmode|outputtemplate|outputformat|outer|or|openwindow|openit|of|odd|oct|numspecial|numeric|numbersystem|nullpicture|notransforms|not|normaldeviate|nodisplays|newinternal|mpxbreak|mpprocset|month|mlog|miterlimit|minute|mexp|message|maketext|makepen|makepath|magentapart|lrt|lrcorner|lowres_fix|llft|llcorner|linejoin|linecap|ligtable|lft|let|length|known|kern|intersectiontimes|interim|input|inner|infont|imagerules|if|hround|hppp|hour|hex|headerbyte|greypart|greycolor|greenpart|graypart|grayfont|graycolor|granularity|glyph|gfcorners|forsuffixes|forever|for|fontsize|fontsize|fontpart|fontmapline|fontmapfile|fontmaking|fontdimen|floor|fillin|filled|filenametemplate|fi|false|extra_endfig|extra_beginfig|extensible|expr|expandafter|exitif|errmessage|envelope|endinput|endgroup|endfor|enddef|end|elseif|else|doublepath|displaying|display|directiontime|designsize|delimiters|def|decimal|day|dashpart|dashed|cycle|cyanpart|currentwindow|currenttransform|curl|cullit|cull|cosd|controls|contour|colormodel|color|cmykcolor|closefrom|clipped|clip|charwd|charlist|charic|charht|charext|charexists|chardy|chardx|chardp|charcode|char|bounded|boundarychar|bot|bot|boolean|bluepart|blackpart|begingroup|autorounding|arctime|arclength|angle|and|and|also|addto|ASCII)(?=[^a-zA-Z\u005C_@!?-ÿ])", "name" : "context.primitive.primitive.mps" }, "quoted" : { diff --git a/metapost/context/base/mpiv/mp-base.mpiv b/metapost/context/base/mpiv/mp-base.mpiv index 08bd42c05..8ca072dcd 100644 --- a/metapost/context/base/mpiv/mp-base.mpiv +++ b/metapost/context/base/mpiv/mp-base.mpiv @@ -85,7 +85,6 @@ def loggingall = % puts tracing info into the log tracingchoices := 1 ; tracinglostchars := 1 ; tracingstats := 1 ; - tracingoutput := 1 ; tracingmacros := 1 ; tracingrestores := 1 ; enddef ; @@ -105,7 +104,6 @@ def tracingnone = % turns off every form of tracing tracingchoices := 0 ; tracinglostchars := 0 ; tracingstats := 0 ; - tracingoutput := 0 ; tracingmacros := 0 ; tracingrestores := 0 ; enddef ; diff --git a/metapost/context/base/mpxl/mp-base.mpxl b/metapost/context/base/mpxl/mp-base.mpxl index c6d60b939..c6242b787 100644 --- a/metapost/context/base/mpxl/mp-base.mpxl +++ b/metapost/context/base/mpxl/mp-base.mpxl @@ -77,7 +77,6 @@ def loggingall = % puts tracing info into the log interim tracingspecs := 2 ; interim tracingchoices := 1 ; interim tracingstats := 1 ; - interim tracingoutput := 1 ; interim tracingmacros := 1 ; interim tracingcommands := 3 ; interim tracingrestores := 1 ; @@ -98,7 +97,6 @@ def tracingnone = % turns off every form of tracing interim tracingspecs := 0 ; interim tracingchoices := 0 ; interim tracingstats := 0 ; - interim tracingoutput := 0 ; interim tracingmacros := 0 ; enddef ; @@ -997,6 +995,7 @@ def beginfig(expr c) = clearpen ; pickup defaultpen ; drawoptions() ; + stacking := 0 ; scantokens extra_beginfig ; enddef ; diff --git a/scripts/context/lua/mtx-context.lua b/scripts/context/lua/mtx-context.lua index 72d20d384..c3454309f 100644 --- a/scripts/context/lua/mtx-context.lua +++ b/scripts/context/lua/mtx-context.lua @@ -712,9 +712,13 @@ function scripts.context.run(ctxdata,filename) local basename = filebasename(filename) -- use splitter local pathname = filepathpart(filename) -- + if not filesuffix(filename) then + filename = addsuffix(filename,"tex") + end + -- if pathname == "" and not a_global and filename ~= usedfiles.nop then filename = "./" .. filename - if not validfile(filename) and not validfile(filename..".tex") then + if not validfile(filename) then report("warning: no (local) file %a, proceeding",filename) end end @@ -836,6 +840,14 @@ function scripts.context.run(ctxdata,filename) -- -- todo: --output-file=... in luatex -- + local usedname = jobname + local engine = analysis.engine or "luametatex" + if lmtx and (mainfile == usedfiles.yes or mainfile == usedfiles.nop) and not getargument("redirected") then + mainfile = "" -- we don't need that + usedname = fulljobname + end + -- + -- local l_flags = { ["interaction"] = a_batchmode, -- ["synctex"] = false, -- context has its own way @@ -845,7 +857,8 @@ function scripts.context.run(ctxdata,filename) -- ["file-line-error-style"] = true, -- ["fmt"] = formatfile, -- ["lua"] = scriptfile, - ["jobname"] = jobname, +-- ["jobname"] = jobname, + ["jobname"] = usedname, ["jithash"] = a_jithash, ["permitloadlib"] = a_permitloadlib, } @@ -874,11 +887,6 @@ function scripts.context.run(ctxdata,filename) -- -- kindofrun: 1:first run, 2:successive run, 3:once, 4:last of maxruns -- - local engine = analysis.engine or "luametatex" - if engine == "luametatex" and (mainfile == usedfiles.yes or mainfile == usedfiles.nop) and not getargument("redirected") then - mainfile = "" -- we don't need that - end - -- -- can be used to include pages from a previous run, --keeppdf or "% keeppdf" on first-line -- multipass_copypdffile(jobname,a_keeppdf or analysis.keeppdf) diff --git a/tex/context/base/mkii/cont-new.mkii b/tex/context/base/mkii/cont-new.mkii index 1cacc2484..422bcf32a 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{2021.07.06 18:44} +\newcontextversion{2021.07.09 18:13} %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 c58792280..1cf730f4c 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{2021.07.06 18:44} +\edef\contextversion{2021.07.09 18:13} %D For those who want to use this: diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv index 290b2ec1a..2d989531d 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{2021.07.06 18:44} +\newcontextversion{2021.07.09 18:13} %D This file is loaded at runtime, thereby providing an excellent place for hacks, %D patches, extensions and new features. There can be local overloads in cont-loc diff --git a/tex/context/base/mkiv/context.mkiv b/tex/context/base/mkiv/context.mkiv index d1466a091..30ae6b70f 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{2021.07.06 18:44} +\edef\contextversion{2021.07.09 18:13} %D Kind of special: diff --git a/tex/context/base/mkiv/mult-mps.lua b/tex/context/base/mkiv/mult-mps.lua index 49c4f12ae..6512091ae 100644 --- a/tex/context/base/mkiv/mult-mps.lua +++ b/tex/context/base/mkiv/mult-mps.lua @@ -6,7 +6,7 @@ return { "..", "...", "--", "---", "&", "\\", }, primitives = { -- to be checked - "charcode", "day", "linecap", "linejoin", "miterlimit", "month", "pausing", + "charcode", "day", "linecap", "linejoin", "miterlimit", "stacking", "month", "pausing", "prologues", "showstopping", "time", "tracingcapsules", "tracingchoices", "mpprocset", "tracingcommands", "tracingequations", "tracinglostchars", "tracingmacros", "tracingonline", "tracingoutput", "tracingrestores", @@ -30,7 +30,7 @@ return { "def", "vardef", "enddef", "expr", "suffix", "text", "primary", "secondary", "tertiary", "primarydef", "secondarydef", "tertiarydef", "randomseed", "also", "contour", "doublepath", - "withcolor", "withcmykcolor", "withpen", + "withcolor", "withcmykcolor", "withpen", "withstacking", "dashed", "envelope", "if", "else", "elseif", "fi", "for", "endfor", "forever", "exitif", "within", diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf index b4e417c5c..8fb358fa4 100644 Binary files a/tex/context/base/mkiv/status-files.pdf and b/tex/context/base/mkiv/status-files.pdf differ diff --git a/tex/context/base/mkiv/status-lua.pdf b/tex/context/base/mkiv/status-lua.pdf index 71b72e28c..8e2064949 100644 Binary files a/tex/context/base/mkiv/status-lua.pdf and b/tex/context/base/mkiv/status-lua.pdf differ diff --git a/tex/context/base/mkxl/cont-new.mkxl b/tex/context/base/mkxl/cont-new.mkxl index 12f04a4ea..4fec9a7f9 100644 --- a/tex/context/base/mkxl/cont-new.mkxl +++ b/tex/context/base/mkxl/cont-new.mkxl @@ -13,7 +13,7 @@ % \normalend % uncomment this to get the real base runtime -\newcontextversion{2021.07.06 18:44} +\newcontextversion{2021.07.09 18:13} %D This file is loaded at runtime, thereby providing an excellent place for hacks, %D patches, extensions and new features. There can be local overloads in cont-loc diff --git a/tex/context/base/mkxl/context.mkxl b/tex/context/base/mkxl/context.mkxl index 0b00ec001..4339426be 100644 --- a/tex/context/base/mkxl/context.mkxl +++ b/tex/context/base/mkxl/context.mkxl @@ -29,7 +29,7 @@ %D {YYYY.MM.DD HH:MM} format. \immutable\edef\contextformat {\jobname} -\immutable\edef\contextversion{2021.07.06 18:44} +\immutable\edef\contextversion{2021.07.09 18:13} %overloadmode 1 % check frozen / warning %overloadmode 2 % check frozen / error diff --git a/tex/context/base/mkxl/core-ini.mkxl b/tex/context/base/mkxl/core-ini.mkxl index de7c645b4..41c73b903 100644 --- a/tex/context/base/mkxl/core-ini.mkxl +++ b/tex/context/base/mkxl/core-ini.mkxl @@ -75,7 +75,8 @@ \to \everysimplifycommands \appendtoks - \everypar\emptytoks % pretty important + \everypar \emptytoks % pretty important + \everybeforepar\emptytoks % pretty important \to \everyforgetall %D Page building: diff --git a/tex/context/base/mkxl/core-sys.lmt b/tex/context/base/mkxl/core-sys.lmt index 0d471133d..8615e9f05 100644 --- a/tex/context/base/mkxl/core-sys.lmt +++ b/tex/context/base/mkxl/core-sys.lmt @@ -19,23 +19,32 @@ function environment.initializefilenames() local arguments = environment.arguments - local jobname = arguments.jobname or tex.jobname - local fulljobname = arguments.fulljobname or jobname - local inputfilename = arguments.input or fulljobname - local outputfilename = arguments.result or removesuffix(jobname) + local jobname = arguments.jobname + local fulljobname = arguments.fulljobname + local inputfilename = arguments.input + + if not fulljobname then + fulljobname = inputfilename or tex.jobname + end + if not inputfilename then + inputfilename = fulljobname + end + if not jobname then + jobname = removesuffix(fulljobname) + end - local inputfilename = suffixonly(inputfilename) == "tex" and removesuffix(inputfilename) or inputfilename or "" + local inputfilebase = basename(inputfilename) + local outputfilename = arguments.result or removesuffix(fulljobname) + +-- local inputfilename = suffixonly(inputfilename) == "tex" and removesuffix(inputfilename) or inputfilename or "" local filename = fulljobname local suffix = suffixonly(filename) local filename = ctxrunner.resolve(filename) -- in case we're prepped - local jobfilename = jobname or inputfilename or tex.jobname or "" - local inputfilename = inputfilename or "" - + local jobfilename = jobname -- alias local jobfilebase = basename(jobfilename) - local inputfilebase = basename(inputfilename) -- jobfilename = gsub(jobfilename, "^./","") -- inputfilename = gsub(inputfilename,"^./","") diff --git a/tex/context/base/mkxl/file-job.lmt b/tex/context/base/mkxl/file-job.lmt index 50064622a..e64ed8539 100644 --- a/tex/context/base/mkxl/file-job.lmt +++ b/tex/context/base/mkxl/file-job.lmt @@ -901,6 +901,7 @@ end function environment.loadexamodes(filename) if not filename or filename == "" then + -- todo: environment.fulljobnmame filename = removesuffix(tex.jobname) end filename = resolvers.findfile(addsuffix(filename,'ctm')) or "" diff --git a/tex/context/base/mkxl/luat-fio.lmt b/tex/context/base/mkxl/luat-fio.lmt index 2c6247225..ce8b5ab27 100644 --- a/tex/context/base/mkxl/luat-fio.lmt +++ b/tex/context/base/mkxl/luat-fio.lmt @@ -80,8 +80,8 @@ if not resolvers.initialized() then return name end - register('find_log_file' , find_any_file, true) - register('find_format_file', find_any_file, true) + register('find_log_file' , find_any_file, true) -- why do we have this callback if we just return the name + register('find_format_file', find_any_file, true) -- why do we have this callback if we just return the name -- register('find_data_file' , find_data_file, true) register('open_data_file' , open_data_file, true) diff --git a/tex/context/base/mkxl/meta-ini.mkxl b/tex/context/base/mkxl/meta-ini.mkxl index cd8f74439..def3900fe 100644 --- a/tex/context/base/mkxl/meta-ini.mkxl +++ b/tex/context/base/mkxl/meta-ini.mkxl @@ -302,6 +302,7 @@ inclusions {\meta_flush_current_inclusions}% definitions {\meta_flush_current_definitions}% figure {\MPaskedfigure}% + filtering {\mpcategoryparameter\c!list} method {\MPinstanceparameter\c!method}% namespace {\??graphicvariable\currentmpcategory:}% \relax}% diff --git a/tex/context/base/mkxl/mlib-ctx.lmt b/tex/context/base/mkxl/mlib-ctx.lmt index 2569a6066..13dba92cd 100644 --- a/tex/context/base/mkxl/mlib-ctx.lmt +++ b/tex/context/base/mkxl/mlib-ctx.lmt @@ -223,6 +223,7 @@ implement { { "figure" }, { "method" }, { "namespace" }, + { "filtering" }, } } } @@ -313,6 +314,7 @@ implement { { "inclusions" }, { "method" }, { "namespace" }, + { "filtering" }, { "width", "dimension" }, { "height", "dimension" }, }, diff --git a/tex/context/base/mkxl/mlib-pdf.lmt b/tex/context/base/mkxl/mlib-pdf.lmt index ac84e4f3e..11f211b2b 100644 --- a/tex/context/base/mkxl/mlib-pdf.lmt +++ b/tex/context/base/mkxl/mlib-pdf.lmt @@ -7,7 +7,7 @@ if not modules then modules = { } end modules ['mlib-pdf'] = { } local gsub = string.gsub -local concat, insert, remove = table.concat, table.insert, table.remove +local concat, insert, remove, sortedkeys = table.concat, table.insert, table.remove, table.sortedkeys local abs, sqrt, round = math.abs, math.sqrt, math.round local setmetatable, rawset, tostring, tonumber, type = setmetatable, rawset, tostring, tonumber, type local P, S, C, Ct, Cc, Cg, Cf, Carg = lpeg.P, lpeg.S, lpeg.C, lpeg.Ct, lpeg.Cc, lpeg.Cg, lpeg.Cf, lpeg.Carg @@ -341,7 +341,8 @@ end -- end -- end -local stack = { } +local stack = { } -- general stack (not related to stacking) +local nostacking = { 0 } -- layers in figures local function pushproperties(figure) -- maybe there will be getters in lmtx @@ -373,6 +374,7 @@ function metapost.flush(specification,result) local flusher = specification.flusher local askedfig = specification.askedfig local incontext = specification.incontext + local filtering = specification.filtering local figures = result.fig if figures then flusher = flusher or pdfflusher @@ -386,7 +388,9 @@ function metapost.flush(specification,result) local textfigure = flusher.textfigure -- local processspecial = flusher.processspecial or metapost.processspecial local tocomment = flusher.tocomment - + if type(filtering) ~= "table" then + filtering = false + end -- patterns: we always use image 1 and then can use patterns for 2..n (or one number) -- we can then do an intermediate flush @@ -394,6 +398,7 @@ function metapost.flush(specification,result) local figure = figures[index] local properties = pushproperties(figure) if askedfig == "direct" or askedfig == "all" or askedfig == properties.number then + local stacking = figure:stacking() -- This has to happen before fetching objects! local objects = figure:objects() local tolerance = figure:tolerance() or getbendtolerance() local result = { } @@ -428,248 +433,269 @@ function metapost.flush(specification,result) -- resetplugins(result) -- we should move the colorinitializer here local savedpath = nil local savedhtap = nil - for o=1,#objects do - local object = objects[o] - local objecttype = object.type - if objecttype == "fill" or objecttype == "outline" then - -- we use an indirect table as we want to overload - -- entries but this is not possible in userdata - -- - -- can be optimized if no path - -- - local original = object - local object = { } - setmetatable(object, { - __index = original - }) - local before, - after, - options = processplugins(object) - local evenodd = false - local collect = false - local both = false - local flush = false - local postscript = object.postscript - local tolerance = options and tonumber(options.tolerance) or tolerance - -- if not object.istext then - if postscript == "evenodd" then - evenodd = true - elseif postscript == "collect" then - collect = true - elseif postscript == "flush" then - flush = true - elseif postscript == "both" then - both = true - elseif postscript == "eoboth" then - evenodd = true - both = true - end - -- end - -- - if flush and not savedpath then - -- forget about it - elseif collect then - if not savedpath then - savedpath = { object.path or false } - savedhtap = { object.htap or false } + if stacking then + stacking = { } + for o=1,#objects do + local stack = objects[o].stacking + if stack then + if filtering then + stacking[stack] = filtering[stack] else - savedpath[#savedpath+1] = object.path or false - savedhtap[#savedhtap+1] = object.htap or false - end - else - local objecttype = object.type -- can have changed - if before then - result = pluginactions(before,result,flushfigure) + stacking[stack] = true end - local ml = object.miterlimit - if ml and ml ~= miterlimit then - miterlimit = ml - result[#result+1] = f_M(ml) - end - local lj = object.linejoin - if lj and lj ~= linejoin then - linejoin = lj - result[#result+1] = f_j(lj) - end - local lc = object.linecap - if lc and lc ~= linecap then - linecap = lc - result[#result+1] = f_J(lc) - end - if both then - if dashed ~= false then -- was just dashed test - result[#result+1] = "[] 0 d" - dashed = false + end + end + stacking = sortedkeys(stacking) + else + stacking = nostacking + end + for i=1,#stacking do + local stack = stacking[i] + for o=1,#objects do + local object = objects[o] + if stack == object.stacking then + local objecttype = object.type + if objecttype == "fill" or objecttype == "outline" then + -- we use an indirect table as we want to overload + -- entries but this is not possible in userdata + -- + -- can be optimized if no path + -- + local original = object + local object = { } + setmetatable(object, { + __index = original + }) + local before, + after, + options = processplugins(object) + local evenodd = false + local collect = false + local both = false + local flush = false + local postscript = object.postscript + local tolerance = options and tonumber(options.tolerance) or tolerance + -- if not object.istext then + if postscript == "evenodd" then + evenodd = true + elseif postscript == "collect" then + collect = true + elseif postscript == "flush" then + flush = true + elseif postscript == "both" then + both = true + elseif postscript == "eoboth" then + evenodd = true + both = true end - else - local dl = object.dash - if dl then - local d = f_d(concat(dl.dashes or {}," "),dl.offset) - if d ~= dashed then - dashed = d - result[#result+1] = d + -- end + -- + if flush and not savedpath then + -- forget about it + elseif collect then + if not savedpath then + savedpath = { object.path or false } + savedhtap = { object.htap or false } + else + savedpath[#savedpath+1] = object.path or false + savedhtap[#savedhtap+1] = object.htap or false end - elseif dashed ~= false then -- was just dashed test - result[#result+1] = "[] 0 d" - dashed = false - end - end - local path = object.path -- newpath - local transformed = false - local penwidth = 1 - local open = path and path[1].left_type and path[#path].right_type -- at this moment only "end_point" - local pen = object.pen - if pen then - if pen.type == "elliptical" then - transformed, penwidth = pen_characteristics(original) -- boolean, value - if penwidth ~= linewidth then - result[#result+1] = f_w(penwidth) - linewidth = penwidth + else + local objecttype = object.type -- can have changed + if before then + result = pluginactions(before,result,flushfigure) end - if objecttype == "fill" then - objecttype = "both" + local ml = object.miterlimit + if ml and ml ~= miterlimit then + miterlimit = ml + result[#result+1] = f_M(ml) end - else -- calculated by mplib itself - objecttype = "fill" - end - end - if transformed then - result[#result+1] = "q" - end - if path then - if savedpath then - for i=1,#savedpath do - local path = savedpath[i] - if transformed then + local lj = object.linejoin + if lj and lj ~= linejoin then + linejoin = lj + result[#result+1] = f_j(lj) + end + local lc = object.linecap + if lc and lc ~= linecap then + linecap = lc + result[#result+1] = f_J(lc) + end + if both then + if dashed ~= false then -- was just dashed test + result[#result+1] = "[] 0 d" + dashed = false + end + else + local dl = object.dash + if dl then + local d = f_d(concat(dl.dashes or {}," "),dl.offset) + if d ~= dashed then + dashed = d + result[#result+1] = d + end + elseif dashed ~= false then -- was just dashed test + result[#result+1] = "[] 0 d" + dashed = false + end + end + local path = object.path -- newpath + local transformed = false + local penwidth = 1 + local open = path and path[1].left_type and path[#path].right_type -- at this moment only "end_point" + local pen = object.pen + if pen then + if pen.type == "elliptical" then + transformed, penwidth = pen_characteristics(original) -- boolean, value + if penwidth ~= linewidth then + result[#result+1] = f_w(penwidth) + linewidth = penwidth + end + if objecttype == "fill" then + objecttype = "both" + end + else -- calculated by mplib itself + objecttype = "fill" + end + end + if transformed then + result[#result+1] = "q" + end + if path then + if savedpath then + for i=1,#savedpath do + local path = savedpath[i] + if transformed then + flushconcatpath(path,result,open,tolerance) + else + flushnormalpath(path,result,open,tolerance) + end + end + savedpath = nil + end + if flush then + -- ignore this path + elseif transformed then flushconcatpath(path,result,open,tolerance) else flushnormalpath(path,result,open,tolerance) end + if force_stroke then + result[#result+1] = open and "S" or "h S" + elseif objecttype == "fill" then + result[#result+1] = evenodd and "h f*" or "h f" -- f* = eo + elseif objecttype == "outline" then + if both then + result[#result+1] = evenodd and "h B*" or "h B" -- B* = eo + else + result[#result+1] = open and "S" or "h S" + end + elseif objecttype == "both" then + result[#result+1] = evenodd and "h B*" or "h B" -- B* = eo -- b includes closepath + end end - savedpath = nil - end - if flush then - -- ignore this path - elseif transformed then - flushconcatpath(path,result,open,tolerance) - else - flushnormalpath(path,result,open,tolerance) - end - if force_stroke then - result[#result+1] = open and "S" or "h S" - elseif objecttype == "fill" then - result[#result+1] = evenodd and "h f*" or "h f" -- f* = eo - elseif objecttype == "outline" then - if both then - result[#result+1] = evenodd and "h B*" or "h B" -- B* = eo - else - result[#result+1] = open and "S" or "h S" + if transformed then + result[#result+1] = "Q" end - elseif objecttype == "both" then - result[#result+1] = evenodd and "h B*" or "h B" -- B* = eo -- b includes closepath - end - end - if transformed then - result[#result+1] = "Q" - end - local path = object.htap - if path then - if transformed then - result[#result+1] = "q" - end - if savedhtap then - for i=1,#savedhtap do - local path = savedhtap[i] + local path = object.htap + if path then + if transformed then + result[#result+1] = "q" + end + if savedhtap then + for i=1,#savedhtap do + local path = savedhtap[i] + if transformed then + flushconcatpath(path,result,open,tolerance) + else + flushnormalpath(path,result,open,tolerance) + end + end + savedhtap = nil + evenodd = true + end if transformed then flushconcatpath(path,result,open,tolerance) else flushnormalpath(path,result,open,tolerance) end + if force_stroke then + result[#result+1] = open and "S" or "h S" + elseif objecttype == "fill" then + result[#result+1] = evenodd and "h f*" or "h f" -- f* = eo + elseif objecttype == "outline" then + result[#result+1] = open and "S" or "h S" + elseif objecttype == "both" then + result[#result+1] = evenodd and "h B*" or "h B" -- B* = eo -- b includes closepath + end + if transformed then + result[#result+1] = "Q" + end + end + if after then + result = pluginactions(after,result,flushfigure) end - savedhtap = nil - evenodd = true end - if transformed then - flushconcatpath(path,result,open,tolerance) - else - flushnormalpath(path,result,open,tolerance) + if object.grouped then + -- can be qQ'd so changes can end up in groups + miterlimit, linecap, linejoin, dashed, linewidth = -1, -1, -1, "", false end - if force_stroke then - result[#result+1] = open and "S" or "h S" - elseif objecttype == "fill" then - result[#result+1] = evenodd and "h f*" or "h f" -- f* = eo - elseif objecttype == "outline" then - result[#result+1] = open and "S" or "h S" - elseif objecttype == "both" then - result[#result+1] = evenodd and "h B*" or "h B" -- B* = eo -- b includes closepath + elseif objecttype == "start_clip" then + -- local evenodd = not object.istext and object.postscript == "evenodd" + local evenodd = object.postscript == "evenodd" + result[#result+1] = "q" + flushnormalpath(object.path,result,false,tolerance) + result[#result+1] = evenodd and "W* n" or "W n" + elseif objecttype == "stop_clip" then + result[#result+1] = "Q" + miterlimit, linecap, linejoin, dashed, linewidth = -1, -1, -1, "", false + elseif objecttype == "start_bounds" or objecttype == "stop_bounds" then + -- skip + elseif objecttype == "start_group" then + if lpdf.flushgroup then + local before, after = processplugins(object) + if before then + result[#result+1] = "q" + result = pluginactions(before,result,flushfigure) + insert(groupstack, { + after = after, + result = result, + bbox = toboundingbox(object.path), + }) + result = { } + miterlimit, linecap, linejoin, dashed, linewidth = -1, -1, -1, "", false + else + insert(groupstack,false) + end + else + insert(groupstack,false) end - if transformed then + elseif objecttype == "stop_group" then + local data = remove(groupstack) + if data then + local reference = lpdf.flushgroup(concat(result,"\r"),data.bbox) + result = data.result + result[#result+1] = reference + result = pluginactions(data.after,result,flushfigure) result[#result+1] = "Q" + miterlimit, linecap, linejoin, dashed, linewidth = -1, -1, -1, "", false end - end - if after then - result = pluginactions(after,result,flushfigure) - end - end - if object.grouped then - -- can be qQ'd so changes can end up in groups - miterlimit, linecap, linejoin, dashed, linewidth = -1, -1, -1, "", false - end - elseif objecttype == "start_clip" then - -- local evenodd = not object.istext and object.postscript == "evenodd" - local evenodd = object.postscript == "evenodd" - result[#result+1] = "q" - flushnormalpath(object.path,result,false,tolerance) - result[#result+1] = evenodd and "W* n" or "W n" - elseif objecttype == "stop_clip" then - result[#result+1] = "Q" - miterlimit, linecap, linejoin, dashed, linewidth = -1, -1, -1, "", false - elseif objecttype == "start_bounds" or objecttype == "stop_bounds" then - -- skip - elseif objecttype == "start_group" then - if lpdf.flushgroup then - local before, after = processplugins(object) - if before then - result[#result+1] = "q" - result = pluginactions(before,result,flushfigure) - insert(groupstack, { - after = after, - result = result, - bbox = toboundingbox(object.path), - }) - result = { } - miterlimit, linecap, linejoin, dashed, linewidth = -1, -1, -1, "", false + -- if objecttype == "text" then + -- result[#result+1] = "q" + -- local ot = object.transform -- 3,4,5,6,1,2 + -- result[#result+1] = f_cm(ot[3],ot[4],ot[5],ot[6],ot[1],ot[2]) + -- flushfigure(result) -- flush accumulated literals + -- result = { } + -- textfigure(object.font,object.dsize,object.text,object.width,object.height,object.depth) + -- result[#result+1] = "Q" + -- elseif objecttype == "special" then + -- if processspecial then + -- processspecial(object.prescript) + -- end + -- else else - insert(groupstack,false) + -- error end - else - insert(groupstack,false) - end - elseif objecttype == "stop_group" then - local data = remove(groupstack) - if data then - local reference = lpdf.flushgroup(concat(result,"\r"),data.bbox) - result = data.result - result[#result+1] = reference - result = pluginactions(data.after,result,flushfigure) - result[#result+1] = "Q" - miterlimit, linecap, linejoin, dashed, linewidth = -1, -1, -1, "", false end - -- if objecttype == "text" then - -- result[#result+1] = "q" - -- local ot = object.transform -- 3,4,5,6,1,2 - -- result[#result+1] = f_cm(ot[3],ot[4],ot[5],ot[6],ot[1],ot[2]) - -- flushfigure(result) -- flush accumulated literals - -- result = { } - -- textfigure(object.font,object.dsize,object.text,object.width,object.height,object.depth) - -- result[#result+1] = "Q" - -- elseif objecttype == "special" then - -- if processspecial then - -- processspecial(object.prescript) - -- end - -- else - else - -- error end end end diff --git a/tex/context/base/mkxl/mlib-pps.lmt b/tex/context/base/mkxl/mlib-pps.lmt index cae1bbb5f..7790f0f23 100644 --- a/tex/context/base/mkxl/mlib-pps.lmt +++ b/tex/context/base/mkxl/mlib-pps.lmt @@ -14,6 +14,7 @@ local Cs, Cf, C, Cg, Ct, P, S, V, Carg = lpeg.Cs, lpeg.Cf, lpeg.C, lpeg.Cg, lpeg local lpegmatch, tsplitat, tsplitter = lpeg.match, lpeg.tsplitat, lpeg.tsplitter local formatters, toboolean = string.formatters, string.toboolean local exists, savedata = io.exists, io.savedata +local stepper = utilities.parsers.stepper local mplib = mplib local metapost = metapost @@ -578,6 +579,7 @@ function metapost.graphic_base_pass(specification) local top = startjob(true,"base",mpx) local data = specification.data or "" local inclusions = specification.inclusions or "" + local filtering = specification.filtering local initializations = specification.initializations or "" local askedfig, wrappit = checkaskedfig(specification.figure) @@ -589,6 +591,11 @@ function metapost.graphic_base_pass(specification) top.mpx = mpx top.data = data top.initializations = initializations + if filtering then + local t = { } + stepper(filtering,function(k) t[k] = true end) + filtering = t + end if trace_runs then report_metapost("running job %s, asked figure %a",nofruns,askedfig) end @@ -596,6 +603,7 @@ function metapost.graphic_base_pass(specification) mpx = mpx, askedfig = askedfig, incontext = true, + filtering = filtering, data = { inclusions, wrappit and do_begin_fig or "", diff --git a/tex/context/base/mkxl/node-par.lmt b/tex/context/base/mkxl/node-par.lmt index 125c1b687..290c2fbd8 100644 --- a/tex/context/base/mkxl/node-par.lmt +++ b/tex/context/base/mkxl/node-par.lmt @@ -11,10 +11,10 @@ local stoptiming = statistics.stoptiming local sequencers = utilities.sequencers --- This is called a lot! I'm a bit reluctant with this one because it is --- sensitive for order. In many other callbacks ther eis no action at the --- tex end but here ... Anyway, it has been around for a while now (2019) --- and so far I had no need for extensive usage so we're okay. +-- This is called a lot! I'm a bit reluctant with this one because it is sensitive +-- for order. In many other callbacks there is no action at the tex end but here ... +-- Anyway, it has been around for a while now (2019) and so far I had no need for +-- extensive usage so we're okay. do @@ -33,7 +33,7 @@ end -- Originally this one was meant to deal with the indentation (like turn a box into -- a skip or prevent it) but that never really was used. The return value still --- detemines if an indentation box or skip is injected. Will I change that? +-- determines if an indentation box or skip is injected. Will I change that? do diff --git a/tex/context/base/mkxl/trac-deb.lmt b/tex/context/base/mkxl/trac-deb.lmt index 506a4e9cd..13e3c7e70 100644 --- a/tex/context/base/mkxl/trac-deb.lmt +++ b/tex/context/base/mkxl/trac-deb.lmt @@ -248,7 +248,7 @@ function tracers.printerror(specification) report_str(tracers.showlines(filename,linenumber,offset,tonumber(luaerrorline))) report_nl() end - local errname = file.addsuffix(tex.jobname .. "-error","log") + local errname = tex.jobname .. "-error.log" if quitonerror then table.save(errname,specification) local help = specification.lasttexhelp @@ -264,7 +264,7 @@ function tracers.printerror(specification) end end -luatex.wrapup(function() os.remove(file.addsuffix(tex.jobname .. "-error","log")) end) +luatex.wrapup(function() os.remove(tex.jobname .. "-error.log") end) local function processwarning(offset) local warningstate = status.warningstate diff --git a/tex/context/base/mkxl/typo-drp.lmt b/tex/context/base/mkxl/typo-drp.lmt index 23bf254a8..de65dd55d 100644 --- a/tex/context/base/mkxl/typo-drp.lmt +++ b/tex/context/base/mkxl/typo-drp.lmt @@ -312,6 +312,15 @@ actions[v_default] = function(head,setting) end texset("hangafter",hangafter,true) texset("hangindent",hangindent,true) +-- local hsize = texget("hsize",false) +-- local step = { hangindent, hsize - hangindent } +-- local shape = { ["shift"] = true } +-- for i=1,-hangafter do +-- shape[#shape+1] = step +-- end +-- shape[#shape+1] = { 0, hsize } +-- texset("parshape",shape) +-- tex.snapshotpar(0x20000) end if indent then insertafter(first,first,new_kern(-parindent)) diff --git a/tex/context/base/mkxl/typo-drp.mkxl b/tex/context/base/mkxl/typo-drp.mkxl index da11f76e7..beed0f244 100644 --- a/tex/context/base/mkxl/typo-drp.mkxl +++ b/tex/context/base/mkxl/typo-drp.mkxl @@ -79,6 +79,26 @@ \permanent\tolerant\protected\def\flushinitial % when used inside a mechanism that forgets {\typo_initial_handle} +\newconstant \c_initial_lines +\newconditional\c_initial_synchronize + +% First experiment: +% +% \startluacode +% function nodes.handlers.forgetinitial(mode,indented,context) +% token.expandmacro("forgetinitial") +% return indented +% end +% utilities.sequencers.prependaction("paragraph","system","nodes.handlers.forgetinitial") +% utilities.sequencers.enableaction("paragraph","nodes.handlers.forgetinitial") +% \stopluacode +% +% Second experiment: +% +% \appendtoks +% \forgetinitial +% \to \everybeforepar + \protected\def\typo_initial_handle_indeed#1#2% {\dontleavehmode \begingroup @@ -109,11 +129,50 @@ \relax \c_attr_initial\plusone \initialparameter\c!text - \endgroup - \enforced\glettonothing\typo_initial_handle} + \normalexpanded{\endgroup\c_initial_lines\the\scratchcounter}% + \enforced\glettonothing\typo_initial_handle + \ifconditional\c_initial_synchronize + \appendtoks \forgetinitial \to \everybeforepar + \fi} \lettonothing\typo_initial_handle % hook into everypar +\permanent\protected\def\forgetinitial + {\ifcase\c_initial_lines\else + \begingroup + \advance\c_initial_lines-\prevgraf\relax + \ifcase\c_initial_lines\else + \obeydepth + \forgetall + \testpage[\the\c_initial_lines]% + \dorecurse\c_initial_lines{\nointerlineskip\hpack to \hsize{\strut}\par}% + \fi + \endgroup + \c_initial_lines\zerocount + \ifconditional\c_initial_synchronize + \removetoks \forgetinitial \from \everybeforepar + \fi + \fi} + +%D \starttyping +%D \setupinitial[n=2,style=\tfd,location=text] +%D \setuphead[chapter][after=\placeinitial] +%D \enableexperiments[autoforgetinitials] +%D +%D \starttext +%D \chapter{Test me} Hello world! +%D %\forgetinitial \input tufte +%D \input tufte +%D \stoptext +%D \stoptyping + +% \enableexperiments[autoforgetinitials] + +\installtexexperiment + {autoforgetinitials} + {\settrue \c_initial_synchronize} + {\setfalse\c_initial_synchronize} + % \setupbodyfont[dejavu,9pt] % % \startbuffer diff --git a/tex/generic/context/luatex/luatex-basics-nod.lua b/tex/generic/context/luatex/luatex-basics-nod.lua index 76e36f2aa..61587d5de 100644 --- a/tex/generic/context/luatex/luatex-basics-nod.lua +++ b/tex/generic/context/luatex/luatex-basics-nod.lua @@ -118,7 +118,7 @@ nuts.setcomponents = direct.setcomponents nuts.setdirection = direct.setdirection nuts.setdisc = direct.setdisc nuts.setreplace = direct.setreplace -nuts.setfield = setfield +nuts.setfield = direct.setfield nuts.setkern = direct.setkern nuts.setlink = direct.setlink nuts.setlist = direct.setlist diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua index 366745bab..891377edd 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 : 2021-07-06 18:44 +-- merge date : 2021-07-09 18:13 do -- begin closure to overcome local limits and interference @@ -4996,7 +4996,7 @@ nuts.setcomponents=direct.setcomponents nuts.setdirection=direct.setdirection nuts.setdisc=direct.setdisc nuts.setreplace=direct.setreplace -nuts.setfield=setfield +nuts.setfield=direct.setfield nuts.setkern=direct.setkern nuts.setlink=direct.setlink nuts.setlist=direct.setlist -- cgit v1.2.3