From 643bd3f4610ad64823521fac6fc8bb5f1b76eb3f Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Mon, 26 Apr 2021 01:39:06 +0200 Subject: 2021-04-26 00:54:00 --- tex/context/base/mkii/cont-new.mkii | 2 +- tex/context/base/mkii/context.mkii | 2 +- tex/context/base/mkii/mult-ro.mkii | 1 + tex/context/base/mkiv/cont-new.mkiv | 2 +- tex/context/base/mkiv/context.mkiv | 2 +- tex/context/base/mkiv/font-ini.mkvi | 6 ++ tex/context/base/mkiv/grph-con.lua | 24 +++++-- tex/context/base/mkiv/grph-inc.lua | 28 +++++++- tex/context/base/mkiv/grph-inc.mkiv | 2 + tex/context/base/mkiv/luat-lib.mkiv | 2 + tex/context/base/mkiv/m-fonts-plugins.mkiv | 5 +- tex/context/base/mkiv/mult-def.lua | 4 ++ tex/context/base/mkiv/mult-prm.lua | 19 ++++++ tex/context/base/mkiv/spac-chr.lua | 2 +- tex/context/base/mkiv/status-files.pdf | Bin 24875 -> 23999 bytes tex/context/base/mkiv/status-lua.pdf | Bin 240858 -> 224934 bytes tex/context/base/mkiv/tabl-xtb.mkvi | 19 +++++- tex/context/base/mkxl/cont-new.mkxl | 2 +- tex/context/base/mkxl/context.mkxl | 2 +- tex/context/base/mkxl/driv-shp.lmt | 28 ++++---- tex/context/base/mkxl/grph-inc.lmt | 32 +++++++-- tex/context/base/mkxl/grph-inc.mkxl | 2 + tex/context/base/mkxl/libs-imp-curl.lmt | 2 + tex/context/base/mkxl/lpdf-lmt.lmt | 74 ++++++++++++--------- tex/context/base/mkxl/spac-chr.lmt | 4 +- tex/context/base/mkxl/syst-ini.mkxl | 4 +- tex/context/base/mkxl/tabl-xtb.mklx | 25 +++++-- tex/context/interface/mkii/keys-ro.xml | 1 + tex/generic/context/luatex/luatex-fonts-merged.lua | 2 +- 29 files changed, 217 insertions(+), 81 deletions(-) (limited to 'tex') diff --git a/tex/context/base/mkii/cont-new.mkii b/tex/context/base/mkii/cont-new.mkii index 5cab6d540..c0f77fb71 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.04.21 11:36} +\newcontextversion{2021.04.26 00:51} %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 e35c6a5ae..693531af4 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.04.21 11:36} +\edef\contextversion{2021.04.26 00:51} %D For those who want to use this: diff --git a/tex/context/base/mkii/mult-ro.mkii b/tex/context/base/mkii/mult-ro.mkii index e497b8d6b..742934cea 100644 --- a/tex/context/base/mkii/mult-ro.mkii +++ b/tex/context/base/mkii/mult-ro.mkii @@ -761,6 +761,7 @@ \setinterfaceconstant{coupling}{cuplare} \setinterfaceconstant{couplingway}{modcuplare} \setinterfaceconstant{criterium}{criteriu} +\setinterfaceconstant{crop}{crop} \setinterfaceconstant{cropoffset}{cropoffset} \setinterfaceconstant{crossreference}{crossreference} \setinterfaceconstant{cssfile}{cssfile} diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv index 2b07e8d4b..223405dc1 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.04.21 11:36} +\newcontextversion{2021.04.26 00:51} %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 91d7c5640..c44775e59 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.04.21 11:36} +\edef\contextversion{2021.04.26 00:51} %D Kind of special: diff --git a/tex/context/base/mkiv/font-ini.mkvi b/tex/context/base/mkiv/font-ini.mkvi index 271a81c2a..ccd034106 100644 --- a/tex/context/base/mkiv/font-ini.mkvi +++ b/tex/context/base/mkiv/font-ini.mkvi @@ -2852,4 +2852,10 @@ \unexpanded\def\usefontpath[#1]% {\clf_addfontpath{#1}} +%D NO select discs: + +\ifdefined\discretionaryligaturemode + \discretionaryligaturemode\plusone +\fi + \protect \endinput diff --git a/tex/context/base/mkiv/grph-con.lua b/tex/context/base/mkiv/grph-con.lua index b3d39f0bd..fdae2223b 100644 --- a/tex/context/base/mkiv/grph-con.lua +++ b/tex/context/base/mkiv/grph-con.lua @@ -29,6 +29,7 @@ local variables = interfaces.variables local v_high = variables.high local v_low = variables.low local v_medium = variables.medium +local v_yes = variables.yes local figures = figures @@ -48,6 +49,10 @@ do -- eps | ps local epsconverter = converters.eps converters.ps = epsconverter + local function gscrop(specification) + return (specification and specification.crop == v_yes) and "-dEPSCrop" or "" + end + local resolutions = { [v_low] = "screen", [v_medium] = "ebook", @@ -68,7 +73,7 @@ do -- eps | ps -dBATCH -dAutoRotatePages=/None -dPDFSETTINGS=/%presets% - -dEPSCrop + %crop% -dCompatibilityLevel=%level% -sOutputFile=%newname% %colorspace% @@ -81,6 +86,7 @@ do -- eps | ps presets = "string", level = "string", colorspace = "string", + -- crop = "string", }, } @@ -119,7 +125,7 @@ do -- eps | ps return tmpname end - function epsconverter.pdf(oldname,newname,resolution,colorspace) -- the resolution interface might change + function epsconverter.pdf(oldname,newname,resolution,colorspace,specification) -- the resolution interface might change local presets = resolutions[resolution or "high"] or resolutions.high local level = codeinjections.getformatoption("pdf_level") or "1.3" local tmpname = oldname @@ -141,13 +147,14 @@ do -- eps | ps presets = presets, level = tostring(level), colorspace = colorspace, + crop = gscrop(specification), } if tmpname ~= oldname then os.remove(tmpname) end end - epsconverter["gray.pdf"] = function(oldname,newname,resolution) -- the resolution interface might change + epsconverter["gray.pdf"] = function(oldname,newname,resolution,_,specification) -- the resolution interface might change epsconverter.pdf(oldname,newname,resolution,"gray") end @@ -211,11 +218,16 @@ do -- svg return new and "filename" or suffix end + local function inkscapecrop(specification) + return (specification and specification.crop == v_yes) and "--export-area-drawing" or "" + end + local runner = sandbox.registerrunner { name = "svg to something", program = "inkscape", template = longtostring [[ %oldname% + %crop% --export-dpi=%resolution% --export-%format%=%newname% ]], @@ -226,7 +238,7 @@ do -- svg resolution = "string", }, defaults = { - format = format, + format = "pdf", resolution = "600", } } @@ -235,10 +247,11 @@ do -- svg runner = runner, } - function svgconverter.pdf(oldname,newname) + function svgconverter.pdf(oldname,newname,resolution,arguments,specification) runner { format = inkscapeformat("pdf"), resolution = "600", + crop = inkscapecrop(specification), newname = expandfilename(newname), oldname = expandfilename(oldname), } @@ -248,6 +261,7 @@ do -- svg runner { format = inkscapeformat("png"), resolution = "600", + crop = inkscapecrop(specification), newname = expandfilename(newname), oldname = expandfilename(oldname), } diff --git a/tex/context/base/mkiv/grph-inc.lua b/tex/context/base/mkiv/grph-inc.lua index 6fdf74c08..d4e382a21 100644 --- a/tex/context/base/mkiv/grph-inc.lua +++ b/tex/context/base/mkiv/grph-inc.lua @@ -587,6 +587,7 @@ local function new() -- we could use metatables status -> used -> request but it controls = false, display = false, mask = false, + crop = false, conversion = false, resolution = false, color = false, @@ -766,18 +767,20 @@ local function register(askedname,specification) local conversion = wipe(specification.conversion) local resolution = wipe(specification.resolution) local arguments = wipe(specification.arguments) + local crop = wipe(specification.crop) local newformat = conversion if not newformat or newformat == "" then newformat = defaultformat end if trace_conversion then - report_inclusion("checking conversion of %a, fullname %a, old format %a, new format %a, conversion %a, resolution %a, arguments %a", + report_inclusion("checking conversion of %a, fullname %a, old format %a, new format %a, conversion %a, resolution %a, crop %a, arguments %a", askedname, specification.fullname, format, newformat, conversion or "default", resolution or "default", + crop or "default", arguments or "" ) end @@ -793,7 +796,7 @@ local function register(askedname,specification) end end -- end of quick hack - local converter = (not remapper) and (newformat ~= format or resolution or arguments) and converters[format] + local converter = (not remapper) and (newformat ~= format or resolution or arguments) and converters[format] -- no crop here if converter then local okay = converter[newformat] if okay then @@ -853,6 +856,10 @@ local function register(askedname,specification) if arguments then hash = hash .. "[a:" .. arguments .. "]" end + if crop then + hash = hash .. "[c:" .. crop .. "]" + end + newbase = gsub(newbase,"%.","_") -- nicer to have no suffix in the name if hash ~= "" then newbase = newbase .. "_" .. md5.hex(hash) end @@ -877,7 +884,7 @@ local function register(askedname,specification) if trace_conversion then report_inclusion("converting %a (%a) from %a to %a",askedname,oldname,format,newformat) end - converter(oldname,newname,resolution or "", arguments or "") + converter(oldname,newname,resolution or "", arguments or "",specification) -- in retrospect a table else if trace_conversion then report_inclusion("no need to convert %a (%a) from %a to %a",askedname,oldname,format,newformat) @@ -971,10 +978,12 @@ local function locate(request) -- name, format, cache local askedconversion = request.conversion local askedresolution = request.resolution local askedarguments = request.arguments + local askedcrop = request.crop local askedhash = f_hash_part( askedname, askedconversion or "default", askedresolution or "default", + askedcrop or "default", askedarguments or "" ) local foundname = figures_found[askedhash] @@ -1029,6 +1038,7 @@ local function locate(request) -- name, format, cache cache = askedcache, conversion = askedconversion, resolution = askedresolution, + crop = askedcrop, arguments = askedarguments, }) end @@ -1066,6 +1076,7 @@ local function locate(request) -- name, format, cache conversion = askedconversion, resolution = askedresolution, arguments = askedarguments, + crop = askedcrop, internal = internal, }) elseif quitscanning then @@ -1086,6 +1097,7 @@ local function locate(request) -- name, format, cache cache = askedcache, conversion = askedconversion, resolution = askedresolution, + crop = askedcrop, arguments = askedarguments, }) end @@ -1105,6 +1117,7 @@ local function locate(request) -- name, format, cache cache = askedcache, conversion = askedconversion, resolution = askedresolution, + crop = askedcrop, arguments = askedarguments, }) end @@ -1119,6 +1132,7 @@ local function locate(request) -- name, format, cache cache = askedcache, conversion = askedconversion, resolution = askedresolution, + crop = askedcrop, arguments = askedarguments, }) end @@ -1143,6 +1157,7 @@ local function locate(request) -- name, format, cache cache = askedcache, conversion = askedconversion, resolution = askedresolution, + crop = askedcrop, arguments = askedarguments, }) end @@ -1178,6 +1193,7 @@ local function locate(request) -- name, format, cache cache = askedcache, conversion = askedconversion, resolution = askedresolution, + crop = askedcrop, arguments = askedarguments }) end @@ -1206,6 +1222,7 @@ local function locate(request) -- name, format, cache cache = askedcache, conversion = askedconversion, resolution = askedresolution, + crop = askedcrop, arguments = askedarguments, }) end @@ -1231,6 +1248,7 @@ local function locate(request) -- name, format, cache cache = askedcache, conversion = askedconversion, resolution = askedresolution, + crop = askedcrop, arguments = askedarguments, }) end @@ -1241,6 +1259,7 @@ local function locate(request) -- name, format, cache return register(askedname, { -- these two are needed for hashing 'found' conversion = askedconversion, resolution = askedresolution, + crop = askedcrop, arguments = askedarguments, }) end @@ -1455,6 +1474,7 @@ function checkers.generic(data) local size = dr.size or "crop" local color = dr.color or "natural" local mask = dr.mask or "none" + local crop = dr.crop or "none" local conversion = dr.conversion local resolution = dr.resolution local arguments = dr.arguments @@ -1476,6 +1496,7 @@ function checkers.generic(data) size, color, mask, + crop, conversion, resolution, arguments @@ -2071,6 +2092,7 @@ implement { { "preview" }, { "display" }, { "mask" }, + { "crop" }, { "conversion" }, { "resolution" }, { "color" }, diff --git a/tex/context/base/mkiv/grph-inc.mkiv b/tex/context/base/mkiv/grph-inc.mkiv index 0b8065989..05d4c3a57 100644 --- a/tex/context/base/mkiv/grph-inc.mkiv +++ b/tex/context/base/mkiv/grph-inc.mkiv @@ -111,6 +111,7 @@ \c!ownerpassword =, \c!compact =, \c!cmyk =, + \c!crop =\v!yes, ] %D Defining figures. @@ -370,6 +371,7 @@ compact {\externalfigureparameter\c!compact}% experiment, share fonts userpassword {\externalfigureparameter\c!userpassword}% ownerpassword{\externalfigureparameter\c!ownerpassword}% + crop {\externalfigureparameter\c!crop}% \ifx\p_width\empty \else width \dimexpr\p_width\relax \fi diff --git a/tex/context/base/mkiv/luat-lib.mkiv b/tex/context/base/mkiv/luat-lib.mkiv index 6dbcdaf54..f6bab870b 100644 --- a/tex/context/base/mkiv/luat-lib.mkiv +++ b/tex/context/base/mkiv/luat-lib.mkiv @@ -85,6 +85,8 @@ \registerctxluafile{luat-mac}{} %registerctxluafile{luat-prp}{} % for the moment of not much use +\registerctxluafile{util-lib}{} + \registerctxluafile{lxml-tab}{} \registerctxluafile{lxml-lpt}{} \registerctxluafile{lxml-xml}{} diff --git a/tex/context/base/mkiv/m-fonts-plugins.mkiv b/tex/context/base/mkiv/m-fonts-plugins.mkiv index ec1c05e7a..a2b06fb8c 100644 --- a/tex/context/base/mkiv/m-fonts-plugins.mkiv +++ b/tex/context/base/mkiv/m-fonts-plugins.mkiv @@ -15,10 +15,13 @@ %D Eigner at an NTG meeting, then left it for a while, and sort of finalized it the %D last quarter of 2016. As I don't use this module, apart from maybe testing %D something, it is not guaranteed to work (but fixing should be a no real problem -%D as I expect apis to be stable). Plugins liek this can interfere with other +%D as I expect apis to be stable). Plugins like this can interfere with other %D functionality in \CONTEXT\ so don't expect too much support. The two modules %D mentioned below should work in the generic loader too. It's anyhow an %D illustration of how \type {ffi} be used in a practical application. +%D +%D I'm not sure if Idris will ever need this but the code has been used for some +%D articles so that's why it's eventually shipped. % \enabletrackers[resolvers.ffilib] diff --git a/tex/context/base/mkiv/mult-def.lua b/tex/context/base/mkiv/mult-def.lua index 0f2ef419c..6168da413 100644 --- a/tex/context/base/mkiv/mult-def.lua +++ b/tex/context/base/mkiv/mult-def.lua @@ -8264,6 +8264,10 @@ return { ["pe"]="criterium", ["ro"]="criteriu", }, + ["crop"]={ + ["en"]="crop", + ["fr"]="recadre", + }, ["cropoffset"]={ ["en"]="cropoffset", ["fr"]="decalagerecadre", diff --git a/tex/context/base/mkiv/mult-prm.lua b/tex/context/base/mkiv/mult-prm.lua index 855b4bc1f..710934ae6 100644 --- a/tex/context/base/mkiv/mult-prm.lua +++ b/tex/context/base/mkiv/mult-prm.lua @@ -84,6 +84,7 @@ return { "Uleft", "Umathaccent", "Umathaccentbaseheight", + "Umathaccentvariant", "Umathaxis", "Umathbinbinspacing", "Umathbinclosespacing", @@ -93,6 +94,7 @@ return { "Umathbinordspacing", "Umathbinpunctspacing", "Umathbinrelspacing", + "Umathbotaccentvariant", "Umathchar", "Umathcharclass", "Umathchardef", @@ -112,12 +114,18 @@ return { "Umathcode", "Umathcodenum", "Umathconnectoroverlapmin", + "Umathdegreevariant", + "Umathdelimiterovervariant", + "Umathdelimiterundervariant", + "Umathdenominatorvariant", "Umathfractiondelsize", "Umathfractiondenomdown", "Umathfractiondenomvgap", "Umathfractionnumup", "Umathfractionnumvgap", "Umathfractionrule", + "Umathfractionvariant", + "Umathhextensiblevariant", "Umathinnerbinspacing", "Umathinnerclosespacing", "Umathinnerinnerspacing", @@ -134,6 +142,7 @@ return { "Umathlimitbelowvgap", "Umathnolimitsubfactor", "Umathnolimitsupfactor", + "Umathnumeratorvariant", "Umathopbinspacing", "Umathopclosespacing", "Umathopenbinspacing", @@ -163,7 +172,10 @@ return { "Umathoverbarrule", "Umathoverbarvgap", "Umathoverdelimiterbgap", + "Umathoverdelimitervariant", "Umathoverdelimitervgap", + "Umathoverlayaccentvariant", + "Umathoverlinevariant", "Umathpunctbinspacing", "Umathpunctclosespacing", "Umathpunctinnerspacing", @@ -178,6 +190,7 @@ return { "Umathradicaldegreeraise", "Umathradicalkern", "Umathradicalrule", + "Umathradicalvariant", "Umathradicalvgap", "Umathrelbinspacing", "Umathrelclosespacing", @@ -194,21 +207,27 @@ return { "Umathspacingmode", "Umathstackdenomdown", "Umathstacknumup", + "Umathstackvariant", "Umathstackvgap", + "Umathsubscriptvariant", "Umathsubshiftdown", "Umathsubshiftdrop", "Umathsubsupshiftdown", "Umathsubsupvgap", "Umathsubtopmax", "Umathsupbottommin", + "Umathsuperscriptvariant", "Umathsupshiftdrop", "Umathsupshiftup", "Umathsupsubbottommax", + "Umathtopaccentvariant", "Umathunderbarkern", "Umathunderbarrule", "Umathunderbarvgap", "Umathunderdelimiterbgap", + "Umathunderdelimitervariant", "Umathunderdelimitervgap", + "Umathunderlinevariant", "Umiddle", "Unosubprescript", "Unosubscript", diff --git a/tex/context/base/mkiv/spac-chr.lua b/tex/context/base/mkiv/spac-chr.lua index fa6eb18a5..7ec3e3cc4 100644 --- a/tex/context/base/mkiv/spac-chr.lua +++ b/tex/context/base/mkiv/spac-chr.lua @@ -130,7 +130,7 @@ end local function nbsp(head,current) local para = fontparameters[getfont(current)] local attr = getattr(current,a_alignstate) or 0 - if attr >= 1 or attr <= 3 then -- flushright + if attr >= 1 and attr <= 3 then -- flushright head, current = inject_nobreak_space(0x00A0,head,current,para.space,0,0) else head, current = inject_nobreak_space(0x00A0,head,current,para.space,para.spacestretch,para.spaceshrink) diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf index af4f3802f..18d4edc32 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 1ddade41c..c7c27b61c 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/tabl-xtb.mkvi b/tex/context/base/mkiv/tabl-xtb.mkvi index c5042a405..3f3ef4be3 100644 --- a/tex/context/base/mkiv/tabl-xtb.mkvi +++ b/tex/context/base/mkiv/tabl-xtb.mkvi @@ -392,11 +392,24 @@ % in text flow: headers and footers get repeated -\setvalue{\??xtableflushsplit\v!repeat}% +% \setvalue{\??xtableflushsplit\v!repeat}% +% {\doloop +% {\clf_x_table_flush +% method {\v!split}% +% height \ifdim\pagegoal=\maxdimen\textheight\else\pagegoal\fi +% \relax +% \ifcase\c_tabl_x_state +% \exitloop +% \else +% \page +% \fi}} + +\defcsname\??xtableflushsplit\v!repeat\endcsname {\doloop - {\clf_x_table_flush + {\testpage[5]% for now hard coded, just as the \lineheight below, see mail end of april 2021 + \clf_x_table_flush method {\v!split}% - height \ifdim\pagegoal=\maxdimen\textheight\else\pagegoal\fi + height \ifdim\pagegoal=\maxdimen\textheight\else\dimexpr\pagegoal-\pagetotal-\lineheight\relax\fi \relax \ifcase\c_tabl_x_state \exitloop diff --git a/tex/context/base/mkxl/cont-new.mkxl b/tex/context/base/mkxl/cont-new.mkxl index b48a3b801..9fb153df4 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.04.21 11:36} +\newcontextversion{2021.04.26 00:51} %D This file is loaded at runtime, thereby providing an excellent place for hacks, %D patches, extensions and new features. There can be local overloads in cont-loc diff --git a/tex/context/base/mkxl/context.mkxl b/tex/context/base/mkxl/context.mkxl index d8475d81f..210b1b25c 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.04.21 11:36} +\immutable\edef\contextversion{2021.04.26 00:51} %overloadmode 1 % check frozen / warning %overloadmode 2 % check frozen / error diff --git a/tex/context/base/mkxl/driv-shp.lmt b/tex/context/base/mkxl/driv-shp.lmt index 6188f8a24..cd117f326 100644 --- a/tex/context/base/mkxl/driv-shp.lmt +++ b/tex/context/base/mkxl/driv-shp.lmt @@ -676,20 +676,20 @@ local hlist_out, vlist_out do if subtype == gleaders_code then local save_h = cur_h if pos_r == righttoleft_code then - cur_h = ref_h - shipbox_h - cur_h - cur_h = width * (cur_h / width) + cur_h = ref_h - shipbox_h + cur_h + cur_h = width * (cur_h // width) cur_h = ref_h - shipbox_h - cur_h else - cur_h = cur_h + ref_h - shipbox_h - cur_h = width * (cur_h / width) - cur_h = cur_h - ref_h - shipbox_h + cur_h = ref_h - shipbox_h - cur_h + cur_h = width * (cur_h // width) + cur_h = ref_h - shipbox_h - cur_h end if cur_h < save_h then cur_h = cur_h + width end elseif subtype == leaders_code then local save_h = cur_h - cur_h = width * (cur_h / width) + cur_h = width * (cur_h // width) if cur_h < save_h then cur_h = cur_h + width end @@ -697,10 +697,10 @@ local hlist_out, vlist_out do lq = gluewidth / width lr = gluewidth % width if subtype == cleaders_code then - cur_h = cur_h + lr / 2 + cur_h = cur_h + lr // 2 else - lx = lr / (lq + 1) - cur_h = cur_h + (lr - (lq - 1) * lx) / 2 + lx = lr // (lq + 1) + cur_h = cur_h + (lr - (lq - 1) * lx) // 2 end end local shift = getshift(leader) @@ -1000,14 +1000,14 @@ local hlist_out, vlist_out do if subtype == gleaders_code then save_v = cur_v cur_v = ref_v - shipbox_v - cur_v - cur_v = total * (cur_v / total) + cur_v = total * (cur_v // total) cur_v = ref_v - shipbox_v - cur_v if cur_v < save_v then cur_v = cur_v + total end elseif subtype == leaders_code then -- aleader save_v = cur_v - cur_v = top_edge + total * ((cur_v - top_edge) / total) + cur_v = top_edge + total * ((cur_v - top_edge) // total) if cur_v < save_v then cur_v = cur_v + total end @@ -1015,10 +1015,10 @@ local hlist_out, vlist_out do lq = glueheight / total lr = glueheight % total if subtype == cleaders_code then - cur_v = cur_v + lr / 2 + cur_v = cur_v + lr // 2 else - ly = lr / (lq + 1) - cur_v = cur_v + (lr - (lq - 1) * ly) / 2 + ly = lr // (lq + 1) + cur_v = cur_v + (lr - (lq - 1) * ly) // 2 end end local shift = getshift(leader) diff --git a/tex/context/base/mkxl/grph-inc.lmt b/tex/context/base/mkxl/grph-inc.lmt index 2066b31b0..f644e9b5b 100644 --- a/tex/context/base/mkxl/grph-inc.lmt +++ b/tex/context/base/mkxl/grph-inc.lmt @@ -587,6 +587,7 @@ local function new() -- we could use metatables status -> used -> request but it controls = false, display = false, mask = false, + crop = false, conversion = false, resolution = false, color = false, @@ -766,18 +767,20 @@ local function register(askedname,specification) local conversion = wipe(specification.conversion) local resolution = wipe(specification.resolution) local arguments = wipe(specification.arguments) + local crop = wipe(specification.crop) local newformat = conversion if not newformat or newformat == "" then newformat = defaultformat end if trace_conversion then - report_inclusion("checking conversion of %a, fullname %a, old format %a, new format %a, conversion %a, resolution %a, arguments %a", + report_inclusion("checking conversion of %a, fullname %a, old format %a, new format %a, conversion %a, resolution %a, crop %a, arguments %a", askedname, specification.fullname, format, newformat, conversion or "default", resolution or "default", + crop or "default", arguments or "" ) end @@ -793,7 +796,7 @@ local function register(askedname,specification) end end -- end of quick hack - local converter = (not remapper) and (newformat ~= format or resolution or arguments) and converters[format] + local converter = (not remapper) and (newformat ~= format or resolution or arguments) and converters[format] -- no crop here if converter then local okay = converter[newformat] if okay then @@ -853,6 +856,10 @@ local function register(askedname,specification) if arguments then hash = hash .. "[a:" .. arguments .. "]" end + if crop then + hash = hash .. "[c:" .. crop .. "]" + end + newbase = gsub(newbase,"%.","_") -- nicer to have no suffix in the name if hash ~= "" then newbase = newbase .. "_" .. md5.hex(hash) end @@ -877,7 +884,7 @@ local function register(askedname,specification) if trace_conversion then report_inclusion("converting %a (%a) from %a to %a",askedname,oldname,format,newformat) end - converter(oldname,newname,resolution or "", arguments or "") + converter(oldname,newname,resolution or "", arguments or "",specification) -- in retrospect a table else if trace_conversion then report_inclusion("no need to convert %a (%a) from %a to %a",askedname,oldname,format,newformat) @@ -971,13 +978,15 @@ local function locate(request) -- name, format, cache local askedconversion = request.conversion local askedresolution = request.resolution local askedarguments = request.arguments + local askedcrop = request.crop local askedhash = f_hash_part( askedname, askedconversion or "default", askedresolution or "default", + askedcrop or "default", askedarguments or "" ) - local foundname = figures_found[askedhash] + local foundname = figures_found[askedhash] if foundname then return foundname end @@ -1029,6 +1038,7 @@ local function locate(request) -- name, format, cache cache = askedcache, conversion = askedconversion, resolution = askedresolution, + crop = askedcrop, arguments = askedarguments, }) end @@ -1066,6 +1076,7 @@ local function locate(request) -- name, format, cache conversion = askedconversion, resolution = askedresolution, arguments = askedarguments, + crop = askedcrop, internal = internal, }) elseif quitscanning then @@ -1086,6 +1097,7 @@ local function locate(request) -- name, format, cache cache = askedcache, conversion = askedconversion, resolution = askedresolution, + crop = askedcrop, arguments = askedarguments, }) end @@ -1105,6 +1117,7 @@ local function locate(request) -- name, format, cache cache = askedcache, conversion = askedconversion, resolution = askedresolution, + crop = askedcrop, arguments = askedarguments, }) end @@ -1119,6 +1132,7 @@ local function locate(request) -- name, format, cache cache = askedcache, conversion = askedconversion, resolution = askedresolution, + crop = askedcrop, arguments = askedarguments, }) end @@ -1143,6 +1157,7 @@ local function locate(request) -- name, format, cache cache = askedcache, conversion = askedconversion, resolution = askedresolution, + crop = askedcrop, arguments = askedarguments, }) end @@ -1178,6 +1193,7 @@ local function locate(request) -- name, format, cache cache = askedcache, conversion = askedconversion, resolution = askedresolution, + crop = askedcrop, arguments = askedarguments }) end @@ -1206,6 +1222,7 @@ local function locate(request) -- name, format, cache cache = askedcache, conversion = askedconversion, resolution = askedresolution, + crop = askedcrop, arguments = askedarguments, }) end @@ -1231,6 +1248,7 @@ local function locate(request) -- name, format, cache cache = askedcache, conversion = askedconversion, resolution = askedresolution, + crop = askedcrop, arguments = askedarguments, }) end @@ -1241,6 +1259,7 @@ local function locate(request) -- name, format, cache return register(askedname, { -- these two are needed for hashing 'found' conversion = askedconversion, resolution = askedresolution, + crop = askedcrop, arguments = askedarguments, }) end @@ -1448,13 +1467,14 @@ end local pagecount = { } -function checkers.generic(data) +function checkers.generic(data) -- called by checkers.pdf/png/jpg local dr, du, ds = data.request, data.used, data.status local name = du.fullname or "unknown generic" local page = du.page or dr.page local size = dr.size or "crop" local color = dr.color or "natural" local mask = dr.mask or "none" + local crop = dr.crop or "none" local conversion = dr.conversion local resolution = dr.resolution local arguments = dr.arguments @@ -1476,6 +1496,7 @@ function checkers.generic(data) size, color, mask, + crop, conversion, resolution, arguments @@ -2071,6 +2092,7 @@ implement { { "preview" }, { "display" }, { "mask" }, + { "crop" }, { "conversion" }, { "resolution" }, { "color" }, diff --git a/tex/context/base/mkxl/grph-inc.mkxl b/tex/context/base/mkxl/grph-inc.mkxl index 85f0af73e..ace3e581d 100644 --- a/tex/context/base/mkxl/grph-inc.mkxl +++ b/tex/context/base/mkxl/grph-inc.mkxl @@ -114,6 +114,7 @@ \c!ownerpassword =, \c!compact =, \c!cmyk =, + \c!crop =\v!yes, ] %D Defining figures. @@ -332,6 +333,7 @@ compact {\externalfigureparameter\c!compact}% experiment, share fonts userpassword {\externalfigureparameter\c!userpassword}% ownerpassword{\externalfigureparameter\c!ownerpassword}% + crop {\externalfigureparameter\c!crop}% \ifempty\p_width \else width \dimexpr\p_width\relax \fi diff --git a/tex/context/base/mkxl/libs-imp-curl.lmt b/tex/context/base/mkxl/libs-imp-curl.lmt index b30739794..05b2b8f48 100644 --- a/tex/context/base/mkxl/libs-imp-curl.lmt +++ b/tex/context/base/mkxl/libs-imp-curl.lmt @@ -278,6 +278,8 @@ local function fetch(options) else report("invalid argument") end + else + report("no curl library loaded") end end diff --git a/tex/context/base/mkxl/lpdf-lmt.lmt b/tex/context/base/mkxl/lpdf-lmt.lmt index 1861cbc49..b7db8e50d 100644 --- a/tex/context/base/mkxl/lpdf-lmt.lmt +++ b/tex/context/base/mkxl/lpdf-lmt.lmt @@ -105,7 +105,7 @@ local trace_details = false trackers.register("backend.details", function(v) t local function compressdata(data,size) local guess = ((size // 4096) + 1) * 2048 - local comp = zlibcompresssize(data,3,guess) + local comp = zlibcompresssize(data,guess,3) -- if comp then -- report() -- report("size %i, guess %i, result %i => %s / %s",size,guess,#comp,guess>=#comp and "hit" or "miss") @@ -114,6 +114,10 @@ local function compressdata(data,size) return comp end +-- local function compressdata(data,size) +-- return zlibcompress(data,3) +-- end + -- we collect them: local flushers = { } @@ -2016,7 +2020,6 @@ local addtocache, flushcache, cache do list = concat(list," ") data[0] = list data = concat(data,"\010",0,d) - local size = #data local strobj = pdfdictionary { Type = p_ObjStm, N = d, @@ -2025,7 +2028,7 @@ local addtocache, flushcache, cache do objects[cache] = offset local fb if compress then --- local comp = zlibcompress(data,3) + local size = #data local comp = compressdata(data,size) if comp and #comp < size then data = comp @@ -2036,12 +2039,13 @@ local addtocache, flushcache, cache do else fb = f_stream_b_d_u end - local b = fb(cache,strobj(),size) + local s = #data + local b = fb(cache,strobj(),s) local e = s_stream_e flush(f,b) flush(f,data) flush(f,e) - offset = offset + #b + #data + #e + offset = offset + #b + s + #e data, d = { }, 0 list, l = { }, 0 coffset = 0 @@ -2271,46 +2275,51 @@ local function flushstreamobj(data,n,dict,comp,nolength) local e = s_stream_e if nolength then b = f_stream_b_d_r(n,dict) - elseif comp ~= false and compress and size > threshold then --- local compdata = zlibcompress(data,3) - local compdata = compressdata(data,size) - if compdata then - local compsize = #compdata - if compsize > size - threshold then - b = dict and f_stream_b_d_u(n,dict,size) or f_stream_b_n_u(n,size) - else - data = compdata - b = dict and f_stream_b_d_c(n,dict,compsize) or f_stream_b_n_c(n,compsize) + else + local done = false + if comp ~= false and compress and size > threshold then + local compdata = compressdata(data,size) + if compdata then + local compsize = #compdata + if compsize <= size - threshold then + data = compdata + size = compsize + done = true + end end + end + if done then + b = dict and f_stream_b_d_c(n,dict,size) or f_stream_b_n_c(n,size) else - b = dict and f_stream_b_d_u(n,dict,size) or f_stream_b_n_u(n,size) + b = dict and f_stream_b_d_u(n,dict,size) or f_stream_b_d_r(n,size) end - else - b = dict and f_stream_b_d_u(n,dict,size) or f_stream_b_n_u(n,size) end flush(f,b) flush(f,data) flush(f,e) objects[n] = offset - offset = offset + #b + #data + #e + offset = offset + #b + size + #e else if nolength then data = f_stream_d_r(n,dict,data) - elseif comp ~= false and compress and size > threshold then --- local compdata = zlibcompress(data,3) - local compdata = compressdata(data,size) - if compdata then - local compsize = #compdata - if compsize > size - threshold then - data = dict and f_stream_d_u(n,dict,size,data) or f_stream_n_u(n,size,data) - else - data = dict and f_stream_d_c(n,dict,compsize,compdata) or f_stream_n_c(n,compsize,compdata) + else + local done = false + if comp ~= false and compress and size > threshold then + local compdata = compressdata(data,size) + if compdata then + local compsize = #compdata + if compsize <= size - threshold then + data = compdata + size = compsize + done = true + end end + end + if done then + data = dict and f_stream_d_c(n,dict,size,data) or f_stream_n_c(n,size,data) else data = dict and f_stream_d_u(n,dict,size,data) or f_stream_n_u(n,size,data) end - else - data = dict and f_stream_d_u(n,dict,size,data) or f_stream_n_u(n,size,data) end if not lastdeferred then lastdeferred = n @@ -2646,10 +2655,10 @@ local openfile, closefile do } local fb if compress then --- local comp = zlibcompress(data,3) local comp = compressdata(data,size) if comp then data = comp + size = #data fb = f_stream_b_d_c else fb = f_stream_b_d_u @@ -2735,7 +2744,8 @@ do -- updaters.register("backend.update.pdf",function() return setmetatableindex(original) end - function codeinjections.scanimgage(specification) + function codeinjections.scanimage(specification) + -- placeholder, doesn't give back dimensions etc but will be plugged in return specification end diff --git a/tex/context/base/mkxl/spac-chr.lmt b/tex/context/base/mkxl/spac-chr.lmt index ac90926e1..52d8a7de1 100644 --- a/tex/context/base/mkxl/spac-chr.lmt +++ b/tex/context/base/mkxl/spac-chr.lmt @@ -130,10 +130,10 @@ end local function nbsp(head,current) local para = fontparameters[getfont(current)] local attr = getattr(current,a_alignstate) or 0 - if attr >= 1 or attr <= 3 then -- flushright + if attr >= 1 and attr <= 3 then -- flushright head, current = inject_nobreak_space(0x00A0,head,current,para.space,0,0) else - head, current = inject_nobreak_space(0x00A0,head,current,para.space,para.spacestretch,para.spaceshrink) + head, current = inject_nobreak_space(0x00A0,head,current,para.space,para.space_stretch,para.space_shrink) end setsubtype(current,spaceskip_code) return head, current diff --git a/tex/context/base/mkxl/syst-ini.mkxl b/tex/context/base/mkxl/syst-ini.mkxl index be2571a3d..fb85531b7 100644 --- a/tex/context/base/mkxl/syst-ini.mkxl +++ b/tex/context/base/mkxl/syst-ini.mkxl @@ -634,8 +634,8 @@ \permanent\protected\def\defUmathtopaccent #1#2#3#4{\global\immutable\protected\def#1{\Umathaccent "#2 "#3 "#4 }} \permanent\protected\def\defUmathbotaccent #1#2#3#4{\global\immutable\protected\def#1{\Umathbotaccent "#2 "#3 "#4 }} -\permanent\protected\def\defUdelimiterover #1#2#3#4{\writestatus{!}{\string#1}\global\immutable\protected\def#1{\Udelimiterover "#2 "#3 }} -\permanent\protected\def\defUdelimiterunder #1#2#3#4{\writestatus{!}{\string#1}\global\immutable\protected\def#1{\Udelimiterunder "#2 "#3 }} +\permanent\protected\def\defUdelimiterover #1#2#3#4{\global\immutable\protected\def#1{\Udelimiterover "#2 "#3 }} +\permanent\protected\def\defUdelimiterunder #1#2#3#4{\global\immutable\protected\def#1{\Udelimiterunder "#2 "#3 }} \permanent\protected\def\defUdelimiter #1#2#3#4{\global\immutable\protected\def#1{\Udelimiter "#2 "#3 "#4 }} \permanent\protected\def\defUradical #1#2#3{\global\immutable\protected\def#1{\Uradical "#2 "#3 }} \permanent\protected\def\defUroot #1#2#3{\global\immutable\protected\def#1{\Uroot "#2 "#3 }} diff --git a/tex/context/base/mkxl/tabl-xtb.mklx b/tex/context/base/mkxl/tabl-xtb.mklx index b15d99c12..9cce05f18 100644 --- a/tex/context/base/mkxl/tabl-xtb.mklx +++ b/tex/context/base/mkxl/tabl-xtb.mklx @@ -353,14 +353,14 @@ % in text flow: headers and footers only once -\setvalue{\??xtableflushsplit\v!yes}% +\defcsname\??xtableflushsplit\v!yes\endcsname {\clf_x_table_flush method {\v!split}% \relax} % in text flow: headers and footers only once -\setvalue{\??xtableflushsplit\v!no}% +\defcsname\??xtableflushsplit\v!no\endcsname {% \noindent % gives extra line after table % \noindentation % messes up the next indentation % \dontleavehmode % no leftskip @@ -373,11 +373,24 @@ % in text flow: headers and footers get repeated -\setvalue{\??xtableflushsplit\v!repeat}% +% \defcsname\??xtableflushsplit\v!repeat\endcsname +% {\doloop +% {\clf_x_table_flush +% method {\v!split}% +% height \ifdim\pagegoal=\maxdimen\textheight\else\pagegoal\fi +% \relax +% \ifcase\c_tabl_x_state +% \exitloop +% \else +% \page +% \fi}} + +\defcsname\??xtableflushsplit\v!repeat\endcsname {\doloop - {\clf_x_table_flush + {\testpage[5]% for now hard coded, just as the \lineheight below, see mail end of april 2021 + \clf_x_table_flush method {\v!split}% - height \ifdim\pagegoal=\maxdimen\textheight\else\pagegoal\fi + height \ifdim\pagegoal=\maxdimen\textheight\else\dimexpr\pagegoal-\pagetotal-\lineheight\relax\fi \relax \ifcase\c_tabl_x_state \exitloop @@ -385,7 +398,7 @@ \page \fi}} -% \setvalue{\??xtableflushsplit\v!setups}% +% \defcsname\??xtableflushsplit\v!setups\endcsname % {\directsetup{xtable:split:user}} % % \startsetups[xtable:split:user] diff --git a/tex/context/interface/mkii/keys-ro.xml b/tex/context/interface/mkii/keys-ro.xml index bc9e87ddf..9a01df165 100644 --- a/tex/context/interface/mkii/keys-ro.xml +++ b/tex/context/interface/mkii/keys-ro.xml @@ -767,6 +767,7 @@ + diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua index 4d7a9796a..453ee0018 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-04-21 11:36 +-- merge date : 2021-04-26 00:51 do -- begin closure to overcome local limits and interference -- cgit v1.2.3