From 94a53123a12ab97fcf453b5893941128e8ed4d44 Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Wed, 17 Mar 2021 18:50:41 +0100 Subject: 2021-03-17 17:45:00 --- .../lexers/data/scite-context-data-metafun.lua | 2 +- .../lexers/data/scite-context-data-metapost.lua | 2 +- .../context/scite-context-data-metafun.properties | 2 +- .../context/scite-context-data-metapost.properties | 5 +- .../context/data/scite-context-data-metafun.lua | 2 +- .../context/data/scite-context-data-metapost.lua | 2 +- .../context/syntaxes/context-syntax-mps.json | 4 +- metapost/context/base/mpxl/mp-lmtx.mpxl | 3 +- metapost/context/base/mpxl/mp-mlib.mpxl | 7 + metapost/context/base/mpxl/mp-tool.mpxl | 18 +- 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/luat-mac.lua | 22 +- tex/context/base/mkiv/mult-fun.lua | 5 +- tex/context/base/mkiv/mult-mps.lua | 2 +- tex/context/base/mkiv/status-files.pdf | Bin 25397 -> 25400 bytes tex/context/base/mkiv/status-lua.pdf | Bin 257164 -> 257322 bytes tex/context/base/mkiv/task-ini.lua | 7 + tex/context/base/mkxl/cont-new.mkxl | 2 +- tex/context/base/mkxl/cont-run.lmt | 10 + tex/context/base/mkxl/context.mkxl | 3 +- tex/context/base/mkxl/font-otj.lmt | 87 +-- tex/context/base/mkxl/font-pre.mkxl | 6 + tex/context/base/mkxl/grph-inc.mkxl | 10 +- tex/context/base/mkxl/math-frc.mkxl | 16 +- tex/context/base/mkxl/meta-tex.mkxl | 167 ++++-- tex/context/base/mkxl/mlib-pdf.lmt | 125 +++-- tex/context/base/mkxl/mlib-pps.lmt | 11 +- tex/context/base/mkxl/mlib-run.lmt | 14 + tex/context/base/mkxl/mlib-svg.lmt | 588 ++++++++++++--------- tex/context/base/mkxl/node-ini.lmt | 11 + tex/context/base/mkxl/pack-mrl.mkxl | 16 +- tex/context/base/mkxl/page-app.mkxl | 2 +- tex/context/base/mkxl/strc-not.mklx | 120 +++-- tex/context/base/mkxl/supp-box.mkxl | 3 + tex/context/base/mkxl/typo-hid.lmt | 74 +++ tex/context/base/mkxl/typo-hid.mkxl | 38 ++ tex/context/fonts/mkiv/type-imp-texgyre.mkiv | 4 +- tex/generic/context/luatex/luatex-fonts-merged.lua | 2 +- 41 files changed, 881 insertions(+), 519 deletions(-) create mode 100644 tex/context/base/mkxl/typo-hid.lmt create mode 100644 tex/context/base/mkxl/typo-hid.mkxl diff --git a/context/data/scite/context/lexers/data/scite-context-data-metafun.lua b/context/data/scite/context/lexers/data/scite-context-data-metafun.lua index e4bdafaa8..7b54ad10a 100644 --- a/context/data/scite/context/lexers/data/scite-context-data-metafun.lua +++ b/context/data/scite/context/lexers/data/scite-context-data-metafun.lua @@ -1,4 +1,4 @@ return { - ["commands"]={ "loadfile", "loadimage", "loadmodule", "dispose", "nothing", "transparency", "tolist", "topath", "tocycle", "sqr", "log", "ln", "exp", "inv", "pow", "pi", "radian", "tand", "cotd", "sin", "cos", "tan", "cot", "atan", "asin", "acos", "invsin", "invcos", "invtan", "acosh", "asinh", "sinh", "cosh", "tanh", "zmod", "paired", "tripled", "unitcircle", "fulldiamond", "unitdiamond", "fullsquare", "unittriangle", "fulltriangle", "llcircle", "lrcircle", "urcircle", "ulcircle", "tcircle", "bcircle", "lcircle", "rcircle", "lltriangle", "lrtriangle", "urtriangle", "ultriangle", "uptriangle", "downtriangle", "lefttriangle", "righttriangle", "triangle", "smoothed", "cornered", "superellipsed", "randomized", "randomizedcontrols", "squeezed", "enlonged", "shortened", "punked", "curved", "unspiked", "simplified", "blownup", "stretched", "enlarged", "leftenlarged", "topenlarged", "rightenlarged", "bottomenlarged", "crossed", "laddered", "randomshifted", "interpolated", "perpendicular", "paralleled", "cutends", "peepholed", "llenlarged", "lrenlarged", "urenlarged", "ulenlarged", "llmoved", "lrmoved", "urmoved", "ulmoved", "rightarrow", "leftarrow", "centerarrow", "drawdoublearrows", "boundingbox", "innerboundingbox", "outerboundingbox", "pushboundingbox", "popboundingbox", "boundingradius", "boundingcircle", "boundingpoint", "crossingunder", "insideof", "outsideof", "bottomboundary", "leftboundary", "topboundary", "rightboundary", "xsized", "ysized", "xysized", "sized", "xyscaled", "intersection_point", "intersection_found", "penpoint", "bbwidth", "bbheight", "withshade", "withcircularshade", "withlinearshade", "defineshade", "shaded", "shadedinto", "withshadecolors", "withshadedomain", "withshademethod", "withshadefactor", "withshadevector", "withshadecenter", "withshadedirection", "withshaderadius", "withshadetransform", "withshadestep", "withshadefraction", "withshadeorigin", "shownshadevector", "shownshadeorigin", "shownshadedirection", "shownshadecenter", "cmyk", "spotcolor", "multitonecolor", "namedcolor", "drawfill", "undrawfill", "inverted", "uncolored", "softened", "grayed", "greyed", "onlayer", "along", "graphictext", "loadfigure", "externalfigure", "figure", "register", "outlinetext", "filloutlinetext", "drawoutlinetext", "outlinetexttopath", "checkedbounds", "checkbounds", "strut", "rule", "withmask", "bitmapimage", "colordecimals", "ddecimal", "dddecimal", "ddddecimal", "colordecimalslist", "textext", "thetextext", "rawtextext", "textextoffset", "texbox", "thetexbox", "rawtexbox", "istextext", "rawmadetext", "validtexbox", "onetimetextext", "rawfmttext", "thefmttext", "fmttext", "onetimefmttext", "notcached", "keepcached", "verbatim", "thelabel", "label", "autoalign", "transparent", "withtransparency", "withopacity", "property", "properties", "withproperties", "asgroup", "infont", "space", "crlf", "dquote", "percent", "SPACE", "CRLF", "DQUOTE", "PERCENT", "grayscale", "greyscale", "withgray", "withgrey", "colorpart", "colorlike", "readfile", "clearxy", "unitvector", "center", "epsed", "anchored", "originpath", "infinite", "break", "xstretched", "ystretched", "snapped", "pathconnectors", "function", "constructedfunction", "constructedpath", "constructedpairs", "straightfunction", "straightpath", "straightpairs", "curvedfunction", "curvedpath", "curvedpairs", "evenly", "oddly", "condition", "pushcurrentpicture", "popcurrentpicture", "arrowpath", "resetarrows", "tensecircle", "roundedsquare", "colortype", "whitecolor", "blackcolor", "basiccolors", "complementary", "complemented", "resolvedcolor", "normalfill", "normaldraw", "visualizepaths", "detailpaths", "naturalizepaths", "drawboundary", "drawwholepath", "drawpathonly", "visualizeddraw", "visualizedfill", "detaileddraw", "draworigin", "drawboundingbox", "drawpath", "drawpoint", "drawpoints", "drawcontrolpoints", "drawcontrollines", "drawpointlabels", "drawlineoptions", "drawpointoptions", "drawcontroloptions", "drawlabeloptions", "draworiginoptions", "drawboundoptions", "drawpathoptions", "resetdrawoptions", "undashed", "pencilled", "decorated", "redecorated", "undecorated", "passvariable", "passarrayvariable", "tostring", "topair", "format", "formatted", "quotation", "quote", "startpassingvariable", "stoppassingvariable", "eofill", "eoclip", "nofill", "dofill", "fillup", "eofillup", "nodraw", "dodraw", "area", "addbackground", "shadedup", "shadeddown", "shadedleft", "shadedright", "sortlist", "copylist", "shapedlist", "listtocurves", "listtolines", "listsize", "listlast", "uniquelist", "circularpath", "squarepath", "linearpath", "theoffset", "texmode", "systemmode", "texvar", "texstr", "isarray", "prefix", "dimension", "getmacro", "getdimen", "getcount", "gettoks", "setmacro", "setdimen", "setcount", "settoks", "setglobalmacro", "setglobaldimen", "setglobalcount", "setglobaltoks", "positionpath", "positioncurve", "positionxy", "positionpxy", "positionwhd", "positionpage", "positionregion", "positionbox", "positionanchor", "positioninregion", "positionatanchor", "wdpart", "htpart", "dppart", "texvar", "texstr", "inpath", "pointof", "leftof", "rightof", "utfnum", "utflen", "utfsub", "newhash", "disposehash", "inhash", "tohash", "isarray", "prefix", "isobject", "comment", "report", "lua", "lualist", "mp", "MP", "luacall", "mirrored", "mirroredabout", "scriptindex", "newscriptindex", "newcolor", "newrgbcolor", "newcmykcolor", "newnumeric", "newboolean", "newtransform", "newpath", "newpicture", "newstring", "newpair", "mpvar" }, + ["commands"]={ "loadfile", "loadimage", "loadmodule", "dispose", "nothing", "transparency", "tolist", "topath", "tocycle", "sqr", "log", "ln", "exp", "inv", "pow", "pi", "radian", "tand", "cotd", "sin", "cos", "tan", "cot", "atan", "asin", "acos", "invsin", "invcos", "invtan", "acosh", "asinh", "sinh", "cosh", "tanh", "zmod", "paired", "tripled", "unitcircle", "fulldiamond", "unitdiamond", "fullsquare", "unittriangle", "fulltriangle", "llcircle", "lrcircle", "urcircle", "ulcircle", "tcircle", "bcircle", "lcircle", "rcircle", "lltriangle", "lrtriangle", "urtriangle", "ultriangle", "uptriangle", "downtriangle", "lefttriangle", "righttriangle", "triangle", "smoothed", "cornered", "superellipsed", "randomized", "randomizedcontrols", "squeezed", "enlonged", "shortened", "punked", "curved", "unspiked", "simplified", "blownup", "stretched", "enlarged", "leftenlarged", "topenlarged", "rightenlarged", "bottomenlarged", "crossed", "laddered", "randomshifted", "interpolated", "perpendicular", "paralleled", "cutends", "peepholed", "llenlarged", "lrenlarged", "urenlarged", "ulenlarged", "llmoved", "lrmoved", "urmoved", "ulmoved", "rightarrow", "leftarrow", "centerarrow", "drawdoublearrows", "boundingbox", "innerboundingbox", "outerboundingbox", "pushboundingbox", "popboundingbox", "boundingradius", "boundingcircle", "boundingpoint", "crossingunder", "insideof", "outsideof", "bottomboundary", "leftboundary", "topboundary", "rightboundary", "xsized", "ysized", "xysized", "sized", "xyscaled", "intersection_point", "intersection_found", "penpoint", "bbwidth", "bbheight", "withshade", "withcircularshade", "withlinearshade", "defineshade", "shaded", "shadedinto", "withshadecolors", "withshadedomain", "withshademethod", "withshadefactor", "withshadevector", "withshadecenter", "withshadedirection", "withshaderadius", "withshadetransform", "withshadestep", "withshadefraction", "withshadeorigin", "shownshadevector", "shownshadeorigin", "shownshadedirection", "shownshadecenter", "cmyk", "spotcolor", "multitonecolor", "namedcolor", "drawfill", "undrawfill", "inverted", "uncolored", "softened", "grayed", "greyed", "onlayer", "along", "graphictext", "loadfigure", "externalfigure", "figure", "register", "outlinetext", "filloutlinetext", "drawoutlinetext", "outlinetexttopath", "checkedbounds", "checkbounds", "strut", "rule", "withmask", "bitmapimage", "colordecimals", "ddecimal", "dddecimal", "ddddecimal", "colordecimalslist", "textext", "thetextext", "rawtextext", "textextoffset", "texbox", "thetexbox", "rawtexbox", "istextext", "rawmadetext", "validtexbox", "onetimetextext", "rawfmttext", "thefmttext", "fmttext", "onetimefmttext", "notcached", "keepcached", "verbatim", "thelabel", "label", "autoalign", "transparent", "withtransparency", "withopacity", "property", "properties", "withproperties", "asgroup", "infont", "space", "crlf", "dquote", "percent", "SPACE", "CRLF", "DQUOTE", "PERCENT", "grayscale", "greyscale", "withgray", "withgrey", "colorpart", "colorlike", "readfile", "clearxy", "unitvector", "center", "epsed", "anchored", "originpath", "infinite", "break", "xstretched", "ystretched", "snapped", "pathconnectors", "function", "constructedfunction", "constructedpath", "constructedpairs", "straightfunction", "straightpath", "straightpairs", "curvedfunction", "curvedpath", "curvedpairs", "evenly", "oddly", "condition", "pushcurrentpicture", "popcurrentpicture", "arrowpath", "resetarrows", "tensecircle", "roundedsquare", "colortype", "whitecolor", "blackcolor", "basiccolors", "complementary", "complemented", "resolvedcolor", "normalfill", "normaldraw", "visualizepaths", "detailpaths", "naturalizepaths", "drawboundary", "drawwholepath", "drawpathonly", "visualizeddraw", "visualizedfill", "detaileddraw", "draworigin", "drawboundingbox", "drawpath", "drawpoint", "drawpoints", "drawcontrolpoints", "drawcontrollines", "drawpointlabels", "drawlineoptions", "drawpointoptions", "drawcontroloptions", "drawlabeloptions", "draworiginoptions", "drawboundoptions", "drawpathoptions", "resetdrawoptions", "undashed", "pencilled", "decorated", "redecorated", "undecorated", "passvariable", "passarrayvariable", "tostring", "topair", "format", "formatted", "quotation", "quote", "startpassingvariable", "stoppassingvariable", "eofill", "eoclip", "nofill", "dofill", "fillup", "eofillup", "nodraw", "dodraw", "area", "addbackground", "shadedup", "shadeddown", "shadedleft", "shadedright", "sortlist", "copylist", "shapedlist", "listtocurves", "listtolines", "listsize", "listlast", "uniquelist", "circularpath", "squarepath", "linearpath", "theoffset", "texmode", "systemmode", "texvar", "texstr", "isarray", "prefix", "dimension", "getmacro", "getdimen", "getcount", "gettoks", "setmacro", "setdimen", "setcount", "settoks", "setglobalmacro", "setglobaldimen", "setglobalcount", "setglobaltoks", "positionpath", "positioncurve", "positionxy", "positionpxy", "positionwhd", "positionpage", "positionregion", "positionbox", "positionanchor", "positioninregion", "positionatanchor", "wdpart", "htpart", "dppart", "texvar", "texstr", "inpath", "pointof", "leftof", "rightof", "utfnum", "utflen", "utfsub", "newhash", "disposehash", "inhash", "tohash", "isarray", "prefix", "isobject", "comment", "report", "lua", "lualist", "mp", "MP", "luacall", "mirrored", "mirroredabout", "scriptindex", "newscriptindex", "newcolor", "newrgbcolor", "newcmykcolor", "newnumeric", "newboolean", "newtransform", "newpath", "newpicture", "newstring", "newpair", "mpvar", "withtolerance" }, ["internals"]={ "nocolormodel", "greycolormodel", "graycolormodel", "rgbcolormodel", "cmykcolormodel", "shadefactor", "shadeoffset", "textextoffset", "textextanchor", "normaltransparent", "multiplytransparent", "screentransparent", "overlaytransparent", "softlighttransparent", "hardlighttransparent", "colordodgetransparent", "colorburntransparent", "darkentransparent", "lightentransparent", "differencetransparent", "exclusiontransparent", "huetransparent", "saturationtransparent", "colortransparent", "luminositytransparent", "ahvariant", "ahdimple", "ahfactor", "ahscale", "metapostversion", "maxdimensions", "drawoptionsfactor", "dq", "sq", "crossingscale", "crossingoption", "contextlmtxmode", "metafunversion", "minifunversion", "getparameters", "presetparameters", "hasparameter", "hasoption", "getparameter", "getparameterdefault", "getparametercount", "getmaxparametercount", "getparameterpath", "getparameterpen", "getparametertext", "applyparameters", "pushparameters", "popparameters", "definecolor" }, } \ No newline at end of file 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 1bb01b347..fb4de1e06 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"]={ "on", "off", "interpath", "upto", "downto", "beginfig", "endfig", "beginglyph", "endglyph", "beginfont", "endfont", "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", "bymatrix", "primitive", "permanent", "immutable", "mutable", "frozen", "showproperty", "showhashentry" }, + ["commands"]={ "on", "off", "interpath", "upto", "downto", "beginfig", "endfig", "beginglyph", "endglyph", "beginfont", "endfont", "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", "bymatrix", "closedcurve", "closedlines", "primitive", "permanent", "immutable", "mutable", "frozen", "showproperty", "showhashentry" }, ["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" }, diff --git a/context/data/scite/context/scite-context-data-metafun.properties b/context/data/scite/context/scite-context-data-metafun.properties index 7b09abc2d..e547c04aa 100644 --- a/context/data/scite/context/scite-context-data-metafun.properties +++ b/context/data/scite/context/scite-context-data-metafun.properties @@ -79,7 +79,7 @@ report lua lualist mp MP \ luacall mirrored mirroredabout scriptindex newscriptindex \ newcolor newrgbcolor newcmykcolor newnumeric newboolean \ newtransform newpath newpicture newstring newpair \ -mpvar +mpvar withtolerance keywordclass.metafun.internals=\ nocolormodel greycolormodel graycolormodel rgbcolormodel \ diff --git a/context/data/scite/context/scite-context-data-metapost.properties b/context/data/scite/context/scite-context-data-metapost.properties index 9c89060ce..bb704c6bd 100644 --- a/context/data/scite/context/scite-context-data-metapost.properties +++ b/context/data/scite/context/scite-context-data-metapost.properties @@ -29,8 +29,9 @@ laboff bye red green blue \ cyan magenta yellow black white \ background mm pt dd bp \ cm pc cc in triplet \ -quadruplet totransform bymatrix primitive permanent \ -immutable mutable frozen showproperty showhashentry +quadruplet totransform bymatrix closedcurve closedlines \ +primitive permanent immutable mutable frozen \ +showproperty showhashentry keywordclass.metapost.disabled=\ verbatimtex troffmode diff --git a/context/data/textadept/context/data/scite-context-data-metafun.lua b/context/data/textadept/context/data/scite-context-data-metafun.lua index e4bdafaa8..7b54ad10a 100644 --- a/context/data/textadept/context/data/scite-context-data-metafun.lua +++ b/context/data/textadept/context/data/scite-context-data-metafun.lua @@ -1,4 +1,4 @@ return { - ["commands"]={ "loadfile", "loadimage", "loadmodule", "dispose", "nothing", "transparency", "tolist", "topath", "tocycle", "sqr", "log", "ln", "exp", "inv", "pow", "pi", "radian", "tand", "cotd", "sin", "cos", "tan", "cot", "atan", "asin", "acos", "invsin", "invcos", "invtan", "acosh", "asinh", "sinh", "cosh", "tanh", "zmod", "paired", "tripled", "unitcircle", "fulldiamond", "unitdiamond", "fullsquare", "unittriangle", "fulltriangle", "llcircle", "lrcircle", "urcircle", "ulcircle", "tcircle", "bcircle", "lcircle", "rcircle", "lltriangle", "lrtriangle", "urtriangle", "ultriangle", "uptriangle", "downtriangle", "lefttriangle", "righttriangle", "triangle", "smoothed", "cornered", "superellipsed", "randomized", "randomizedcontrols", "squeezed", "enlonged", "shortened", "punked", "curved", "unspiked", "simplified", "blownup", "stretched", "enlarged", "leftenlarged", "topenlarged", "rightenlarged", "bottomenlarged", "crossed", "laddered", "randomshifted", "interpolated", "perpendicular", "paralleled", "cutends", "peepholed", "llenlarged", "lrenlarged", "urenlarged", "ulenlarged", "llmoved", "lrmoved", "urmoved", "ulmoved", "rightarrow", "leftarrow", "centerarrow", "drawdoublearrows", "boundingbox", "innerboundingbox", "outerboundingbox", "pushboundingbox", "popboundingbox", "boundingradius", "boundingcircle", "boundingpoint", "crossingunder", "insideof", "outsideof", "bottomboundary", "leftboundary", "topboundary", "rightboundary", "xsized", "ysized", "xysized", "sized", "xyscaled", "intersection_point", "intersection_found", "penpoint", "bbwidth", "bbheight", "withshade", "withcircularshade", "withlinearshade", "defineshade", "shaded", "shadedinto", "withshadecolors", "withshadedomain", "withshademethod", "withshadefactor", "withshadevector", "withshadecenter", "withshadedirection", "withshaderadius", "withshadetransform", "withshadestep", "withshadefraction", "withshadeorigin", "shownshadevector", "shownshadeorigin", "shownshadedirection", "shownshadecenter", "cmyk", "spotcolor", "multitonecolor", "namedcolor", "drawfill", "undrawfill", "inverted", "uncolored", "softened", "grayed", "greyed", "onlayer", "along", "graphictext", "loadfigure", "externalfigure", "figure", "register", "outlinetext", "filloutlinetext", "drawoutlinetext", "outlinetexttopath", "checkedbounds", "checkbounds", "strut", "rule", "withmask", "bitmapimage", "colordecimals", "ddecimal", "dddecimal", "ddddecimal", "colordecimalslist", "textext", "thetextext", "rawtextext", "textextoffset", "texbox", "thetexbox", "rawtexbox", "istextext", "rawmadetext", "validtexbox", "onetimetextext", "rawfmttext", "thefmttext", "fmttext", "onetimefmttext", "notcached", "keepcached", "verbatim", "thelabel", "label", "autoalign", "transparent", "withtransparency", "withopacity", "property", "properties", "withproperties", "asgroup", "infont", "space", "crlf", "dquote", "percent", "SPACE", "CRLF", "DQUOTE", "PERCENT", "grayscale", "greyscale", "withgray", "withgrey", "colorpart", "colorlike", "readfile", "clearxy", "unitvector", "center", "epsed", "anchored", "originpath", "infinite", "break", "xstretched", "ystretched", "snapped", "pathconnectors", "function", "constructedfunction", "constructedpath", "constructedpairs", "straightfunction", "straightpath", "straightpairs", "curvedfunction", "curvedpath", "curvedpairs", "evenly", "oddly", "condition", "pushcurrentpicture", "popcurrentpicture", "arrowpath", "resetarrows", "tensecircle", "roundedsquare", "colortype", "whitecolor", "blackcolor", "basiccolors", "complementary", "complemented", "resolvedcolor", "normalfill", "normaldraw", "visualizepaths", "detailpaths", "naturalizepaths", "drawboundary", "drawwholepath", "drawpathonly", "visualizeddraw", "visualizedfill", "detaileddraw", "draworigin", "drawboundingbox", "drawpath", "drawpoint", "drawpoints", "drawcontrolpoints", "drawcontrollines", "drawpointlabels", "drawlineoptions", "drawpointoptions", "drawcontroloptions", "drawlabeloptions", "draworiginoptions", "drawboundoptions", "drawpathoptions", "resetdrawoptions", "undashed", "pencilled", "decorated", "redecorated", "undecorated", "passvariable", "passarrayvariable", "tostring", "topair", "format", "formatted", "quotation", "quote", "startpassingvariable", "stoppassingvariable", "eofill", "eoclip", "nofill", "dofill", "fillup", "eofillup", "nodraw", "dodraw", "area", "addbackground", "shadedup", "shadeddown", "shadedleft", "shadedright", "sortlist", "copylist", "shapedlist", "listtocurves", "listtolines", "listsize", "listlast", "uniquelist", "circularpath", "squarepath", "linearpath", "theoffset", "texmode", "systemmode", "texvar", "texstr", "isarray", "prefix", "dimension", "getmacro", "getdimen", "getcount", "gettoks", "setmacro", "setdimen", "setcount", "settoks", "setglobalmacro", "setglobaldimen", "setglobalcount", "setglobaltoks", "positionpath", "positioncurve", "positionxy", "positionpxy", "positionwhd", "positionpage", "positionregion", "positionbox", "positionanchor", "positioninregion", "positionatanchor", "wdpart", "htpart", "dppart", "texvar", "texstr", "inpath", "pointof", "leftof", "rightof", "utfnum", "utflen", "utfsub", "newhash", "disposehash", "inhash", "tohash", "isarray", "prefix", "isobject", "comment", "report", "lua", "lualist", "mp", "MP", "luacall", "mirrored", "mirroredabout", "scriptindex", "newscriptindex", "newcolor", "newrgbcolor", "newcmykcolor", "newnumeric", "newboolean", "newtransform", "newpath", "newpicture", "newstring", "newpair", "mpvar" }, + ["commands"]={ "loadfile", "loadimage", "loadmodule", "dispose", "nothing", "transparency", "tolist", "topath", "tocycle", "sqr", "log", "ln", "exp", "inv", "pow", "pi", "radian", "tand", "cotd", "sin", "cos", "tan", "cot", "atan", "asin", "acos", "invsin", "invcos", "invtan", "acosh", "asinh", "sinh", "cosh", "tanh", "zmod", "paired", "tripled", "unitcircle", "fulldiamond", "unitdiamond", "fullsquare", "unittriangle", "fulltriangle", "llcircle", "lrcircle", "urcircle", "ulcircle", "tcircle", "bcircle", "lcircle", "rcircle", "lltriangle", "lrtriangle", "urtriangle", "ultriangle", "uptriangle", "downtriangle", "lefttriangle", "righttriangle", "triangle", "smoothed", "cornered", "superellipsed", "randomized", "randomizedcontrols", "squeezed", "enlonged", "shortened", "punked", "curved", "unspiked", "simplified", "blownup", "stretched", "enlarged", "leftenlarged", "topenlarged", "rightenlarged", "bottomenlarged", "crossed", "laddered", "randomshifted", "interpolated", "perpendicular", "paralleled", "cutends", "peepholed", "llenlarged", "lrenlarged", "urenlarged", "ulenlarged", "llmoved", "lrmoved", "urmoved", "ulmoved", "rightarrow", "leftarrow", "centerarrow", "drawdoublearrows", "boundingbox", "innerboundingbox", "outerboundingbox", "pushboundingbox", "popboundingbox", "boundingradius", "boundingcircle", "boundingpoint", "crossingunder", "insideof", "outsideof", "bottomboundary", "leftboundary", "topboundary", "rightboundary", "xsized", "ysized", "xysized", "sized", "xyscaled", "intersection_point", "intersection_found", "penpoint", "bbwidth", "bbheight", "withshade", "withcircularshade", "withlinearshade", "defineshade", "shaded", "shadedinto", "withshadecolors", "withshadedomain", "withshademethod", "withshadefactor", "withshadevector", "withshadecenter", "withshadedirection", "withshaderadius", "withshadetransform", "withshadestep", "withshadefraction", "withshadeorigin", "shownshadevector", "shownshadeorigin", "shownshadedirection", "shownshadecenter", "cmyk", "spotcolor", "multitonecolor", "namedcolor", "drawfill", "undrawfill", "inverted", "uncolored", "softened", "grayed", "greyed", "onlayer", "along", "graphictext", "loadfigure", "externalfigure", "figure", "register", "outlinetext", "filloutlinetext", "drawoutlinetext", "outlinetexttopath", "checkedbounds", "checkbounds", "strut", "rule", "withmask", "bitmapimage", "colordecimals", "ddecimal", "dddecimal", "ddddecimal", "colordecimalslist", "textext", "thetextext", "rawtextext", "textextoffset", "texbox", "thetexbox", "rawtexbox", "istextext", "rawmadetext", "validtexbox", "onetimetextext", "rawfmttext", "thefmttext", "fmttext", "onetimefmttext", "notcached", "keepcached", "verbatim", "thelabel", "label", "autoalign", "transparent", "withtransparency", "withopacity", "property", "properties", "withproperties", "asgroup", "infont", "space", "crlf", "dquote", "percent", "SPACE", "CRLF", "DQUOTE", "PERCENT", "grayscale", "greyscale", "withgray", "withgrey", "colorpart", "colorlike", "readfile", "clearxy", "unitvector", "center", "epsed", "anchored", "originpath", "infinite", "break", "xstretched", "ystretched", "snapped", "pathconnectors", "function", "constructedfunction", "constructedpath", "constructedpairs", "straightfunction", "straightpath", "straightpairs", "curvedfunction", "curvedpath", "curvedpairs", "evenly", "oddly", "condition", "pushcurrentpicture", "popcurrentpicture", "arrowpath", "resetarrows", "tensecircle", "roundedsquare", "colortype", "whitecolor", "blackcolor", "basiccolors", "complementary", "complemented", "resolvedcolor", "normalfill", "normaldraw", "visualizepaths", "detailpaths", "naturalizepaths", "drawboundary", "drawwholepath", "drawpathonly", "visualizeddraw", "visualizedfill", "detaileddraw", "draworigin", "drawboundingbox", "drawpath", "drawpoint", "drawpoints", "drawcontrolpoints", "drawcontrollines", "drawpointlabels", "drawlineoptions", "drawpointoptions", "drawcontroloptions", "drawlabeloptions", "draworiginoptions", "drawboundoptions", "drawpathoptions", "resetdrawoptions", "undashed", "pencilled", "decorated", "redecorated", "undecorated", "passvariable", "passarrayvariable", "tostring", "topair", "format", "formatted", "quotation", "quote", "startpassingvariable", "stoppassingvariable", "eofill", "eoclip", "nofill", "dofill", "fillup", "eofillup", "nodraw", "dodraw", "area", "addbackground", "shadedup", "shadeddown", "shadedleft", "shadedright", "sortlist", "copylist", "shapedlist", "listtocurves", "listtolines", "listsize", "listlast", "uniquelist", "circularpath", "squarepath", "linearpath", "theoffset", "texmode", "systemmode", "texvar", "texstr", "isarray", "prefix", "dimension", "getmacro", "getdimen", "getcount", "gettoks", "setmacro", "setdimen", "setcount", "settoks", "setglobalmacro", "setglobaldimen", "setglobalcount", "setglobaltoks", "positionpath", "positioncurve", "positionxy", "positionpxy", "positionwhd", "positionpage", "positionregion", "positionbox", "positionanchor", "positioninregion", "positionatanchor", "wdpart", "htpart", "dppart", "texvar", "texstr", "inpath", "pointof", "leftof", "rightof", "utfnum", "utflen", "utfsub", "newhash", "disposehash", "inhash", "tohash", "isarray", "prefix", "isobject", "comment", "report", "lua", "lualist", "mp", "MP", "luacall", "mirrored", "mirroredabout", "scriptindex", "newscriptindex", "newcolor", "newrgbcolor", "newcmykcolor", "newnumeric", "newboolean", "newtransform", "newpath", "newpicture", "newstring", "newpair", "mpvar", "withtolerance" }, ["internals"]={ "nocolormodel", "greycolormodel", "graycolormodel", "rgbcolormodel", "cmykcolormodel", "shadefactor", "shadeoffset", "textextoffset", "textextanchor", "normaltransparent", "multiplytransparent", "screentransparent", "overlaytransparent", "softlighttransparent", "hardlighttransparent", "colordodgetransparent", "colorburntransparent", "darkentransparent", "lightentransparent", "differencetransparent", "exclusiontransparent", "huetransparent", "saturationtransparent", "colortransparent", "luminositytransparent", "ahvariant", "ahdimple", "ahfactor", "ahscale", "metapostversion", "maxdimensions", "drawoptionsfactor", "dq", "sq", "crossingscale", "crossingoption", "contextlmtxmode", "metafunversion", "minifunversion", "getparameters", "presetparameters", "hasparameter", "hasoption", "getparameter", "getparameterdefault", "getparametercount", "getmaxparametercount", "getparameterpath", "getparameterpen", "getparametertext", "applyparameters", "pushparameters", "popparameters", "definecolor" }, } \ No newline at end of file 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 1bb01b347..fb4de1e06 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"]={ "on", "off", "interpath", "upto", "downto", "beginfig", "endfig", "beginglyph", "endglyph", "beginfont", "endfont", "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", "bymatrix", "primitive", "permanent", "immutable", "mutable", "frozen", "showproperty", "showhashentry" }, + ["commands"]={ "on", "off", "interpath", "upto", "downto", "beginfig", "endfig", "beginglyph", "endglyph", "beginfont", "endfont", "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", "bymatrix", "closedcurve", "closedlines", "primitive", "permanent", "immutable", "mutable", "frozen", "showproperty", "showhashentry" }, ["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" }, 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 6e414689d..b52c3416a 100644 --- a/context/data/vscode/extensions/context/syntaxes/context-syntax-mps.json +++ b/context/data/vscode/extensions/context/syntaxes/context-syntax-mps.json @@ -60,7 +60,7 @@ "name" : "context.extra" }, "helper" : { - "match" : "(zmod|ystretched|ysized|xysized|xyscaled|xstretched|xsized|withtransparency|withshadevector|withshadetransform|withshadestep|withshaderadius|withshadeorigin|withshademethod|withshadefraction|withshadefactor|withshadedomain|withshadedirection|withshadecolors|withshadecenter|withshade|withproperties|withopacity|withmask|withlinearshade|withgrey|withgray|withcircularshade|whitecolor|wdpart|visualizepaths|visualizedfill|visualizeddraw|verbatim|validtexbox|utfsub|utfnum|utflen|urtriangle|urmoved|urenlarged|urcircle|uptriangle|unspiked|unitvector|unittriangle|unitdiamond|unitcircle|uniquelist|undrawfill|undecorated|undashed|uncolored|ultriangle|ulmoved|ulenlarged|ulcircle|tripled|triangle|transparent|transparency|tostring|topenlarged|topboundary|topath|topair|tolist|tohash|tocycle|thetextext|thetexbox|theoffset|thelabel|thefmttext|texvar|texvar|textextoffset|textext|texstr|texstr|texmode|texbox|tensecircle|tcircle|tanh|tand|tan|systemmode|superellipsed|strut|stretched|straightpath|straightpairs|straightfunction|stoppassingvariable|startpassingvariable|squeezed|squarepath|sqr|spotcolor|space|sortlist|softened|snapped|smoothed|sized|sinh|sin|simplified|shownshadevector|shownshadeorigin|shownshadedirection|shownshadecenter|shortened|shapedlist|shadedup|shadedright|shadedleft|shadedinto|shadeddown|shaded|settoks|setmacro|setglobaltoks|setglobalmacro|setglobaldimen|setglobalcount|setdimen|setcount|scriptindex|rule|roundedsquare|righttriangle|rightof|rightenlarged|rightboundary|rightarrow|resolvedcolor|resetdrawoptions|resetarrows|report|register|redecorated|readfile|rcircle|rawtextext|rawtexbox|rawmadetext|rawfmttext|randomshifted|randomizedcontrols|randomized|radian|quote|quotation|pushcurrentpicture|pushboundingbox|punked|property|properties|prefix|prefix|pow|positionxy|positionwhd|positionregion|positionpxy|positionpath|positionpage|positioninregion|positioncurve|positionbox|positionatanchor|positionanchor|popcurrentpicture|popboundingbox|pointof|pi|perpendicular|percent|penpoint|pencilled|peepholed|pathconnectors|passvariable|passarrayvariable|paralleled|paired|outsideof|outlinetexttopath|outlinetext|outerboundingbox|originpath|onlayer|onetimetextext|onetimefmttext|oddly|nothing|notcached|normalfill|normaldraw|nofill|nodraw|newtransform|newstring|newscriptindex|newrgbcolor|newpicture|newpath|newpair|newnumeric|newhash|newcolor|newcmykcolor|newboolean|naturalizepaths|namedcolor|multitonecolor|mpvar|mp|mirroredabout|mirrored|lualist|luacall|lua|lrtriangle|lrmoved|lrenlarged|lrcircle|log|loadmodule|loadimage|loadfile|loadfigure|ln|lltriangle|llmoved|llenlarged|llcircle|listtolines|listtocurves|listsize|listlast|linearpath|lefttriangle|leftof|leftenlarged|leftboundary|leftarrow|lcircle|laddered|label|keepcached|istextext|isobject|isarray|isarray|invtan|invsin|inverted|invcos|inv|intersection_point|intersection_found|interpolated|insideof|inpath|innerboundingbox|inhash|infont|infinite|htpart|greyscale|greyed|grayscale|grayed|graphictext|gettoks|getmacro|getdimen|getcount|function|fulltriangle|fullsquare|fulldiamond|formatted|format|fmttext|fillup|filloutlinetext|figure|externalfigure|exp|evenly|epsed|eofillup|eofill|eoclip|enlonged|enlarged|drawwholepath|drawpoints|drawpointoptions|drawpointlabels|drawpoint|drawpathoptions|drawpathonly|drawpath|drawoutlinetext|draworiginoptions|draworigin|drawlineoptions|drawlabeloptions|drawfill|drawdoublearrows|drawcontrolpoints|drawcontroloptions|drawcontrollines|drawboundoptions|drawboundingbox|drawboundary|dquote|dppart|downtriangle|dofill|dodraw|disposehash|dispose|dimension|detailpaths|detaileddraw|defineshade|decorated|ddecimal|dddecimal|ddddecimal|cutends|curvedpath|curvedpairs|curvedfunction|curved|crossingunder|crossed|crlf|cotd|cot|cosh|cos|cornered|copylist|constructedpath|constructedpairs|constructedfunction|condition|complemented|complementary|comment|colortype|colorpart|colorlike|colordecimalslist|colordecimals|cmyk|clearxy|circularpath|checkedbounds|checkbounds|centerarrow|center|break|boundingradius|boundingpoint|boundingcircle|boundingbox|bottomenlarged|bottomboundary|blownup|blackcolor|bitmapimage|bcircle|bbwidth|bbheight|basiccolors|autoalign|atan|asinh|asin|asgroup|arrowpath|area|anchored|along|addbackground|acosh|acos|SPACE|PERCENT|MP|DQUOTE|CRLF)(?=[^a-zA-Z\u005C_@!?-ÿ])", + "match" : "(zmod|ystretched|ysized|xysized|xyscaled|xstretched|xsized|withtransparency|withtolerance|withshadevector|withshadetransform|withshadestep|withshaderadius|withshadeorigin|withshademethod|withshadefraction|withshadefactor|withshadedomain|withshadedirection|withshadecolors|withshadecenter|withshade|withproperties|withopacity|withmask|withlinearshade|withgrey|withgray|withcircularshade|whitecolor|wdpart|visualizepaths|visualizedfill|visualizeddraw|verbatim|validtexbox|utfsub|utfnum|utflen|urtriangle|urmoved|urenlarged|urcircle|uptriangle|unspiked|unitvector|unittriangle|unitdiamond|unitcircle|uniquelist|undrawfill|undecorated|undashed|uncolored|ultriangle|ulmoved|ulenlarged|ulcircle|tripled|triangle|transparent|transparency|tostring|topenlarged|topboundary|topath|topair|tolist|tohash|tocycle|thetextext|thetexbox|theoffset|thelabel|thefmttext|texvar|texvar|textextoffset|textext|texstr|texstr|texmode|texbox|tensecircle|tcircle|tanh|tand|tan|systemmode|superellipsed|strut|stretched|straightpath|straightpairs|straightfunction|stoppassingvariable|startpassingvariable|squeezed|squarepath|sqr|spotcolor|space|sortlist|softened|snapped|smoothed|sized|sinh|sin|simplified|shownshadevector|shownshadeorigin|shownshadedirection|shownshadecenter|shortened|shapedlist|shadedup|shadedright|shadedleft|shadedinto|shadeddown|shaded|settoks|setmacro|setglobaltoks|setglobalmacro|setglobaldimen|setglobalcount|setdimen|setcount|scriptindex|rule|roundedsquare|righttriangle|rightof|rightenlarged|rightboundary|rightarrow|resolvedcolor|resetdrawoptions|resetarrows|report|register|redecorated|readfile|rcircle|rawtextext|rawtexbox|rawmadetext|rawfmttext|randomshifted|randomizedcontrols|randomized|radian|quote|quotation|pushcurrentpicture|pushboundingbox|punked|property|properties|prefix|prefix|pow|positionxy|positionwhd|positionregion|positionpxy|positionpath|positionpage|positioninregion|positioncurve|positionbox|positionatanchor|positionanchor|popcurrentpicture|popboundingbox|pointof|pi|perpendicular|percent|penpoint|pencilled|peepholed|pathconnectors|passvariable|passarrayvariable|paralleled|paired|outsideof|outlinetexttopath|outlinetext|outerboundingbox|originpath|onlayer|onetimetextext|onetimefmttext|oddly|nothing|notcached|normalfill|normaldraw|nofill|nodraw|newtransform|newstring|newscriptindex|newrgbcolor|newpicture|newpath|newpair|newnumeric|newhash|newcolor|newcmykcolor|newboolean|naturalizepaths|namedcolor|multitonecolor|mpvar|mp|mirroredabout|mirrored|lualist|luacall|lua|lrtriangle|lrmoved|lrenlarged|lrcircle|log|loadmodule|loadimage|loadfile|loadfigure|ln|lltriangle|llmoved|llenlarged|llcircle|listtolines|listtocurves|listsize|listlast|linearpath|lefttriangle|leftof|leftenlarged|leftboundary|leftarrow|lcircle|laddered|label|keepcached|istextext|isobject|isarray|isarray|invtan|invsin|inverted|invcos|inv|intersection_point|intersection_found|interpolated|insideof|inpath|innerboundingbox|inhash|infont|infinite|htpart|greyscale|greyed|grayscale|grayed|graphictext|gettoks|getmacro|getdimen|getcount|function|fulltriangle|fullsquare|fulldiamond|formatted|format|fmttext|fillup|filloutlinetext|figure|externalfigure|exp|evenly|epsed|eofillup|eofill|eoclip|enlonged|enlarged|drawwholepath|drawpoints|drawpointoptions|drawpointlabels|drawpoint|drawpathoptions|drawpathonly|drawpath|drawoutlinetext|draworiginoptions|draworigin|drawlineoptions|drawlabeloptions|drawfill|drawdoublearrows|drawcontrolpoints|drawcontroloptions|drawcontrollines|drawboundoptions|drawboundingbox|drawboundary|dquote|dppart|downtriangle|dofill|dodraw|disposehash|dispose|dimension|detailpaths|detaileddraw|defineshade|decorated|ddecimal|dddecimal|ddddecimal|cutends|curvedpath|curvedpairs|curvedfunction|curved|crossingunder|crossed|crlf|cotd|cot|cosh|cos|cornered|copylist|constructedpath|constructedpairs|constructedfunction|condition|complemented|complementary|comment|colortype|colorpart|colorlike|colordecimalslist|colordecimals|cmyk|clearxy|circularpath|checkedbounds|checkbounds|centerarrow|center|break|boundingradius|boundingpoint|boundingcircle|boundingbox|bottomenlarged|bottomboundary|blownup|blackcolor|bitmapimage|bcircle|bbwidth|bbheight|basiccolors|autoalign|atan|asinh|asin|asgroup|arrowpath|area|anchored|along|addbackground|acosh|acos|SPACE|PERCENT|MP|DQUOTE|CRLF)(?=[^a-zA-Z\u005C_@!?-ÿ])", "name" : "context.command.metafun.helper.mps" }, "identifier" : { @@ -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|totransform|thru|thelabel|tensepath|takepower|superellipse|stop|softjoin|showproperty|showhashentry|shipit|savepen|round|rotatedaround|rotatedabout|right|relax|reflectedabout|red|range|quartercircle|quadruplet|pt|primitive|pickup|permanent|pensquare|penspec|penrazor|penpos|penlabels|pc|origin|on|off|nullpen|mutable|mod|mm|min|max|makelabel|magenta|loggingall|left|laboff|labels|label|inverse|intersectionpoint|interpath|interact|incr|in|in|immutable|image|identity|hide|halfcircle|green|gobbled|gobble|fullcircle|frozen|font_extra_space|font_coding_scheme|flex|filldraw|fill|extra_setup|extra_endfig|extra_endchar|extra_beginfig|extra_beginchar|exitunless|evenly|endglyph|endfont|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|bymatrix|bye|buildcycle|bp|blue|blankpicture|blacker|black|beginglyph|beginfont|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|showproperty|showhashentry|shipit|savepen|round|rotatedaround|rotatedabout|right|relax|reflectedabout|red|range|quartercircle|quadruplet|pt|primitive|pickup|permanent|pensquare|penspec|penrazor|penpos|penlabels|pc|origin|on|off|nullpen|mutable|mod|mm|min|max|makelabel|magenta|loggingall|left|laboff|labels|label|inverse|intersectionpoint|interpath|interact|incr|in|in|immutable|image|identity|hide|halfcircle|green|gobbled|gobble|fullcircle|frozen|font_extra_space|font_coding_scheme|flex|filldraw|fill|extra_setup|extra_endfig|extra_endchar|extra_beginfig|extra_beginchar|exitunless|evenly|endglyph|endfont|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|closedlines|closedcurve|clearxy|clearpen|clearpen|clearit|change_width|center|ceiling|cc|capsule_end|bymatrix|bye|buildcycle|bp|blue|blankpicture|blacker|black|beginglyph|beginfont|beginfig|beginchar|bbox|background|arrowhead|abs)(?=[^a-zA-Z\u005C_@!?-ÿ])", "name" : "context.plain.plain.mps" }, "primitive" : { diff --git a/metapost/context/base/mpxl/mp-lmtx.mpxl b/metapost/context/base/mpxl/mp-lmtx.mpxl index ec21b150a..c55d7177f 100644 --- a/metapost/context/base/mpxl/mp-lmtx.mpxl +++ b/metapost/context/base/mpxl/mp-lmtx.mpxl @@ -2108,7 +2108,7 @@ vardef lmt_do_svg = w := getparameter "width" ; h := getparameter "height" ; o := getparameter "offset" ; - lua.mp.lmt_svg_include() ; + lua.mp.lmt_svg_include() ; % textext runs twice .. maybe force once here if getparameter "origin" : currentpicture := currentpicture shifted -llcorner currentpicture ; fi ; @@ -2401,3 +2401,4 @@ vardef lmt_do_labtorgb = popparameters ; ) enddef ; + diff --git a/metapost/context/base/mpxl/mp-mlib.mpxl b/metapost/context/base/mpxl/mp-mlib.mpxl index ce0d14b41..e327069ea 100644 --- a/metapost/context/base/mpxl/mp-mlib.mpxl +++ b/metapost/context/base/mpxl/mp-mlib.mpxl @@ -1828,3 +1828,10 @@ vardef uniquelist(suffix list) = enddef ; permanent uniquelist ; + +% This influences the decision for a curve or path segment; 1/4096 is the default but +% 10/2048 works quite well. + +def withtolerance expr n = + withprescript ("tolerance=" & decimal n) +enddef ; diff --git a/metapost/context/base/mpxl/mp-tool.mpxl b/metapost/context/base/mpxl/mp-tool.mpxl index 7ea222fb0..88d34769c 100644 --- a/metapost/context/base/mpxl/mp-tool.mpxl +++ b/metapost/context/base/mpxl/mp-tool.mpxl @@ -3792,7 +3792,23 @@ vardef bymatrix(expr rx, sx, sy, ry, tx, ty) = t enddef ; -permanent totransform, bymatrix ; +% vardef bytopdownmatrix(expr rx, sx, sy, ry, tx, ty) = +% save t ; transform t ; +% xxpart t = rx ; yypart t = ry ; +% xypart t = -sy ; yxpart t = -sx ; +% xpart t = tx ; ypart t = ty ; +% t +% enddef ; + +def closedcurve expr p = + p if not cycle p : .. cycle fi +enddef ; + +def closedlines expr p = + p if not cycle p : -- cycle fi +enddef ; + +permanent totransform, bymatrix, closedcurve, closedlines ; let xslanted = slanted ; diff --git a/tex/context/base/mkii/cont-new.mkii b/tex/context/base/mkii/cont-new.mkii index 1b3a16837..fd0516977 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.03.13 11:18} +\newcontextversion{2021.03.17 17:43} %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 a35156dc5..e04f656a7 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.03.13 11:18} +\edef\contextversion{2021.03.17 17:43} %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 000c25c18..095b149a2 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.03.13 11:18} +\newcontextversion{2021.03.17 17:43} %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 294a062f6..633060dd1 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.03.13 11:18} +\edef\contextversion{2021.03.17 17:43} %D Kind of special: diff --git a/tex/context/base/mkiv/luat-mac.lua b/tex/context/base/mkiv/luat-mac.lua index 3c50a41f8..01857511c 100644 --- a/tex/context/base/mkiv/luat-mac.lua +++ b/tex/context/base/mkiv/luat-mac.lua @@ -185,16 +185,20 @@ local name = (R("AZ","az") + utf8character)^1 local csname = (R("AZ","az") + S("@?!_:-*") + utf8character)^1 local longname = (longleft/"") * (nolong^1) * (longright/"") local variable = P("#") * Cs(name + longname) +local bcsname = P("csname") +local ecsname = escape * P("endcsname") local escapedname = escape * csname -local definer = escape * (P("def") + S("egx") * P("def")) -- tex +local definer = escape * (P("u")^-1 * S("egx")^-1 * P("def")) -- tex local setter = escape * P("set") * (P("u")^-1 * S("egx")^-1) * P("value") -- context specific --- + escape * P("install") * (1-P("handler"))^1 * P("handler") -- context specific +local defcsname = escape * S("egx")^-1 * P("defcsname") + * (1 - ecsname)^1 + * ecsname local startcode = P("\\starttexdefinition") -- context specific local stopcode = P("\\stoptexdefinition") -- context specific local anything = patterns.anything local always = patterns.alwaysmatched -local definer = escape * (P("u")^-1 * S("egx")^-1 * P("def")) -- tex -- The comment nilling can become an option but it nicely compensates the Lua -- parsing here with less parsing at the TeX end. We keep lines so the errors @@ -206,7 +210,6 @@ local definer = escape * (P("u")^-1 * S("egx")^-1 * P("def")) local commenttoken = P("%") local crorlf = S("\n\r") ------ commentline = commenttoken * ((Carg(1) * C((1-crorlf)^0))/function(strip,s) return strip and "" or s end) local commentline = commenttoken * ((1-crorlf)^0) local leadingcomment = (commentline * crorlf^1)^1 local furthercomment = (crorlf^1 * commentline)^1 @@ -229,7 +232,6 @@ local grammar = { "converter", * startcode * spaces * (csname * spaces)^1 -- new: multiple, new:csname instead of name - -- * (declaration + furthercomment + (1 - newline - space))^0 * ((declaration * (space^0/""))^1 + furthercomment + (1 - newline - space))^0 -- accepts #a #b #c * V("texbody") * stopcode @@ -242,10 +244,12 @@ local grammar = { "converter", + (1 - stopcode) )^0, definition = pushlocal - * definer - * spaces^0 - * escapedname --- * (declaration + furthercomment + commentline + (1-leftbrace))^0 + * (definer * spaces^0 * escapedname) + * (declaration + furthercomment + commentline + csname_endcsname + (1-leftbrace))^0 + * V("braced") + * poplocal, + csnamedef = pushlocal + * defcsname * (declaration + furthercomment + commentline + csname_endcsname + (1-leftbrace))^0 * V("braced") * poplocal, @@ -265,11 +269,11 @@ local grammar = { "converter", + leadingcomment -- new per 2012-05-15 (message on mailing list) + nobrace )^0 - -- * rightbrace^-1, -- the -1 catches errors * (rightbrace + Cmt(always,matcherror)), pattern = leadingcomment + V("definition") + + V("csnamedef") + V("setcode") + V("texcode") + furthercomment diff --git a/tex/context/base/mkiv/mult-fun.lua b/tex/context/base/mkiv/mult-fun.lua index 4ecbb1abd..ce94fb3a0 100644 --- a/tex/context/base/mkiv/mult-fun.lua +++ b/tex/context/base/mkiv/mult-fun.lua @@ -202,7 +202,10 @@ return { -- "newcolor", "newrgbcolor", "newcmykcolor", "newnumeric", "newboolean", "newtransform", "newpath", "newpicture", "newstring", "newpair", - + -- "mpvar", + -- + "withtolerance", + -- }, } diff --git a/tex/context/base/mkiv/mult-mps.lua b/tex/context/base/mkiv/mult-mps.lua index a2a74b3b3..49c4f12ae 100644 --- a/tex/context/base/mkiv/mult-mps.lua +++ b/tex/context/base/mkiv/mult-mps.lua @@ -119,7 +119,7 @@ return { -- "mm", "pt", "dd", "bp", "cm", "pc", "cc", "in", -- - "triplet", "quadruplet", "totransform", "bymatrix", + "triplet", "quadruplet", "totransform", "bymatrix", "closedcurve", "closedlines", -- "primitive", "permanent", "immutable", "mutable", "frozen", -- diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf index 012ebe91f..150b4e1bd 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 b0387df70..68a481428 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/mkiv/task-ini.lua b/tex/context/base/mkiv/task-ini.lua index 3e78fb2f9..8270b9112 100644 --- a/tex/context/base/mkiv/task-ini.lua +++ b/tex/context/base/mkiv/task-ini.lua @@ -137,9 +137,16 @@ appendaction("finalizers", "fonts", "builders.paragraphs.solutions.split appendaction("finalizers", "lists", "builders.paragraphs.tag", nil, "nut", "disabled" ) appendaction("finalizers", "lists", "nodes.linefillers.handler", nil, "nut", "disabled" ) + appendaction("contributers", "normalizers", "nodes.handlers.flattenline", nil, "nut", "disabled" ) appendaction("contributers", "normalizers", "nodes.handlers.textbackgrounds", nil, "nut", "disabled" ) +if CONTEXTLMTXMODE > 0 then + +appendaction("contributers", "normalizers", "nodes.handlers.wipe", nil, "nut", "disabled" ) + +end + appendaction("vboxbuilders", "normalizers", "nodes.handlers.backgroundsvbox", nil, "nut", "disabled" ) ------------("vboxbuilders", "normalizers", "typesetters.margins.localhandler", nil, "nut", "disabled" ) appendaction("vboxbuilders", "normalizers", "builders.vspacing.vboxhandler", nil, "nut", "enabled" ) diff --git a/tex/context/base/mkxl/cont-new.mkxl b/tex/context/base/mkxl/cont-new.mkxl index 61707dd62..4597309ef 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.03.13 11:18} +\newcontextversion{2021.03.17 17:43} %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/cont-run.lmt b/tex/context/base/mkxl/cont-run.lmt index 76fd6ba24..4fbf25ebc 100644 --- a/tex/context/base/mkxl/cont-run.lmt +++ b/tex/context/base/mkxl/cont-run.lmt @@ -229,6 +229,16 @@ local function processjob() if not filename or filename == "" then -- skip + elseif suffix == "svg" or arguments.forcesvg then + + report_system("processing svg output: %s",filename) + + context.starttext() + context.startTEXpage() + context.externalfigure ( { filename }, { conversion = "mp" } ) + context.stopTEXpage() + context.stoptext() + elseif suffix == "xml" or arguments.forcexml then -- Maybe we should move the preamble parsing here as it diff --git a/tex/context/base/mkxl/context.mkxl b/tex/context/base/mkxl/context.mkxl index 78ddcbd97..80430f67d 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.03.13 11:18} +\immutable\edef\contextversion{2021.03.17 17:43} %overloadmode 1 % check frozen / warning %overloadmode 2 % check frozen / error @@ -416,6 +416,7 @@ \loadmkxlfile{typo-wrp} \loadmkxlfile{typo-spa} \loadmkxlfile{typo-krn} +\loadmkxlfile{typo-hid} \loadmklxfile{typo-itc} \loadmkxlfile{typo-dir} \loadmkxlfile{typo-brk} diff --git a/tex/context/base/mkxl/font-otj.lmt b/tex/context/base/mkxl/font-otj.lmt index e9e9d524e..301b0672f 100644 --- a/tex/context/base/mkxl/font-otj.lmt +++ b/tex/context/base/mkxl/font-otj.lmt @@ -111,6 +111,7 @@ local setwidth = nuts.setwidth local getwidth = nuts.getwidth local addxymargins = nuts.addxymargins -- we delegate scaling local copynode = nuts.copy +local setattrlist = nuts.setattrlist local nextchar = nuts.traversers.char local nextglue = nuts.traversers.glue @@ -123,6 +124,12 @@ local properties = nodes.properties.data local fontkern = nuts.pool and nuts.pool.fontkern local italickern = nuts.pool and nuts.pool.italickern +local function somekern(makekern,amount,current) + local kern = makekern(leftkern,amount) + setattrlist(kern,current) + return kern +end + local useitalickerns = false local useadvance = false local usezwjkerns = true -- when useadvance @@ -847,7 +854,7 @@ local function inject_kerns_only_kerns(head,where) setwidth(prev,getwidth(prev) + leftkern) end else - head = insert_node_before(head,current,fontkern(leftkern)) + head = insert_node_before(head,current,somekern(fontkern,leftkern,current)) end end end @@ -858,7 +865,7 @@ local function inject_kerns_only_kerns(head,where) if i then local leftkern = i.leftkern if leftkern and leftkern ~= 0 then - setlink(posttail,fontkern(xscaled(current,leftkern))) + setlink(posttail,somekern(fontkern,xscaled(current,leftkern),current)) done = true end end @@ -868,7 +875,7 @@ local function inject_kerns_only_kerns(head,where) if i then local leftkern = i.leftkern if leftkern and leftkern ~= 0 then - setlink(replacetail,fontkern(xscaled(current,leftkern))) + setlink(replacetail,somekern(fontkern,xscaled(current,leftkern),current)) done = true end end @@ -878,7 +885,7 @@ local function inject_kerns_only_kerns(head,where) -- glyph|disc|glyph (special case) local leftkern = i.leftkern if leftkern and leftkern ~= 0 then - replace = fontkern(xscaled(current,leftkern)) + replace = somekern(fontkern,xscaled(current,leftkern),current) done = true end end @@ -906,7 +913,7 @@ local function inject_kerns_only_kerns(head,where) if i then local leftkern = i.leftkern if leftkern and leftkern ~= 0 then - pre = insert_node_before(pre,n,fontkern(xscaled(n,leftkern))) + pre = insert_node_before(pre,n,somekern(fontkern,xscaled(n,leftkern),n)) done = true end end @@ -922,7 +929,7 @@ local function inject_kerns_only_kerns(head,where) if i then local leftkern = i.leftkern if leftkern and leftkern ~= 0 then - post = insert_node_before(post,n,fontkern(xscaled(n,leftkern))) + post = insert_node_before(post,n,somekern(fontkern,xscaled(n,leftkern),n)) done = true end end @@ -938,7 +945,7 @@ local function inject_kerns_only_kerns(head,where) if i then local leftkern = i.leftkern if leftkern and leftkern ~= 0 then - replace = insert_node_before(replace,n,fontkern(xscaled(n,leftkern))) + replace = insert_node_before(replace,n,somekern(fontkern,xscaled(n,leftkern),n)) done = true end end @@ -1014,7 +1021,7 @@ local function inject_kerns_only_margins(head,where) setchar(replace,0x200D) -- zwj addxymargins(replace,-leftkern) else - replace = fontkern(xscaled(current,leftkern)) + replace = somekern(fontkern,xscaled(current,leftkern),current) end setdisc(prevdisc,pre,post,replace) -- setreplace end @@ -1459,7 +1466,7 @@ local function inject_positions_only_kerns(head,where) setwidth(prev,getwidth(prev)+leftkern) end else - head = insert_node_before(head,current,fontkern(leftkern)) + head = insert_node_before(head,current,somekern(fontkern,leftkern,current)) end end if rightkern ~= 0 then @@ -1470,7 +1477,7 @@ local function inject_positions_only_kerns(head,where) setwidth(next, getwidth(next)+rightkern) end else - insert_node_after(head,current,fontkern(rightkern)) + insert_node_after(head,current,somekern(fontkern,rightkern,current)) end end else @@ -1483,7 +1490,7 @@ local function inject_positions_only_kerns(head,where) if replace then -- error, we expect an empty one else - replace = fontkern(xscaled(current,rightkern)) -- maybe also leftkern + replace = somekern(fontkern,xscaled(current,rightkern),current) -- maybe also leftkern done = true --KE end end @@ -1497,7 +1504,7 @@ local function inject_positions_only_kerns(head,where) if i then local leftkern = i.leftkern if leftkern and leftkern ~= 0 then - setlink(posttail,fontkern(xscaled(current,leftkern))) + setlink(posttail,somekern(fontkern,xscaled(current,leftkern),current)) done = true end end @@ -1507,7 +1514,7 @@ local function inject_positions_only_kerns(head,where) if i then local leftkern = i.leftkern if leftkern and leftkern ~= 0 then - setlink(replacetail,fontkern(xscaled(current,leftkern))) + setlink(replacetail,somekern(fontkern,xscaled(current,leftkern),current)) done = true end end @@ -1517,7 +1524,7 @@ local function inject_positions_only_kerns(head,where) -- new .. okay? local leftkern = i.leftkern if leftkern and leftkern ~= 0 then - replace = fontkern(xscaled(current,leftkern)) + replace = somekern(fontkern,xscaled(current,leftkern),current) done = true end end @@ -1549,11 +1556,11 @@ local function inject_positions_only_kerns(head,where) addyoffset(n,yscaled(n,yoffset)) end if leftkern and leftkern ~= 0 then - pre = insert_node_before(pre,n,fontkern(xscaled(n,leftkern))) + pre = insert_node_before(pre,n,somekern(fontkern,xscaled(n,leftkern),n)) done = true end if rightkern and rightkern ~= 0 then - insert_node_after(pre,n,fontkern(xscaled(n,rightkern))) + insert_node_after(pre,n,somekern(fontkern,xscaled(n,rightkern),n)) done = true end end @@ -1574,11 +1581,11 @@ local function inject_positions_only_kerns(head,where) addyoffset(n,yscaled(n,yoffset)) end if leftkern and leftkern ~= 0 then - post = insert_node_before(post,n,fontkern(xscaled(n,leftkern))) + post = insert_node_before(post,n,somekern(fontkern,xscaled(n,leftkern),n)) done = true end if rightkern and rightkern ~= 0 then - insert_node_after(post,n,fontkern(xscaled(n,rightkern))) + insert_node_after(post,n,somekern(fontkern,xscaled(n,rightkern),n)) done = true end end @@ -1599,11 +1606,11 @@ local function inject_positions_only_kerns(head,where) addyoffset(n,yscaled(n,yoffset)) end if leftkern and leftkern ~= 0 then - replace = insert_node_before(replace,n,fontkern(xscaled(n,leftkern))) + replace = insert_node_before(replace,n,somekern(fontkern,xscaled(n,leftkern),n)) done = true end if rightkern and rightkern ~= 0 then - insert_node_after(replace,n,fontkern(xscaled(n,rightkern))) + insert_node_after(replace,n,somekern(fontkern,xscaled(n,rightkern),n)) done = true end end @@ -1620,7 +1627,7 @@ local function inject_positions_only_kerns(head,where) -- glyph|pre glyphs local rightkern = i.rightkern if rightkern and rightkern ~= 0 then - pre = insert_node_before(pre,pre,fontkern(xscaled(prevglyph,rightkern))) + pre = insert_node_before(pre,pre,somekern(fontkern,xscaled(prevglyph,rightkern),prevglyph)) done = true end end @@ -1634,7 +1641,7 @@ local function inject_positions_only_kerns(head,where) -- glyph|replace glyphs local rightkern = i.rightkern if rightkern and rightkern ~= 0 then - replace = insert_node_before(replace,replace,fontkern(xscaled(prevglyph,rightkern))) + replace = insert_node_before(replace,replace,somekern(fontkern,xscaled(prevglyph,rightkern),prevglyph)) done = true end end @@ -1709,7 +1716,7 @@ local function inject_positions_only_margins(head,where) setchar(replace,0x200D) -- zwj addxymargins(replace,false,-rightkern) else - replace = fontkern(xscaled(current,rightkern)) -- maybe also leftkern + replace = somekern(fontkern,xscaled(current,rightkern),current) -- maybe also leftkern end done = true --KE end @@ -1746,7 +1753,7 @@ local function inject_positions_only_margins(head,where) setchar(replace,0x200D) -- zwj addxymargins(replace,-leftkern) else - replace = fontkern(xscaled(current,leftkern)) + replace = somekern(fontkern,xscaled(current,leftkern),current) end setdisc(prevdisc,pre,post,replace) end @@ -1934,8 +1941,8 @@ local function processmark(p,n,pn) -- p = basenode -- -- todo: head and check for prev / next kern -- - insert_node_before(n,n,fontkern(-wn)) - insert_node_after(n,n,fontkern(-wn)) + insert_node_before(n,n,somekern(fontkern,-wn,n)) + insert_node_after(n,n,somekern(fontkern,-wn,n)) end end end @@ -2062,7 +2069,7 @@ local function inject_everything(head,where) setwidth(prev, getwidth(prev) + leftkern) end else - head = insert_node_before(head,current,fontkern(leftkern)) + head = insert_node_before(head,current,somekern(fontkern,leftkern,current)) end end if rightkern and rightkern ~= 0 then @@ -2074,7 +2081,7 @@ local function inject_everything(head,where) setwidth(next, getwidth(next) + rightkern) end else - insert_node_after(head,current,fontkern(rightkern)) + insert_node_after(head,current,somekern(fontkern,rightkern,current)) end end end @@ -2088,7 +2095,7 @@ local function inject_everything(head,where) if replace then -- error, we expect an empty one else - replace = fontkern(xscaled(current,rightkern)) + replace = somekern(fontkern,xscaled(current,rightkern),current) done = true end end @@ -2103,7 +2110,7 @@ local function inject_everything(head,where) if i then local leftkern = i.leftkern if leftkern and leftkern ~= 0 then - setlink(posttail,fontkern(xscaled(current,leftkern))) + setlink(posttail,somekern(fontkern,xscaled(current,leftkern),current)) done = true end end @@ -2113,7 +2120,7 @@ local function inject_everything(head,where) if i then local leftkern = i.leftkern if leftkern and leftkern ~= 0 then - setlink(replacetail,fontkern(xscaled(current,leftkern))) + setlink(replacetail,somekern(fontkern,xscaled(current,leftkern),current)) done = true end end @@ -2122,7 +2129,7 @@ local function inject_everything(head,where) if i then local leftkern = i.leftkern if leftkern and leftkern ~= 0 then - replace = fontkern(xscaled(current,leftkern)) + replace = somekern(fontkern,xscaled(current,leftkern),current) done = true end end @@ -2168,12 +2175,12 @@ local function inject_everything(head,where) end local leftkern = i.leftkern if leftkern and leftkern ~= 0 then - pre = insert_node_before(pre,n,fontkern(xscaled(n,leftkern))) + pre = insert_node_before(pre,n,somekern(fontkern,xscaled(n,leftkern),n)) done = true end local rightkern = i.rightkern if rightkern and rightkern ~= 0 then - insert_node_after(pre,n,fontkern(xscaled(n,rightkern))) + insert_node_after(pre,n,somekern(fontkern,xscaled(n,rightkern),n)) done = true end if hasmarks then @@ -2199,13 +2206,13 @@ local function inject_everything(head,where) end local leftkern = i.leftkern if leftkern and leftkern ~= 0 then - post = insert_node_before(post,n,fontkern(xscaled(n,leftkern))) + post = insert_node_before(post,n,somekern(fontkern,xscaled(n,leftkern),n)) done = true end local rightkern = i.rightkern if rightkern and rightkern ~= 0 then done = true - insert_node_after(post,n,fontkern(xscaled(n,rightkern))) + insert_node_after(post,n,somekern(fontkern,xscaled(n,rightkern),n)) end if hasmarks then local pm = i.markbasenode @@ -2230,12 +2237,12 @@ local function inject_everything(head,where) end local leftkern = i.leftkern if leftkern and leftkern ~= 0 then - replace = insert_node_before(replace,n,fontkern(xscaled(n,leftkern))) + replace = insert_node_before(replace,n,somekern(fontkern,xscaled(n,leftkern),n)) done = true end local rightkern = i.rightkern if rightkern and rightkern ~= 0 then - insert_node_after(replace,n,fontkern(xscaled(n,rightkern))) + insert_node_after(replace,n,somekern(fontkern,xscaled(n,rightkern),n)) done = true end if hasmarks then @@ -2257,7 +2264,7 @@ local function inject_everything(head,where) -- glyph|pre glyphs local rightkern = i.rightkern if rightkern and rightkern ~= 0 then - pre = insert_node_before(pre,pre,fontkern(xscaled(prevglyph,rightkern))) + pre = insert_node_before(pre,pre,somekern(fontkern,xscaled(prevglyph,rightkern),prevglyph)) done = true end end @@ -2271,7 +2278,7 @@ local function inject_everything(head,where) -- glyph|replace glyphs local rightkern = i.rightkern if rightkern and rightkern ~= 0 then - replace = insert_node_before(replace,replace,fontkern(xscaled(prevglyph,rightkern))) + replace = insert_node_before(replace,replace,somekern(fontkern,xscaled(prevglyph,rightkern),prevglyph)) done = true end end diff --git a/tex/context/base/mkxl/font-pre.mkxl b/tex/context/base/mkxl/font-pre.mkxl index e6e6930e1..7f1aa5f7f 100644 --- a/tex/context/base/mkxl/font-pre.mkxl +++ b/tex/context/base/mkxl/font-pre.mkxl @@ -426,6 +426,12 @@ % \adaptfontfeature[*math*][mathnolimitsmode=1000] % only subscript +\definefontfeature + [collapseitalics] + [collapseitalics=yes] + +% \definefontfeature[mathextra][collapseitalics] + \definefontfeature [mathematics-l2r] [mathematics] diff --git a/tex/context/base/mkxl/grph-inc.mkxl b/tex/context/base/mkxl/grph-inc.mkxl index 3c2e8e5c1..5bd829e00 100644 --- a/tex/context/base/mkxl/grph-inc.mkxl +++ b/tex/context/base/mkxl/grph-inc.mkxl @@ -601,11 +601,17 @@ %D Internal graphics are handled at the \TEX\ end: +% strut=none also avoids the \noindent! otherwise we're in hmode when +% blank happens and we get a lineskip + \def\grph_include_process_tex#1% {\framed - [\c!strut=\v!no,\c!align=\v!normal,\c!frame=\v!off, + [\c!strut=\v!none,\c!align=\v!normal,\c!frame=\v!off, \c!offset=\v!overlay,\c!width=\v!fit,\c!height=\v!fit] - {\blank[\v!disable]#1\endgraf\removelastskip}} % disable should stay here! + {\blank[\v!disable]% + #1\endgraf + \removelastskip}} % disable should stay here! + % used al lua end: diff --git a/tex/context/base/mkxl/math-frc.mkxl b/tex/context/base/mkxl/math-frc.mkxl index 8295195b5..dfdb7144f 100644 --- a/tex/context/base/mkxl/math-frc.mkxl +++ b/tex/context/base/mkxl/math-frc.mkxl @@ -173,17 +173,17 @@ {\enforced\let\m_fractions_strut_top\relax \enforced\let\m_fractions_strut_bot\relax} -\setvalue{\??mathfractionstrut\v!yes}% +\defcsname\??mathfractionstrut\v!yes\endcsname {\enforced\let\m_fractions_strut_top\mathstrut \enforced\let\m_fractions_strut_bot\mathstrut} -\setvalue{\??mathfractionstrut\v!math}% +\defcsname\??mathfractionstrut\v!math\endcsname {\enforced\let\m_fractions_strut_top\mathstrut \enforced\let\m_fractions_strut_bot\mathstrut} -\letvalue{\??mathfractionstrut\v!no}\math_frac_no_strut +\letcsname\??mathfractionstrut\v!no\endcsname\math_frac_no_strut -\setvalue{\??mathfractionstrut\v!tight}% +\defcsname\??mathfractionstrut\v!tight\endcsname {\enforced\let\m_fractions_strut_top\mathbotstrut % indeed swapped name \enforced\let\m_fractions_strut_bot\mathtopstrut} % indeed swapped name @@ -255,21 +255,21 @@ % the denominator is in cramped! -\setvalue{\??mathfractionalternative\v!inner}% +\defcsname\??mathfractionalternative\v!inner\endcsname {\ifcase\d_math_fraction_margin \expandafter\math_fraction_inner_normal \else \expandafter\math_fraction_inner_margin \fi} -\setvalue{\??mathfractionalternative\v!outer}% +\defcsname\??mathfractionalternative\v!outer\endcsname {\ifcase\d_math_fraction_margin \expandafter\math_fraction_outer_normal \else \expandafter\math_fraction_outer_margin \fi} -\setvalue{\??mathfractionalternative\v!both}% +\defcsname\??mathfractionalternative\v!both\endcsname {\ifcase\d_math_fraction_margin \expandafter\math_fraction_both_normal \else @@ -310,7 +310,7 @@ % }% % \math_frac_wrapup} % -% \def\math_fraction_inner_margin#1#2% +% \def n_inner_margin#1#2% % {\Ustack{% % {% % {\kern\d_math_fraction_margin diff --git a/tex/context/base/mkxl/meta-tex.mkxl b/tex/context/base/mkxl/meta-tex.mkxl index 5937ce408..00ad3a58b 100644 --- a/tex/context/base/mkxl/meta-tex.mkxl +++ b/tex/context/base/mkxl/meta-tex.mkxl @@ -166,70 +166,137 @@ \installcorenamespace {svgfamily} -\setvalue{\??svgfamily }{serif} -\setvalue{\??svgfamily serif}{serif} -\setvalue{\??svgfamily sans}{sans} -\setvalue{\??svgfamily mono}{mono} +\defcsname\??svgfamily \endcsname{serif} +\defcsname\??svgfamily serif\endcsname{serif} +\defcsname\??svgfamily sans\endcsname{sans} +\defcsname\??svgfamily mono\endcsname{mono} -%D This can't change because otherwise \type {\scale[width=4cm]{graphic}} fails. +\definelayer[svgmps][\c!method=\v!fit] -\permanent\protected\def\svgscaled#1% - {\fastsxsy{#1}{#1}\svgnormal} +\permanent\protected\def\svghashed#1% + {\clf_svghashed#1\relax} -\permanent\protected\def\svgnormal#1#2#3#4% family weight style text - {\bgroup - \edef\p_family{#1}% - \ifempty\p_family\else - \edef\p_font{\ifcsname\??svgfamily#1\endcsname\lastnamedcs\else#1\fi-#2-#3}% - \predefinedfont[\s!spec:\p_font*\s!default\space @ 10bp]% - \fi - #4% - \egroup} +\permanent\protected\def\svg_normal_poscode#1#2#3% + {\glyph xoffset #1\onebasepoint yoffset #2\onebasepoint #3\relax} -\permanent\protected\def\svgcolored#1#2#3#4% r g b text - {\colored[r=#1,g=#2,b=#3]{#4}} +\permanent\protected\def\svg_normal_poschar#1#2#3% + {\glyph xoffset #1\onebasepoint yoffset #2\onebasepoint `#3\relax} + +\permanent\protected\def\svg_normal_posspace#1#2% + {\space} + +\permanent\protected\def\svg_normal_space#1% + {\space} -% \permanent\protected\def\svgplaced#1#2#3#4% dx dy width text -% {\doifelsenothing{#3}% -% {\hpack}% -% {\hpack to #3}% -% {\raise#2\onebasepoint\hbox{\kern#1\onebasepoint\relax#4}}} - -\permanent\protected\def\svgplaced#1#2#3#4% dx dy width text - {\doifelsenothing{#3}% - {\hpack}% - {\hpack to #3}% - {\offsetbox[\c!y=#2]\hbox{\kern#1\relax#4}}} - -\newdimen\grph_svg_scratchwidth % maybe \startsvgpos etc - -\permanent\protected\def\svgposchar#1#2#3% dx dy char - {\setbox\scratchbox\hpack\bgroup - \raise#2\onebasepoint\hbox\bgroup - \kern\dimexpr#1\onebasepoint-\grph_svg_scratchwidth\relax - \char#3\relax - \egroup - \egroup - \advance\grph_svg_scratchwidth\wd\scratchbox - \box\scratchbox} - -\permanent\protected\def\svgchar#1% char +\permanent\protected\def\svg_normal_code#1% {\char#1\relax} -\definelayer[svgmps][\c!method=\v!fit] +\permanent\protected\def\svg_normal_char#1% + {#1\relax} -\permanent\protected\def\svgstartlayer +\permanent\protected\def\svg_normal_startlayer {\resetlayer[svgmps]% \setlayer[svgmps]\bgroup} -\permanent\protected\def\svgstoplayer +\permanent\protected\def\svg_normal_stoplayer {\egroup \flushlayer[svgmps]} -\permanent\protected\def\svgsetlayer#1#2% - {\setlayer[svgmps][\c!x=#1\onebasepoint,\c!y=#2\onebasepoint]} % {#3} +\permanent\protected\def\svg_normal_colored#1#2#3#4% + {\colored[r=#1,g=#2,b=#3]{#4}} -\permanent\protected\def\svghashed#1% - {\clf_svghashed#1\relax} +\permanent\protected\def\svg_normal_setlayer#1#2#3% + {\setlayer[svgmps]{\hbox xoffset #1\onebasepoint yoffset #2\onebasepoint to 10sp{#3}}} + +\permanent\protected\def\svg_normal_scaled#1#2#3#4#5% + {\hbox\bgroup + \edef\p_family{#2}% + \ifempty\p_family\else + \edef\p_font{\ifcsname\??svgfamily#2\endcsname\lastnamedcs\else#2\fi-#3-#4}% + \predefinedfont[\s!spec:\p_font*\s!default\space @ 10bp]% + \fi + \glyphscale\numericscale#1\relax % we need a period ! + #5% + \egroup} + +\permanent\protected\def\svg_traced_poscode#1#2#3% + {\writestatus{SVG TEXT}{....[poscode #1 #2 \Uchar #3]}% + \svg_normal_poscode{#1}{#2}{#3}} + +\permanent\protected\def\svg_traced_poschar#1#2#3% + {\writestatus{SVG TEXT}{....[poschar #1 #2 #3]}% + \svg_normal_poschar{#1}{#2}{#3}} + +\permanent\protected\def\svg_traced_posspace#1#2% + {\writestatus{SVG TEXT}{....[posspace #1 #2]}% + \svg_normal_posspace{#1}{#2}} + +\permanent\protected\def\svg_traced_code#1% + {\writestatus{SVG TEXT}{....[char \Uchar #1]}% + \svg_normal_code{#1}} + +\permanent\protected\def\svg_traced_char#1% + {\writestatus{SVG TEXT}{....[char #1]}% + \svg_normal_char{#1}} + +\permanent\protected\def\svg_traced_space + {\writestatus{SVG TEXT}{....[space]}% + \svg_normal_space} + +\permanent\protected\def\svg_traced_startlayer + {\writestatus{SVG TEXT}{[start layer]}% + \svg_normal_startlayer} + +\permanent\protected\def\svg_traced_stoplayer + {\svg_normal_stoplayer + \writestatus{SVG TEXT}{[stop layer]}} + +\permanent\protected\def\svg_traced_colored#1#2#3#4% + {\writestatus{SVG TEXT}{.[start color #1 #2 #3]}% + \svg_normal_colored{#1}{#2}{#3}{#4}% + \writestatus{SVG TEXT}{.[stop color]}} + +\permanent\protected\def\svg_traced_setlayer#1#2#3% + {\writestatus{SVG TEXT}{...[start set layer #1 #2]}% + \svg_normal_setlayer{#1}{#2}{#3}% + \writestatus{SVG TEXT}{...[stop set setlayer]}} + +\permanent\protected\def\svg_traced_scaled#1#2#3#4#5% + {\writestatus{SVG TEXT}{..[start scaled font #1 #2 #3 #4]}% + \svg_normal_scaled{#1}{#2}{#3}{#4}{#5}% + \writestatus{SVG TEXT}{..[stop scaled font]}} + +\permanent\protected\def\svg_normal_text + {\let\svgposcode \svg_normal_poscode + \let\svgposchar \svg_normal_poschar + \let\svgposspace \svg_normal_posspace + \let\svgcode \svg_normal_code + \let\svgchar \svg_normal_char + \let\svgspace \svg_normal_space + \let\svgstartlayer\svg_normal_startlayer + \let\svgstoplayer \svg_normal_stoplayer + \let\svgcolored \svg_normal_colored + \let\svgsetlayer \svg_normal_setlayer + \let\svgscaled \svg_normal_scaled} + +\permanent\protected\def\svg_traced_text + {\let\svgposcode \svg_traced_poscode + \let\svgposchar \svg_traced_poschar + \let\svgposspace \svg_traced_posspace + \let\svgcode \svg_traced_code + \let\svgchar \svg_traced_char + \let\svgspace \svg_traced_space + \let\svgstartlayer\svg_traced_startlayer + \let\svgstoplayer \svg_traced_stoplayer + \let\svgcolored \svg_traced_colored + \let\svgsetlayer \svg_traced_setlayer + \let\svgscaled \svg_traced_scaled} + +\installtextracker + {svg.text} + {\svg_traced_text} + {\svg_normal_text} + +\svg_normal_text \protect \endinput diff --git a/tex/context/base/mkxl/mlib-pdf.lmt b/tex/context/base/mkxl/mlib-pdf.lmt index c383d52de..f3226d14d 100644 --- a/tex/context/base/mkxl/mlib-pdf.lmt +++ b/tex/context/base/mkxl/mlib-pdf.lmt @@ -68,14 +68,9 @@ trackers.register("metapost.forcestroke",function(v) force_stroke = v end) --- Because in MKiV we always have two passes, we save the objects. When an extra --- mp run is done (due to for instance texts identifier in the parse pass), we --- get a new result table and the stored objects are forgotten. Otherwise they --- are reused. - -local function getobjects(result,figure,index) - return figure:objects() -end +-- local function gettolerance(objects) +-- return objects:tolerance() +-- end function metapost.convert(specification,result) local flusher = specification.flusher @@ -116,8 +111,6 @@ function pdfflusher.textfigure(font,size,text,width,height,depth) -- we could sa context.MPtextext(font,size,text,0,-number.dimenfactors.bp*depth) end -local bend_tolerance = 131/65536 - local rx, sx, sy, ry, tx, ty, divider = 1, 0, 0, 1, 0, 0, 1 local function pen_characteristics(object) @@ -131,18 +124,39 @@ local function mpconcat(px, py) -- no tx, ty here / we can move this one inline return (sy*px-ry*py)/divider,(sx*py-rx*px)/divider end -local function curved(ith,pth) +local getbendtolerance = metapost.getbendtolerance + +local function curved(ith,pth,tolerance) --- still better than the build in + -- if pth.right_x == pth.x_coord then + -- if pth.right_y == pth.y_coord then + -- if ith.left_x == ith.x_coord then + -- if ith.left_y == ith.y_coord then + -- return false + -- end + -- end + -- end + -- end local d = pth.left_x - ith.right_x - if abs(ith.right_x - ith.x_coord - d) <= bend_tolerance and abs(pth.x_coord - pth.left_x - d) <= bend_tolerance then - d = pth.left_y - ith.right_y - if abs(ith.right_y - ith.y_coord - d) <= bend_tolerance and abs(pth.y_coord - pth.left_y - d) <= bend_tolerance then - return false + local b = abs(ith.right_x - ith.x_coord - d) + if b <= tolerance then + b = abs(pth.x_coord - pth.left_x - d) + if b <= tolerance then + d = pth.left_y - ith.right_y + b = abs(ith.right_y - ith.y_coord - d) + if b <= tolerance then + b = abs(pth.y_coord - pth.left_y - d) + if b <= tolerance then +-- print(tolerance,ith.curved,pth.curved,false) + return false + end + end end end +-- print(tolerance,ith.curved,pth.curved,true) return true end -local function flushnormalpath(path, t, open) +local function flushnormalpath(path, t, open, tolerance) local pth, ith, nt local length = #path if t then @@ -156,8 +170,8 @@ local function flushnormalpath(path, t, open) pth = path[i] if not ith then t[nt] = f_m(pth.x_coord,pth.y_coord) --- elseif curved(ith,pth) then -elseif pth.curved then + elseif curved(ith,pth,tolerance) then +-- elseif pth.curved then t[nt] = f_c(ith.right_x,ith.right_y,pth.left_x,pth.left_y,pth.x_coord,pth.y_coord) else t[nt] = f_l(pth.x_coord,pth.y_coord) @@ -167,8 +181,8 @@ elseif pth.curved then if not open then nt = nt + 1 local one = path[1] --- if curved(pth,one) then -if one.curved then + if curved(pth,one,tolerance) then +-- if one.curved then t[nt] = f_c(pth.right_x,pth.right_y,one.left_x,one.left_y,one.x_coord,one.y_coord) else t[nt] = f_l(one.x_coord,one.y_coord) @@ -182,7 +196,7 @@ if one.curved then return t end -local function flushconcatpath(path, t, open) +local function flushconcatpath(path, t, open, tolerance) local pth, ith, nt local length = #path if t then @@ -198,8 +212,8 @@ local function flushconcatpath(path, t, open) pth = path[i] if not ith then t[nt] = f_m(mpconcat(pth.x_coord,pth.y_coord)) --- elseif curved(ith,pth) then -elseif pth.curved then + elseif curved(ith,pth,tolerance) then +-- elseif pth.curved then local a, b = mpconcat(ith.right_x,ith.right_y) local c, d = mpconcat(pth.left_x,pth.left_y) t[nt] = f_c(a,b,c,d,mpconcat(pth.x_coord,pth.y_coord)) @@ -211,8 +225,8 @@ elseif pth.curved then if not open then nt = nt + 1 local one = path[1] --- if curved(pth,one) then -if one.curved then + if curved(pth,one,tolerance) then +-- if one.curved then local a, b = mpconcat(pth.right_x,pth.right_y) local c, d = mpconcat(one.left_x,one.left_y) t[nt] = f_c(a,b,c,d,mpconcat(one.x_coord, one.y_coord)) @@ -256,7 +270,10 @@ local function toboundingbox(path) end end -metapost.flushnormalpath = flushnormalpath + +function metapost.flushnormalpath(path, t, open, tolerance) + return flushnormalpath(path, t, open, tolerance or getbendtolerance()) +end -- The flusher is pdf based, if another backend is used, we need to overload the -- flusher; this is beta code, the organization will change (already upgraded in @@ -376,7 +393,8 @@ 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 objects = getobjects(result,figure,index) + local objects = figure:objects() + local tolerance = figure:tolerance() or getbendtolerance() local result = { } local miterlimit = -1 local linecap = -1 @@ -424,26 +442,28 @@ function metapost.flush(specification,result) __index = original }) local before, - after = processplugins(object) + after, + options = processplugins(object) local evenodd = false local collect = false local both = false local flush = false local postscript = object.postscript - 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 + 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 @@ -520,9 +540,9 @@ function metapost.flush(specification,result) for i=1,#savedpath do local path = savedpath[i] if transformed then - flushconcatpath(path,result,open) + flushconcatpath(path,result,open,tolerance) else - flushnormalpath(path,result,open) + flushnormalpath(path,result,open,tolerance) end end savedpath = nil @@ -530,9 +550,9 @@ function metapost.flush(specification,result) if flush then -- ignore this path elseif transformed then - flushconcatpath(path,result,open) + flushconcatpath(path,result,open,tolerance) else - flushnormalpath(path,result,open) + flushnormalpath(path,result,open,tolerance) end if force_stroke then result[#result+1] = open and "S" or "h S" @@ -560,18 +580,18 @@ function metapost.flush(specification,result) for i=1,#savedhtap do local path = savedhtap[i] if transformed then - flushconcatpath(path,result,open) + flushconcatpath(path,result,open,tolerance) else - flushnormalpath(path,result,open) + flushnormalpath(path,result,open,tolerance) end end savedhtap = nil evenodd = true end if transformed then - flushconcatpath(path,result,open) + flushconcatpath(path,result,open,tolerance) else - flushnormalpath(path,result,open) + flushnormalpath(path,result,open,tolerance) end if force_stroke then result[#result+1] = open and "S" or "h S" @@ -595,9 +615,10 @@ function metapost.flush(specification,result) 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 = not object.istext and object.postscript == "evenodd" + local evenodd = object.postscript == "evenodd" result[#result+1] = "q" - flushnormalpath(object.path,result,false) + 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" @@ -715,7 +736,7 @@ function metapost.totable(result,askedfig) local figure = result and result.fig and result.fig[1] if figure then local results = { } - local objects = getobjects(result,figure,askedfig) + local objects = figure:objects() for o=1,#objects do local object = objects[o] local result = { } diff --git a/tex/context/base/mkxl/mlib-pps.lmt b/tex/context/base/mkxl/mlib-pps.lmt index 32f23c39d..d668d1b10 100644 --- a/tex/context/base/mkxl/mlib-pps.lmt +++ b/tex/context/base/mkxl/mlib-pps.lmt @@ -709,15 +709,16 @@ function metapost.processplugins(object) -- each object (second pass) if top and top.plugmode then local prescript = object.prescript -- specifications if prescript and #prescript > 0 then - local before = { } - local after = { } - processoractions.runner(object,splitprescript(prescript) or { },before,after) - return #before > 0 and before, #after > 0 and after + local before = { } + local after = { } + local options = splitprescript(prescript) or { } + processoractions.runner(object,options,before,after) + return #before > 0 and before, #after > 0 and after, options else local c = object.color if c and #c > 0 then local b, a = colorconverter(c) - return { b }, { a } + return { b }, { a }, { } end end end diff --git a/tex/context/base/mkxl/mlib-run.lmt b/tex/context/base/mkxl/mlib-run.lmt index eacb148cc..c85acdee3 100644 --- a/tex/context/base/mkxl/mlib-run.lmt +++ b/tex/context/base/mkxl/mlib-run.lmt @@ -184,6 +184,19 @@ end local seed = nil +local default_tolerance = 131/65536.0 -- a little below 0.001 * 0x7FFF/0x4000 +local bend_tolerance = default_tolerance + +----- bend_tolerance = 10/2000 + +function metapost.setbendtolerance(t) + bend_tolerance = t or default_tolerance +end + +function metapost.getbendtolerance() + return bend_tolerance +end + function metapost.load(name,method) starttiming(mplib) if not seed then @@ -198,6 +211,7 @@ function metapost.load(name,method) local mpx, terminal = new_instance { -- noninteractive = true; -- ini_version = true, + tolerance = bend_tolerance, math_mode = method, run_script = metapost.runscript, script_error = metapost.scripterror, diff --git a/tex/context/base/mkxl/mlib-svg.lmt b/tex/context/base/mkxl/mlib-svg.lmt index dca2b6d19..e405eaa8d 100644 --- a/tex/context/base/mkxl/mlib-svg.lmt +++ b/tex/context/base/mkxl/mlib-svg.lmt @@ -129,6 +129,9 @@ local trace_fonts = false trackers.register("metapost.svg.fonts", function(v) -- This is just an experiment. Todo: reset hash etc. Also implement -- an option handler. +local s_draw_image_start = "draw image (" +local s_draw_image_stop = ") ;" + local svghash = false do local svglast = 0 @@ -477,12 +480,12 @@ local colorcomponents, withcolor, thecolor, usedcolors do whitesmoke = 0xF5F5F5, yellow = 0xFFFF00, yellowgreen = 0x9ACD32, } - local f_rgb = formatters['withcolor svgcolor(%.3N,%.3N,%.3N)'] - local f_cmyk = formatters['withcolor svgcmyk(%.3N,%.3N,%.3N,%.3N)'] - local f_gray = formatters['withcolor svggray(%.3N)'] - local f_rgba = formatters['withcolor svgcolor(%.3N,%.3N,%.3N) withtransparency (1,%.3N)'] - local f_graya = formatters['withcolor svggray(%.3N) withtransparency (1,%.3N)'] - local f_name = formatters['withcolor "%s"'] + local f_rgb = formatters[' withcolor svgcolor(%.3N,%.3N,%.3N)'] + local f_cmyk = formatters[' withcolor svgcmyk(%.3N,%.3N,%.3N,%.3N)'] + local f_gray = formatters[' withcolor svggray(%.3N)'] + local f_rgba = formatters[' withcolor svgcolor(%.3N,%.3N,%.3N) withtransparency (2,1-%.3N)'] + local f_graya = formatters[' withcolor svggray(%.3N) withtransparency (2,1-%.3N)'] + local f_name = formatters[' withcolor "%s"'] local f_svgrgb = formatters['svgcolor(%.3N,%.3N,%.3N)'] local f_svgcmyk = formatters['svgcmyk(%.3N,%.3N,%.3N,%.3N)'] local f_svggray = formatters['svggray(%.3N)'] @@ -1166,104 +1169,129 @@ end -- todo: viewbox helper -local s_wrapped_start = "draw image (" +local s_wrapped_start = s_draw_image_start local f_wrapped_stop = formatters[") shifted (0,%N) scaled %N ;"] local handletransform, handleviewbox do local sind = math.sind - --todo: better lpeg - - local f_rotatedaround = formatters[" rotatedaround((%N,%N),%N)"] - local f_rotated = formatters[" rotated(%N)"] - local f_shifted = formatters[" shifted(%N,%N)"] - local f_slanted_x = formatters[" xslanted(%N)"] - local f_slanted_y = formatters[" yslanted(%N)"] - local f_scaled = formatters[" scaled(%N)"] - local f_xyscaled = formatters[" xyscaled(%N,%N)"] - local f_matrix = formatters[" transformed bymatrix(%N,%N,%N,%N,%N,%N)"] - + -- local f_rotatedaround = formatters["svg_p := svg_p rotatedaround((%N,%N),%N) ;"] + -- local f_rotated = formatters["svg_p := svg_p rotated(%N) ;"] + -- local f_shifted = formatters["svg_p := svg_p shifted(%N,%N) ;"] + -- local f_slanted_x = formatters["svg_p := svg_p xslanted(%N) ;"] + -- local f_slanted_y = formatters["svg_p := svg_p yslanted(%N) ;"] + -- local f_scaled = formatters["svg_p := svg_p scaled(%N) ;"] + -- local f_xyscaled = formatters["svg_p := svg_p xyscaled(%N,%N) ;"] + -- local f_matrix = formatters["svg_p := svg_p transformed bymatrix(%N,%N,%N,%N,%N,%N) ;"] + -- local s_transform_start = "draw image ( begingroup ; save svg_p ; picture svg_p ; svg_p := image ( " + -- local f_transform_stop = formatters[" ; ) ; %s ; draw svg_p ; endgroup ; ) ; "] + + local f_rotatedaround = formatters["rotatedaround((%N,%N),%N) "] + local f_rotated = formatters["rotated(%N) "] + local f_shifted = formatters["shifted(%N,%N) "] + local f_slanted_x = formatters["xslanted(%N) "] + local f_slanted_y = formatters["yslanted(%N) "] + local f_scaled = formatters["scaled(%N) "] + local f_xyscaled = formatters["xyscaled(%N,%N) "] + local f_matrix = formatters["transformed bymatrix(%N,%N,%N,%N,%N,%N) "] local s_transform_start = "draw image ( " - local f_transform_stop = formatters[")%s ;"] + local f_transform_stop = formatters[") %s ; "] + + local transforms = { } + local noftransforms = 0 local function rotate(r,x,y) - if x then - return r and f_rotatedaround(x,-(y or x),-r) - elseif r then - return f_rotated(-r) - else - return "" + if r then + noftransforms = noftransforms + 1 + if x then + transforms[noftransforms] = f_rotatedaround(x,-(y or x),-r) + else + transforms[noftransforms] = f_rotated(-r) + end end end local function translate(x,y) if y then - return f_shifted(x,-y) + noftransforms = noftransforms + 1 + transforms[noftransforms] = f_shifted(x,-y) elseif x then - return f_shifted(x,0) - else - return "" + noftransforms = noftransforms + 1 + transforms[noftransforms] = f_shifted(x,0) end end local function scale(x,y) if y then - return f_xyscaled(x,y) + noftransforms = noftransforms + 1 + transforms[noftransforms] = f_xyscaled(x,y) elseif x then - return f_scaled(x) - else - return "" + noftransforms = noftransforms + 1 + transforms[noftransforms] = f_scaled(x) end end local function skewx(x) if x then - return f_slanted_x(sind(-x)) - else - return "" + noftransforms = noftransforms + 1 + transforms[noftransforms] = f_slanted_x(sind(-x)) end end local function skewy(y) if y then - return f_slanted_y(sind(-y)) - else - return "" + noftransforms = noftransforms + 1 + transforms[noftransforms] = f_slanted_y(sind(-y)) end end local function matrix(rx,sx,sy,ry,tx,ty) - return f_matrix(rx or 1, sx or 0, sy or 0, ry or 1, tx or 0, - (ty or 0)) + if not ty then + ty = 0 + end + if not tx then + tx = 0 + end + if not sx then + sx = 0 + end + if not sy then + sy = 0 + end + if not rx then + rx = 1 + end + if not ry then + ry = 1 + end + noftransforms = noftransforms + 1 + -- transforms[noftransforms] = f_matrix(rx, sx, sy, ry, tx, -ty) + -- https://en.wikipedia.org/wiki/Rotation_matrix : we're counter clockwise + transforms[noftransforms] = f_matrix(rx, -sy, -sx, ry, tx, -ty) end - -- How to deal with units here? Anyway, order seems to matter. - - local p_transform = Cf ( Ct("") * ( - lpegpatterns.whitespace^0 * Cg( - C("translate") * (p_numbers / translate) -- maybe xy - + C("scale") * (p_numbers / scale) - + C("rotate") * (p_numbers / rotate) - + C("matrix") * (p_numbers / matrix) - + C("skewX") * (p_numbers / skewx) - + C("skewY") * (p_numbers / skewy) + local p_transform = ( + lpegpatterns.whitespace^0 * ( + P("translate") * (p_numbers / translate) -- maybe xy + + P("scale") * (p_numbers / scale) + + P("rotate") * (p_numbers / rotate) + + P("matrix") * (p_numbers / matrix) + + P("skewX") * (p_numbers / skewx) + + P("skewY") * (p_numbers / skewy) ) - )^1, rawset) + )^1 handletransform = function(at) local t = at.transform if t then - local e = lpegmatch(p_transform,t) - if e then - e = concat({ - e.rotate or "", - e.skewX or "", - e.skewY or "", - e.scale or "", - e.translate or "", - e.matrix or "", - }, " ") - return s_transform_start, f_transform_stop(e), t + noftransforms = 0 + lpegmatch(p_transform,t) + if noftransforms > 0 then + -- currentpicture + local start = s_transform_start + local stop = f_transform_stop(concat(transforms,"",1,noftransforms)) + return start, stop, t end end end @@ -1564,15 +1592,15 @@ do end end - local s_shade_linear = ' withshademethod "linear" ' - local s_shade_circular = ' withshademethod "circular" ' + local s_shade_linear = ' withshademethod "linear" ' + local s_shade_circular = ' withshademethod "circular" ' local f_shade_step = formatters['withshadestep ( withshadefraction %N withshadecolors(%s,%s) )'] local f_shade_one = formatters['withprescript "sh_center_a=%N %N"'] local f_shade_two = formatters['withprescript "sh_center_b=%N %N"'] - local f_color = formatters['withcolor "%s"'] - local f_opacity = formatters['withtransparency (1,%N)'] - local f_pen = formatters['withpen pencircle scaled %N'] + local f_color = formatters[' withcolor "%s"'] + local f_opacity = formatters[' withtransparency (2,%N)'] + local f_pen = formatters[' withpen pencircle scaled %N'] -- todo: gradient unfinished -- todo: opacity but first we need groups in mp @@ -1679,7 +1707,7 @@ do elseif o then o = asnumber_r(o) if o and o ~= 1 then - o = f_opacity(o) + o = f_opacity(1-o) else o = nil end @@ -1687,15 +1715,16 @@ do return p, d, c, o end - local s_opacity_start = "draw image (" - local f_opacity_stop = formatters["setgroup currentpicture to boundingbox currentpicture withtransparency (1,%N)) ;"] + local s_opacity_start = s_draw_image_start + local f_opacity_content = formatters["setgroup currentpicture to boundingbox currentpicture withtransparency (1,%N);"] + local s_opacity_stop = s_draw_image_stop local function sharedopacity(at) local o = at["opacity"] if o and o ~= "none" then o = asnumber_r(o) if o and o ~= 1 then - return s_opacity_start, f_opacity_stop(o) + return s_opacity_start, f_opacity_content(1-o), s_opacity_stop end end end @@ -1708,7 +1737,7 @@ do if o == 1 then return c elseif o then - return c, f_opacity(o), o == 0 + return c, f_opacity(1-o), o == 0 end end return c @@ -1730,11 +1759,11 @@ do end end - local s_viewport_start = "draw image (" - local s_viewport_stop = ") ;" - local f_viewport_shift = formatters["currentpicture := currentpicture shifted (%03N,%03N);"] - local f_viewport_scale = formatters["currentpicture := currentpicture xysized (%03N,%03N);"] - local f_viewport_clip = formatters["clip currentpicture to (unitsquare xyscaled (%03N,%03N));"] + local s_viewport_start = s_draw_image_start + local s_viewport_stop = s_draw_image_stop + local f_viewport_shift = formatters["currentpicture := currentpicture shifted (%N,%N);"] + local f_viewport_scale = formatters["currentpicture := currentpicture xysized (%N,%N);"] + local f_viewport_clip = formatters["clip currentpicture to (unitsquare xyscaled (%N,%N));"] local function viewport(x,y,w,h,noclip,scale) r = r + 1 ; result[r] = s_viewport_start @@ -1783,7 +1812,7 @@ do end local uselevel = 0 - local bodyfontscale = 1 + -- local bodyfontscale = 1 function handlers.use(c) local at = c.at @@ -1829,14 +1858,14 @@ do end end - local f_no_draw = formatters['nodraw (%s)'] - local f_do_draw = formatters['draw (%s)'] - local f_no_fill_c = formatters['nofill (%s..cycle)'] - local f_do_fill_c = formatters['fill (%s..cycle)'] - local f_eo_fill_c = formatters['eofill (%s..cycle)'] - local f_no_fill_l = formatters['nofill (%s--cycle)'] - local f_do_fill_l = formatters['fill (%s--cycle)'] - local f_eo_fill_l = formatters['eofill (%s--cycle)'] + local f_no_draw = formatters[' nodraw (%s)'] + local f_do_draw = formatters[' draw (%s)'] + local f_no_fill_c = formatters[' nofill closedcurve(%s)'] + local f_do_fill_c = formatters[' fill closedcurve(%s)'] + local f_eo_fill_c = formatters[' eofill closedcurve(%s)'] + local f_no_fill_l = formatters[' nofill closedlines(%s)'] + local f_do_fill_l = formatters[' fill closedlines(%s)'] + local f_eo_fill_l = formatters[' eofill closedlines(%s)'] local f_do_fill = f_do_fill_c local f_eo_fill = f_eo_fill_c local f_no_fill = f_no_fill_c @@ -1883,7 +1912,7 @@ do r = r + 1 ; result[r] = etransform end - r = r + 1 ; result[r] = ";" + r = r + 1 ; result[r] = " ;" if cpath then local f_done = cpath.evenodd @@ -1900,9 +1929,9 @@ do local flush - local f_linecap = formatters["interim linecap := %s ;"] - local f_linejoin = formatters["interim linejoin := %s ;"] - local f_miterlimit = formatters["interim miterlimit := %s ;"] + local f_linecap = formatters[" interim linecap := %s ;"] + local f_linejoin = formatters[" interim linejoin := %s ;"] + local f_miterlimit = formatters[" interim miterlimit := %s ;"] local s_begingroup = "begingroup;" local s_endgroup = "endgroup;" @@ -2128,12 +2157,12 @@ do local has_stroke = stroke and stroke ~= "none" local has_fill = fill and fill ~= "none" - local bopacity, eopacity + local bopacity, copacity, eopacity if has_stroke and has_fill then - bopacity, eopacity = sharedopacity(at) + bopacity, copacity, eopacity = sharedopacity(at) end - if bopacity then + if copacity then r = r + 1 ; result[r] = bopacity end @@ -2150,7 +2179,7 @@ do if opacity then r = r + 1 ; result[r] = opacity end - r = r + 1 ; result[r] = etransform or ";" + r = r + 1 ; result[r] = etransform or " ;" end if has_stroke then @@ -2172,7 +2201,7 @@ do if opacity then r = r + 1 ; result[r] = opacity end - r = r + 1 ; result[r] = etransform or ";" + r = r + 1 ; result[r] = etransform or " ;" -- if list then addmarkers(list,begmarker,midmarker,endmarker,at) @@ -2183,7 +2212,8 @@ do end end - if eopacity then + if copacity then + r = r + 1 ; result[r] = copacity r = r + 1 ; result[r] = eopacity end @@ -2230,8 +2260,8 @@ do y = y - height - if rx then rx = asnumber(rx) end - if ry then ry = asnumber(ry) end + if rx then rx = asnumber_x(rx) end + if ry then ry = asnumber_y(ry) end if rx or ry then if not rx then rx = ry end @@ -2298,8 +2328,8 @@ do function handlers.polyline(c) poly(c, ")") end function handlers.polygon (c) poly(c,"--cycle)") end - local s_image_start = "draw image (" - local s_image_stop = ") ;" + local s_image_start = s_draw_image_start + local s_image_stop = s_draw_image_stop function handlers.path(c) local at = c.at @@ -2339,7 +2369,7 @@ do if opacity then r = r + 1 ; result[r] = opacity end - r = r + 1 ; result[r] = etransform or ";" + r = r + 1 ; result[r] = etransform or " ;" else r = r + 1 ; result[r] = btransform or s_image_start for i=1,n do @@ -2354,7 +2384,7 @@ do else r = r + 1 ; result[r] = f_no_fill(shape[i]) end - r = r + 1 ; result[r] = ";" + r = r + 1 ; result[r] = " ;" end r = r + 1 ; result[r] = etransform or s_image_stop end @@ -2386,9 +2416,9 @@ do if opacity then r = r + 1 ; result[r] = opacity end - r = r + 1 result[r] = etransform or ";" + r = r + 1 result[r] = etransform or " ;" else - r = r + 1 result[r] = btransform or "draw image (" + r = r + 1 result[r] = btransform or s_draw_image_start for i=1,n do r = r + 1 result[r] = f_do_draw(shape[i]) if pen then @@ -2403,12 +2433,12 @@ do if opacity then r = r + 1 ; result[r] = opacity end - r = r + 1 ; result[r] = ";" + r = r + 1 ; result[r] = " ;" end if list then addmarkers(list,begmarker,midmarker,endmarker,at) end - r = r + 1 ; result[r] = etransform or ") ;" + r = r + 1 ; result[r] = etransform or s_draw_image_stop end if wrapup then wrapup() @@ -2554,25 +2584,26 @@ do -- The size is a bit of an issue. I assume that the specified size relates to the -- designsize but we want to be able to use other fonts. - do - - local f_styled = formatters["\\svgstyled{%s}{%s}{%s}{%s}"] - local f_colored = formatters["\\svgcolored{%.3N}{%.3N}{%.3N}{"] --- local f_placed = formatters["\\svgplaced{%.3N}{%.3N}{}{"] -local f_placed = formatters["\\svgplaced{%s}{%s}{}{"] - local f_poschar = formatters["\\svgposchar{%.3N}{%.3N}{%s}"] - local f_char = formatters["\\svgchar{%s}"] - - local f_scaled = formatters["\\svgscaled{%N}{%s}{%s}{%s}"] - local f_normal = formatters["\\svgnormal{%s}{%s}{%s}"] - local f_hashed = formatters["\\svghashed{%s}"] + -- a mix of text and spans and possibly wrap (where xy is to be ignored) ... bah ... + -- it's fuzzy when we have a span with positions mixed with text ... basically that + -- is a box and we can assume that an editor then has all positioned - -- We move to the outer (x,y) and when we have an inner offset we - -- (need to) compensate for that outer offset. + do - -- local f_text_scaled_svg = formatters['(svgtext("%s") scaled %N shifted (%N,%N))'] - -- local f_text_normal_svg = formatters['(svgtext("%s") shifted (%N,%N))'] - -- local f_text_simple_svg = formatters['svgtext("%s")'] + local s_startlayer = "\\svgstartlayer " + local s_stoplayer = "\\svgstoplayer " + local f_setlayer = formatters["\\svgsetlayer{%N}{%N}"] -- we need a period + local f_colored = formatters["\\svgcolored{%.3N}{%.3N}{%.3N}{"] + local f_poscode = formatters["\\svgposcode{%N}{%N}{%s}"] + local f_poschar = formatters["\\svgposchar{%N}{%N}{%s}"] + local f_posspace = formatters["\\svgposspace{%N}{%N}"] + local f_coder = formatters["\\svgcode{%s}"] + local f_char = formatters["\\svgchar{%s}"] + local s_space = "\\svgspace " + local f_scaled = formatters["\\svgscaled{%0.6f}{%s}{%s}{%s}"] -- we need a period + local f_hashed = formatters["\\svghashed{%s}"] + + local p_texescape = lpegpatterns.texescape local anchors = { ["start"] = "drt", @@ -2580,11 +2611,10 @@ local f_placed = formatters["\\svgplaced{%s}{%s}{}{"] ["middle"] = "d", } + -- we can now just use the lmt maptext feature + local f_text_normal_svg = formatters['(textext.%s("%s") shifted (%N,%N))'] local f_text_simple_svg = formatters['textext.%s("%s")'] - - -- or just maptext - local f_mapped_normal_svg = formatters['(svgtext("%s") shifted (%N,%N))'] local f_mapped_simple_svg = formatters['svgtext("%s")'] @@ -2599,8 +2629,6 @@ local f_placed = formatters["\\svgplaced{%s}{%s}{}{"] return v end) - local p_texescape = lpegpatterns.texescape - -- For now as I need it for my (some 1500) test files. local function checkedfamily(name) @@ -2612,14 +2640,62 @@ local f_placed = formatters["\\svgplaced{%s}{%s}{}{"] -- todo: only escape some chars and handle space + -- An arbitrary mix of text and spans with x/y is asking for troubles. The fact that the + -- description in the (proposed) standard is so complex indicates this (its also looks + -- like reveng application specs and doesn't aim at simplicity. Basically we have two + -- cases: positioned lines and words and such (text & span with xy), or just stripes of + -- text and span. Free flow automatically broken into lines text is kind of strange in + -- svg and the fact that glyph placement is dropped is both an indication that svg lost + -- part of its purpose and probably also that it never really was a standard (although + -- maybe today standards are just short term specifications. Who knows. + + -- text with spans, all with x/y + -- text mixed with spans, no xy in inner elements + -- + -- the spec says that nested x/y are absolute + local defaultsize = 10 - local function collect(t,c,x,y,size,scale,family,tx,ty) + local sensitive = { -- todo: characters.sensitive + ["#"] = true, + ["$"] = true, + ["%"] = true, + ["&"] = true, + ["\\"] = true, + ["{"] = true, + ["|"] = true, + ["}"] = true, + ["~"] = true, + } + + -- messy: in nested spans (they happen) the x/y are not accumulated + + local function validdelta(usedscale,d) + if d then + local value, unit = match(d,"^([%A]-)(%a+)") + value = tonumber(value) or 0 + if not unit then + return value .. "bp" + elseif unit == "ex" or unit == "em" then + return (usedscale * value) .. unit + else + return value .. "bp" + end + else + return "0bp" + end + end + + local function collect(parent,t,c,x,y,size,scale,family,tx,ty,tdx,tdy) + if c.special then + return nil + end + local dt = c.dt + local nt = #dt local at = c.at + local tg = c.tg local ax = rawget(at,"x") local ay = rawget(at,"y") - local dx = rawget(at,"dx") - local dy = rawget(at,"dy") local v_fill = at["fill"] local v_family = at["font-family"] local v_style = at["font-style"] @@ -2629,9 +2705,6 @@ local f_placed = formatters["\\svgplaced{%s}{%s}{}{"] ax = ax and asnumber_vx(ax) or x ay = ay and asnumber_vy(ay) or y -- -local d_x = dx and asnumber_vx(dx) or 0 -local d_y = dy and asnumber_vy(dy) or 0 - -- if v_family then v_family = cssfamily(v_family) end if v_style then v_style = cssstyle (v_style) end if v_weight then v_weight = cssweight(v_weight) end @@ -2651,63 +2724,27 @@ local d_y = dy and asnumber_vy(dy) or 0 ax = ax - x ay = ay - y -- - local elayered = ax ~= 0 or ay ~= 0 or false --- local eplaced = dx ~= 0 or dy ~= 0 or false -local eplaced = d_x ~= 0 or d_y ~= 0 or false - local usedsize, usedscaled - - if elayered then - -- we're now at the outer level again so we need to scale - -- back to the outer level values - t[#t+1] = formatters["\\svgsetlayer{%0N}{%0N}{"](ax,-ay) - usedsize = v_size or defaultsize - usedscale = usedsize / defaultsize - else - -- we're nested so we can be scaled - usedsize = v_size or size - usedscale = (usedsize / defaultsize) / scale - end -usedscale = (10 / bodyfontscale) * usedscale + local usedsize = v_size or defaultsize + local usedscale = usedsize / defaultsize -- - if eplaced then -if dx then - if not find(dx,"%a") then - dx = dx .. "bp" - elseif find(dx,"e") then - dx = formatters["%s\\dimexpr %s\\relax"](usedscale,dx) - end -else - dx = "0pt" -end -if dy then - if not find(dy,"%a") then - dy = dy .. "bp" - elseif find(dy,"e") then - dy = formatters["%s\\dimexpr %s\\relax"](usedscale,dy) - end -else - dy = "0pt" -end - t[#t+1] = f_placed(dx,dy) - end - -- --- if usedscale == 1 then --- t[#t+1] = f_normal( v_family,v_weight,v_style) --- else - t[#t+1] = f_scaled(usedscale,v_family,v_weight,v_style) +-- local useddelta = d_x ~= 0 or d_y ~= 0 or false +-- if useddelta then +-- dx = validdelta(usedscale,dx) +-- dy = validdelta(usedscale,dy) -- end + -- + t[#t+1] = f_scaled(usedscale,v_family,v_weight,v_style) t[#t+1] = "{" -- if trace_fonts then + -- we can hash and keep it when no change report("element : %s",c.tg) report(" font family : %s",v_family) report(" font weight : %s",v_weight) report(" font style : %s",v_style) report(" parent size : %s",size) - report(" parent scale : %s",scale) - report(" used size : %s",usedsize) - report(" used scale : %s",usedscale) - report(" layered : %l",elayered) + -- report(" parent scale : %s",scale) + report(" used size : %s",v_size or defaultsize) end -- local ecolored = v_fill and v_fill ~= "" or false @@ -2721,14 +2758,23 @@ end end end -- - local dt = c.dt - local nt = #dt for i=1,nt do local di = dt[i] if type(di) == "table" then - -- can be a tspan (should we pass dx too) - collect(t,di,x,y,usedsize,usedscale,v_family) + -- when x or y then absolute else inline + if #di.dt > 0 then + t[#t+1] = f_setlayer(ax,ay) + t[#t+1] = "{" + local ok = collect(tg,t,di,x,y,usedsize,usedscale,v_family) + if not ok then + t[#t] = nil + t[#t] = nil + else + t[#t+1] = "}" + end + end else + -- check for preserve if i == 1 then di = gsub(di,"^%s+","") end @@ -2737,14 +2783,25 @@ end end local chars = utfsplit(di) if svghash then + -- dx dy di = f_hashed(svghash[di]) - elseif tx then + elseif tx or ty or tdx or tdy then + local txi, tyi, tdxi, tdyi for i=1,#chars do - chars[i] = f_poschar( - (tx[i] or 0) - x, - (ty[i] or 0) - y, - utfbyte(chars[i]) - ) + txi = tx and (tx [i] or txi ) + tyi = ty and (ty [i] or tyi ) + tdxi = tdx and (tdx[i] or tdxi) or 0 + tdyi = tdy and (tdy[i] or tdyi) or 0 + local dx = (txi and (txi - x) or 0) + tdxi + local dy = (tyi and (tyi - y) or 0) + tdyi + local ci = chars[i] + if ci == " " then + chars[i] = f_posspace(dx, dy) + elseif sensitive[ci] then + chars[i] = f_poscode(dx, dy, utfbyte(ci)) + else + chars[i] = f_poschar(dx, dy, ci) + end end di = "{" .. concat(chars) .. "}" else @@ -2753,7 +2810,14 @@ end -- and don't know what we can expect here -- di = lpegmatch(p_texescape,di) or di for i=1,#chars do - chars[i] = f_char(utfbyte(chars[i])) + local ci = chars[i] + if ci == " " then + chars[i] = s_space + elseif sensitive[ci] then + chars[i] = f_code(utfbyte(chars[i])) + else + chars[i] = f_char(ci) + end end di = concat(chars) end @@ -2767,87 +2831,89 @@ end -- t[#t+1] = "}" -- - if eplaced then - t[#t+1] = "}" - end - if elayered then - t[#t+1] = "}" - end - -- return t end - local s_startlayer = "\\svgstartlayer " - local s_stoplayer = "\\svgstoplayer " + -- case 1: just text, maybe with spans + -- case 2: only positioned spans + -- case 3: just text, seen as label + + local textlevel = 0 function handlers.text(c) + textlevel = textlevel + 1 + -- analyze local only = fullstrip(xmltextonly(c)) - -- if metapost.processing() then - local at = c.at - local x = rawget(at,"x") - local y = rawget(at,"y") + local at = c.at + local x = rawget(at,"x") + local y = rawget(at,"y") --- local dx = rawget(at,"dx") --- local dy = rawget(at,"dy") + local dx = rawget(at,"dx") + local dy = rawget(at,"dy") - local tx = asnumber_vx_t(x) - local ty = asnumber_vy_t(y) + local tx = asnumber_vx_t(x) + local ty = asnumber_vy_t(y) --- dx = dx and asnumber_vx(dx) or 0 --- dy = dy and asnumber_vy(dy) or 0 + local tdx = asnumber_vx_t(dx) + local tdy = asnumber_vy_t(dy) - x = tx[1] or 0 -- catch bad x/y spec - y = ty[1] or 0 -- catch bad x/y spec + x = tx[1] or 0 -- catch bad x/y spec + y = ty[1] or 0 -- catch bad x/y spec - local v_fill = at["fill"] - if not v_fill or v_fill == "none" then - v_fill = "black" + dx = tdx[1] or 0 -- catch bad x/y spec + dy = tdy[1] or 0 -- catch bad x/y spec + + local v_fill = at["fill"] + if not v_fill or v_fill == "none" then + v_fill = "black" + end + local color, opacity, invisible = fillproperties(v_fill,at) + local anchor = anchors[at["text-anchor"] or "start"] or "drt" + local remap = metapost.remappedtext(only) + -- x = x + dx + -- y = y + dy + if remap then + if x == 0 and y == 0 then + only = f_mapped_simple_svg(remap.index) + else + only = f_mapped_normal_svg(remap.index,x,y) end - local color, opacity, invisible = fillproperties(v_fill,at) - local anchor = anchors[at["text-anchor"] or "start"] or "drt" - local r = metapost.remappedtext(only) --- x = x + dx --- y = y + dy - if r then - if x == 0 and y == 0 then - only = f_mapped_simple_svg(r.index) - else - only = f_mapped_normal_svg(r.index,x,y) - end - flushobject(only,at,color,opacity) - if trace_text then - report("text: %s",only) - end - elseif not invisible then -- can be an option - local scale = 1 - local textid = 0 - local result = { } - local nx = #tx - local ny = #ty - -- - result[#result+1] = s_startlayer - if nx > 1 or ny > 1 then - concat(collect(result,c,x,y,defaultsize,1,"serif",tx,ty)) - else - concat(collect(result,c,x,y,defaultsize,1,"serif")) - end - result[#result+1] = s_stoplayer - result = concat(result) - if x == 0 and y == 0 then - result = f_text_simple_svg(anchor,result) - else - result = f_text_normal_svg(anchor,result,x,y) - end - flushobject(result,at,color,opacity) - if trace_text then - report("text: %s",result) - end - elseif trace_text then - report("invisible text: %s",only) + flushobject(only,at,color,opacity) + if trace_text then + report("text: %s",only) + end + elseif not invisible then -- can be an option + local scale = 1 + local textid = 0 + local result = { } + local nx = #tx + local ny = #ty + local ndx = #tdx + local ndy = #tdy + -- + local t = { } + t[#t+1] = s_startlayer + if nx > 1 or ny > 1 or ndx > 1 or ndy > 1 then + collect(tg,t,c,x,y,defaultsize,1,"serif",tx,ty,tdx,tdy) + else + collect(tg,t,c,x,y,defaultsize,1,"serif") + end + t[#t+1] = s_stoplayer + t = concat(t) + if x == 0 and y == 0 then + t = f_text_simple_svg(anchor,t) + else -- dx dy + t = f_text_normal_svg(anchor,t,x,y) + end + flushobject(t,at,color,opacity) + if trace_text then + report("text: %s",result) end - -- elseif trace_text then - -- report("ignored text: %s",only) - -- end + elseif trace_text then + report("invisible text: %s",only) + end + -- + textlevel = textlevel - 1 end function metapost.reportsvgfonts() @@ -2892,7 +2958,7 @@ end local btransform, etransform, transform = handletransform(at) -bodyfontscale = tex.getdimen("bodyfontsize") / 65536 + -- bodyfontscale = tex.getdimen("bodyfontsize") / 65536 if trace then report("view: %s, xpct %N, ypct %N","before",percentage_x,percentage_y) diff --git a/tex/context/base/mkxl/node-ini.lmt b/tex/context/base/mkxl/node-ini.lmt index 4ba4b4000..f29a2e448 100644 --- a/tex/context/base/mkxl/node-ini.lmt +++ b/tex/context/base/mkxl/node-ini.lmt @@ -198,3 +198,14 @@ end for i=0,#gluecodes do texsetintegervalue(gluecodes[i] .. "subtypecode",i,"immutable") end + +nodes.specialskipcodes = { + [gluecodes.leftskip] = true, + [gluecodes.rightskip] = true, + [gluecodes.lefthangskip] = true, + [gluecodes.righthangskip] = true, + [gluecodes.parfillleftskip or parfillskip_code] = true, + [gluecodes.parfillrightskip or parfillskip_code] = true, + [gluecodes.indentskip] = true, + [gluecodes.correctionskip] = true, +} diff --git a/tex/context/base/mkxl/pack-mrl.mkxl b/tex/context/base/mkxl/pack-mrl.mkxl index 8bbeeb798..0e7540921 100644 --- a/tex/context/base/mkxl/pack-mrl.mkxl +++ b/tex/context/base/mkxl/pack-mrl.mkxl @@ -257,10 +257,10 @@ \c!background=, \c!rulethickness=\linewidth] -\letvalue{\??thinrulealternatives\v!a }\zerocount -\letvalue{\??thinrulealternatives\v!b }\plusone -\letvalue{\??thinrulealternatives\v!c }\plustwo -\letvalue{\??thinrulealternatives\v!none}\zerocount +\letcsname\??thinrulealternatives\v!a \endcsname\zerocount +\letcsname\??thinrulealternatives\v!b \endcsname\plusone +\letcsname\??thinrulealternatives\v!c \endcsname\plustwo +\letcsname\??thinrulealternatives\v!none\endcsname\zerocount \newconstant\c_pack_thinrules_type @@ -562,7 +562,7 @@ %D %D \typebuffer \start \getbuffer \stop -\setvalue{\??textrulealternatives\v!top}#1% +\defcsname\??textrulealternatives\v!top\endcsname#1% {\page[\v!preference] % interferes \directtextrulesparameter\c!before\relax \blank[\v!samepage,\v!nowhite]% @@ -571,14 +571,14 @@ \directtextrulesparameter\c!inbetween\relax \endgraf} -\setvalue{\??textrulealternatives\v!bottom}#1% +\defcsname\??textrulealternatives\v!bottom\endcsname#1% {\blank[\v!samepage,\v!nowhite]% \pack_textrule_following{#1}% \blank[\v!samepage,\v!nowhite]% \directtextrulesparameter\c!after\relax \page[\v!preference]} -\setvalue{\??textrulealternatives\v!middle}#1% +\defcsname\??textrulealternatives\v!middle\endcsname#1% {\blank[\v!samepage,\v!nowhite]% \directtextrulesparameter\c!inbetween\relax \pack_textrule_following{#1}% @@ -697,6 +697,8 @@ %D %D \showsetup{fillinrules} %D \showsetup{setupfillinrules} +%D +%D I NEED TO UPGRADE THIS! \installcorenamespace{fillinrules} diff --git a/tex/context/base/mkxl/page-app.mkxl b/tex/context/base/mkxl/page-app.mkxl index d75366cca..d41487640 100644 --- a/tex/context/base/mkxl/page-app.mkxl +++ b/tex/context/base/mkxl/page-app.mkxl @@ -123,7 +123,7 @@ \setupfittingpage [%\c!scale=1000, %\c!pagestate=, - \c!strut=\v!no, + \c!strut=\v!none, % was no, but we get a noindent then (with the danger of a lineskip) \c!align=\v!normal, \c!offset=\v!overlay, \c!width=\v!fit, diff --git a/tex/context/base/mkxl/strc-not.mklx b/tex/context/base/mkxl/strc-not.mklx index 5ac571374..dd22bc6df 100644 --- a/tex/context/base/mkxl/strc-not.mklx +++ b/tex/context/base/mkxl/strc-not.mklx @@ -139,15 +139,15 @@ \protected\def\strc_define_commands_notation#tag#level#parent% {\doifelsenothing{#parent} {\normalexpanded{\defineconstruction[#tag][\s!handler=\v!notation,\c!level=#level]}% - \setevalue{\??notation#tag:\s!parent}{\??notation}}% + \edefcsname\??notation#tag:\s!parent\endcsname{\??notation}}% {\normalexpanded{\defineconstruction[#tag][#parent][\s!handler=\v!notation,\c!level=#level]}% - \setevalue{\??note #tag:\s!parent}{\??note#parent}% see later for \s!note - \setevalue{\??notation#tag:\s!parent}{\??notation#parent}}% - \instance\setuevalue{\e!next #tag}{\strc_notations_next {#tag}{\number#level}}% obsolete - \instance\setuevalue{\c!reset#tag}{\strc_notations_reset {#tag}{\number#level}}% obsolete - \instance\setuevalue {#tag}{\strc_notations_command[#tag]}% - \instance\setuevalue{\e!start#tag}{\strc_notations_start [#tag]}% - \instance\setuevalue{\e!stop #tag}{\strc_notations_stop }} + \edefcsname\??note #tag:\s!parent\endcsname{\??note#parent}% see later for \s!note + \edefcsname\??notation#tag:\s!parent\endcsname{\??notation#parent}}% + \instance\protected\edefcsname\e!next #tag\endcsname{\strc_notations_next {#tag}{\number#level}}% obsolete + \instance\protected\edefcsname\c!reset#tag\endcsname{\strc_notations_reset {#tag}{\number#level}}% obsolete + \instance\protected\edefcsname #tag\endcsname{\strc_notations_command[#tag]}% + \instance\protected\edefcsname\e!start#tag\endcsname{\strc_notations_start [#tag]}% + \instance\protected\edefcsname\e!stop #tag\endcsname{\strc_notations_stop }} \let\m_strc_notation_sub\empty @@ -323,10 +323,10 @@ %D indirectness. This way notations don't bark on undefined macros when used in %D combination. -\protected\setvalue{\??constructionnotehandler\v!notation}% +\protected\defcsname\??constructionnotehandler\v!notation\endcsname {\csname\??constructionnotehandler\currentconstructionhandler:\constructionparameter\c!type\endcsname} -\protected\setvalue{\??constructionnotehandler\v!notation:}% empty case +\protected\defcsname\??constructionnotehandler\v!notation:\endcsname% empty case {[\currentconstructionhandler:\currentconstruction]} %D Here is a simple renderer for notes @@ -445,7 +445,7 @@ \letcsname\??constructioncommandhandler\v!notation\expandafter\endcsname\csname\??constructioncommandhandler\v!enumeration \endcsname \letcsname\??constructiontexthandler \v!notation\expandafter\endcsname\csname\??constructiontexthandler \v!enumeration \endcsname -\protected\setvalue{\??constructionmainhandler\v!notation}#following% +\protected\defcsname\??constructionmainhandler\v!notation\endcsname#following% {\iftrialtypesetting \else \begingroup \currentconstructionsynchronize @@ -454,7 +454,7 @@ \endgroup \fi#following} -\protected\setvalue{\??constructionnotehandler\v!notation:\v!note}% in the running text +\protected\defcsname\??constructionnotehandler\v!notation:\v!note\endcsname % in the running text {\ifnotesenabled % do be done elsewhere % @@ -572,11 +572,11 @@ \edef\strc_notes_get_reference_attribute_symbol{attr\referenceattribute\currentreferenceattribute}% \let\strc_notes_set_style_color_inline\strc_notes_set_style_color_inline_yes} -\letvalue{\??noteinteractioninline\v!no }\strc_notes_prepare_inline_references_nop -\letvalue{\??noteinteractioninline\v!all }\strc_notes_prepare_inline_references_yes -\letvalue{\??noteinteractioninline\v!number}\strc_notes_prepare_inline_references_yes -\letvalue{\??noteinteractioninline\v!text }\strc_notes_prepare_inline_references_yes -\letvalue{\??noteinteractioninline\v!yes }\strc_notes_prepare_inline_references_yes +\letcsname\??noteinteractioninline\v!no \endcsname\strc_notes_prepare_inline_references_nop +\letcsname\??noteinteractioninline\v!all \endcsname\strc_notes_prepare_inline_references_yes +\letcsname\??noteinteractioninline\v!number\endcsname\strc_notes_prepare_inline_references_yes +\letcsname\??noteinteractioninline\v!text \endcsname\strc_notes_prepare_inline_references_yes +\letcsname\??noteinteractioninline\v!yes \endcsname\strc_notes_prepare_inline_references_yes % display (for 'all' we need unique text and number attributes so we resolve twice % as we otherwise don't get the number one which is lapped in the margin so we need @@ -622,11 +622,11 @@ \let\strc_notes_set_style_color_display\strc_notes_set_style_color_display_yes \fi} -\letvalue{\??noteinteractiondisplay\v!no }\strc_notes_prepare_display_references_nop -\letvalue{\??noteinteractiondisplay\v!all }\strc_notes_prepare_display_references_yes_all -\letvalue{\??noteinteractiondisplay\v!number}\strc_notes_prepare_display_references_yes_number -\letvalue{\??noteinteractiondisplay\v!text }\strc_notes_prepare_display_references_yes_text -\letvalue{\??noteinteractiondisplay\v!yes }\strc_notes_prepare_display_references_yes_number +\letcsname\??noteinteractiondisplay\v!no \endcsname\strc_notes_prepare_display_references_nop +\letcsname\??noteinteractiondisplay\v!all \endcsname\strc_notes_prepare_display_references_yes_all +\letcsname\??noteinteractiondisplay\v!number\endcsname\strc_notes_prepare_display_references_yes_number +\letcsname\??noteinteractiondisplay\v!text \endcsname\strc_notes_prepare_display_references_yes_text +\letcsname\??noteinteractiondisplay\v!yes \endcsname\strc_notes_prepare_display_references_yes_number \mutable\let\strc_notes_set_style_color_inline_nop \usenotestyleandcolor \mutable\let\strc_notes_set_style_color_display_nop\usenotationstyleandcolor @@ -647,7 +647,7 @@ \setlocationcolorspecified\scratchcounter \fi} -\setvalue{\??constructiontexthandler\v!notation}% +\defcsname\??constructiontexthandler\v!notation\endcsname {\begingroup % we need to retrigger the reference as otherwise it gets lost because we don't do nested % references with the same id ... maybe some day if we can figure out a nice heuristic ... @@ -698,8 +698,7 @@ \fi \nobreak \begingroup - \strc_notes_interaction_check_inline - \strc_notes_set_style_color_inline\c!textstyle\c!textcolor + \strc_notes_interaction_check_inline\strc_notes_set_style_color_inline\c!textstyle\c!textcolor \hbox \strc_notes_get_reference_attribute_symbol \strc_notes_get_destination_attribute_symbol \bgroup % \hbox \strc_notes_get_reference_attribute_symbol \bgroup \strc_notes_destination_hack \strc_references_flush_destination_nodes % a bit late but ok @@ -732,8 +731,7 @@ % skip or kern \nobreak \hbox\bgroup - \strc_notes_interaction_check_inline - \strc_notes_set_style_color_inline\c!textstyle\c!textcolor + \usenotestyleandcolor\c!textstyle\c!textcolor \noteparameter\c!textcommand{\p_textseparator}% \kern\noteparameter\c!distance \egroup @@ -885,16 +883,16 @@ \def\strc_notes_set_rule_autodir {\doifelserighttoleftinbox\currentnoteinsertionnumber\righttoleft\lefttoright} -\setvalue{\??noterule \v!command}{\letcurrentnoterulecommand\currentnoterulecommandcommand} -\setvalue{\??noterule \v!on}{\letcurrentnoterulecommand\currentnoterulecommandnormal} -\setvalue{\??noterule \v!normal}{\letcurrentnoterulecommand\currentnoterulecommandnormal} -\setvalue{\??noterule \v!left}{\letcurrentnoterulecommand\currentnoterulecommandnormal - \letcurrentnoterulealign \lefttoright} -\setvalue{\??noterule \v!right}{\letcurrentnoterulecommand\currentnoterulecommandnormal - \letcurrentnoterulealign \righttoleft} -\setvalue{\??noterule\v!paragraph}{\letcurrentnoterulecommand\currentnoterulecommandnormal - \letcurrentnoterulealign \strc_notes_set_rule_autodir} -\setvalue{\??noterule \v!off}{\letcurrentnoterulecommand\relax} +\defcsname\??noterule \v!command\endcsname{\letcurrentnoterulecommand\currentnoterulecommandcommand} +\defcsname\??noterule \v!on\endcsname{\letcurrentnoterulecommand\currentnoterulecommandnormal} +\defcsname\??noterule \v!normal\endcsname{\letcurrentnoterulecommand\currentnoterulecommandnormal} +\defcsname\??noterule \v!left\endcsname{\letcurrentnoterulecommand\currentnoterulecommandnormal + \letcurrentnoterulealign \lefttoright} +\defcsname\??noterule \v!right\endcsname{\letcurrentnoterulecommand\currentnoterulecommandnormal + \letcurrentnoterulealign \righttoleft} +\defcsname\??noterule\v!paragraph\endcsname{\letcurrentnoterulecommand\currentnoterulecommandnormal + \letcurrentnoterulealign \strc_notes_set_rule_autodir} +\defcsname\??noterule \v!off\endcsname{\letcurrentnoterulecommand\relax} \appendtoks \strc_notes_set_rule @@ -911,10 +909,10 @@ \setnewconstant\notepenaltystrict 9999 \setnewconstant\notepenaltyverystrict\maxdimen -\letvalue{\??notepenalty\v!tolerant }\notepenaltytolerant -\letvalue{\??notepenalty\v!strict }\notepenaltystrict -\letvalue{\??notepenalty\v!verystrict}\notepenaltyverystrict -\letvalue{\??notepenalty }\notepenaltytolerant +\letcsname\??notepenalty\v!tolerant \endcsname\notepenaltytolerant +\letcsname\??notepenalty\v!strict \endcsname\notepenaltystrict +\letcsname\??notepenalty\v!verystrict\endcsname\notepenaltyverystrict +\letcsname\??notepenalty \endcsname\notepenaltytolerant %D The following switch can be used to disable limiting the height of the footnote %D area, something that is needed in multi column balancing. Use this switch with @@ -947,24 +945,24 @@ \protected\def\strc_notes_set_delayed_yes{\settrue \c_strc_notes_delayed} \protected\def\strc_notes_set_delayed_nop{\setfalse\c_strc_notes_delayed} -\setvalue{\??notelocation\v!page }{\letcsname\??notedelayedvariant \currentnote\endcsname\strc_notes_set_delayed_nop - \letcsname\??notelocationvariant\currentnote\endcsname\strc_notes_set_location_page} -\setvalue{\??notelocation\v!columns }{\letcsname\??notedelayedvariant \currentnote\endcsname\strc_notes_set_delayed_nop - \letcsname\??notelocationvariant\currentnote\endcsname\strc_notes_set_location_columns} -\setvalue{\??notelocation\v!lastcolumn }{\letcsname\??notedelayedvariant \currentnote\endcsname\strc_notes_set_delayed_nop - \letcsname\??notelocationvariant\currentnote\endcsname\strc_notes_set_location_lastcolumn} -\setvalue{\??notelocation\v!firstcolumn}{\letcsname\??notedelayedvariant \currentnote\endcsname\strc_notes_set_delayed_nop - \letcsname\??notelocationvariant\currentnote\endcsname\strc_notes_set_location_firstcolumn} -\setvalue{\??notelocation\v!none }{\letcsname\??notedelayedvariant \currentnote\endcsname\strc_notes_set_delayed_yes - \letcsname\??notelocationvariant\currentnote\endcsname\strc_notes_set_location_none} -\setvalue{\??notelocation\v!text }{\letcsname\??notedelayedvariant \currentnote\endcsname\strc_notes_set_delayed_yes - \letcsname\??notelocationvariant\currentnote\endcsname\strc_notes_set_location_text} -\setvalue{\??notelocation\v!high }{\letcsname\??notepositionvariant\currentnote\endcsname\strc_notes_set_position_high} -\setvalue{\??notelocation\v!bottom }{\letcsname\??notepositionvariant\currentnote\endcsname\strc_notes_set_position_bottom} - -\setvalue{\??notedelayedvariant \??notedelayedvariant }{\strc_notes_set_delayed_nop} % not let -\setvalue{\??notepositionvariant\??notepositionvariant}{\strc_notes_set_position_bottom} % not let -\setvalue{\??notelocationvariant\??notelocationvariant}{\strc_notes_set_location_page} % not let +\defcsname\??notelocation\v!page \endcsname{\letcsname\??notedelayedvariant \currentnote\endcsname\strc_notes_set_delayed_nop + \letcsname\??notelocationvariant\currentnote\endcsname\strc_notes_set_location_page} +\defcsname\??notelocation\v!columns \endcsname{\letcsname\??notedelayedvariant \currentnote\endcsname\strc_notes_set_delayed_nop + \letcsname\??notelocationvariant\currentnote\endcsname\strc_notes_set_location_columns} +\defcsname\??notelocation\v!lastcolumn \endcsname{\letcsname\??notedelayedvariant \currentnote\endcsname\strc_notes_set_delayed_nop + \letcsname\??notelocationvariant\currentnote\endcsname\strc_notes_set_location_lastcolumn} +\defcsname\??notelocation\v!firstcolumn\endcsname{\letcsname\??notedelayedvariant \currentnote\endcsname\strc_notes_set_delayed_nop + \letcsname\??notelocationvariant\currentnote\endcsname\strc_notes_set_location_firstcolumn} +\defcsname\??notelocation\v!none \endcsname{\letcsname\??notedelayedvariant \currentnote\endcsname\strc_notes_set_delayed_yes + \letcsname\??notelocationvariant\currentnote\endcsname\strc_notes_set_location_none} +\defcsname\??notelocation\v!text \endcsname{\letcsname\??notedelayedvariant \currentnote\endcsname\strc_notes_set_delayed_yes + \letcsname\??notelocationvariant\currentnote\endcsname\strc_notes_set_location_text} +\defcsname\??notelocation\v!high \endcsname{\letcsname\??notepositionvariant\currentnote\endcsname\strc_notes_set_position_high} +\defcsname\??notelocation\v!bottom \endcsname{\letcsname\??notepositionvariant\currentnote\endcsname\strc_notes_set_position_bottom} + +\defcsname\??notedelayedvariant \??notedelayedvariant \endcsname{\strc_notes_set_delayed_nop} % not let +\defcsname\??notepositionvariant\??notepositionvariant\endcsname{\strc_notes_set_position_bottom} % not let +\defcsname\??notelocationvariant\??notelocationvariant\endcsname{\strc_notes_set_location_page} % not let \protected\def\strc_notes_set_delayed {\csname\??notedelayedvariant @@ -1658,7 +1656,7 @@ \installcorenamespace{notealternative} \permanent\protected\def\installnotealternative#alternative#command% - {\setvalue{\??notealternative#alternative}{#command}} + {\defcsname\??notealternative#alternative\endcsname{#command}} \permanent\protected\def\doifnotescollected#tag% {\clf_doifnotecontent{#tag}} @@ -1672,7 +1670,7 @@ \fi \begingroup \strc_notes_set_bodyfont - \csname\??notealternative\noteparameter\c!alternative\endcsname + \begincsname\??notealternative\noteparameter\c!alternative\endcsname \endgroup \ifvmode \noteparameter\c!after diff --git a/tex/context/base/mkxl/supp-box.mkxl b/tex/context/base/mkxl/supp-box.mkxl index e52ea90b8..943415596 100644 --- a/tex/context/base/mkxl/supp-box.mkxl +++ b/tex/context/base/mkxl/supp-box.mkxl @@ -484,6 +484,9 @@ \enforced\let\\\endgraf \dowithnextboxcs\syst_boxes_determine_noflines\vbox} +\def\determinednoflines#1% + {\localcontrolled{\determinenoflines{#1}}\noflines} + %D \macros %D {doiftextelse, doiftext} %D diff --git a/tex/context/base/mkxl/typo-hid.lmt b/tex/context/base/mkxl/typo-hid.lmt new file mode 100644 index 000000000..9cc77ffac --- /dev/null +++ b/tex/context/base/mkxl/typo-hid.lmt @@ -0,0 +1,74 @@ +if not modules then modules = { } end modules ['typo-krn'] = { + version = 1.001, + comment = "companion to typo-krn.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +local a_hidecontent = attributes.system("hidecontent") +local specialskips = nodes.specialskipcodes +local glue_code = nodes.nodecodes.glue +local nuts = nodes.nuts +local getattr = nuts.getattr +local getnext = nuts.getnext +local setnext = nuts.setnext +local getprev = nuts.getprev +local setlist = nuts.setlist +local setlink = nuts.setlink +local nextnode = nuts.traversers.node +local flushlist = nuts.flush_list +local dimensions = nuts.rangedimensions +local hpack = nuts.hpack +local setwhd = nuts.setwhd +local setattrlist = nuts.setattrlist +local enableaction = nodes.tasks.enableaction + +function nodes.handlers.wipe(head,groupcode,line) + if getattr(line,a_hidecontent) then + flushlist(head) + setlist(line) + else + -- we have normalized lines so always some skip to start with + local b, e = nil, nil + local function wipe() + local h = hpack() + local n = getnext(e) + setwhd(h,dimensions(line,b,n)) + setlink(getprev(b),h,n) + setattrlist(h,b) + setnext(b) + flushlist(b) + b = nil + e = nil + end + for n, id, subtype in nextnode, head do + if id == glue_code and specialskips[subtype] then + if b then + wipe() + end + elseif getattr(n,a_hidecontent) then + if not b then + b = n + end + e = n + elseif b then + wipe() + end + end + if b then + -- can't happen because we had a skip + wipe() + end + setlist(line,head) + end + return nil +end + +interfaces.implement { + name = "enablehidecontent", + onlyonce = true, + actions = function() + enableaction("contributers","nodes.handlers.wipe") + end, +} diff --git a/tex/context/base/mkxl/typo-hid.mkxl b/tex/context/base/mkxl/typo-hid.mkxl new file mode 100644 index 000000000..cf9759c85 --- /dev/null +++ b/tex/context/base/mkxl/typo-hid.mkxl @@ -0,0 +1,38 @@ +%D \module +%D [ file=typo-krn, +%D version=2021.03.15, % based on old code lying around +%D title=\CONTEXT\ Typesetting Macros, +%D subtitle=Hiding, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +\writestatus{loading}{ConTeXt Typesetting Macros / Hiding} + +\registerctxluafile{typo-hid}{autosuffix} + +\definesystemattribute[hidecontent][public] + +\unprotect + +\newcount\c_typo_hidden_level + +\permanent\protected\def\starthiddencontent + {\ifcase\c_typo_hidden_level + \clf_enablehidecontent + \let\clf_enablehidecontent\relax + \attribute\hidecontentattribute\plusone + \fi + \advance\c_typo_hidden_level\plusone} + +\permanent\protected\def\stophiddencontent + {\advance\c_typo_hidden_level\minusone + \ifcase\c_typo_hidden_level + \attribute\hidecontentattribute\attributeunsetvalue + \fi} + +\protect \endinput diff --git a/tex/context/fonts/mkiv/type-imp-texgyre.mkiv b/tex/context/fonts/mkiv/type-imp-texgyre.mkiv index 01cbb869d..f839db298 100644 --- a/tex/context/fonts/mkiv/type-imp-texgyre.mkiv +++ b/tex/context/fonts/mkiv/type-imp-texgyre.mkiv @@ -21,9 +21,7 @@ %D around but I won't waste time on sorting out all the (changing) font hassles. Also, %D the T1 fonts involved are unlikely to be available. -\definefontfeature - [mathcollapseitalics] - [collapseitalics=yes] +% \definefontfeature[mathextra][mathcollapseitalics] \starttypescriptcollection[texgyre] diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua index f23926727..b7ee64864 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-03-13 11:18 +-- merge date : 2021-03-17 17:43 do -- begin closure to overcome local limits and interference -- cgit v1.2.3