summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2018-06-09 15:32:09 +0200
committerContext Git Mirror Bot <phg42.2a@gmail.com>2018-06-09 15:32:09 +0200
commit93dccfc40625a754b372edd228724969b28e4342 (patch)
tree94cec6d553ccc2b797802f39085f9a4725bec8ce /tex/context/base/mkiv
parent86bfea5faac983d15c47eec27f43ec56e75c69ef (diff)
downloadcontext-93dccfc40625a754b372edd228724969b28e4342.tar.gz
2018-06-09 14:37:00
Diffstat (limited to 'tex/context/base/mkiv')
-rw-r--r--tex/context/base/mkiv/cont-new.mkiv2
-rw-r--r--tex/context/base/mkiv/context.mkiv2
-rw-r--r--tex/context/base/mkiv/font-def.lua14
-rw-r--r--tex/context/base/mkiv/font-gbn.lua301
-rw-r--r--tex/context/base/mkiv/font-xtx.lua97
-rw-r--r--tex/context/base/mkiv/mlib-pdf.lua30
-rw-r--r--tex/context/base/mkiv/mlib-pps.lua33
-rw-r--r--tex/context/base/mkiv/mult-def.lua4
-rw-r--r--tex/context/base/mkiv/mult-fun.lua1
-rw-r--r--tex/context/base/mkiv/status-files.pdfbin26120 -> 26064 bytes
-rw-r--r--tex/context/base/mkiv/status-lua.pdfbin259312 -> 260163 bytes
11 files changed, 54 insertions, 430 deletions
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.</p>
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
--- a/tex/context/base/mkiv/status-files.pdf
+++ b/tex/context/base/mkiv/status-files.pdf
Binary files differ
diff --git a/tex/context/base/mkiv/status-lua.pdf b/tex/context/base/mkiv/status-lua.pdf
index ae98a0339..6df30cade 100644
--- a/tex/context/base/mkiv/status-lua.pdf
+++ b/tex/context/base/mkiv/status-lua.pdf
Binary files differ