From 93dccfc40625a754b372edd228724969b28e4342 Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Sat, 9 Jun 2018 15:32:09 +0200 Subject: 2018-06-09 14:37:00 --- tex/context/base/mkiv/cont-new.mkiv | 2 +- tex/context/base/mkiv/context.mkiv | 2 +- tex/context/base/mkiv/font-def.lua | 14 +- tex/context/base/mkiv/font-gbn.lua | 301 --------------------------------- tex/context/base/mkiv/font-xtx.lua | 97 ----------- tex/context/base/mkiv/mlib-pdf.lua | 30 +++- tex/context/base/mkiv/mlib-pps.lua | 33 ++-- tex/context/base/mkiv/mult-def.lua | 4 +- tex/context/base/mkiv/mult-fun.lua | 1 + tex/context/base/mkiv/status-files.pdf | Bin 26120 -> 26064 bytes tex/context/base/mkiv/status-lua.pdf | Bin 259312 -> 260163 bytes 11 files changed, 54 insertions(+), 430 deletions(-) delete mode 100644 tex/context/base/mkiv/font-gbn.lua delete mode 100644 tex/context/base/mkiv/font-xtx.lua (limited to 'tex/context/base/mkiv') diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv index feb54e9ca..0f226d75f 100644 --- a/tex/context/base/mkiv/cont-new.mkiv +++ b/tex/context/base/mkiv/cont-new.mkiv @@ -11,7 +11,7 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -\newcontextversion{2018.06.08 09:31} +\newcontextversion{2018.06.09 14:30} %D This file is loaded at runtime, thereby providing an excellent place for %D hacks, patches, extensions and new features. diff --git a/tex/context/base/mkiv/context.mkiv b/tex/context/base/mkiv/context.mkiv index 5202268c3..9d171901f 100644 --- a/tex/context/base/mkiv/context.mkiv +++ b/tex/context/base/mkiv/context.mkiv @@ -42,7 +42,7 @@ %D has to match \type {YYYY.MM.DD HH:MM} format. \edef\contextformat {\jobname} -\edef\contextversion{2018.06.08 09:31} +\edef\contextversion{2018.06.09 14:30} \edef\contextkind {beta} %D For those who want to use this: diff --git a/tex/context/base/mkiv/font-def.lua b/tex/context/base/mkiv/font-def.lua index 732ce401f..7b3beda73 100644 --- a/tex/context/base/mkiv/font-def.lua +++ b/tex/context/base/mkiv/font-def.lua @@ -82,12 +82,14 @@ and prepares a table that will move along as we proceed.

