diff options
author | Karl Berry <karl@freefriends.org> | 2016-05-13 22:18:14 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2016-05-13 22:18:14 +0000 |
commit | cdd0af3f3b9cd596b442f87749e22fb2331900db (patch) | |
tree | b9d8947b56790af1694cd9581d3282b00f9a7e8a /Master/texmf-dist/tex/context | |
parent | fc81e5e66fd1e3b5da82f0c1bf7b655934ffc388 (diff) |
context (13may16)
git-svn-id: svn://tug.org/texlive/trunk@41100 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/context')
30 files changed, 405 insertions, 223 deletions
diff --git a/Master/texmf-dist/tex/context/base/context-version.pdf b/Master/texmf-dist/tex/context/base/context-version.pdf Binary files differindex 50805410f23..f0938c90253 100644 --- a/Master/texmf-dist/tex/context/base/context-version.pdf +++ b/Master/texmf-dist/tex/context/base/context-version.pdf diff --git a/Master/texmf-dist/tex/context/base/mkii/mult-de.mkii b/Master/texmf-dist/tex/context/base/mkii/mult-de.mkii index f3bdc074013..0762fadfcfd 100644 --- a/Master/texmf-dist/tex/context/base/mkii/mult-de.mkii +++ b/Master/texmf-dist/tex/context/base/mkii/mult-de.mkii @@ -726,6 +726,7 @@ \setinterfaceconstant{couplingway}{verkopplungsart} \setinterfaceconstant{criterium}{kriterium} \setinterfaceconstant{cropoffset}{cropoffset} +\setinterfaceconstant{crossreference}{crossreference} \setinterfaceconstant{cssfile}{cssfile} \setinterfaceconstant{current}{aktuell} \setinterfaceconstant{cutspace}{cutspace} diff --git a/Master/texmf-dist/tex/context/base/mkii/mult-en.mkii b/Master/texmf-dist/tex/context/base/mkii/mult-en.mkii index 262b4fde562..a16b87a488e 100644 --- a/Master/texmf-dist/tex/context/base/mkii/mult-en.mkii +++ b/Master/texmf-dist/tex/context/base/mkii/mult-en.mkii @@ -726,6 +726,7 @@ \setinterfaceconstant{couplingway}{couplingway} \setinterfaceconstant{criterium}{criterium} \setinterfaceconstant{cropoffset}{cropoffset} +\setinterfaceconstant{crossreference}{crossreference} \setinterfaceconstant{cssfile}{cssfile} \setinterfaceconstant{current}{current} \setinterfaceconstant{cutspace}{cutspace} diff --git a/Master/texmf-dist/tex/context/base/mkii/mult-fr.mkii b/Master/texmf-dist/tex/context/base/mkii/mult-fr.mkii index 6d9bf898228..6c71d4aad89 100644 --- a/Master/texmf-dist/tex/context/base/mkii/mult-fr.mkii +++ b/Master/texmf-dist/tex/context/base/mkii/mult-fr.mkii @@ -726,6 +726,7 @@ \setinterfaceconstant{couplingway}{modecouplage} \setinterfaceconstant{criterium}{critere} \setinterfaceconstant{cropoffset}{cropoffset} +\setinterfaceconstant{crossreference}{crossreference} \setinterfaceconstant{cssfile}{cssfile} \setinterfaceconstant{current}{courant} \setinterfaceconstant{cutspace}{cutspace} diff --git a/Master/texmf-dist/tex/context/base/mkii/mult-it.mkii b/Master/texmf-dist/tex/context/base/mkii/mult-it.mkii index a5367dfbbb6..a875555bdb4 100644 --- a/Master/texmf-dist/tex/context/base/mkii/mult-it.mkii +++ b/Master/texmf-dist/tex/context/base/mkii/mult-it.mkii @@ -726,6 +726,7 @@ \setinterfaceconstant{couplingway}{modoaccoppiamento} \setinterfaceconstant{criterium}{criterio} \setinterfaceconstant{cropoffset}{cropoffset} +\setinterfaceconstant{crossreference}{crossreference} \setinterfaceconstant{cssfile}{cssfile} \setinterfaceconstant{current}{corrente} \setinterfaceconstant{cutspace}{cutspace} diff --git a/Master/texmf-dist/tex/context/base/mkii/mult-nl.mkii b/Master/texmf-dist/tex/context/base/mkii/mult-nl.mkii index 6cd6a7b5df3..efc0d2be380 100644 --- a/Master/texmf-dist/tex/context/base/mkii/mult-nl.mkii +++ b/Master/texmf-dist/tex/context/base/mkii/mult-nl.mkii @@ -726,6 +726,7 @@ \setinterfaceconstant{couplingway}{koppelwijze} \setinterfaceconstant{criterium}{criterium} \setinterfaceconstant{cropoffset}{cropoffset} +\setinterfaceconstant{crossreference}{crossreference} \setinterfaceconstant{cssfile}{cssfile} \setinterfaceconstant{current}{huidige} \setinterfaceconstant{cutspace}{snijwit} diff --git a/Master/texmf-dist/tex/context/base/mkii/mult-pe.mkii b/Master/texmf-dist/tex/context/base/mkii/mult-pe.mkii index 371b6407462..7e5c537918b 100644 --- a/Master/texmf-dist/tex/context/base/mkii/mult-pe.mkii +++ b/Master/texmf-dist/tex/context/base/mkii/mult-pe.mkii @@ -726,6 +726,7 @@ \setinterfaceconstant{couplingway}{روشتزویج} \setinterfaceconstant{criterium}{criterium} \setinterfaceconstant{cropoffset}{cropoffset} +\setinterfaceconstant{crossreference}{crossreference} \setinterfaceconstant{cssfile}{cssfile} \setinterfaceconstant{current}{جاری} \setinterfaceconstant{cutspace}{فضایبرش} diff --git a/Master/texmf-dist/tex/context/base/mkii/mult-ro.mkii b/Master/texmf-dist/tex/context/base/mkii/mult-ro.mkii index 00e2f30cc9a..f7121f70398 100644 --- a/Master/texmf-dist/tex/context/base/mkii/mult-ro.mkii +++ b/Master/texmf-dist/tex/context/base/mkii/mult-ro.mkii @@ -726,6 +726,7 @@ \setinterfaceconstant{couplingway}{modcuplare} \setinterfaceconstant{criterium}{criteriu} \setinterfaceconstant{cropoffset}{cropoffset} +\setinterfaceconstant{crossreference}{crossreference} \setinterfaceconstant{cssfile}{cssfile} \setinterfaceconstant{current}{curent} \setinterfaceconstant{cutspace}{cutspace} diff --git a/Master/texmf-dist/tex/context/base/mkiv/anch-pos.lua b/Master/texmf-dist/tex/context/base/mkiv/anch-pos.lua index c01e9017976..fef1a8474f6 100644 --- a/Master/texmf-dist/tex/context/base/mkiv/anch-pos.lua +++ b/Master/texmf-dist/tex/context/base/mkiv/anch-pos.lua @@ -110,18 +110,19 @@ local f_e_tag = formatters["e:%s"] local f_p_tag = formatters["p:%s"] local f_w_tag = formatters["w:%s"] -local f_b_column = formatters["_plib_.b_col(%q)"] -local f_e_column = formatters["_plib_.e_col()"] - -local f_enhance = formatters["_plib_.enhance(%q)"] local f_region = formatters["region:%s"] -local f_b_region = formatters["_plib_.b_region(%q)"] -local f_e_region = formatters["_plib_.e_region(%s)"] - local f_tag_three = formatters["%s:%s:%s"] local f_tag_two = formatters["%s:%s"] +----- f_enhance = formatters["_plib_.enhance(%q)"] + +----- f_b_column = formatters["_plib_.b_column(%q)"] +----- f_e_column = formatters["_plib_.e_column()"] + +----- f_b_region = formatters["_plib_.b_region(%q)"] +----- f_e_region = formatters["_plib_.e_region(%s)"] + local function sorter(a,b) return a.y > b.y end @@ -272,7 +273,7 @@ local function enhance(data) data.y = getvpos() end if data.p == true then - data.p = texgetcount("realpageno") + data.p = texgetcount("realpageno") -- we should use a variable set in otr end if data.c == true then data.c = column @@ -351,7 +352,7 @@ scanners.dosavepositionplus = compilescanner { -- not much gain in keeping stack (inc/dec instead of insert/remove) -function jobpositions.b_col(tag) +local function b_column(tag) tobesaved[tag] = { r = true, x = gethpos(), @@ -361,7 +362,7 @@ function jobpositions.b_col(tag) column = tag end -function jobpositions.e_col(tag) +local function e_column(tag) local t = tobesaved[column] if not t then -- something's wrong @@ -373,6 +374,9 @@ function jobpositions.e_col(tag) column = columns[#columns] end +jobpositions.b_column = b_column +jobpositions.e_column = e_column + scanners.bposcolumn = function() -- tag local tag = scanstring() insert(columns,tag) @@ -383,7 +387,8 @@ scanners.bposcolumnregistered = function() -- tag local tag = scanstring() insert(columns,tag) column = tag - context(new_latelua_node(f_b_column(tag))) + -- context(new_latelua_node(f_b_column(tag))) + context(new_latelua_node(function() b_column(tag) end)) end scanners.eposcolumn = function() @@ -392,14 +397,15 @@ scanners.eposcolumn = function() end scanners.eposcolumnregistered = function() - context(new_latelua_node(f_e_column())) + -- context(new_latelua_node(f_e_column())) + context(new_latelua_node(e_column)) remove(columns) column = columns[#columns] end -- regions -function jobpositions.b_region(tag) +local function b_region(tag) local last = tobesaved[tag] last.x, last.y = getpos() last.p = texgetcount("realpageno") @@ -407,7 +413,7 @@ function jobpositions.b_region(tag) region = tag end -function jobpositions.e_region(correct) +local function e_region(correct) local last = tobesaved[region] local v = getvpos() if correct then @@ -418,6 +424,9 @@ function jobpositions.e_region(correct) region = regions[#regions] end +jobpositions.b_region = b_region +jobpositions.e_region = e_region + local function setregionbox(n,tag) if not tag or tag == "" then nofregions = nofregions + 1 @@ -438,10 +447,13 @@ local function setregionbox(n,tag) return tag, box end -local function markregionbox(n,tag,correct) +local function markregionbox(n,tag,correct) -- correct needs checking local tag, box = setregionbox(n,tag) - local push = new_latelua(f_b_region(tag)) - local pop = new_latelua(f_e_region(tostring(correct))) -- todo: check if tostring is needed with formatter + -- todo: check if tostring is needed with formatter + -- local push = new_latelua(f_b_region(tag)) + -- local pop = new_latelua(f_e_region(tostring(correct))) + local push = new_latelua(function() b_region(tag) end) + local pop = new_latelua(function() e_region(tostring(correct)) end) -- maybe we should construct a hbox first (needs experimenting) so that we can avoid some at the tex end local head = getlist(box) if head then @@ -509,7 +521,8 @@ scanners.parpos = function() -- todo: relate to localpar (so this is an intermed end local tag = f_p_tag(nofparagraphs) tobesaved[tag] = t - context(new_latelua_node(f_enhance(tag))) + -- context(new_latelua_node(f_enhance(tag))) + context(new_latelua_node(function() enhance(tobesaved[tag]) end)) end scanners.dosetposition = function() -- name @@ -522,7 +535,8 @@ scanners.dosetposition = function() -- name y = true, n = nofparagraphs > 0 and nofparagraphs or nil, } - context(new_latelua_node(f_enhance(name))) + -- context(new_latelua_node(f_enhance(name))) + context(new_latelua_node(function() enhance(tobesaved[name]) end)) end scanners.dosetpositionwhd = function() -- name w h d extra @@ -538,7 +552,8 @@ scanners.dosetpositionwhd = function() -- name w h d extra d = scandimen(), n = nofparagraphs > 0 and nofparagraphs or nil, } - context(new_latelua_node(f_enhance(name))) + -- context(new_latelua_node(f_enhance(name))) + context(new_latelua_node(function() enhance(tobesaved[name]) end)) end scanners.dosetpositionbox = function() -- name box @@ -555,7 +570,8 @@ scanners.dosetpositionbox = function() -- name box d = getfield(box,"depth"), n = nofparagraphs > 0 and nofparagraphs or nil, } - context(new_latelua_node(f_enhance(name))) + -- context(new_latelua_node(f_enhance(name))) + context(new_latelua_node(function() enhance(tobesaved[name]) end)) end scanners.dosetpositionplus = function() -- name w h d extra @@ -572,7 +588,8 @@ scanners.dosetpositionplus = function() -- name w h d extra n = nofparagraphs > 0 and nofparagraphs or nil, e = scanstring(), } - context(new_latelua_node(f_enhance(name))) + -- context(new_latelua_node(f_enhance(name))) + context(new_latelua_node(function() enhance(tobesaved[name]) end)) end scanners.dosetpositionstrut = function() -- name @@ -588,7 +605,8 @@ scanners.dosetpositionstrut = function() -- name d = getfield(strutbox,"depth"), n = nofparagraphs > 0 and nofparagraphs or nil, } - context(new_latelua_node(f_enhance(name))) + -- context(new_latelua_node(f_enhance(name))) + context(new_latelua_node(function() enhance(tobesaved[name]) end)) end function jobpositions.getreserved(tag,n) diff --git a/Master/texmf-dist/tex/context/base/mkiv/cont-new.mkiv b/Master/texmf-dist/tex/context/base/mkiv/cont-new.mkiv index 7925f879719..79aa939d433 100644 --- a/Master/texmf-dist/tex/context/base/mkiv/cont-new.mkiv +++ b/Master/texmf-dist/tex/context/base/mkiv/cont-new.mkiv @@ -11,7 +11,7 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -\newcontextversion{2016.05.10 23:43} +\newcontextversion{2016.05.12 23:49} %D This file is loaded at runtime, thereby providing an excellent place for %D hacks, patches, extensions and new features. diff --git a/Master/texmf-dist/tex/context/base/mkiv/context-todo.tex b/Master/texmf-dist/tex/context/base/mkiv/context-todo.tex index 66889c4d37c..bf7d198c958 100644 --- a/Master/texmf-dist/tex/context/base/mkiv/context-todo.tex +++ b/Master/texmf-dist/tex/context/base/mkiv/context-todo.tex @@ -47,6 +47,9 @@ redo some of the spacing (adapt to improvements in engine) \stopitem \startitem + reorganize position data (more subtables) + \stopitem + \startitem use \type {\matheqnogapstep}, \type {\Ustack}, \type {\mathscriptsmode}, \ \type {\mathdisplayskipmode} and other new math primitives \stopitem diff --git a/Master/texmf-dist/tex/context/base/mkiv/context.mkiv b/Master/texmf-dist/tex/context/base/mkiv/context.mkiv index 228e3f0cd39..b670c40c1d6 100644 --- a/Master/texmf-dist/tex/context/base/mkiv/context.mkiv +++ b/Master/texmf-dist/tex/context/base/mkiv/context.mkiv @@ -39,7 +39,7 @@ %D up and the dependencies are more consistent. \edef\contextformat {\jobname} -\edef\contextversion{2016.05.10 23:43} +\edef\contextversion{2016.05.12 23:49} \edef\contextkind {beta} %D For those who want to use this: diff --git a/Master/texmf-dist/tex/context/base/mkiv/font-one.lua b/Master/texmf-dist/tex/context/base/mkiv/font-one.lua index af32463427f..5d54150c527 100644 --- a/Master/texmf-dist/tex/context/base/mkiv/font-one.lua +++ b/Master/texmf-dist/tex/context/base/mkiv/font-one.lua @@ -55,7 +55,7 @@ local otfenhancers = otf.enhancers local afmfeatures = constructors.newfeatures("afm") local registerafmfeature = afmfeatures.register -afm.version = 1.507 -- incrementing this number one up will force a re-cache +afm.version = 1.510 -- incrementing this number one up will force a re-cache afm.cache = containers.define("fonts", "afm", afm.version, true) afm.autoprefixed = true -- this will become false some day (catches texnansi-blabla.*) @@ -87,143 +87,6 @@ and <l n='otf'/> reader.</p> -- Comment DELIM 2390 1010 -- Comment AXISHEIGHT 250 -local comment = P("Comment") -local spacing = patterns.spacer -- S(" \t")^1 -local lineend = patterns.newline -- S("\n\r") -local words = spacing * C((1 - lineend)^1) -local number = spacing * C((R("09") + S("."))^1) / tonumber * spacing^0 -local data = Carg(1) -local plus = P("plus") * number -local minus = P("minus") * number - -local pattern = ( -- needs testing ... not used anyway as we no longer need math afm's - comment * spacing * ( - data * ( - ("CODINGSCHEME" * words ) / function(t,a) end + - ("DESIGNSIZE" * number * words ) / function(t,a) t[ 1] = a end + - ("CHECKSUM" * number * words ) / function(t,a) t[ 2] = a end + - ("SPACE" * number * plus * minus ) / function(t,a,b,c) t[ 3], t[ 4], t[ 5] = a, b, c end + - ("QUAD" * number ) / function(t,a) t[ 6] = a end + - ("EXTRASPACE" * number ) / function(t,a) t[ 7] = a end + - ("NUM" * number * number * number ) / function(t,a,b,c) t[ 8], t[ 9], t[10] = a, b, c end + - ("DENOM" * number * number ) / function(t,a,b) t[11], t[12] = a, b end + - ("SUP" * number * number * number ) / function(t,a,b,c) t[13], t[14], t[15] = a, b, c end + - ("SUB" * number * number ) / function(t,a,b) t[16], t[17] = a, b end + - ("SUPDROP" * number ) / function(t,a) t[18] = a end + - ("SUBDROP" * number ) / function(t,a) t[19] = a end + - ("DELIM" * number * number ) / function(t,a,b) t[20], t[21] = a, b end + - ("AXISHEIGHT" * number ) / function(t,a) t[22] = a end - ) - + (1-lineend)^0 - ) - + (1-comment)^1 -)^0 - -local function scan_comment(str) - local fd = { } - lpegmatch(pattern,str,1,fd) - return fd -end - --- Comment DesignSize 12 (pts) --- Comment TFM designsize: 12 (in points) - -local keys = { - - FontName = function(data,line) - data.metadata.fontname = strip(line) -- get rid of spaces - data.metadata.fullname = strip(line) - end, - - ItalicAngle = function(data,line) - data.metadata.italicangle = tonumber(line) - end, - - IsFixedPitch = function(data,line) - data.metadata.monospaced = toboolean(line,true) - end, - - CharWidth = function(data,line) - data.metadata.charwidth = tonumber(line) - end, - - XHeight = function(data,line) - data.metadata.xheight = tonumber(line) - end, - - Descender = function(data,line) - data.metadata.descender = tonumber (line) - end, - - Ascender = function(data,line) - data.metadata.ascender = tonumber (line) - end, - - Comment = function(data,line) - line = lower(line) - local designsize = match(line,"designsize[^%d]*(%d+)") - if designsize then data.metadata.designsize = tonumber(designsize) end - end, - -} - -local function get_charmetrics(data,charmetrics,vector) - local characters = data.characters - local chr, ind = { }, 0 - for k, v in gmatch(charmetrics,"([%a]+) +(.-) *;") do - if k == 'C' then - v = tonumber(v) - if v < 0 then - ind = ind + 1 -- ? - else - ind = v - end - chr = { - index = ind - } - elseif k == 'WX' then - chr.width = tonumber(v) - elseif k == 'N' then - characters[v] = chr - elseif k == 'B' then - local llx, lly, urx, ury = match(v,"^ *(.-) +(.-) +(.-) +(.-)$") - chr.boundingbox = { tonumber(llx), tonumber(lly), tonumber(urx), tonumber(ury) } - elseif k == 'L' then - local plus, becomes = match(v,"^(.-) +(.-)$") - local ligatures = chr.ligatures - if ligatures then - ligatures[plus] = becomes - else - chr.ligatures = { [plus] = becomes } - end - end - end -end - -local function get_kernpairs(data,kernpairs) - local characters = data.characters - for one, two, value in gmatch(kernpairs,"KPX +(.-) +(.-) +(.-)\n") do - local chr = characters[one] - if chr then - local kerns = chr.kerns - if kerns then - kerns[two] = tonumber(value) - else - chr.kerns = { [two] = tonumber(value) } - end - end - end -end - -local function get_variables(data,fontmetrics) - for key, rest in gmatch(fontmetrics,"(%a+) *(.-)[\n\r]") do - local keyhandler = keys[key] - if keyhandler then - keyhandler(data,rest) - end - end -end - --[[ldx-- <p>We now use a new (unfinished) pfb loader but I see no differences between the old and new vectors (we actually had one bad vector with the old loader).</p> @@ -353,61 +216,205 @@ do end -local function readafm(filename) - local ok, afmblob, size = resolvers.loadbinfile(filename) -- has logging - if ok and afmblob then - local data = { - resources = { - filename = resolvers.unresolve(filename), - version = afm.version, - creator = "context mkiv", - }, - properties = { - hasitalics = false, - }, - goodies = { - }, - metadata = { - filename = file.removesuffix(file.basename(filename)) - }, - characters = { - -- a temporary store - }, - descriptions = { - -- the final store - }, - } --- afmblob = gsub(afmblob,"StartCharMetrics(.-)EndCharMetrics", function(charmetrics) - for charmetrics in gmatch(afmblob,"StartCharMetrics(.-)EndCharMetrics") do - if trace_loading then - report_afm("loading char metrics") +--[[ldx-- +<p>We start with the basic reader which we give a name similar to the built in <l n='tfm'/> +and <l n='otf'/> reader.</p> +--ldx]]-- + +-- Comment FONTIDENTIFIER LMMATHSYMBOLS10 +-- Comment CODINGSCHEME TEX MATH SYMBOLS +-- Comment DESIGNSIZE 10.0 pt +-- Comment CHECKSUM O 4261307036 +-- Comment SPACE 0 plus 0 minus 0 +-- Comment QUAD 1000 +-- Comment EXTRASPACE 0 +-- Comment NUM 676.508 393.732 443.731 +-- Comment DENOM 685.951 344.841 +-- Comment SUP 412.892 362.892 288.889 +-- Comment SUB 150 247.217 +-- Comment SUPDROP 386.108 +-- Comment SUBDROP 50 +-- Comment DELIM 2390 1010 +-- Comment AXISHEIGHT 250 +-- Comment DesignSize 12 (pts) +-- Comment TFM designsize: 12 (in points) + +local readafm + +do -- no need for a further speedup with locals + + local spacing = patterns.spacer + local lineend = patterns.newline + local number = spacing * (R("09") + S("."))^1 / tonumber + local name = spacing * C((1-spacing)^1) + local words = spacing * (1 - lineend)^1 / strip + local rest = (1 - lineend)^0 + local fontdata = Carg(1) + local semicolon = spacing * P(";") + local plus = P("plus") * number + local minus = P("minus") * number + + -- kern pairs + + local function addkernpair(data,one,two,value) + local chr = data.characters[one] + if chr then + local kerns = chr.kerns + if kerns then + kerns[two] = tonumber(value) + else + chr.kerns = { [two] = tonumber(value) } end - get_charmetrics(data,charmetrics,vector) - break end - for kernpairs in gmatch(afmblob,"StartKernPairs(.-)EndKernPairs") do + end + + local p_kernpair = (fontdata * P("KPX") * name * name * number) / addkernpair + + -- char metrics + + local chr = false + local ind = 0 + + local function start() + ind = 0 + chr = { } + end + + local function stop() + ind = 0 + chr = false + end + + local function setindex(i) + if i < 0 then + ind = ind + 1 -- ? + else + ind = i + end + chr = { + index = ind + } + end + + local function setwidth(width) + chr.width = width + end + + local function setname(data,name) + data.characters[name] = chr + end + + local function setboundingbox(boundingbox) + chr.boundingbox = boundingbox + end + + local function setligature(plus,becomes) + local ligatures = chr.ligatures + if ligatures then + ligatures[plus] = becomes + else + chr.ligatures = { [plus] = becomes } + end + end + + local p_charmetric = ( ( + P("C") * number / setindex + + P("WX") * number / setwidth + + P("N") * fontdata * name / setname + + P("B") * Ct((number)^4) / setboundingbox + + P("L") * (name)^2 / setligature + ) * semicolon )^1 + + local p_charmetrics = P("StartCharMetrics") * number * (p_charmetric + (1-P("EndCharMetrics")))^0 * P("EndCharMetrics") + local p_kernpairs = P("StartKernPairs") * number * (p_kernpair + (1-P("EndKernPairs")) )^0 * P("EndKernPairs") + + local function set_1(data,key,a) data.metadata[lower(key)] = a end + local function set_2(data,key,a,b) data.metadata[lower(key)] = { a, b } end + local function set_3(data,key,a,b,c) data.metadata[lower(key)] = { a, b, c } end + + local p_parameters = P(false) + + P("FontName") * fontdata * words / function(data,line) + data.metadata.fontname = line + data.metadata.fullname = line + end + + P("ItalicAngle") * fontdata * number / function(data,angle) + data.metadata.italicangle = angle + end + + P("IsFixedPitch") * fontdata * name / function(data,pitch) + data.metadata.monospaced = toboolean(pitch,true) + end + + P("CharWidth") * fontdata * number / function(data,width) + data.metadata.charwidth = width + end + + P("XHeight") * fontdata * number / function(data,xheight) + data.metadata.xheight = xheight + end + + P("Descender") * fontdata * number / function(data,descender) + data.metadata.descender = descender + end + + P("Ascender") * fontdata * number / function(data,ascender) + data.metadata.ascender = ascender + end + + P("Comment") * spacing * ( P(false) + + (fontdata * C("DESIGNSIZE") * number * rest) / set_1 -- 1 + + (fontdata * C("TFM designsize") * number * rest) / set_1 + + (fontdata * C("DesignSize") * number * rest) / set_1 + + (fontdata * C("CODINGSCHEME") * words * rest) / set_1 -- + + (fontdata * C("CHECKSUM") * number * words * rest) / set_1 -- 2 + + (fontdata * C("SPACE") * number * plus * minus * rest) / set_3 -- 3 4 5 + + (fontdata * C("QUAD") * number * rest) / set_1 -- 6 + + (fontdata * C("EXTRASPACE") * number * rest) / set_1 -- 7 + + (fontdata * C("NUM") * number * number * number * rest) / set_3 -- 8 9 10 + + (fontdata * C("DENOM") * number * number * rest) / set_2 -- 11 12 + + (fontdata * C("SUP") * number * number * number * rest) / set_3 -- 13 14 15 + + (fontdata * C("SUB") * number * number * rest) / set_2 -- 16 17 + + (fontdata * C("SUPDROP") * number * rest) / set_1 -- 18 + + (fontdata * C("SUBDROP") * number * rest) / set_1 -- 19 + + (fontdata * C("DELIM") * number * number * rest) / set_2 -- 20 21 + + (fontdata * C("AXISHEIGHT") * number * rest) / set_1 -- 22 + ) + + local parser = ( P("StartFontMetrics") / start ) + * ( p_charmetrics + p_kernpairs + p_parameters + (1-P("EndFontMetrics")) )^0 + * ( P("EndFontMetrics") / stop ) + + readafm = function(filename) + local ok, afmblob, size = resolvers.loadbinfile(filename) -- has logging + if ok and afmblob then + local data = { + resources = { + filename = resolvers.unresolve(filename), + version = afm.version, + creator = "context mkiv", + }, + properties = { + hasitalics = false, + }, + goodies = { + }, + metadata = { + filename = file.removesuffix(file.basename(filename)) + }, + characters = { + -- a temporary store + }, + descriptions = { + -- the final store + }, + } if trace_loading then - report_afm("loading kern pairs") + report_afm("parsing afm file %a",filename) end - get_kernpairs(data,kernpairs) - break - end - for version, fontmetrics in gmatch(afmblob,"StartFontMetrics%s+([%d%.]+)(.-)EndFontMetrics") do + lpegmatch(parser,afmblob,1,data) + return data + else if trace_loading then - report_afm("loading variables") + report_afm("no valid afm file %a",filename) end - data.afmversion = version - get_variables(data,fontmetrics) - data.fontdimens = scan_comment(fontmetrics) -- todo: all lpeg, no time now - break - end - return data - else - if trace_loading then - report_afm("no valid afm file %a",filename) + return nil end - return nil end + end --[[ldx-- @@ -929,11 +936,31 @@ local function copytotfm(data) end -- end - local fd = data.fontdimens - if fd and fd[8] and fd[9] and fd[10] then -- math - for k,v in next, fd do - parameters[k] = v - end + -- + if metadata.sup then + local dummy = { 0, 0, 0 } + parameters[ 1] = metadata.designsize or 0 + parameters[ 2] = metadata.checksum or 0 + parameters[ 3], + parameters[ 4], + parameters[ 5] = unpack(metadata.space or dummy) + parameters[ 6] = metadata.quad or 0 + parameters[ 7] = metadata.extraspace or 0 + parameters[ 8], + parameters[ 9], + parameters[10] = unpack(metadata.num or dummy) + parameters[11], + parameters[12] = unpack(metadata.denom or dummy) + parameters[13], + parameters[14], + parameters[15] = unpack(metadata.sup or dummy) + parameters[16], + parameters[17] = unpack(metadata.sub or dummy) + parameters[18] = metadata.supdrop or 0 + parameters[19] = metadata.subdrop or 0 + parameters[20], + parameters[21] = unpack(metadata.delim or dummy) + parameters[22] = metadata.axisheight or 0 end -- parameters.designsize = (metadata.designsize or 10)*65536 diff --git a/Master/texmf-dist/tex/context/base/mkiv/grph-inc.lua b/Master/texmf-dist/tex/context/base/mkiv/grph-inc.lua index cf4a702697f..d13d45a29c5 100644 --- a/Master/texmf-dist/tex/context/base/mkiv/grph-inc.lua +++ b/Master/texmf-dist/tex/context/base/mkiv/grph-inc.lua @@ -2117,3 +2117,34 @@ implement { -- end -- -- \externalfigure[t:/sources/hakker1b.tiff] + +-- something relatively new: + +local registered = { } + +interfaces.implement { + name = "figure_register_page", + arguments = { "string", "string", "string" }, + actions = function(a,b,c) + registered[#registered+1] = { a, b, c } + context(#registered) + end +} + +interfaces.implement { + name = "figure_nof_registered_pages", + actions = function() + context(#registered) + end +} + +interfaces.implement { + name = "figure_flush_registered_pages", + arguments = "string", + actions = function(n) + local f = registered[tonumber(n)] + if f then + context.doexternalfigurerepeat(f[1],f[2],f[3],n) + end + end +} diff --git a/Master/texmf-dist/tex/context/base/mkiv/grph-inc.mkiv b/Master/texmf-dist/tex/context/base/mkiv/grph-inc.mkiv index deba82c583d..de5a2227ac1 100644 --- a/Master/texmf-dist/tex/context/base/mkiv/grph-inc.mkiv +++ b/Master/texmf-dist/tex/context/base/mkiv/grph-inc.mkiv @@ -99,6 +99,7 @@ \c!ymax =24, \c!xmax =, \c!align =\v!none, % New, for Tacos extremely large graphics. + \c!crossreference =\v!no, ] %D Defining figures. @@ -305,9 +306,10 @@ % \the\t_grph_include_local_settings % - \edef\p_width {\externalfigureparameter\c!width}% - \edef\p_height{\externalfigureparameter\c!height}% - \edef\p_label {\externalfigureparameter\c!label}% + \edef\p_width {\externalfigureparameter\c!width}% + \edef\p_height {\externalfigureparameter\c!height}% + \edef\p_label {\externalfigureparameter\c!label}% + \edef\p_reference{\externalfigureparameter\c!reference}% % \dostarttagged\t!image\empty \clf_figure_push @@ -361,10 +363,81 @@ \fi \clf_figure_pop \dotagfigure - \naturalvbox attr \imageattribute 2 {\box\foundexternalfigure}% + % + \scratchcounter\zerocount + \edef\p_crossreference{\externalfigureparameter\c!crossreference}% + \iflocation\iftrialtypesetting\else + \ifx\p_crossreference\empty + % nothing + \else\ifx\p_crossreference\v!no + % nothing + \else\ifx\p_crossreference\v!yes + \ifassignment + \scratchcounter\clf_figure_register_page{#1}{}{#2}\relax + \else + \scratchcounter\clf_figure_register_page{#1}{#2}{#3}\relax + \fi + \else + \scratchcounter-\p_crossreference % passed by repeater + \fi\fi\fi + \fi\fi + \naturalvpack + attr \imageattribute \plustwo + \ifnum\scratchcounter>\zerocount + {\strc_references_cross_forward {ex:\number \scratchcounter}{\box\foundexternalfigure}}% + \else\ifnum\scratchcounter<\zerocount + {\strc_references_cross_backward{ex:\number-\scratchcounter}{\box\foundexternalfigure}}% + \else + {\box\foundexternalfigure}% + \fi\fi + % \dostoptagged \egroup} +%D Next we provide a cross referenced scale-up mechanism: + +\def\strc_references_cross_forward#1#2% + {\begingroup + \strc_references_set_simple_internal_reference{cross:b:#1}% + \naturalhpack + attr \destinationattribute\number\lastdestinationattribute + {\naturalhpack{\strc_references_flush_destination_nodes\directgotodumbbox{#2}[cross:f:#1]}}% + \endgroup} + +\def\strc_references_cross_backward#1#2% + {\begingroup + \strc_references_set_simple_internal_reference{cross:f:#1}% + \naturalhpack + attr \destinationattribute\number\lastdestinationattribute + {\naturalhpack{\strc_references_flush_destination_nodes\directgotodumbbox{#2}[cross:b:#1]}}% + \endgroup} + +\let\doexternalfigurerepeat\gobblefourarguments % called from lua end + +\unexpanded\def\placeregisteredexternalfigures + {\dosingleempty\grph_include_place_registered} + +\unexpanded\def\grph_include_place_registered[#1]% + {\page + \begingroup + \unexpanded\def\doexternalfigurerepeat{\grph_include_place_registered_indeed{#1}}% + \dorecurse\clf_figure_nof_registered_pages + {\page + \clf_figure_flush_registered_pages\recurselevel + \page}% + \endgroup + \page} + +\unexpanded\def\grph_include_place_registered_indeed#1#2#3#4#5% called from lua end + {\grph_include_place[#2][#3][#4,% + \c!hfactor=,\c!wfactor=,\c!factor=,% + \c!maxwidth=,\c!maxheight=,% + \c!xscale=,\c!yscale=,\c!scale=,% + \c!sx=,\c!sy=,\c!s=,% + \c!width=,\c!height=,% + \c!crossreference=#5,% + #1]} + %D Scaling: \let\dowithfigure\relax % name might change (into a proper hook) diff --git a/Master/texmf-dist/tex/context/base/mkiv/mult-def.lua b/Master/texmf-dist/tex/context/base/mkiv/mult-def.lua index 99e0eb60466..68114481698 100644 --- a/Master/texmf-dist/tex/context/base/mkiv/mult-def.lua +++ b/Master/texmf-dist/tex/context/base/mkiv/mult-def.lua @@ -7362,6 +7362,9 @@ return { ["pe"]="criterium", ["ro"]="criteriu", }, + ["crossreference"]={ + ["en"]="crossreference", + }, ["cropoffset"]={ ["en"]="cropoffset", }, diff --git a/Master/texmf-dist/tex/context/base/mkiv/pack-rul.mkiv b/Master/texmf-dist/tex/context/base/mkiv/pack-rul.mkiv index c8288586f4b..635863302cd 100644 --- a/Master/texmf-dist/tex/context/base/mkiv/pack-rul.mkiv +++ b/Master/texmf-dist/tex/context/base/mkiv/pack-rul.mkiv @@ -2727,6 +2727,8 @@ {\pack_framed_text_start_continue\empty{#1}} {\pack_framed_text_start_continue{#1}{#2}}} +% todo: sort out first/lastline ht/dp + \def\pack_framed_text_start_continue#1#2% {\setupframedtexts[\currentframedtext][#2]% \doifsomething{#1}{\setframedtextparameter\c!location{#1}}% does not listen to #3 @@ -2739,10 +2741,10 @@ \hsize\localhsize % \insidefloattrue % ? better \usebodyfontparameter\framedtextparameter + % \edef\p_framed_text_strut{\letframedtextparameter\c!strut}% to be used \letframedtextparameter\c!strut\v!no \inheritedframedtextframed\bgroup \let\\=\endgraf - \framedtextparameter\c!inner % oud spul \edef\p_framed_text_depthcorrection{\framedtextparameter\c!depthcorrection}% \ifx\p_framed_text_depthcorrection\v!on \pack_framed_text_start_depth_correction @@ -2753,6 +2755,7 @@ \doinhibitblank \useindentingparameter\framedtextparameter \useframedtextstyleandcolor\c!style\c!color + \framedtextparameter\c!inner \ignorespaces} % testcase 1: @@ -2855,17 +2858,26 @@ \def\pack_framed_text_start_direct[#1]% {\usebodyfontparameter\framedtextparameter - \letframedtextparameter\c!strut\v!no \iffirstargument \setupcurrentframedtext[#1]% \fi + \edef\p_framed_text_strut{\letframedtextparameter\c!strut}% + \letframedtextparameter\c!strut\v!no \inheritedframedtextframed\bgroup \blank[\v!disable]% \let\\=\endgraf - \framedtextparameter\c!inner \useframedtextstyleandcolor\c!style\c!color + \vskip-\strutdp % brrr why is this needed ... needs to be sorted out, see testcase 1 + \framedtextparameter\c!inner + \ifx\p_framed_text_strut\v!no + \let\pack_framed_strut\relax + \else + \let\pack_framed_strut\strut + \fi \bgroup \aftergroup\pack_framed_text_stop_direct + \afterassignment\ignorespaces + \afterassignment\pack_framed_strut \let\next=} \def\pack_framed_text_stop_direct diff --git a/Master/texmf-dist/tex/context/base/mkiv/spac-ver.mkiv b/Master/texmf-dist/tex/context/base/mkiv/spac-ver.mkiv index bbe53fb2aa3..e591d85f6a3 100644 --- a/Master/texmf-dist/tex/context/base/mkiv/spac-ver.mkiv +++ b/Master/texmf-dist/tex/context/base/mkiv/spac-ver.mkiv @@ -1139,7 +1139,7 @@ % when enabled, sigstruts will remove themselves if nothing % goes inbetween -%D For poractical reasons we define some boundary characters here. +%D For practical reasons we define some boundary characters here. \unexpanded\def\leftboundary {\protrusionboundary\plusone} \unexpanded\def\rightboundary {\protrusionboundary\plustwo} diff --git a/Master/texmf-dist/tex/context/base/mkiv/status-files.pdf b/Master/texmf-dist/tex/context/base/mkiv/status-files.pdf Binary files differindex bc8c201e7b3..ce4ce0520e9 100644 --- a/Master/texmf-dist/tex/context/base/mkiv/status-files.pdf +++ b/Master/texmf-dist/tex/context/base/mkiv/status-files.pdf diff --git a/Master/texmf-dist/tex/context/base/mkiv/status-lua.pdf b/Master/texmf-dist/tex/context/base/mkiv/status-lua.pdf Binary files differindex 5260d86f029..c3f475e425c 100644 --- a/Master/texmf-dist/tex/context/base/mkiv/status-lua.pdf +++ b/Master/texmf-dist/tex/context/base/mkiv/status-lua.pdf diff --git a/Master/texmf-dist/tex/context/interface/mkii/keys-cs.xml b/Master/texmf-dist/tex/context/interface/mkii/keys-cs.xml index e8df8ee303a..ce8e41016fb 100644 --- a/Master/texmf-dist/tex/context/interface/mkii/keys-cs.xml +++ b/Master/texmf-dist/tex/context/interface/mkii/keys-cs.xml @@ -732,6 +732,7 @@ <cd:constant name='couplingway' value='zpusobpropojeni'/> <cd:constant name='criterium' value='kriterium'/> <cd:constant name='cropoffset' value='cropoffset'/> + <cd:constant name='crossreference' value='crossreference'/> <cd:constant name='cssfile' value='cssfile'/> <cd:constant name='current' value='aktualni'/> <cd:constant name='cutspace' value='cutspace'/> diff --git a/Master/texmf-dist/tex/context/interface/mkii/keys-de.xml b/Master/texmf-dist/tex/context/interface/mkii/keys-de.xml index 94314bf6118..5c7ecc6514e 100644 --- a/Master/texmf-dist/tex/context/interface/mkii/keys-de.xml +++ b/Master/texmf-dist/tex/context/interface/mkii/keys-de.xml @@ -732,6 +732,7 @@ <cd:constant name='couplingway' value='verkopplungsart'/> <cd:constant name='criterium' value='kriterium'/> <cd:constant name='cropoffset' value='cropoffset'/> + <cd:constant name='crossreference' value='crossreference'/> <cd:constant name='cssfile' value='cssfile'/> <cd:constant name='current' value='aktuell'/> <cd:constant name='cutspace' value='cutspace'/> diff --git a/Master/texmf-dist/tex/context/interface/mkii/keys-en.xml b/Master/texmf-dist/tex/context/interface/mkii/keys-en.xml index b0cb6fa2c50..621cbd76368 100644 --- a/Master/texmf-dist/tex/context/interface/mkii/keys-en.xml +++ b/Master/texmf-dist/tex/context/interface/mkii/keys-en.xml @@ -732,6 +732,7 @@ <cd:constant name='couplingway' value='couplingway'/> <cd:constant name='criterium' value='criterium'/> <cd:constant name='cropoffset' value='cropoffset'/> + <cd:constant name='crossreference' value='crossreference'/> <cd:constant name='cssfile' value='cssfile'/> <cd:constant name='current' value='current'/> <cd:constant name='cutspace' value='cutspace'/> diff --git a/Master/texmf-dist/tex/context/interface/mkii/keys-fr.xml b/Master/texmf-dist/tex/context/interface/mkii/keys-fr.xml index dae2ecfe0b8..301f9462813 100644 --- a/Master/texmf-dist/tex/context/interface/mkii/keys-fr.xml +++ b/Master/texmf-dist/tex/context/interface/mkii/keys-fr.xml @@ -732,6 +732,7 @@ <cd:constant name='couplingway' value='modecouplage'/> <cd:constant name='criterium' value='critere'/> <cd:constant name='cropoffset' value='cropoffset'/> + <cd:constant name='crossreference' value='crossreference'/> <cd:constant name='cssfile' value='cssfile'/> <cd:constant name='current' value='courant'/> <cd:constant name='cutspace' value='cutspace'/> diff --git a/Master/texmf-dist/tex/context/interface/mkii/keys-it.xml b/Master/texmf-dist/tex/context/interface/mkii/keys-it.xml index 0d661c5e14b..458acd5c108 100644 --- a/Master/texmf-dist/tex/context/interface/mkii/keys-it.xml +++ b/Master/texmf-dist/tex/context/interface/mkii/keys-it.xml @@ -732,6 +732,7 @@ <cd:constant name='couplingway' value='modoaccoppiamento'/> <cd:constant name='criterium' value='criterio'/> <cd:constant name='cropoffset' value='cropoffset'/> + <cd:constant name='crossreference' value='crossreference'/> <cd:constant name='cssfile' value='cssfile'/> <cd:constant name='current' value='corrente'/> <cd:constant name='cutspace' value='cutspace'/> diff --git a/Master/texmf-dist/tex/context/interface/mkii/keys-nl.xml b/Master/texmf-dist/tex/context/interface/mkii/keys-nl.xml index d9f192ec59c..5e214c8bbaf 100644 --- a/Master/texmf-dist/tex/context/interface/mkii/keys-nl.xml +++ b/Master/texmf-dist/tex/context/interface/mkii/keys-nl.xml @@ -732,6 +732,7 @@ <cd:constant name='couplingway' value='koppelwijze'/> <cd:constant name='criterium' value='criterium'/> <cd:constant name='cropoffset' value='cropoffset'/> + <cd:constant name='crossreference' value='crossreference'/> <cd:constant name='cssfile' value='cssfile'/> <cd:constant name='current' value='huidige'/> <cd:constant name='cutspace' value='snijwit'/> diff --git a/Master/texmf-dist/tex/context/interface/mkii/keys-pe.xml b/Master/texmf-dist/tex/context/interface/mkii/keys-pe.xml index ec120ee06d1..1afb96c9ab1 100644 --- a/Master/texmf-dist/tex/context/interface/mkii/keys-pe.xml +++ b/Master/texmf-dist/tex/context/interface/mkii/keys-pe.xml @@ -732,6 +732,7 @@ <cd:constant name='couplingway' value='روشتزویج'/> <cd:constant name='criterium' value='criterium'/> <cd:constant name='cropoffset' value='cropoffset'/> + <cd:constant name='crossreference' value='crossreference'/> <cd:constant name='cssfile' value='cssfile'/> <cd:constant name='current' value='جاری'/> <cd:constant name='cutspace' value='فضایبرش'/> diff --git a/Master/texmf-dist/tex/context/interface/mkii/keys-ro.xml b/Master/texmf-dist/tex/context/interface/mkii/keys-ro.xml index 71fa22e923a..8a7707a2d54 100644 --- a/Master/texmf-dist/tex/context/interface/mkii/keys-ro.xml +++ b/Master/texmf-dist/tex/context/interface/mkii/keys-ro.xml @@ -732,6 +732,7 @@ <cd:constant name='couplingway' value='modcuplare'/> <cd:constant name='criterium' value='criteriu'/> <cd:constant name='cropoffset' value='cropoffset'/> + <cd:constant name='crossreference' value='crossreference'/> <cd:constant name='cssfile' value='cssfile'/> <cd:constant name='current' value='curent'/> <cd:constant name='cutspace' value='cutspace'/> diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-context.pdf b/Master/texmf-dist/tex/context/interface/mkiv/i-context.pdf Binary files differindex 525127f6f21..99c3cce1fa5 100644 --- a/Master/texmf-dist/tex/context/interface/mkiv/i-context.pdf +++ b/Master/texmf-dist/tex/context/interface/mkiv/i-context.pdf diff --git a/Master/texmf-dist/tex/context/interface/mkiv/i-readme.pdf b/Master/texmf-dist/tex/context/interface/mkiv/i-readme.pdf Binary files differindex cc920a21b3c..5dc85d2f541 100644 --- a/Master/texmf-dist/tex/context/interface/mkiv/i-readme.pdf +++ b/Master/texmf-dist/tex/context/interface/mkiv/i-readme.pdf |