summaryrefslogtreecommitdiff
path: root/tex/context/base
diff options
context:
space:
mode:
authorContext Git Mirror Bot <phg42.2a@gmail.com>2015-08-30 18:15:06 +0200
committerContext Git Mirror Bot <phg42.2a@gmail.com>2015-08-30 18:15:06 +0200
commit44b54480d044b8fe578a05a3e21bff802e9d0610 (patch)
treefe45e976b848193eab180dc150d35cb57c3ef40d /tex/context/base
parent470438f73f2273ca9cff09393f198884a219ec48 (diff)
downloadcontext-44b54480d044b8fe578a05a3e21bff802e9d0610.tar.gz
2015-08-30 17:10:00
Diffstat (limited to 'tex/context/base')
-rw-r--r--tex/context/base/back-exp.lua3
-rw-r--r--tex/context/base/cont-new.mkiv2
-rw-r--r--tex/context/base/context-version.pdfbin4202 -> 4200 bytes
-rw-r--r--tex/context/base/context.mkiv2
-rw-r--r--tex/context/base/core-con.lua2
-rw-r--r--tex/context/base/font-inj.lua48
-rw-r--r--tex/context/base/font-ots.lua13
-rw-r--r--tex/context/base/font-oup.lua2
-rw-r--r--tex/context/base/lxml-aux.lua1
-rw-r--r--tex/context/base/lxml-lpt.lua31
-rw-r--r--tex/context/base/m-newotf.mkiv4
-rw-r--r--tex/context/base/m-scite.mkiv4
-rw-r--r--tex/context/base/status-files.pdfbin24483 -> 24450 bytes
-rw-r--r--tex/context/base/status-lua.pdfbin255196 -> 255170 bytes
-rw-r--r--tex/context/base/strc-lst.lua21
-rw-r--r--tex/context/base/task-ini.lua2
-rw-r--r--tex/context/base/typo-bld.lua7
-rw-r--r--tex/context/base/util-sci.lua8
18 files changed, 118 insertions, 32 deletions
diff --git a/tex/context/base/back-exp.lua b/tex/context/base/back-exp.lua
index 23940d2ee..da4c5d7e0 100644
--- a/tex/context/base/back-exp.lua
+++ b/tex/context/base/back-exp.lua
@@ -312,7 +312,8 @@ function wrapups.hashlistdata()
local tag = ci.references.tag
if tag then
local m = ci.metadata
- listdata[m.kind .. ">" .. tag] = ci
+ local t = m.kind .. ">" .. tag -- todo: use internal (see strc-lst.lua where it's set)
+ listdata[t] = ci
end
end
end
diff --git a/tex/context/base/cont-new.mkiv b/tex/context/base/cont-new.mkiv
index e415389bf..822f9f09b 100644
--- a/tex/context/base/cont-new.mkiv
+++ b/tex/context/base/cont-new.mkiv
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2015.08.26 09:07}
+\newcontextversion{2015.08.30 17:07}
%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/context-version.pdf b/tex/context/base/context-version.pdf
index 328813c62..4fed34b6b 100644
--- a/tex/context/base/context-version.pdf
+++ b/tex/context/base/context-version.pdf
Binary files differ
diff --git a/tex/context/base/context.mkiv b/tex/context/base/context.mkiv
index dd2132720..e1c93c484 100644
--- a/tex/context/base/context.mkiv
+++ b/tex/context/base/context.mkiv
@@ -39,7 +39,7 @@
%D up and the dependencies are more consistent.
\edef\contextformat {\jobname}
-\edef\contextversion{2015.08.26 09:07}
+\edef\contextversion{2015.08.30 17:07}
\edef\contextkind {beta}
%D For those who want to use this:
diff --git a/tex/context/base/core-con.lua b/tex/context/base/core-con.lua
index 63dfcae90..8773d9224 100644
--- a/tex/context/base/core-con.lua
+++ b/tex/context/base/core-con.lua
@@ -1272,7 +1272,7 @@ local function currentdate(str,currentlanguage) -- second argument false : no la
if currentlanguage == false then
-- ignore
else
- context(converters.ordinal(whatordinal,currentlanguage)) -- no "%s" needed
+ context.highordinalstr(converters.ordinal(whatordinal,currentlanguage))
end
end
end
diff --git a/tex/context/base/font-inj.lua b/tex/context/base/font-inj.lua
index 99172a89f..cdf14b935 100644
--- a/tex/context/base/font-inj.lua
+++ b/tex/context/base/font-inj.lua
@@ -16,6 +16,9 @@ if not modules then modules = { } end modules ['font-inj'] = {
-- cleaner to have an identification pass here. Also, I need to keep tracing in mind so
-- being too clever here is dangerous.
+-- The subtype test is not needed as there will be no (new) properties set, given that we
+-- reset the properties.
+
if not nodes.properties then return end
local next, rawget = next, rawget
@@ -211,9 +214,12 @@ function injections.setpair(current,factor,rlmode,r2lflag,spec,injection) -- r2l
if rlmode and rlmode < 0 then
leftkern, rightkern = rightkern, leftkern
end
+ if not injection then
+ injection = "injections"
+ end
local p = rawget(properties,current)
if p then
- local i = rawget(p,"injections")
+ local i = rawget(p,injection)
if i then
if leftkern ~= 0 then
i.leftkern = (i.leftkern or 0) + leftkern
@@ -225,19 +231,19 @@ function injections.setpair(current,factor,rlmode,r2lflag,spec,injection) -- r2l
i.yoffset = (i.yoffset or 0) + yoffset
end
elseif leftkern ~= 0 or rightkern ~= 0 then
- p.injections = {
+ p[injection] = {
leftkern = leftkern,
rightkern = rightkern,
yoffset = yoffset,
}
else
- p.injections = {
+ p[injection] = {
yoffset = yoffset,
}
end
elseif leftkern ~= 0 or rightkern ~= 0 then
properties[current] = {
- injections = {
+ [injection] = {
leftkern = leftkern,
rightkern = rightkern,
yoffset = yoffset,
@@ -245,7 +251,7 @@ function injections.setpair(current,factor,rlmode,r2lflag,spec,injection) -- r2l
}
else
properties[current] = {
- injections = {
+ [injection] = {
yoffset = yoffset,
},
}
@@ -545,9 +551,9 @@ local function inject_marks(marks,marki,nofmarks)
-- ox = px - getfield(p,"width") + pn.markx - pp.leftkern
local leftkern = pp.leftkern
if leftkern then
- ox = px - pn.markx
- else
ox = px - pn.markx - leftkern
+ else
+ ox = px - pn.markx
end
end
else
@@ -674,7 +680,15 @@ local function inject_cursives(glyphs,glyphi,nofglyphs)
end
end
-local function inject_kerns(head,glist,ilist,length)
+-- G +D-pre G
+-- D-post+
+-- +D-replace+
+--
+-- G +D-pre +D-pre
+-- D-post +D-post
+-- +D-replace +D-replace
+
+local function inject_kerns(head,glist,ilist,length) -- not complete ! compare with inject_kerns_only (but unlikely disc here)
for i=1,length do
local n = glist[i]
local pn = rawget(properties,n)
@@ -682,8 +696,9 @@ local function inject_kerns(head,glist,ilist,length)
local dp = nil
local dr = nil
local ni = ilist[i]
+ local p = nil
if ni == "injections" then
- local p = getprev(n)
+ p = getprev(n)
if p then
local id = getid(p)
if id == disc_code then
@@ -699,6 +714,7 @@ local function inject_kerns(head,glist,ilist,length)
if leftkern and leftkern ~= 0 then
local t = find_tail(dp)
insert_node_after(dp,t,newkern(leftkern))
+setfield(p,"post",dp) -- currently we need to force a tail refresh
end
end
end
@@ -709,6 +725,7 @@ local function inject_kerns(head,glist,ilist,length)
if leftkern and leftkern ~= 0 then
local t = find_tail(dr)
insert_node_after(dr,t,newkern(leftkern))
+setfield(p,"replace",dr) -- currently we need to force a tail refresh
end
end
else
@@ -757,6 +774,14 @@ local function inject_everything(head,where)
return tonode(head), true
end
+-- G +D-pre G
+-- D-post+
+-- +D-replace+
+--
+-- G +D-pre +D-pre
+-- D-post +D-post
+-- +D-replace +D-replace
+
local function inject_kerns_only(head,where)
head = tonut(head)
if trace_injections then
@@ -779,6 +804,7 @@ local function inject_kerns_only(head,where)
if leftkern and leftkern ~= 0 then
local t = find_tail(d)
insert_node_after(d,t,newkern(leftkern))
+setfield(p,"post",d) -- currently we need to force a tail refresh
end
end
end
@@ -790,6 +816,7 @@ local function inject_kerns_only(head,where)
if leftkern and leftkern ~= 0 then
local t = find_tail(d)
insert_node_after(d,t,newkern(leftkern))
+setfield(p,"replace",d) -- currently we need to force a tail refresh
end
end
else
@@ -839,6 +866,7 @@ local function inject_kerns_only(head,where)
setfield(n,"pre",h)
end
end
+ -- weird
local d = getfield(n,"post")
if d then
local h = d
@@ -923,6 +951,7 @@ local function inject_pairs_only(head,where)
if leftkern and leftkern ~= 0 then
local t = find_tail(d)
insert_node_after(d,t,newkern(leftkern))
+setfield(p,"post",d) -- currently we need to force a tail refresh
end
-- local rightkern = i.rightkern
-- if rightkern and rightkern ~= 0 then
@@ -939,6 +968,7 @@ local function inject_pairs_only(head,where)
if leftkern and leftkern ~= 0 then
local t = find_tail(d)
insert_node_after(d,t,newkern(leftkern))
+setfield(p,"replace",d) -- currently we need to force a tail refresh
end
-- local rightkern = i.rightkern
-- if rightkern and rightkern ~= 0 then
diff --git a/tex/context/base/font-ots.lua b/tex/context/base/font-ots.lua
index c7497c16f..74d7ac60b 100644
--- a/tex/context/base/font-ots.lua
+++ b/tex/context/base/font-ots.lua
@@ -6,6 +6,11 @@ if not modules then modules = { } end modules ['font-ots'] = { -- sequences
license = "see context related readme files",
}
+-- assumptions:
+--
+-- cursives don't cross discretionaries
+-- marks precede bases
+
-- This is a version of font-otn.lua adapted to the new font loader code. It
-- is a context version which can contain experimental code, but when we
-- have serious patches we will backport to the font-otn files. There will
@@ -885,16 +890,16 @@ function handlers.gpos_pair(head,start,dataset,sequence,kerns,rlmode,step,i,inje
elseif step.format == "pair" then
local a, b = krn[1], krn[2]
if a and #a > 0 then
- local startchar = getchar(start)
local x, y, w, h = setpair(start,factor,rlmode,sequence.flags[4],a,injection) -- characters[startchar])
if trace_kerns then
+ local startchar = getchar(start)
logprocess("%s: shifting first of pair %s and %s by (%p,%p) and correction (%p,%p)",pref(dataset,sequence),gref(startchar),gref(nextchar),x,y,w,h)
end
end
if b and #b > 0 then
- local startchar = getchar(start)
local x, y, w, h = setpair(snext,factor,rlmode,sequence.flags[4],b,injection) -- characters[nextchar])
if trace_kerns then
+ local startchar = getchar(start)
logprocess("%s: shifting second of pair %s and %s by (%p,%p) and correction (%p,%p)",pref(dataset,sequence),gref(startchar),gref(nextchar),x,y,w,h)
end
end
@@ -1426,7 +1431,7 @@ function chainprocs.gsub_ligature(head,start,stop,dataset,sequence,currentlookup
end
else
local schar = getchar(current)
- if skipmark and marks[schar] then -- marks
+ if skipmark and marks[schar] then -- marks
-- if current == stop then -- maybe add this
-- break
-- else
@@ -2887,7 +2892,7 @@ local function featuresprocessor(head,font,attr)
end
end
- local function k_run(sub,injection,last)
+ local function k_run(sub,injection,last)
local a = getattr(sub,0)
if a then
a = (a == attr) and (not attribute or getprop(sub,a_state) == attribute)
diff --git a/tex/context/base/font-oup.lua b/tex/context/base/font-oup.lua
index f0e182be1..534bfe42e 100644
--- a/tex/context/base/font-oup.lua
+++ b/tex/context/base/font-oup.lua
@@ -1913,6 +1913,8 @@ function readers.expand(data)
local cu = coverage[unic]
if not cu then
coverage[unic] = rulehash -- can now be done cleaner i think
+-- else
+-- sequence[start] = nil
end
end
end
diff --git a/tex/context/base/lxml-aux.lua b/tex/context/base/lxml-aux.lua
index 8eedade39..01c2a8bfc 100644
--- a/tex/context/base/lxml-aux.lua
+++ b/tex/context/base/lxml-aux.lua
@@ -998,4 +998,3 @@ function xml.totable(x,strip,flat)
return convert(x,strip,flat)
end
end
-
diff --git a/tex/context/base/lxml-lpt.lua b/tex/context/base/lxml-lpt.lua
index add29241e..6df89be20 100644
--- a/tex/context/base/lxml-lpt.lua
+++ b/tex/context/base/lxml-lpt.lua
@@ -1446,3 +1446,34 @@ function xml.finalizers.paragraphs(c)
end
return c
end
+
+-- local lpegmatch = lpeg.match
+-- local w = lpeg.patterns.whitespace
+-- local p = w^0 * lpeg.Cf(lpeg.Ct("") * lpeg.Cg(lpeg.C((1-w)^1) * lpeg.Cc(true) * w^0)^1,rawset)
+
+-- function xml.functions.classes(e) -- cache
+-- local class = e.at.class
+-- if class then
+-- return lpegmatch(p,class)
+-- else
+-- return { }
+-- end
+-- end
+
+-- local gmatch = string.gmatch
+
+-- function xml.functions.hasclass(e,c,class)
+-- class = class and e.at[class] or e.at.class
+-- if class and class ~= "" then
+-- if class == c then
+-- return true
+-- else
+-- for s in gmatch(class,"%S+") do
+-- if s == c then
+-- return true
+-- end
+-- end
+-- end
+-- end
+-- return false
+-- end
diff --git a/tex/context/base/m-newotf.mkiv b/tex/context/base/m-newotf.mkiv
index 5f5e617ff..0bdd6ec8e 100644
--- a/tex/context/base/m-newotf.mkiv
+++ b/tex/context/base/m-newotf.mkiv
@@ -19,8 +19,6 @@
\startluacode
local files = {
- "font-inj-new", -- for me, testing
- "node-fnt-new", -- for me, testing
"font-otr",
"font-cff",
"font-ttf",
@@ -28,7 +26,7 @@
"font-oup",
"font-otl",
"font-ots",
- "font-ots-new", -- for me, testing
+"font-ots-xxx", -- for me, testing
"font-oto",
"font-otd",
"font-otc",
diff --git a/tex/context/base/m-scite.mkiv b/tex/context/base/m-scite.mkiv
index 7a8e8b06e..38c2f249e 100644
--- a/tex/context/base/m-scite.mkiv
+++ b/tex/context/base/m-scite.mkiv
@@ -32,6 +32,8 @@
% TODO: as these files are in tds we can locate them and set the lexer root
% to that one. Currently we're on: we're on context/documents.
+% TODO: tab
+
% This is an experiment: eventually we need to hook it into the verbatim code
% and deal with widow lines and so.
@@ -71,6 +73,7 @@ local f_mapping = [[
\let\string\slxH\string\letterhash
\let\string\slxB\string\letterbackslash
\let\string\slxP\string\letterpercent
+\let\string\slxT\string\lettertilde
\let\string\slxS\string\fixedspace
%]]
@@ -84,6 +87,7 @@ local replacer = lpeg.replacer {
["#"] = "\\slxH ",
["\\"] = "\\slxB ",
["%"] = "\\slxP ",
+ ["~"] = "\\slxT ",
[" "] = "\\slxS ",
}
diff --git a/tex/context/base/status-files.pdf b/tex/context/base/status-files.pdf
index 05e61ce47..149bef03a 100644
--- a/tex/context/base/status-files.pdf
+++ b/tex/context/base/status-files.pdf
Binary files differ
diff --git a/tex/context/base/status-lua.pdf b/tex/context/base/status-lua.pdf
index 18f1af54b..9c3fbb81c 100644
--- a/tex/context/base/status-lua.pdf
+++ b/tex/context/base/status-lua.pdf
Binary files differ
diff --git a/tex/context/base/strc-lst.lua b/tex/context/base/strc-lst.lua
index 050655e64..e36ed9eaa 100644
--- a/tex/context/base/strc-lst.lua
+++ b/tex/context/base/strc-lst.lua
@@ -227,6 +227,7 @@ function lists.addto(t) -- maybe more more here (saves parsing at the tex end)
end
local group = numberdata and numberdata.group
local name = metadata.name
+ local kind = metadata.kind
if not group then
-- forget about it
elseif group == "" then
@@ -246,6 +247,12 @@ function lists.addto(t) -- maybe more more here (saves parsing at the tex end)
r.section = structures.sections.currentid()
end
local i = r and r.internal or 0 -- brrr
+if r and kind and name then
+ local tag = tags.getid(kind,name)
+ if tag and tag ~= "?" then
+ r.tag = tag -- todo: use internal ... is unique enough
+ end
+end
local p = pushed[i]
if not p then
p = #cached + 1
@@ -314,13 +321,13 @@ function lists.enhance(n)
if trace_lists then
report_lists("enhancing %a, name %a",n,name)
end
- if references then
- -- is this used ?
- local tag = tags.getid(kind,name)
- if tag and tag ~= "?" then
- references.tag = tag
- end
- end
+-- if references then
+-- -- is this used ?
+-- local tag = tags.getid(kind,name)
+-- if tag and tag ~= "?" then
+-- references.tag = tag
+-- end
+-- end
-- specific enhancer (kind of obsolete)
local enhancer = kind and lists.enhancers[kind]
if enhancer then
diff --git a/tex/context/base/task-ini.lua b/tex/context/base/task-ini.lua
index 192f116e0..986044c6e 100644
--- a/tex/context/base/task-ini.lua
+++ b/tex/context/base/task-ini.lua
@@ -111,8 +111,6 @@ appendaction("math", "builders", "builders.kernel.mlist_to_hlist")
------------("math", "builders", "noads.handlers.italics", nil, "nohead") -- disabled
appendaction("math", "builders", "typesetters.directions.processmath") -- disabled (has to happen pretty late)
-appendaction("finalizers", "normalizers", "typesetters.paragraphs.normalize") -- enabled
-
appendaction("finalizers", "lists", "typesetters.margins.localhandler") -- disabled
appendaction("finalizers", "lists", "builders.paragraphs.keeptogether")
------------("finalizers", "lists", "nodes.handlers.graphicvadjust") -- todo
diff --git a/tex/context/base/typo-bld.lua b/tex/context/base/typo-bld.lua
index 964d0cd7e..75b294188 100644
--- a/tex/context/base/typo-bld.lua
+++ b/tex/context/base/typo-bld.lua
@@ -228,14 +228,17 @@ local build_par_codes = {
adjust = true,
}
+local normalize = typesetters.paragraphs.normalize
+
function builders.buildpage_filter(groupcode)
-- the next check saves 1% runtime on 1000 tufte pages
+ local head = texlists.contrib_head
+ local done = false
if build_par_codes[groupcode] then
-- also called in vbox .. we really need another callback for these four
- return nil, false -- can be another action set .. like anchoring for box
+ normalize(head) -- a bit weird place
end
--
- local head, done = texlists.contrib_head, false
if head then
-- called quite often ... maybe time to remove timing
starttiming(builders)
diff --git a/tex/context/base/util-sci.lua b/tex/context/base/util-sci.lua
index c3e24cd9d..43d873b63 100644
--- a/tex/context/base/util-sci.lua
+++ b/tex/context/base/util-sci.lua
@@ -1,3 +1,11 @@
+if not modules then modules = { } end modules ['util-sci'] = {
+ version = 1.001,
+ comment = "companion to m-scite.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
local gsub, sub, find = string.gsub, string.sub, string.find
local concat = table.concat
local formatters = string.formatters