local splitter, splitspecifiers = nil, "" -- not so nice -local P, C, S, Cc = lpeg.P, lpeg.C, lpeg.S, lpeg.Cc +local P, C, S, Cc, Cs = lpeg.P, lpeg.C, lpeg.S, lpeg.Cc, lpeg.Cs -local left = P("(") -local right = P(")") -local colon = P(":") -local space = P(" ") +local left = P("(") +local right = P(")") +local colon = P(":") +local space = P(" ") +local lbrace = P("{") +local rbrace = P("}") definers.defaultlookup = "file" @@ -99,7 +101,7 @@ local function addspecifier(symbol) local lookup = C(prefixpattern) * colon local sub = left * C(P(1-left-right-method)^1) * right local specification = C(method) * C(P(1)^1) - local name = C((1-sub-specification)^1) + local name = Cs((lbrace/"") * (1-rbrace)^1 * (rbrace/"") + (1-sub-specification)^1) splitter = P((lookup + Cc("")) * name * (sub + Cc("")) * (specification + Cc(""))) end diff --git a/tex/context/base/mkiv/font-gbn.lua b/tex/context/base/mkiv/font-gbn.lua deleted file mode 100644 index 778b07740..000000000 --- a/tex/context/base/mkiv/font-gbn.lua +++ /dev/null @@ -1,301 +0,0 @@ -if not modules then modules = { } end modules ['font-gbn'] = { - version = 1.001, - comment = "companion to luatex-*.tex", - author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", - copyright = "PRAGMA ADE / ConTeXt Development Team", - license = "see context related readme files" -} - --- generic [base|node] mode handler - -if context then - texio.write_nl("fatal error: this module is not for context") - os.exit() -end - -local next = next - -local fonts = fonts -local nodes = nodes - -local nuts = nodes.nuts -- context abstraction of direct nodes - -local traverse_id = nuts.traverse_id -local flush_node = nuts.flush_node - -local glyph_code = nodes.nodecodes.glyph -local disc_code = nodes.nodecodes.disc - -local tonode = nuts.tonode -local tonut = nuts.tonut - -local getfont = nuts.getfont -local getchar = nuts.getchar -local getid = nuts.getid -local getboth = nuts.getboth -local getprev = nuts.getprev -local getnext = nuts.getnext -local getdisc = nuts.getdisc -local setchar = nuts.setchar -local setlink = nuts.setlink -local setprev = nuts.setprev - --- from now on we apply ligaturing and kerning here because it might interfere with complex --- opentype discretionary handling where the base ligature pass expect some weird extra --- pointers (which then confuse the tail slider that has some checking built in) - -local n_ligaturing = node.ligaturing -local n_kerning = node.kerning - -local d_ligaturing = nuts.ligaturing -local d_kerning = nuts.kerning - -local basemodepass = true - -local function l_warning() texio.write_nl("warning: node.ligaturing called directly") l_warning = nil end -local function k_warning() texio.write_nl("warning: node.kerning called directly") k_warning = nil end - -function node.ligaturing(...) - if basemodepass and l_warning then - l_warning() - end - return n_ligaturing(...) -end - -function node.kerning(...) - if basemodepass and k_warning then - k_warning() - end - return n_kerning(...) -end - -function nuts.ligaturing(...) - if basemodepass and l_warning then - l_warning() - end - return d_ligaturing(...) -end - -function nuts.kerning(...) - if basemodepass and k_warning then - k_warning() - end - return d_kerning(...) -end - --- direct.ligaturing = nuts.ligaturing --- direct.kerning = nuts.kerning - -function nodes.handlers.setbasemodepass(v) - basemodepass = v -end - -local function nodepass(head,groupcode,size,packtype,direction) - local fontdata = fonts.hashes.identifiers - if fontdata then - local usedfonts = { } - local basefonts = { } - local prevfont = nil - local basefont = nil - local variants = nil - local redundant = nil - local nofused = 0 - for n in traverse_id(glyph_code,head) do - local font = getfont(n) - if font ~= prevfont then - if basefont then - basefont[2] = getprev(n) - end - prevfont = font - local used = usedfonts[font] - if not used then - local tfmdata = fontdata[font] -- - if tfmdata then - local shared = tfmdata.shared -- we need to check shared, only when same features - if shared then - local processors = shared.processes - if processors and #processors > 0 then - usedfonts[font] = processors - nofused = nofused + 1 - elseif basemodepass then - basefont = { n, nil } - basefonts[#basefonts+1] = basefont - end - end - local resources = tfmdata.resources - variants = resources and resources.variants - variants = variants and next(variants) and variants or false - end - else - local tfmdata = fontdata[prevfont] - if tfmdata then - local resources = tfmdata.resources - variants = resources and resources.variants - variants = variants and next(variants) and variants or false - end - end - end - if variants then - local char = getchar(n) - if (char >= 0xFE00 and char <= 0xFE0F) or (char >= 0xE0100 and char <= 0xE01EF) then - local hash = variants[char] - if hash then - local p = getprev(n) - if p and getid(p) == glyph_code then - local variant = hash[getchar(p)] - if variant then - setchar(p,variant) - end - end - end - -- per generic user request we always remove selectors - if not redundant then - redundant = { n } - else - redundant[#redundant+1] = n - end - end - end - end - local nofbasefonts = #basefonts - if redundant then - for i=1,#redundant do - local r = redundant[i] - local p, n = getboth(r) - if r == head then - head = n - setprev(n) - else - setlink(p,n) - end - if nofbasefonts > 0 then - for i=1,nofbasefonts do - local bi = basefonts[i] - if r == bi[1] then - bi[1] = n - end - if r == bi[2] then - bi[2] = n - end - end - end - flush_node(r) - end - end - for d in traverse_id(disc_code,head) do - local _, _, r = getdisc(d) - if r then - for n in traverse_id(glyph_code,r) do - local font = getfont(n) - if font ~= prevfont then - prevfont = font - local used = usedfonts[font] - if not used then - local tfmdata = fontdata[font] -- - if tfmdata then - local shared = tfmdata.shared -- we need to check shared, only when same features - if shared then - local processors = shared.processes - if processors and #processors > 0 then - usedfonts[font] = processors - nofused = nofused + 1 - end - end - end - end - end - end - end - end - if next(usedfonts) then - for font, processors in next, usedfonts do - for i=1,#processors do - head = processors[i](head,font,0,direction,nofused) or head - end - end - end - if basemodepass and nofbasefonts > 0 then - for i=1,nofbasefonts do - local range = basefonts[i] - local start = range[1] - local stop = range[2] - if start then - local front = head == start - local prev, next - if stop then - next = getnext(stop) - start, stop = d_ligaturing(start,stop) - start, stop = d_kerning(start,stop) - else - prev = getprev(start) - start = d_ligaturing(start) - start = d_kerning(start) - end - if prev then - setlink(prev,start) - end - if next then - setlink(stop,next) - end - if front and head ~= start then - head = start - end - end - end - end - end - return head -end - -local function basepass(head) - if basemodepass then - head = d_ligaturing(head) - head = d_kerning(head) - end - return head -end - -local protectpass = node.direct.protect_glyphs -local injectpass = nodes.injections.handler - --- This is the only official public interface and this one can be hooked into a callback (chain) and --- everything else can change!@ Functione being visibel doesn't mean that it's part of the api. - -function nodes.handlers.nodepass(head,...) - if head then - return tonode(nodepass(tonut(head),...)) - end -end - -function nodes.handlers.basepass(head) - if head then - return tonode(basepass(tonut(head))) - end -end - -function nodes.handlers.injectpass(head) - if head then - return tonode(injectpass(tonut(head))) - end -end - -function nodes.handlers.protectpass(head) - if head then - protectpass(tonut(head)) - return head - end -end - -function nodes.simple_font_handler(head,groupcode,size,packtype,direction) - if head then - head = tonut(head) - head = nodepass(head,groupcode,size,packtype,direction) - head = injectpass(head) - if not basemodepass then - head = basepass(head) - end - protectpass(head) - head = tonode(head) - end - return head -end diff --git a/tex/context/base/mkiv/font-xtx.lua b/tex/context/base/mkiv/font-xtx.lua deleted file mode 100644 index 494ac00a9..000000000 --- a/tex/context/base/mkiv/font-xtx.lua +++ /dev/null @@ -1,97 +0,0 @@ -if not modules then modules = { } end modules ['luatex-fonts-def'] = { - version = 1.001, - comment = "companion to luatex-*.tex", - author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", - copyright = "PRAGMA ADE / ConTeXt Development Team", - license = "see context related readme files" -} - -if context then - texio.write_nl("fatal error: this module is not for context") - os.exit() -end - -local fonts = fonts - --- A bit of tuning for definitions. - -fonts.constructors.namemode = "specification" -- somehow latex needs this (changed name!) => will change into an overload - --- tricky: we sort of bypass the parser and directly feed all into --- the sub parser - -function fonts.definers.getspecification(str) - return "", str, "", ":", str -end - --- the generic name parser (different from context!) - -local list = { } - -local function issome () list.lookup = 'name' end -- xetex mode prefers name (not in context!) -local function isfile () list.lookup = 'file' end -local function isname () list.lookup = 'name' end -local function thename(s) list.name = s end -local function issub (v) list.sub = v end -local function iscrap (s) list.crap = string.lower(s) end -local function iskey (k,v) list[k] = v end -local function istrue (s) list[s] = true end -local function isfalse(s) list[s] = false end - -local P, S, R, C = lpeg.P, lpeg.S, lpeg.R, lpeg.C - -local spaces = P(" ")^0 -local namespec = (1-S("/:("))^0 -- was: (1-S("/: ("))^0 -local crapspec = spaces * P("/") * (((1-P(":"))^0)/iscrap) * spaces -local filename_1 = P("file:")/isfile * (namespec/thename) -local filename_2 = P("[") * P(true)/isname * (((1-P("]"))^0)/thename) * P("]") -local fontname_1 = P("name:")/isname * (namespec/thename) -local fontname_2 = P(true)/issome * (namespec/thename) -local sometext = (R("az","AZ","09") + S("+-.{}"))^1 -local truevalue = P("+") * spaces * (sometext/istrue) -local falsevalue = P("-") * spaces * (sometext/isfalse) -local keyvalue = (C(sometext) * spaces * P("=") * spaces * C(sometext))/iskey -local somevalue = sometext/istrue -local subvalue = P("(") * (C(P(1-S("()"))^1)/issub) * P(")") -- for Kim -local option = spaces * (keyvalue + falsevalue + truevalue + somevalue) * spaces -local options = P(":") * spaces * (P(";")^0 * option)^0 - -local pattern = (filename_1 + filename_2 + fontname_1 + fontname_2) * subvalue^0 * crapspec^0 * options^0 - -local function colonized(specification) -- xetex mode - list = { } - lpeg.match(pattern,specification.specification) - list.crap = nil -- style not supported, maybe some day - if list.name then - specification.name = list.name - list.name = nil - end - if list.lookup then - specification.lookup = list.lookup - list.lookup = nil - end - if list.sub then - specification.sub = list.sub - list.sub = nil - end - specification.features.normal = fonts.handlers.otf.features.normalize(list) - return specification -end - -fonts.definers.registersplit(":",colonized,"cryptic") -fonts.definers.registersplit("", colonized,"more cryptic") -- catches \font\text=[names] - -function fonts.definers.applypostprocessors(tfmdata) - local postprocessors = tfmdata.postprocessors - if postprocessors then - for i=1,#postprocessors do - local extrahash = postprocessors[i](tfmdata) -- after scaling etc - if type(extrahash) == "string" and extrahash ~= "" then - -- e.g. a reencoding needs this - extrahash = string.gsub(lower(extrahash),"[^a-z]","-") - tfmdata.properties.fullname = format("%s-%s",tfmdata.properties.fullname,extrahash) - end - end - end - return tfmdata -end diff --git a/tex/context/base/mkiv/mlib-pdf.lua b/tex/context/base/mkiv/mlib-pdf.lua index d93e1b879..791d36607 100644 --- a/tex/context/base/mkiv/mlib-pdf.lua +++ b/tex/context/base/mkiv/mlib-pdf.lua @@ -48,17 +48,29 @@ local experiment = true -- uses context(node) that already does delayed nod local savedliterals = nil -- needs checking local mpsliteral = nodes.pool.register(node.new("whatsit",nodes.whatsitcodes.pdfliteral)) -- pdfliteral.mode = 1 -local f_f = formatters["%F"] - -local f_m = formatters["%F %F m"] -local f_c = formatters["%F %F %F %F %F %F c"] -local f_l = formatters["%F %F l"] -local f_cm = formatters["%F %F %F %F %F %F cm"] -local f_M = formatters["%F M"] +-- we can have "withaccuracy 3" and then change formatters on the fly + +-- local f_f = formatters["%F"] +-- local f_m = formatters["%F %F m"] +-- local f_c = formatters["%F %F %F %F %F %F c"] +-- local f_l = formatters["%F %F l"] +-- local f_cm = formatters["%F %F %F %F %F %F cm"] +-- local f_M = formatters["%F M"] +-- local f_j = formatters["%i j"] +-- local f_J = formatters["%i J"] +-- local f_d = formatters["[%s] %F d"] +-- local f_w = formatters["%F w"] + +local f_f = formatters["%.6F"] +local f_m = formatters["%.6F %.6F m"] +local f_c = formatters["%.6F %.6F %.6F %.6F %.6F %.6F c"] +local f_l = formatters["%.6F %.6F l"] +local f_cm = formatters["%.6F %.6F %.6F %.6F %.6F %.6F cm"] +local f_M = formatters["%.6F M"] local f_j = formatters["%i j"] local f_J = formatters["%i J"] -local f_d = formatters["[%s] %F d"] -local f_w = formatters["%F w"] +local f_d = formatters["[%s] %.6F d"] +local f_w = formatters["%.3F w"] directives.register("metapost.savetable",function(v) if type(v) == "string" then diff --git a/tex/context/base/mkiv/mlib-pps.lua b/tex/context/base/mkiv/mlib-pps.lua index db07cd7e4..91377f468 100644 --- a/tex/context/base/mkiv/mlib-pps.lua +++ b/tex/context/base/mkiv/mlib-pps.lua @@ -1002,12 +1002,12 @@ local tx_reset, tx_analyze, tx_process do ----- pat = tsplitat(":") local pat = lpeg.tsplitter(":",tonumber) -- so that %F can do its work --- local f_gray_yes = formatters["s=%F,a=%F,t=%F"] --- local f_gray_nop = formatters["s=%F"] --- local f_rgb_yes = formatters["r=%F,g=%F,b=%F,a=%F,t=%F"] --- local f_rgb_nop = formatters["r=%F,g=%F,b=%F"] --- local f_cmyk_yes = formatters["c=%F,m=%F,y=%F,k=%F,a=%F,t=%F"] --- local f_cmyk_nop = formatters["c=%F,m=%F,y=%F,k=%F"] + -- local f_gray_yes = formatters["s=%F,a=%F,t=%F"] + -- local f_gray_nop = formatters["s=%F"] + -- local f_rgb_yes = formatters["r=%F,g=%F,b=%F,a=%F,t=%F"] + -- local f_rgb_nop = formatters["r=%F,g=%F,b=%F"] + -- local f_cmyk_yes = formatters["c=%F,m=%F,y=%F,k=%F,a=%F,t=%F"] + -- local f_cmyk_nop = formatters["c=%F,m=%F,y=%F,k=%F"] local f_gray_yes = formatters["s=%n,a=%n,t=%n"] local f_gray_nop = formatters["s=%n"] @@ -1116,18 +1116,25 @@ local tx_reset, tx_analyze, tx_process do mp_a = tonumber(prescript.tr_alternative) mp_t = tonumber(prescript.tr_transparency) -- - local mp_text = top.texstrings[mp_index] - local hash = fmt(mp_text,mp_a or "-",mp_t or "-",mp_c or "-") - local box = data.texhash[hash] mp_index = index mp_target = top.texlast - 1 top.texlast = mp_target - if box then - box = copy_list(box) - else + -- + local mp_text = top.texstrings[mp_index] + local box + if prescript.tx_cache == "no" then tex.runtoks("mptexttoks") box = textakebox("mptextbox") - data.texhash[hash] = box + else + local hash = fmt(mp_text,mp_a or "-",mp_t or "-",mp_c or "-") + box = data.texhash[hash] + if box then + box = copy_list(box) + else + tex.runtoks("mptexttoks") + box = textakebox("mptextbox") + data.texhash[hash] = box + end end top.textexts[mp_target] = box -- diff --git a/tex/context/base/mkiv/mult-def.lua b/tex/context/base/mkiv/mult-def.lua index 01a512bc6..803d6c3e1 100644 --- a/tex/context/base/mkiv/mult-def.lua +++ b/tex/context/base/mkiv/mult-def.lua @@ -17823,8 +17823,8 @@ return { ["cd:brackets-l"] = { en = "[...,...]", lua = "{..., ...}" }, ["cd:parenthesis-s"] = { en = "(...)" }, ["cd:parenthesis-l"] = { en = "(...,...)" }, - ["cd:index-s"] = { en = "[...]" }, - ["cd:index-l"] = { en = "[..+...+..]" }, + ["cd:index-s"] = { en = "{...}" }, + ["cd:index-l"] = { en = "{..+...+..}" }, ["cd:math-s"] = { en = "$...$" }, ["cd:math-l"] = { en = "$...$" }, ["cd:inlinemath-s"] = { en = "$...$" }, diff --git a/tex/context/base/mkiv/mult-fun.lua b/tex/context/base/mkiv/mult-fun.lua index 1ee593be4..caac199de 100644 --- a/tex/context/base/mkiv/mult-fun.lua +++ b/tex/context/base/mkiv/mult-fun.lua @@ -64,6 +64,7 @@ return { "withmask", "bitmapimage", "colordecimals", "ddecimal", "dddecimal", "ddddecimal", "colordecimalslist", "textext", "thetextext", "rawtextext", "textextoffset", "texbox", "thetexbox", "rawtexbox", "istextext", + "notcached", "verbatim", "thelabel", "label", "autoalign", diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf index c5a2850f3..5fc519b39 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 ae98a0339..6df30cade 100644 Binary files a/tex/context/base/mkiv/status-lua.pdf and b/tex/context/base/mkiv/status-lua.pdf differ -- cgit v1.2.3