summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/context/documents/general/qrcs/setup-cs.pdfbin888024 -> 887929 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-de.pdfbin889795 -> 889852 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-en.pdfbin893980 -> 894061 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-fr.pdfbin886179 -> 886005 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-it.pdfbin891983 -> 891724 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-cs.pdfbin383647 -> 383846 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-de.pdfbin384184 -> 383959 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-en.pdfbin380310 -> 380653 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-fr.pdfbin383890 -> 383882 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-it.pdfbin383477 -> 383001 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-nl.pdfbin382068 -> 382042 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-ro.pdfbin620138 -> 620007 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-nl.pdfbin881404 -> 881195 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-ro.pdfbin886091 -> 886019 bytes
-rw-r--r--scripts/context/lua/mtx-vscode.lua1
-rw-r--r--scripts/context/lua/mtxrun.lua48
-rw-r--r--scripts/context/stubs/mswin/mtxrun.lua48
-rw-r--r--scripts/context/stubs/unix/mtxrun48
-rw-r--r--scripts/context/stubs/win64/mtxrun.lua48
-rw-r--r--tex/context/base/mkii/cont-new.mkii2
-rw-r--r--tex/context/base/mkii/context.mkii2
-rw-r--r--tex/context/base/mkii/mult-fr.mkii3
-rw-r--r--tex/context/base/mkiv/char-tex.lua1
-rw-r--r--tex/context/base/mkiv/cont-new.mkiv2
-rw-r--r--tex/context/base/mkiv/cont-run.lua5
-rw-r--r--tex/context/base/mkiv/context.mkiv2
-rw-r--r--tex/context/base/mkiv/context.mkxl2
-rw-r--r--tex/context/base/mkiv/lpdf-fmt.lua172
-rw-r--r--tex/context/base/mkiv/lpdf-tag.lua40
-rw-r--r--tex/context/base/mkiv/lpdf-wid.lua339
-rw-r--r--tex/context/base/mkiv/luat-cnf.lua44
-rw-r--r--tex/context/base/mkiv/status-files.pdfbin26605 -> 26588 bytes
-rw-r--r--tex/context/base/mkiv/status-lua.pdfbin269165 -> 269277 bytes
-rw-r--r--tex/context/base/mkiv/syst-ini.mkiv9
-rw-r--r--tex/context/base/mkiv/syst-ini.mkxl50
-rw-r--r--tex/context/base/mkiv/util-zip.lua44
-rw-r--r--tex/context/interface/mkii/keys-fr.xml3
-rw-r--r--tex/context/interface/mkiv/i-context.pdfbin893980 -> 894061 bytes
-rw-r--r--tex/context/interface/mkiv/i-readme.pdfbin61165 -> 61165 bytes
-rw-r--r--tex/context/sample/third/dyrynk-cz.tex6
-rw-r--r--tex/context/sample/third/dyrynk-vlnka-cz.tex7
-rw-r--r--tex/context/sample/third/hviezdoslav-sk.tex39
-rw-r--r--tex/context/sample/third/hviezdoslav-vlnka-sk.tex39
-rw-r--r--tex/context/sample/third/jaros-sk.tex5
-rw-r--r--tex/context/sample/third/jaros-vlnka-sk.tex5
-rw-r--r--tex/context/sample/third/kollar-cz.tex1
-rw-r--r--tex/context/sample/third/komensky-cz.tex2
-rw-r--r--tex/context/sample/third/komensky-vlnka-cz.tex2
-rw-r--r--tex/context/sample/third/slova-sk.tex5
-rw-r--r--tex/context/sample/third/smrek-sk.tex40
-rw-r--r--tex/context/sample/third/smrek-vlnka-sk.tex40
-rw-r--r--tex/context/test/mkiv/pdf-a1a-2005.mkiv6
-rw-r--r--tex/context/test/mkiv/pdf-a1b-2005.mkiv12
-rw-r--r--tex/context/test/mkiv/pdf-a2a.mkiv14
-rw-r--r--tex/context/test/mkiv/pdf-a2b.mkiv48
-rw-r--r--tex/context/test/mkiv/pdf-a2u.mkiv48
-rw-r--r--tex/context/test/mkiv/pdf-a3a.mkiv16
-rw-r--r--tex/context/test/mkiv/pdf-a3b.mkiv47
-rw-r--r--tex/context/test/mkiv/pdf-a3u.mkiv47
-rw-r--r--tex/generic/context/luatex/luatex-fonts-merged.lua2
60 files changed, 990 insertions, 354 deletions
diff --git a/doc/context/documents/general/qrcs/setup-cs.pdf b/doc/context/documents/general/qrcs/setup-cs.pdf
index bb1be8747..d9ebb3fbb 100644
--- a/doc/context/documents/general/qrcs/setup-cs.pdf
+++ b/doc/context/documents/general/qrcs/setup-cs.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-de.pdf b/doc/context/documents/general/qrcs/setup-de.pdf
index 212dd9a25..c3f373020 100644
--- a/doc/context/documents/general/qrcs/setup-de.pdf
+++ b/doc/context/documents/general/qrcs/setup-de.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-en.pdf b/doc/context/documents/general/qrcs/setup-en.pdf
index e38499187..1cf1043ce 100644
--- a/doc/context/documents/general/qrcs/setup-en.pdf
+++ b/doc/context/documents/general/qrcs/setup-en.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-fr.pdf b/doc/context/documents/general/qrcs/setup-fr.pdf
index 5b31e3a99..83e518142 100644
--- a/doc/context/documents/general/qrcs/setup-fr.pdf
+++ b/doc/context/documents/general/qrcs/setup-fr.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-it.pdf b/doc/context/documents/general/qrcs/setup-it.pdf
index ded5e8882..b00b3ab5a 100644
--- a/doc/context/documents/general/qrcs/setup-it.pdf
+++ b/doc/context/documents/general/qrcs/setup-it.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-cs.pdf b/doc/context/documents/general/qrcs/setup-mapping-cs.pdf
index 78500f041..f5b53e2c1 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-cs.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-cs.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-de.pdf b/doc/context/documents/general/qrcs/setup-mapping-de.pdf
index ff2393e97..f861e5a9a 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-de.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-de.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-en.pdf b/doc/context/documents/general/qrcs/setup-mapping-en.pdf
index c79bbd3d0..72203ee71 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-en.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-en.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-fr.pdf b/doc/context/documents/general/qrcs/setup-mapping-fr.pdf
index 2cab564a4..6a6231688 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-fr.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-fr.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-it.pdf b/doc/context/documents/general/qrcs/setup-mapping-it.pdf
index c64b3f941..a1ccee86f 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-it.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-it.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-nl.pdf b/doc/context/documents/general/qrcs/setup-mapping-nl.pdf
index 75911f96a..3690487ff 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-nl.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-nl.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-ro.pdf b/doc/context/documents/general/qrcs/setup-mapping-ro.pdf
index e3c836392..1f5475891 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-ro.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-ro.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-nl.pdf b/doc/context/documents/general/qrcs/setup-nl.pdf
index ca96ab077..f91e1ca80 100644
--- a/doc/context/documents/general/qrcs/setup-nl.pdf
+++ b/doc/context/documents/general/qrcs/setup-nl.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-ro.pdf b/doc/context/documents/general/qrcs/setup-ro.pdf
index 941ce9fab..fa997eeed 100644
--- a/doc/context/documents/general/qrcs/setup-ro.pdf
+++ b/doc/context/documents/general/qrcs/setup-ro.pdf
Binary files differ
diff --git a/scripts/context/lua/mtx-vscode.lua b/scripts/context/lua/mtx-vscode.lua
index 1e0681eee..96cc5f900 100644
--- a/scripts/context/lua/mtx-vscode.lua
+++ b/scripts/context/lua/mtx-vscode.lua
@@ -318,7 +318,6 @@ function scripts.vscode.generate(targetpath)
}
report("saving task %a in %a",category,filename)
-
io.savedata(filename,data)
end
diff --git a/scripts/context/lua/mtxrun.lua b/scripts/context/lua/mtxrun.lua
index 2604294db..54fa2a924 100644
--- a/scripts/context/lua/mtxrun.lua
+++ b/scripts/context/lua/mtxrun.lua
@@ -15937,7 +15937,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-zip"] = package.loaded["util-zip"] or true
--- original size: 19243, stripped down to: 10700
+-- original size: 19496, stripped down to: 10858
if not modules then modules={} end modules ['util-zip']={
version=1.001,
@@ -15963,17 +15963,16 @@ local getposition=files.getposition
local band=bit32.band
local rshift=bit32.rshift
local lshift=bit32.lshift
-local decompress,calculatecrc
+local decompress,expandsize,calculatecrc
local zlibdecompress=zlib.decompress
+ local zlibexpandsize=zlib.expandsize
local zlibchecksum=zlib.crc32
- decompress=function(source,targetsize)
- local target=zlibdecompress(source,-15)
- if target then
- return target
- else
- return false,1
- end
+ decompress=function(source)
+ return zlibdecompress(source,-15)
end
+ expandsize=zlibexpandsize and function(source,targetsize)
+ return zlibexpandsize(source,targetsize,-15)
+ end or decompress
calculatecrc=function(buffer,initial)
return zlibchecksum(initial or 0,buffer)
end
@@ -16085,7 +16084,6 @@ local openzipfile,closezipfile,unzipfile,foundzipfile,getziphash,getziplist do
z.handle=nil
end
end
- local expandsize=xzip.expandsize
function unzipfile(z,filename,check)
local hash=z.hash
if not hash then
@@ -16335,19 +16333,23 @@ if xzip then
local l=list[i]
local n=l.filename
local d=unzipfile(z,n)
- local p=filejoin(path,n)
- if mkdirs(dirname(p)) then
- if steps then
- total=total+#d
- done=done+1
- if done>=step then
- done=0
- logwriter(format("%4i files of %4i done, %10i bytes, %0.3f seconds",i,count,total,osclock()-time))
+ if d then
+ local p=filejoin(path,n)
+ if mkdirs(dirname(p)) then
+ if steps then
+ total=total+#d
+ done=done+1
+ if done>=step then
+ done=0
+ logwriter(format("%4i files of %4i done, %10i bytes, %0.3f seconds",i,count,total,osclock()-time))
+ end
+ elseif verbose then
+ logwriter(n)
end
- elseif verbose then
- logwriter(n)
+ savedata(p,d)
end
- savedata(p,d)
+ else
+ logwriter(format("problem with file %s",n))
end
end
if steps then
@@ -26079,8 +26081,8 @@ end -- of closure
-- used libraries : l-bit32.lua l-lua.lua l-macro.lua l-sandbox.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-sha.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua util-soc-imp-reset.lua util-soc-imp-socket.lua util-soc-imp-copas.lua util-soc-imp-ltn12.lua util-soc-imp-mime.lua util-soc-imp-url.lua util-soc-imp-headers.lua util-soc-imp-tp.lua util-soc-imp-http.lua util-soc-imp-ftp.lua util-soc-imp-smtp.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-tpl.lua util-sbx.lua util-mrg.lua util-env.lua luat-env.lua util-zip.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua util-lib.lua luat-sta.lua luat-fmt.lua
-- skipped libraries : -
--- original bytes : 1043576
--- stripped bytes : 415812
+-- original bytes : 1043829
+-- stripped bytes : 415907
-- end library merge
diff --git a/scripts/context/stubs/mswin/mtxrun.lua b/scripts/context/stubs/mswin/mtxrun.lua
index 2604294db..54fa2a924 100644
--- a/scripts/context/stubs/mswin/mtxrun.lua
+++ b/scripts/context/stubs/mswin/mtxrun.lua
@@ -15937,7 +15937,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-zip"] = package.loaded["util-zip"] or true
--- original size: 19243, stripped down to: 10700
+-- original size: 19496, stripped down to: 10858
if not modules then modules={} end modules ['util-zip']={
version=1.001,
@@ -15963,17 +15963,16 @@ local getposition=files.getposition
local band=bit32.band
local rshift=bit32.rshift
local lshift=bit32.lshift
-local decompress,calculatecrc
+local decompress,expandsize,calculatecrc
local zlibdecompress=zlib.decompress
+ local zlibexpandsize=zlib.expandsize
local zlibchecksum=zlib.crc32
- decompress=function(source,targetsize)
- local target=zlibdecompress(source,-15)
- if target then
- return target
- else
- return false,1
- end
+ decompress=function(source)
+ return zlibdecompress(source,-15)
end
+ expandsize=zlibexpandsize and function(source,targetsize)
+ return zlibexpandsize(source,targetsize,-15)
+ end or decompress
calculatecrc=function(buffer,initial)
return zlibchecksum(initial or 0,buffer)
end
@@ -16085,7 +16084,6 @@ local openzipfile,closezipfile,unzipfile,foundzipfile,getziphash,getziplist do
z.handle=nil
end
end
- local expandsize=xzip.expandsize
function unzipfile(z,filename,check)
local hash=z.hash
if not hash then
@@ -16335,19 +16333,23 @@ if xzip then
local l=list[i]
local n=l.filename
local d=unzipfile(z,n)
- local p=filejoin(path,n)
- if mkdirs(dirname(p)) then
- if steps then
- total=total+#d
- done=done+1
- if done>=step then
- done=0
- logwriter(format("%4i files of %4i done, %10i bytes, %0.3f seconds",i,count,total,osclock()-time))
+ if d then
+ local p=filejoin(path,n)
+ if mkdirs(dirname(p)) then
+ if steps then
+ total=total+#d
+ done=done+1
+ if done>=step then
+ done=0
+ logwriter(format("%4i files of %4i done, %10i bytes, %0.3f seconds",i,count,total,osclock()-time))
+ end
+ elseif verbose then
+ logwriter(n)
end
- elseif verbose then
- logwriter(n)
+ savedata(p,d)
end
- savedata(p,d)
+ else
+ logwriter(format("problem with file %s",n))
end
end
if steps then
@@ -26079,8 +26081,8 @@ end -- of closure
-- used libraries : l-bit32.lua l-lua.lua l-macro.lua l-sandbox.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-sha.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua util-soc-imp-reset.lua util-soc-imp-socket.lua util-soc-imp-copas.lua util-soc-imp-ltn12.lua util-soc-imp-mime.lua util-soc-imp-url.lua util-soc-imp-headers.lua util-soc-imp-tp.lua util-soc-imp-http.lua util-soc-imp-ftp.lua util-soc-imp-smtp.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-tpl.lua util-sbx.lua util-mrg.lua util-env.lua luat-env.lua util-zip.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua util-lib.lua luat-sta.lua luat-fmt.lua
-- skipped libraries : -
--- original bytes : 1043576
--- stripped bytes : 415812
+-- original bytes : 1043829
+-- stripped bytes : 415907
-- end library merge
diff --git a/scripts/context/stubs/unix/mtxrun b/scripts/context/stubs/unix/mtxrun
index 2604294db..54fa2a924 100644
--- a/scripts/context/stubs/unix/mtxrun
+++ b/scripts/context/stubs/unix/mtxrun
@@ -15937,7 +15937,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-zip"] = package.loaded["util-zip"] or true
--- original size: 19243, stripped down to: 10700
+-- original size: 19496, stripped down to: 10858
if not modules then modules={} end modules ['util-zip']={
version=1.001,
@@ -15963,17 +15963,16 @@ local getposition=files.getposition
local band=bit32.band
local rshift=bit32.rshift
local lshift=bit32.lshift
-local decompress,calculatecrc
+local decompress,expandsize,calculatecrc
local zlibdecompress=zlib.decompress
+ local zlibexpandsize=zlib.expandsize
local zlibchecksum=zlib.crc32
- decompress=function(source,targetsize)
- local target=zlibdecompress(source,-15)
- if target then
- return target
- else
- return false,1
- end
+ decompress=function(source)
+ return zlibdecompress(source,-15)
end
+ expandsize=zlibexpandsize and function(source,targetsize)
+ return zlibexpandsize(source,targetsize,-15)
+ end or decompress
calculatecrc=function(buffer,initial)
return zlibchecksum(initial or 0,buffer)
end
@@ -16085,7 +16084,6 @@ local openzipfile,closezipfile,unzipfile,foundzipfile,getziphash,getziplist do
z.handle=nil
end
end
- local expandsize=xzip.expandsize
function unzipfile(z,filename,check)
local hash=z.hash
if not hash then
@@ -16335,19 +16333,23 @@ if xzip then
local l=list[i]
local n=l.filename
local d=unzipfile(z,n)
- local p=filejoin(path,n)
- if mkdirs(dirname(p)) then
- if steps then
- total=total+#d
- done=done+1
- if done>=step then
- done=0
- logwriter(format("%4i files of %4i done, %10i bytes, %0.3f seconds",i,count,total,osclock()-time))
+ if d then
+ local p=filejoin(path,n)
+ if mkdirs(dirname(p)) then
+ if steps then
+ total=total+#d
+ done=done+1
+ if done>=step then
+ done=0
+ logwriter(format("%4i files of %4i done, %10i bytes, %0.3f seconds",i,count,total,osclock()-time))
+ end
+ elseif verbose then
+ logwriter(n)
end
- elseif verbose then
- logwriter(n)
+ savedata(p,d)
end
- savedata(p,d)
+ else
+ logwriter(format("problem with file %s",n))
end
end
if steps then
@@ -26079,8 +26081,8 @@ end -- of closure
-- used libraries : l-bit32.lua l-lua.lua l-macro.lua l-sandbox.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-sha.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua util-soc-imp-reset.lua util-soc-imp-socket.lua util-soc-imp-copas.lua util-soc-imp-ltn12.lua util-soc-imp-mime.lua util-soc-imp-url.lua util-soc-imp-headers.lua util-soc-imp-tp.lua util-soc-imp-http.lua util-soc-imp-ftp.lua util-soc-imp-smtp.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-tpl.lua util-sbx.lua util-mrg.lua util-env.lua luat-env.lua util-zip.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua util-lib.lua luat-sta.lua luat-fmt.lua
-- skipped libraries : -
--- original bytes : 1043576
--- stripped bytes : 415812
+-- original bytes : 1043829
+-- stripped bytes : 415907
-- end library merge
diff --git a/scripts/context/stubs/win64/mtxrun.lua b/scripts/context/stubs/win64/mtxrun.lua
index 2604294db..54fa2a924 100644
--- a/scripts/context/stubs/win64/mtxrun.lua
+++ b/scripts/context/stubs/win64/mtxrun.lua
@@ -15937,7 +15937,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["util-zip"] = package.loaded["util-zip"] or true
--- original size: 19243, stripped down to: 10700
+-- original size: 19496, stripped down to: 10858
if not modules then modules={} end modules ['util-zip']={
version=1.001,
@@ -15963,17 +15963,16 @@ local getposition=files.getposition
local band=bit32.band
local rshift=bit32.rshift
local lshift=bit32.lshift
-local decompress,calculatecrc
+local decompress,expandsize,calculatecrc
local zlibdecompress=zlib.decompress
+ local zlibexpandsize=zlib.expandsize
local zlibchecksum=zlib.crc32
- decompress=function(source,targetsize)
- local target=zlibdecompress(source,-15)
- if target then
- return target
- else
- return false,1
- end
+ decompress=function(source)
+ return zlibdecompress(source,-15)
end
+ expandsize=zlibexpandsize and function(source,targetsize)
+ return zlibexpandsize(source,targetsize,-15)
+ end or decompress
calculatecrc=function(buffer,initial)
return zlibchecksum(initial or 0,buffer)
end
@@ -16085,7 +16084,6 @@ local openzipfile,closezipfile,unzipfile,foundzipfile,getziphash,getziplist do
z.handle=nil
end
end
- local expandsize=xzip.expandsize
function unzipfile(z,filename,check)
local hash=z.hash
if not hash then
@@ -16335,19 +16333,23 @@ if xzip then
local l=list[i]
local n=l.filename
local d=unzipfile(z,n)
- local p=filejoin(path,n)
- if mkdirs(dirname(p)) then
- if steps then
- total=total+#d
- done=done+1
- if done>=step then
- done=0
- logwriter(format("%4i files of %4i done, %10i bytes, %0.3f seconds",i,count,total,osclock()-time))
+ if d then
+ local p=filejoin(path,n)
+ if mkdirs(dirname(p)) then
+ if steps then
+ total=total+#d
+ done=done+1
+ if done>=step then
+ done=0
+ logwriter(format("%4i files of %4i done, %10i bytes, %0.3f seconds",i,count,total,osclock()-time))
+ end
+ elseif verbose then
+ logwriter(n)
end
- elseif verbose then
- logwriter(n)
+ savedata(p,d)
end
- savedata(p,d)
+ else
+ logwriter(format("problem with file %s",n))
end
end
if steps then
@@ -26079,8 +26081,8 @@ end -- of closure
-- used libraries : l-bit32.lua l-lua.lua l-macro.lua l-sandbox.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-sha.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua util-soc-imp-reset.lua util-soc-imp-socket.lua util-soc-imp-copas.lua util-soc-imp-ltn12.lua util-soc-imp-mime.lua util-soc-imp-url.lua util-soc-imp-headers.lua util-soc-imp-tp.lua util-soc-imp-http.lua util-soc-imp-ftp.lua util-soc-imp-smtp.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-tpl.lua util-sbx.lua util-mrg.lua util-env.lua luat-env.lua util-zip.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua util-lib.lua luat-sta.lua luat-fmt.lua
-- skipped libraries : -
--- original bytes : 1043576
--- stripped bytes : 415812
+-- original bytes : 1043829
+-- stripped bytes : 415907
-- end library merge
diff --git a/tex/context/base/mkii/cont-new.mkii b/tex/context/base/mkii/cont-new.mkii
index c68d0bd30..1a0170924 100644
--- a/tex/context/base/mkii/cont-new.mkii
+++ b/tex/context/base/mkii/cont-new.mkii
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2019.12.06 19:45}
+\newcontextversion{2019.12.12 00:57}
%D This file is loaded at runtime, thereby providing an
%D excellent place for hacks, patches, extensions and new
diff --git a/tex/context/base/mkii/context.mkii b/tex/context/base/mkii/context.mkii
index cf49f51f0..c80c787d3 100644
--- a/tex/context/base/mkii/context.mkii
+++ b/tex/context/base/mkii/context.mkii
@@ -20,7 +20,7 @@
%D your styles an modules.
\edef\contextformat {\jobname}
-\edef\contextversion{2019.12.06 19:45}
+\edef\contextversion{2019.12.12 00:57}
%D For those who want to use this:
diff --git a/tex/context/base/mkii/mult-fr.mkii b/tex/context/base/mkii/mult-fr.mkii
index 02135bcbf..de8778e45 100644
--- a/tex/context/base/mkii/mult-fr.mkii
+++ b/tex/context/base/mkii/mult-fr.mkii
@@ -232,6 +232,7 @@
\setinterfacevariable{handwritten}{manuscript}
\setinterfacevariable{hang}{suspend}
\setinterfacevariable{hanging}{suspend}
+\setinterfacevariable{hangingboth}{hangingboth}
\setinterfacevariable{head}{tete}
\setinterfacevariable{header}{entete}
\setinterfacevariable{headintext}{headintext}
@@ -1044,6 +1045,7 @@
\setinterfaceconstant{overprint}{overprint}
\setinterfaceconstant{ownerpassword}{ownerpassword}
\setinterfaceconstant{ownnumber}{numeroproprio}
+\setinterfaceconstant{packcriterium}{packcriterium}
\setinterfaceconstant{page}{page}
\setinterfaceconstant{pageboundaries}{limitespage}
\setinterfaceconstant{pagecolor}{couleurpage}
@@ -1053,6 +1055,7 @@
\setinterfaceconstant{pageconversion}{pageconversion}
\setinterfaceconstant{pageconversionset}{pageconversionset}
\setinterfaceconstant{pageleft}{pageleft}
+\setinterfaceconstant{pagemethod}{pagemethod}
\setinterfaceconstant{pagenumber}{numeropage}
\setinterfaceconstant{pageprefix}{pageprefix}
\setinterfaceconstant{pageprefixconnector}{pageprefixconnector}
diff --git a/tex/context/base/mkiv/char-tex.lua b/tex/context/base/mkiv/char-tex.lua
index bbaf11875..b361a9a07 100644
--- a/tex/context/base/mkiv/char-tex.lua
+++ b/tex/context/base/mkiv/char-tex.lua
@@ -692,7 +692,6 @@ if not csletters then
else
mark(csletters)
-
end
lpegpatterns.csletter = utfchartabletopattern(csletters)
diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv
index 32d0ff457..a461be673 100644
--- a/tex/context/base/mkiv/cont-new.mkiv
+++ b/tex/context/base/mkiv/cont-new.mkiv
@@ -13,7 +13,7 @@
% \normalend % uncomment this to get the real base runtime
-\newcontextversion{2019.12.06 19:45}
+\newcontextversion{2019.12.12 00:57}
%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/cont-run.lua b/tex/context/base/mkiv/cont-run.lua
index 2634654fe..9a2b3db96 100644
--- a/tex/context/base/mkiv/cont-run.lua
+++ b/tex/context/base/mkiv/cont-run.lua
@@ -166,10 +166,7 @@ if sandboxing then
-- We block some potential escapes from protection.
- context [[
- \let\primitive \relax
- \let\normalprimitive\relax
- ]]
+ context [[\let\primitive\relax\let\normalprimitive\relax]]
debug = {
traceback = traceback,
diff --git a/tex/context/base/mkiv/context.mkiv b/tex/context/base/mkiv/context.mkiv
index fa33068b2..e3ee67729 100644
--- a/tex/context/base/mkiv/context.mkiv
+++ b/tex/context/base/mkiv/context.mkiv
@@ -45,7 +45,7 @@
%D {YYYY.MM.DD HH:MM} format.
\edef\contextformat {\jobname}
-\edef\contextversion{2019.12.06 19:45}
+\edef\contextversion{2019.12.12 00:57}
\edef\contextkind {beta}
%D Kind of special:
diff --git a/tex/context/base/mkiv/context.mkxl b/tex/context/base/mkiv/context.mkxl
index 38e339ec8..1a56b8e3b 100644
--- a/tex/context/base/mkiv/context.mkxl
+++ b/tex/context/base/mkiv/context.mkxl
@@ -29,7 +29,7 @@
%D {YYYY.MM.DD HH:MM} format.
\edef\contextformat {\jobname}
-\edef\contextversion{2019.12.06 19:45}
+\edef\contextversion{2019.12.12 00:57}
\edef\contextkind {beta}
%D Kind of special:
diff --git a/tex/context/base/mkiv/lpdf-fmt.lua b/tex/context/base/mkiv/lpdf-fmt.lua
index 25a72fa49..f56b56b52 100644
--- a/tex/context/base/mkiv/lpdf-fmt.lua
+++ b/tex/context/base/mkiv/lpdf-fmt.lua
@@ -81,10 +81,13 @@ local prefixes = {
cmyk = "DefaultCMYK",
}
-local formatspecification, formatname = nil, nil
+local formatspecification = nil
+local formatname = nil
-- * correspondent document wide flags (write once) needed for permission tests
+-- defaults as mt
+
local formats = utilities.storage.allocate {
version = {
external_icc_profiles = 1.4, -- 'p' in name; URL reference of output intent
@@ -95,6 +98,7 @@ local formats = utilities.storage.allocate {
optional_content = 1.5,
transparency = 1.4,
object_compression = 1.5,
+ attachments = 1.7,
},
default = {
pdf_version = 1.7, -- todo: block tex primitive
@@ -113,10 +117,11 @@ local formats = utilities.storage.allocate {
open_prepress_interface = true, -- unknown
optional_content = true, -- todo: block at lua level
transparency = true, -- todo: block at lua level
- jbig2_compression = true, -- todo: block at lua level
- jpeg2000_compression = true, -- todo: block at lua level
+ jbig2_compression = true, -- todo: block at lua level (dropped anyway)
+ jpeg2000_compression = true, -- todo: block at lua level (dropped anyway)
include_cidsets = true,
include_charsets = true,
+ attachments = true,
inject_metadata = function()
-- nothing
end
@@ -133,6 +138,7 @@ local formats = utilities.storage.allocate {
internal_icc_profiles = true,
include_cidsets = true,
include_charsets = true,
+ attachments = false,
inject_metadata = function()
addtoinfo("GTS_PDFXVersion","PDF/X-1a:2001")
injectxmpinfo("xml://rdf:RDF","<rdf:Description rdf:about='' xmlns:pdfxid='http://www.npes.org/pdfx/ns/id/'><pdfxid:GTS_PDFXVersion>PDF/X-1a:2001</pdfxid:GTS_PDFXVersion></rdf:Description>",false)
@@ -149,6 +155,7 @@ local formats = utilities.storage.allocate {
internal_icc_profiles = true,
include_cidsets = true,
include_charsets = true,
+ attachments = false,
inject_metadata = function()
addtoinfo("GTS_PDFXVersion","PDF/X-1a:2003")
injectxmpinfo("xml://rdf:RDF","<rdf:Description rdf:about='' xmlns:pdfxid='http://www.npes.org/pdfx/ns/id/'><pdfxid:GTS_PDFXVersion>PDF/X-1a:2003</pdfxid:GTS_PDFXVersion></rdf:Description>",false)
@@ -169,6 +176,7 @@ local formats = utilities.storage.allocate {
include_intents = true,
include_cidsets = true,
include_charsets = true,
+ attachments = false,
inject_metadata = function()
addtoinfo("GTS_PDFXVersion","PDF/X-3:2002")
end
@@ -189,6 +197,7 @@ local formats = utilities.storage.allocate {
jbig2_compression = true,
include_cidsets = true,
include_charsets = true,
+ attachments = false,
inject_metadata = function()
addtoinfo("GTS_PDFXVersion","PDF/X-3:2003")
end
@@ -213,6 +222,7 @@ local formats = utilities.storage.allocate {
object_compression = true,
include_cidsets = true,
include_charsets = true,
+ attachments = false,
inject_metadata = function()
injectxmpinfo("xml://rdf:RDF","<rdf:Description rdf:about='' xmlns:pdfxid='http://www.npes.org/pdfx/ns/id/'><pdfxid:GTS_PDFXVersion>PDF/X-4</pdfxid:GTS_PDFXVersion></rdf:Description>",false)
insertxmpinfo("xml://rdf:Description/xmpMM:InstanceID","<xmpMM:VersionID>1</xmpMM:VersionID>",false)
@@ -240,6 +250,7 @@ local formats = utilities.storage.allocate {
object_compression = true,
include_cidsets = true,
include_charsets = true,
+ attachments = false,
inject_metadata = function()
injectxmpinfo("xml://rdf:RDF","<rdf:Description rdf:about='' xmlns:pdfxid='http://www.npes.org/pdfx/ns/id/'><pdfxid:GTS_PDFXVersion>PDF/X-4p</pdfxid:GTS_PDFXVersion></rdf:Description>",false)
insertxmpinfo("xml://rdf:Description/xmpMM:InstanceID","<xmpMM:VersionID>1</xmpMM:VersionID>",false)
@@ -267,6 +278,7 @@ local formats = utilities.storage.allocate {
object_compression = true,
include_cidsets = true,
include_charsets = true,
+ attachments = false,
inject_metadata = function()
-- todo
end
@@ -293,6 +305,7 @@ local formats = utilities.storage.allocate {
object_compression = true,
include_cidsets = true,
include_charsets = true,
+ attachments = false,
inject_metadata = function()
-- todo
end
@@ -318,6 +331,7 @@ local formats = utilities.storage.allocate {
object_compression = true,
include_cidsets = true,
include_charsets = true,
+ attachments = false,
inject_metadata = function()
-- todo
end
@@ -334,11 +348,12 @@ local formats = utilities.storage.allocate {
calibrated_rgb_colors = true, -- unknown
cielab_colors = true, -- unknown
include_intents = true,
- forms = true, -- NEW; forms are allowed (with limitations); no JS, other restrictions are unknown (TODO)
- tagging = true, -- NEW; the only difference to PDF/A-1b
+ forms = true, -- new: forms are allowed (with limitations); no JS, other restrictions are unknown (TODO)
+ tagging = true, -- new: the only difference to PDF/A-1b
internal_icc_profiles = true,
include_cidsets = true,
include_charsets = true,
+ attachments = false,
inject_metadata = function()
injectxmpinfo("xml://rdf:RDF","<rdf:Description rdf:about='' xmlns:pdfaid='http://www.aiim.org/pdfa/ns/id/'><pdfaid:part>1</pdfaid:part><pdfaid:conformance>A</pdfaid:conformance></rdf:Description>",false)
end
@@ -359,11 +374,14 @@ local formats = utilities.storage.allocate {
internal_icc_profiles = true,
include_cidsets = true,
include_charsets = true,
+ attachments = false,
inject_metadata = function()
injectxmpinfo("xml://rdf:RDF","<rdf:Description rdf:about='' xmlns:pdfaid='http://www.aiim.org/pdfa/ns/id/'><pdfaid:part>1</pdfaid:part><pdfaid:conformance>B</pdfaid:conformance></rdf:Description>",false)
end
},
- ["pdf/a-2a"] = { -- untested; only PDF/A Attachments are allowed
+ -- Only PDF/A Attachments are allowed but we don't check the attachments
+ -- for any quality: they are just blobs.
+ ["pdf/a-2a"] = {
pdf_version = 1.7,
format_name = "pdf/a-2a",
xmp_file = "lpdf-pda.xml",
@@ -378,17 +396,74 @@ local formats = utilities.storage.allocate {
forms = true,
tagging = true,
internal_icc_profiles = true,
- transparency = true, -- NEW
+ transparency = true, -- new
jbig2_compression = true,
- jpeg2000_compression = true, -- NEW
- object_compression = true,
+ jpeg2000_compression = true, -- new
+ object_compression = true, -- new
include_cidsets = false,
include_charsets = false,
+ attachments = true,
inject_metadata = function()
injectxmpinfo("xml://rdf:RDF","<rdf:Description rdf:about='' xmlns:pdfaid='http://www.aiim.org/pdfa/ns/id/'><pdfaid:part>2</pdfaid:part><pdfaid:conformance>A</pdfaid:conformance></rdf:Description>",false)
end
},
- ["pdf/a-3a"] = { -- untested; NEW: any type of attachment is allowed
+ ["pdf/a-2b"] = {
+ pdf_version = 1.7,
+ format_name = "pdf/a-2b",
+ xmp_file = "lpdf-pda.xml",
+ gts_flag = "GTS_PDFA1",
+ gray_scale = true,
+ cmyk_colors = true,
+ rgb_colors = true,
+ spot_colors = true,
+ calibrated_rgb_colors = true, -- unknown
+ cielab_colors = true, -- unknown
+ include_intents = true,
+ forms = true,
+ tagging = false,
+ internal_icc_profiles = true,
+ transparency = true,
+ jbig2_compression = true,
+ jpeg2000_compression = true,
+ object_compression = true,
+ include_cidsets = false,
+ include_charsets = false,
+ attachments = "externa",
+ inject_metadata = function()
+ injectxmpinfo("xml://rdf:RDF","<rdf:Description rdf:about='' xmlns:pdfaid='http://www.aiim.org/pdfa/ns/id/'><pdfaid:part>2</pdfaid:part><pdfaid:conformance>B</pdfaid:conformance></rdf:Description>",false)
+ end
+ },
+ -- This is like the b variant, but it requires Unicode mapping of fonts
+ -- which we do anyway.
+ ["pdf/a-2u"] = {
+ pdf_version = 1.7,
+ format_name = "pdf/a-2u",
+ xmp_file = "lpdf-pda.xml",
+ gts_flag = "GTS_PDFA1",
+ gray_scale = true,
+ cmyk_colors = true,
+ rgb_colors = true,
+ spot_colors = true,
+ calibrated_rgb_colors = true, -- unknown
+ cielab_colors = true, -- unknown
+ include_intents = true,
+ forms = true,
+ tagging = false,
+ internal_icc_profiles = true,
+ transparency = true,
+ jbig2_compression = true,
+ jpeg2000_compression = true,
+ object_compression = true,
+ include_cidsets = false,
+ include_charsets = false,
+ attachments = "external",
+ inject_metadata = function()
+ injectxmpinfo("xml://rdf:RDF","<rdf:Description rdf:about='' xmlns:pdfaid='http://www.aiim.org/pdfa/ns/id/'><pdfaid:part>2</pdfaid:part><pdfaid:conformance>U</pdfaid:conformance></rdf:Description>",false)
+ end
+ },
+ -- Any type of attachment is allowed but we don't check the quality
+ -- of them.
+ ["pdf/a-3a"] = {
pdf_version = 1.7,
format_name = "pdf/a-3a",
xmp_file = "lpdf-pda.xml",
@@ -409,10 +484,63 @@ local formats = utilities.storage.allocate {
object_compression = true,
include_cidsets = false,
include_charsets = false,
+ attachments = "internal",
inject_metadata = function()
injectxmpinfo("xml://rdf:RDF","<rdf:Description rdf:about='' xmlns:pdfaid='http://www.aiim.org/pdfa/ns/id/'><pdfaid:part>3</pdfaid:part><pdfaid:conformance>A</pdfaid:conformance></rdf:Description>",false)
end
},
+ ["pdf/a-3b"] = {
+ pdf_version = 1.7,
+ format_name = "pdf/a-3b",
+ xmp_file = "lpdf-pda.xml",
+ gts_flag = "GTS_PDFA1",
+ gray_scale = true,
+ cmyk_colors = true,
+ rgb_colors = true,
+ spot_colors = true,
+ calibrated_rgb_colors = true, -- unknown
+ cielab_colors = true, -- unknown
+ include_intents = true,
+ forms = true,
+ tagging = false,
+ internal_icc_profiles = true,
+ transparency = true,
+ jbig2_compression = true,
+ jpeg2000_compression = true,
+ object_compression = true,
+ include_cidsets = false,
+ include_charsets = false,
+ attachments = "external",
+ inject_metadata = function()
+ injectxmpinfo("xml://rdf:RDF","<rdf:Description rdf:about='' xmlns:pdfaid='http://www.aiim.org/pdfa/ns/id/'><pdfaid:part>3</pdfaid:part><pdfaid:conformance>B</pdfaid:conformance></rdf:Description>",false)
+ end
+ },
+ ["pdf/a-3u"] = {
+ pdf_version = 1.7,
+ format_name = "pdf/a-3u",
+ xmp_file = "lpdf-pda.xml",
+ gts_flag = "GTS_PDFA1",
+ gray_scale = true,
+ cmyk_colors = true,
+ rgb_colors = true,
+ spot_colors = true,
+ calibrated_rgb_colors = true, -- unknown
+ cielab_colors = true, -- unknown
+ include_intents = true,
+ forms = true,
+ tagging = false,
+ internal_icc_profiles = true,
+ transparency = true,
+ jbig2_compression = true,
+ jpeg2000_compression = true,
+ object_compression = true,
+ include_cidsets = false,
+ include_charsets = false,
+ attachments = "external",
+ inject_metadata = function()
+ injectxmpinfo("xml://rdf:RDF","<rdf:Description rdf:about='' xmlns:pdfaid='http://www.aiim.org/pdfa/ns/id/'><pdfaid:part>3</pdfaid:part><pdfaid:conformance>U</pdfaid:conformance></rdf:Description>",false)
+ end
+ },
["pdf/ua-1"] = { -- based on PDF/A-3a, but no 'gts_flag'
pdf_version = 1.7,
format_name = "pdf/ua-1",
@@ -433,6 +561,7 @@ local formats = utilities.storage.allocate {
object_compression = true,
include_cidsets = true,
include_charsets = true, --- really ?
+ attachments = true,
inject_metadata = function()
injectxmpinfo("xml://rdf:RDF","<rdf:Description rdf:about='' xmlns:pdfaid='http://www.aiim.org/pdfa/ns/id/'><pdfaid:part>3</pdfaid:part><pdfaid:conformance>A</pdfaid:conformance></rdf:Description>",false)
injectxmpinfo("xml://rdf:RDF","<rdf:Description rdf:about='' xmlns:pdfuaid='http://www.aiim.org/pdfua/ns/id/'><pdfuaid:part>1</pdfuaid:part></rdf:Description>",false)
@@ -626,10 +755,16 @@ local function handledefaultprofile(s,spec) -- specification
end
end
-local loadedintents, intents = { }, pdfarray()
+local loadedintents = { }
+local intents = pdfarray()
local function handleoutputintent(s,spec)
- local name, url, filename, id, outputcondition, info = s.info or s.filename or "", s.url or "", s.filename or "", s.id or "", s.outputcondition or "", s.info or ""
+ local url = s.url or ""
+ local filename = s.filename or ""
+ local name = s.info or filename
+ local id = s.id or ""
+ local outputcondition = s.outputcondition or ""
+ local info = s.info or ""
if name == "" or id == "" then
report_backend("error in output intent specification: %s",serialize(s,false))
elseif not loadedintents[name] then
@@ -771,8 +906,13 @@ function codeinjections.setformat(s)
-- cid sets can always omitted now, but those validators still complain so let's
-- for a while keep it (for luigi):
--
- lpdf.setomitcidset (formatspecification.include_cidsets == false and 1 or 0)
- lpdf.setomitcharset(formatspecification.include_charsets == false and 1 or 0)
+ lpdf.setomitcidset (formatspecification.include_cidsets == false and 1 or 0) -- why a number
+ lpdf.setomitcharset(formatspecification.include_charsets == false and 1 or 0) -- why a number
+ --
+ -- maybe block by pdf version
+ --
+ codeinjections.settaggingsupport(formatspecification.tagging)
+ codeinjections.setattachmentsupport(formatspecification.attachments)
--
-- context.setupcolors { -- not this way
-- cmyk = spec.cmyk_colors and variables.yes or variables.no,
@@ -847,6 +987,10 @@ function codeinjections.getformatoption(key)
return formatspecification and formatspecification[key]
end
+-- function codeinjections.getformatspecification()
+-- return formatspecification
+-- end
+
function codeinjections.supportedformats()
local t = { }
for k, v in sortedhash(formats.data) do
diff --git a/tex/context/base/mkiv/lpdf-tag.lua b/tex/context/base/mkiv/lpdf-tag.lua
index d99e09243..61a6999c1 100644
--- a/tex/context/base/mkiv/lpdf-tag.lua
+++ b/tex/context/base/mkiv/lpdf-tag.lua
@@ -26,6 +26,7 @@ local nodeinjections = backends.pdf.nodeinjections
local codeinjections = backends.pdf.codeinjections
local enableaction = nodes.tasks.enableaction
+local disableaction = nodes.tasks.disableaction
local pdfdictionary = lpdf.dictionary
local pdfarray = lpdf.array
@@ -695,13 +696,36 @@ end
-- this belongs elsewhere (export is not pdf related)
-function codeinjections.enabletags(tg,lb)
- structures.tags.handler = nodeinjections.addtags
- enableaction("shipouts","structures.tags.handler")
- enableaction("shipouts","nodes.handlers.accessibility")
- enableaction("math","noads.handlers.tags")
- -- maybe also textblock
- if trace_tags then
- report_tags("enabling structure tags")
+local permitted = true
+local enabled = false
+
+function codeinjections.settaggingsupport(option)
+ if option == false then
+ if enabled then
+ disableaction("shipouts","structures.tags.handler")
+ disableaction("shipouts","nodes.handlers.accessibility") -- maybe not this one
+ disableaction("math","noads.handlers.tags")
+ enabled = false
+ end
+ if permitted then
+ if trace_tags then
+ report_tags("blocking structure tags")
+ end
+ permitted = false
+ end
+ end
+end
+
+function codeinjections.enabletags()
+ if permitted and not enabled then
+ structures.tags.handler = nodeinjections.addtags
+ enableaction("shipouts","structures.tags.handler")
+ enableaction("shipouts","nodes.handlers.accessibility")
+ enableaction("math","noads.handlers.tags")
+ -- maybe also textblock
+ if trace_tags then
+ report_tags("enabling structure tags")
+ end
+ enabled = true
end
end
diff --git a/tex/context/base/mkiv/lpdf-wid.lua b/tex/context/base/mkiv/lpdf-wid.lua
index a538a9ad2..96b36324f 100644
--- a/tex/context/base/mkiv/lpdf-wid.lua
+++ b/tex/context/base/mkiv/lpdf-wid.lua
@@ -222,6 +222,25 @@ local referenced = { }
local ignorereferenced = true -- fuzzy pdf spec .. twice in attachment list, can become an option
local tobesavedobjrefs = utilities.storage.allocate()
local collectedobjrefs = utilities.storage.allocate()
+local permitted = true
+local enabled = true
+local embedded = true
+
+function codeinjections.setattachmentsupport(option)
+ if option == false then
+ permitted = false
+ enabled = false
+ embedded = true
+ elseif not permitted then
+ -- already dealt with
+ elseif option == "internal" or option == true then
+ enabled = true
+ embedded = true
+ elseif option == "external" then
+ enabled = true
+ embedded = false
+ end
+end
local fileobjreferences = {
collected = collectedobjrefs,
@@ -238,7 +257,7 @@ end
job.register('job.fileobjreferences.collected', tobesavedobjrefs, initializer)
local function flushembeddedfiles()
- if next(filestreams) then
+ if enabled and next(filestreams) then
local e = pdfarray()
for tag, reference in sortedhash(filestreams) do
if not reference then
@@ -259,178 +278,182 @@ end
lpdf.registerdocumentfinalizer(flushembeddedfiles,"embeddedfiles")
function codeinjections.embedfile(specification)
- local data = specification.data
- local filename = specification.file
- local name = specification.name or ""
- local title = specification.title or ""
- local hash = specification.hash or filename
- local keepdir = specification.keepdir -- can change
- local usedname = specification.usedname
- local filetype = specification.filetype
- local compress = specification.compress
- local mimetype = specification.mimetype or specification.mime
- if filename == "" then
- filename = nil
- end
- if compress == nil then
- compress = true
- end
- if data then
- local r = filestreams[hash]
- if r == false then
- return nil
- elseif r then
- return r
- elseif not filename then
- filename = specification.tag
- if not filename or filename == "" then
- filename = specification.registered
+ if enabled then
+ local data = specification.data
+ local filename = specification.file
+ local name = specification.name or ""
+ local title = specification.title or ""
+ local hash = specification.hash or filename
+ local keepdir = specification.keepdir -- can change
+ local usedname = specification.usedname
+ local filetype = specification.filetype
+ local compress = specification.compress
+ local mimetype = specification.mimetype or specification.mime
+ if filename == "" then
+ filename = nil
+ end
+ if compress == nil then
+ compress = true
+ end
+ if data then
+ local r = filestreams[hash]
+ if r == false then
+ return nil
+ elseif r then
+ return r
+ elseif not filename then
+ filename = specification.tag
+ if not filename or filename == "" then
+ filename = specification.registered
+ end
+ if not filename or filename == "" then
+ filename = hash
+ end
end
- if not filename or filename == "" then
- filename = hash
+ else
+ if not filename then
+ return nil
+ end
+ local r = filestreams[hash]
+ if r == false then
+ return nil
+ elseif r then
+ return r
+ else
+ local foundname = resolvers.findbinfile(filename) or ""
+ if foundname == "" or not lfs.isfile(foundname) then
+ filestreams[filename] = false
+ return nil
+ else
+ specification.foundname = foundname
+ end
end
end
- else
- if not filename then
- return nil
+ -- needs to cleaned up:
+ usedname = usedname ~= "" and usedname or filename or name
+ local basename = keepdir == true and usedname or file.basename(usedname)
+ local basename = gsub(basename,"%./","")
+ local savename = name ~= "" and name or basename
+ if not filetype or filetype == "" then
+ filetype = name and (filename and file.suffix(filename)) or "txt"
end
- local r = filestreams[hash]
- if r == false then
- return nil
- elseif r then
- return r
+ savename = file.addsuffix(savename,filetype) -- type is mandate for proper working in viewer
+ local a = pdfdictionary {
+ Type = pdfconstant("EmbeddedFile"),
+ Subtype = mimetype and mimetype ~= "" and pdfconstant(mimetype) or nil,
+ }
+ local f
+ if data then
+ f = pdfflushstreamobject(data,a)
+ specification.data = true -- signal that still data but already flushed
else
+ local foundname = specification.foundname or filename
+ local attributes = lfs.attributes(foundname)
+ if attributes then
+ a.Params = {
+ Size = attributes.size,
+ ModDate = lpdf.pdftimestamp(attributes.modification),
+ }
+ end
+ f = pdfflushstreamfileobject(foundname,a,compress)
+ end
+ local d = pdfdictionary {
+ Type = pdfconstant("Filespec"),
+ F = pdfstring(savename),
+ -- UF = pdfstring(savename),
+ UF = pdfunicode(savename),
+ EF = pdfdictionary { F = pdfreference(f) },
+ Desc = title ~= "" and pdfunicode(title) or nil,
+ AFRelationship = pdfconstant("Unspecified"), -- Supplement, Data, Source, Alternative, Data
+ }
+ local r = pdfreference(pdfflushobject(d))
+ filestreams[hash] = r
+ return r
+ end
+end
+
+function nodeinjections.attachfile(specification)
+ if enabled then
+ local registered = specification.registered or "<unset>"
+ local data = specification.data
+ local hash
+ local filename
+ if data then
+ hash = md5.HEX(data)
+ else
+ filename = specification.file
+ if not filename or filename == "" then
+ report_attachment("no file specified, using registered %a instead",registered)
+ filename = registered
+ specification.file = registered
+ end
local foundname = resolvers.findbinfile(filename) or ""
if foundname == "" or not lfs.isfile(foundname) then
- filestreams[filename] = false
+ report_attachment("invalid filename %a, ignoring registered %a",filename,registered)
return nil
else
specification.foundname = foundname
end
+ hash = filename
end
- end
- -- needs to cleaned up:
- usedname = usedname ~= "" and usedname or filename or name
- local basename = keepdir == true and usedname or file.basename(usedname)
- local basename = gsub(basename,"%./","")
- local savename = name ~= "" and name or basename
- if not filetype or filetype == "" then
- filetype = name and (filename and file.suffix(filename)) or "txt"
- end
- savename = file.addsuffix(savename,filetype) -- type is mandate for proper working in viewer
- local a = pdfdictionary {
- Type = pdfconstant("EmbeddedFile"),
- Subtype = mimetype and mimetype ~= "" and pdfconstant(mimetype) or nil,
- }
- local f
- if data then
- f = pdfflushstreamobject(data,a)
- specification.data = true -- signal that still data but already flushed
- else
- local foundname = specification.foundname or filename
- local attributes = lfs.attributes(foundname)
- if attributes then
- a.Params = {
- Size = attributes.size,
- ModDate = lpdf.pdftimestamp(attributes.modification),
- }
+ specification.hash = hash
+ nofattachments = nofattachments + 1
+ local registered = specification.registered or ""
+ local title = specification.title or ""
+ local subtitle = specification.subtitle or ""
+ local author = specification.author or ""
+ if registered == "" then
+ registered = filename
end
- f = pdfflushstreamfileobject(foundname,a,compress)
- end
- local d = pdfdictionary {
- Type = pdfconstant("Filespec"),
- F = pdfstring(savename),
- -- UF = pdfstring(savename),
- UF = pdfunicode(savename),
- EF = pdfdictionary { F = pdfreference(f) },
- Desc = title ~= "" and pdfunicode(title) or nil,
- AFRelationship = pdfconstant("Unspecified"), -- Supplement, Data, Source, Alternative, Data
- }
- local r = pdfreference(pdfflushobject(d))
- filestreams[hash] = r
- return r
-end
-
-function nodeinjections.attachfile(specification)
- local registered = specification.registered or "<unset>"
- local data = specification.data
- local hash
- local filename
- if data then
- hash = md5.HEX(data)
- else
- filename = specification.file
- if not filename or filename == "" then
- report_attachment("no file specified, using registered %a instead",registered)
- filename = registered
- specification.file = registered
+ if author == "" and title ~= "" then
+ author = title
+ title = filename or ""
+ end
+ if author == "" then
+ author = filename or "<unknown>"
+ end
+ if title == "" then
+ title = registered
end
- local foundname = resolvers.findbinfile(filename) or ""
- if foundname == "" or not lfs.isfile(foundname) then
- report_attachment("invalid filename %a, ignoring registered %a",filename,registered)
- return nil
+ local aref = attachments[registered]
+ if not aref then
+ aref = codeinjections.embedfile(specification)
+ attachments[registered] = aref
+ end
+ local reference = specification.reference
+ if reference and aref then
+ tobesavedobjrefs[reference] = aref[1]
+ end
+ if not aref then
+ report_attachment("skipping attachment, registered %a",registered)
+ -- already reported
+ elseif specification.method == v_hidden then
+ referenced[hash] = "hidden"
else
- specification.foundname = foundname
+ referenced[hash] = "annotation"
+ local name, appearance = analyzesymbol(specification.symbol,attachment_symbols)
+ local d = pdfdictionary {
+ Subtype = pdfconstant("FileAttachment"),
+ FS = aref,
+ Contents = pdfunicode(title),
+ Name = name,
+ NM = pdfstring("attachment:"..nofattachments),
+ T = author ~= "" and pdfunicode(author) or nil,
+ Subj = subtitle ~= "" and pdfunicode(subtitle) or nil,
+ C = analyzecolor(specification.colorvalue,specification.colormodel),
+ CA = analyzetransparency(specification.transparencyvalue),
+ AP = appearance,
+ OC = analyzelayer(specification.layer),
+ }
+ local width = specification.width or 0
+ local height = specification.height or 0
+ local depth = specification.depth or 0
+ local box = hpack_node(nodeinjections.annotation(width,height,depth,d()))
+ box.width = width
+ box.height = height
+ box.depth = depth
+ return box
end
- hash = filename
- end
- specification.hash = hash
- nofattachments = nofattachments + 1
- local registered = specification.registered or ""
- local title = specification.title or ""
- local subtitle = specification.subtitle or ""
- local author = specification.author or ""
- if registered == "" then
- registered = filename
- end
- if author == "" and title ~= "" then
- author = title
- title = filename or ""
- end
- if author == "" then
- author = filename or "<unknown>"
- end
- if title == "" then
- title = registered
- end
- local aref = attachments[registered]
- if not aref then
- aref = codeinjections.embedfile(specification)
- attachments[registered] = aref
- end
- local reference = specification.reference
- if reference and aref then
- tobesavedobjrefs[reference] = aref[1]
- end
- if not aref then
- report_attachment("skipping attachment, registered %a",registered)
- -- already reported
- elseif specification.method == v_hidden then
- referenced[hash] = "hidden"
- else
- referenced[hash] = "annotation"
- local name, appearance = analyzesymbol(specification.symbol,attachment_symbols)
- local d = pdfdictionary {
- Subtype = pdfconstant("FileAttachment"),
- FS = aref,
- Contents = pdfunicode(title),
- Name = name,
- NM = pdfstring("attachment:"..nofattachments),
- T = author ~= "" and pdfunicode(author) or nil,
- Subj = subtitle ~= "" and pdfunicode(subtitle) or nil,
- C = analyzecolor(specification.colorvalue,specification.colormodel),
- CA = analyzetransparency(specification.transparencyvalue),
- AP = appearance,
- OC = analyzelayer(specification.layer),
- }
- local width = specification.width or 0
- local height = specification.height or 0
- local depth = specification.depth or 0
- local box = hpack_node(nodeinjections.annotation(width,height,depth,d()))
- box.width = width
- box.height = height
- box.depth = depth
- return box
end
end
@@ -438,6 +461,8 @@ function codeinjections.attachmentid(filename) -- not used in context
return filestreams[filename]
end
+-- Comments
+
local nofcomments = 0
local usepopupcomments = false
diff --git a/tex/context/base/mkiv/luat-cnf.lua b/tex/context/base/mkiv/luat-cnf.lua
index 88e7a7353..ebda6e8cd 100644
--- a/tex/context/base/mkiv/luat-cnf.lua
+++ b/tex/context/base/mkiv/luat-cnf.lua
@@ -61,16 +61,34 @@ function texconfig.init()
libraries = { -- we set it here as we want libraries also 'indexed'
basiclua = {
- "string", "table", "coroutine", "debug", "file", "io", "lpeg", "math", "os", "package", "bit32",
+ -- always
+ "string", "table", "coroutine", "debug", "file", "io", "lpeg", "math", "os", "package",
+ -- bonus
+ "bit32", "utf8",
},
- basictex = { -- noad
- "callback", "font", "img", "lang", "lua", "node", "pdf", "status", "tex", "texconfig", "texio", "token",
+ basictex = {
+ -- always
+ "callback", "font", "lang", "lua", "node", "status", "tex", "texconfig", "texio", "token",
+ -- not in luametatex
+ "img", "pdf",
},
extralua = {
- "gzip", "zip", "zlib", "lfs", "ltn12", "mime", "socket", "md5", "fio", "unicode", "utf",
+ -- not in luametatex
+ "unicode", "utf", "gzip", "zip", "zlib",
+ -- in luametatex
+ "xzip", "xmath", "xcomplex", "basexx",
+ -- maybe some day in luametatex
+ "lz4", "lzo",
+ -- always (mime can go)
+ "lfs","socket", "mime", "md5", "sha2", "fio", "sio",
},
extratex = {
- "pdfe", "kpse", "mplib",
+ -- not in luametatex
+ "kpse",
+ -- always
+ "pdfe", "mplib",
+ -- in luametatex
+ "pdfdecode", "pngdecode",
},
obsolete = {
"epdf",
@@ -123,16 +141,24 @@ function texconfig.init()
-- shortcut and helper
- local setbytecode = lua.setbytecode
- local getbytecode = lua.getbytecode
+ local setbytecode = lua.setbytecode
+ local getbytecode = lua.getbytecode
+ local callbytecode = lua.callbytecode or function(i)
+ local b = getbytecode(i)
+ if b then
+ b()
+ return true
+ else
+ return false
+ end
+ end
local function init(start)
local i = start
local t = os.clock()
while true do
- local b = getbytecode(i)
+ local b = callbytecode(i)
if b then
- b() ;
setbytecode(i,nil) ;
i = i + 1
else
diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf
index 251d59539..9eaf11f05 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 24ef5be72..b30aaa78e 100644
--- a/tex/context/base/mkiv/status-lua.pdf
+++ b/tex/context/base/mkiv/status-lua.pdf
Binary files differ
diff --git a/tex/context/base/mkiv/syst-ini.mkiv b/tex/context/base/mkiv/syst-ini.mkiv
index c8de22b28..0dd1fe29c 100644
--- a/tex/context/base/mkiv/syst-ini.mkiv
+++ b/tex/context/base/mkiv/syst-ini.mkiv
@@ -97,13 +97,12 @@
%D Initialization of primitives.
\directlua {
- local baseprimitives = tex.extraprimitives("core","tex")
- local moreprimitives = tex.extraprimitives("etex","luatex")
+ local primitives = tex.extraprimitives("core","tex","etex","luatex")
- tex.enableprimitives("",moreprimitives)
+ % table.sort(primitives)
- tex.enableprimitives("normal",baseprimitives)
- tex.enableprimitives("normal",moreprimitives)
+ tex.enableprimitives("", primitives)
+ tex.enableprimitives("normal",primitives)
function tex.enableprimitives() end
}
diff --git a/tex/context/base/mkiv/syst-ini.mkxl b/tex/context/base/mkiv/syst-ini.mkxl
index 0befec48c..0ea381d07 100644
--- a/tex/context/base/mkiv/syst-ini.mkxl
+++ b/tex/context/base/mkiv/syst-ini.mkxl
@@ -94,18 +94,48 @@
\chardef\statuswrite 128
-%D Initialization of primitives.
+%D First we need to initialization the primitives. Because \CONTEXT\ is already a
+%D pretty old macro package, we have a couple of issues with respect to primitives.
+%D The \ETEX\ engine added a few as did \PDFTEX. The \LUATEX\ engine added even
+%D more. This means that there can be a potential clash between primitives and
+%D existing macros. The most noticeable ones are:
+%D
+%D \starttyping
+%D \protected
+%D \expanded
+%D \unexpanded
+%D \stoptyping
+%D
+%D Because we had macros like that before the primitives showed up. The protection
+%D related macros were there before we even knew about extensions to the engine.
+%D When the expansion related ones were introduced, we originally came up with
+%D different names but due to requests we used the current names, somethng that in
+%D retrospect was a bad idea: they should have gotten different names in \LUATEX, if
+%D only because at that time only \CONTEXT\ was using them in rolling releases.
+%D Anyway, we're now stuck with this situation, and it means that one should use the
+%D \type {\normal...} variants in low level code:
+%D
+%D \starttyping
+%D \normalexpanded
+%D \normalprotected
+%D \normalunexpanded
+%D \stoptyping
+%D
+%D In the end not using different names in \LUATEX\ for these kind of backfires. It
+%D makes not much sense to fix this in \LUAMETATEX\ because we're now to long on the
+%D road. It is actually the reason why we have the option in \LUATEX\ to alias all
+%D primitives in one go using a prefix. Actually this trick could be used to recover
+%D a primitive meaning: just enable it with some prefix and \type {\let} the
+%D original to that. But \unknown\ we prevent that trick below.
+%D
+%D The code below differs from \LUATEX: in \LUAMETATEX\ all primitives are already
+%D available; it cannot limit itself to being \TEX\ or \ETEX. It could not do that
+%D anyway because there are differences (no backend, to mention one).
\directlua {
- local baseprimitives = tex.extraprimitives("core","tex")
- local moreprimitives = tex.extraprimitives("etex","luatex")
-
- tex.enableprimitives("",moreprimitives)
-
- tex.enableprimitives("normal",baseprimitives)
- tex.enableprimitives("normal",moreprimitives)
-
- function tex.enableprimitives() end
+ local primitives = tex.extraprimitives() % "core","tex","etex","luatex"
+ tex.enableprimitives("normal",primitives) % could default to everything
+ function tex.enableprimitives() end % so we kind of protect what's there
}
\def\space{ }
diff --git a/tex/context/base/mkiv/util-zip.lua b/tex/context/base/mkiv/util-zip.lua
index 33f8d8a7e..f87e391a1 100644
--- a/tex/context/base/mkiv/util-zip.lua
+++ b/tex/context/base/mkiv/util-zip.lua
@@ -34,7 +34,7 @@ local band = bit32.band
local rshift = bit32.rshift
local lshift = bit32.lshift
-local decompress, calculatecrc
+local decompress, expandsize, calculatecrc
-- if flate then
--
@@ -44,17 +44,17 @@ local decompress, calculatecrc
-- else
local zlibdecompress = zlib.decompress
+ local zlibexpandsize = zlib.expandsize
local zlibchecksum = zlib.crc32
- decompress = function(source,targetsize)
- local target = zlibdecompress(source,-15)
- if target then
- return target
- else
- return false, 1
- end
+ decompress = function(source)
+ return zlibdecompress(source,-15) -- auto
end
+ expandsize = zlibexpandsize and function(source,targetsize)
+ return zlibexpandsize(source,targetsize,-15) -- auto
+ end or decompress
+
calculatecrc = function(buffer,initial)
return zlibchecksum(initial or 0,buffer)
end
@@ -183,8 +183,6 @@ local openzipfile, closezipfile, unzipfile, foundzipfile, getziphash, getziplist
end
end
- local expandsize = xzip.expandsize
-
function unzipfile(z,filename,check)
local hash = z.hash
if not hash then
@@ -483,19 +481,23 @@ if xzip then -- flate then do
local l = list[i]
local n = l.filename
local d = unzipfile(z,n) -- true for check
- local p = filejoin(path,n)
- if mkdirs(dirname(p)) then
- if steps then
- total = total + #d
- done = done + 1
- if done >= step then
- done = 0
- logwriter(format("%4i files of %4i done, %10i bytes, %0.3f seconds",i,count,total,osclock()-time))
+ if d then
+ local p = filejoin(path,n)
+ if mkdirs(dirname(p)) then
+ if steps then
+ total = total + #d
+ done = done + 1
+ if done >= step then
+ done = 0
+ logwriter(format("%4i files of %4i done, %10i bytes, %0.3f seconds",i,count,total,osclock()-time))
+ end
+ elseif verbose then
+ logwriter(n)
end
- elseif verbose then
- logwriter(n)
+ savedata(p,d)
end
- savedata(p,d)
+ else
+ logwriter(format("problem with file %s",n))
end
end
if steps then
diff --git a/tex/context/interface/mkii/keys-fr.xml b/tex/context/interface/mkii/keys-fr.xml
index c1f7b970b..8ba741a60 100644
--- a/tex/context/interface/mkii/keys-fr.xml
+++ b/tex/context/interface/mkii/keys-fr.xml
@@ -235,6 +235,7 @@
<cd:variable name='handwritten' value='manuscript'/>
<cd:variable name='hang' value='suspend'/>
<cd:variable name='hanging' value='suspend'/>
+ <cd:variable name='hangingboth' value='hangingboth'/>
<cd:variable name='head' value='tete'/>
<cd:variable name='header' value='entete'/>
<cd:variable name='headintext' value='headintext'/>
@@ -1050,6 +1051,7 @@
<cd:constant name='overprint' value='overprint'/>
<cd:constant name='ownerpassword' value='ownerpassword'/>
<cd:constant name='ownnumber' value='numeroproprio'/>
+ <cd:constant name='packcriterium' value='packcriterium'/>
<cd:constant name='page' value='page'/>
<cd:constant name='pageboundaries' value='limitespage'/>
<cd:constant name='pagecolor' value='couleurpage'/>
@@ -1059,6 +1061,7 @@
<cd:constant name='pageconversion' value='pageconversion'/>
<cd:constant name='pageconversionset' value='pageconversionset'/>
<cd:constant name='pageleft' value='pageleft'/>
+ <cd:constant name='pagemethod' value='pagemethod'/>
<cd:constant name='pagenumber' value='numeropage'/>
<cd:constant name='pageprefix' value='pageprefix'/>
<cd:constant name='pageprefixconnector' value='pageprefixconnector'/>
diff --git a/tex/context/interface/mkiv/i-context.pdf b/tex/context/interface/mkiv/i-context.pdf
index e38499187..1cf1043ce 100644
--- a/tex/context/interface/mkiv/i-context.pdf
+++ b/tex/context/interface/mkiv/i-context.pdf
Binary files differ
diff --git a/tex/context/interface/mkiv/i-readme.pdf b/tex/context/interface/mkiv/i-readme.pdf
index bdfaa028f..9cc078b86 100644
--- a/tex/context/interface/mkiv/i-readme.pdf
+++ b/tex/context/interface/mkiv/i-readme.pdf
Binary files differ
diff --git a/tex/context/sample/third/dyrynk-cz.tex b/tex/context/sample/third/dyrynk-cz.tex
index e12a228b9..2a00c2348 100644
--- a/tex/context/sample/third/dyrynk-cz.tex
+++ b/tex/context/sample/third/dyrynk-cz.tex
@@ -5,9 +5,9 @@ slabou většiny našich knih. Často až překvapí rozpor mezi péčí, kterou
věnoval umělec výzdobě knihy, a ledabylostí, s jakou ji tiskárna zhotovila.
Bývá to podivná harmonie: výzdoba umělecká a sazba i tisk jako denních
novin. Nejsou to malé závody, jichž výrobkům lze vytknouti tuto řemeslnou
-chybu, i přední veliké tiskárny zhotovují takto >>krásné<< knihy. Stačí
-prohlédnouti si podrobněji reprodukce v tomto díle, abychom se přesvědčili,
-že to tvrzení není přehnané.
+chybu, i přední veliké tiskárny zhotovují takto \quotation{krásné} knihy.
+Stačí prohlédnouti si podrobněji reprodukce v tomto díle, abychom se
+přesvědčili, že to tvrzení není přehnané.
Přece však lze pozorovati potěšitelný obrat k lepšímu: některé české
knihtiskárny se chlubí už správně vysazenými a dobře vytištěnými knihami.
diff --git a/tex/context/sample/third/dyrynk-vlnka-cz.tex b/tex/context/sample/third/dyrynk-vlnka-cz.tex
index 1d4df1e49..f0a385729 100644
--- a/tex/context/sample/third/dyrynk-vlnka-cz.tex
+++ b/tex/context/sample/third/dyrynk-vlnka-cz.tex
@@ -1,4 +1,3 @@
-
Čeho jsem si zvlášť všímal při prohlížení knih, je typografické jejich
zhotovení, technické provedení knihtiskařem, které po mém soudu je základem
dobré knižní úpravy. A~tu nelze upřít, že řemeslná stránka je dosud stránkou
@@ -6,9 +5,9 @@ slabou většiny našich knih. Často až překvapí rozpor mezi péčí, kterou
věnoval umělec výzdobě knihy, a~ledabylostí, s~jakou ji tiskárna zhotovila.
Bývá to podivná harmonie: výzdoba umělecká a~sazba i~tisk jako denních
novin. Nejsou to malé závody, jichž výrobkům lze vytknouti tuto řemeslnou
-chybu, i~přední veliké tiskárny zhotovují takto >>krásné<< knihy. Stačí
-prohlédnouti si podrobněji reprodukce v~tomto díle, abychom se přesvědčili,
-že to tvrzení není přehnané.
+chybu, i~přední veliké tiskárny zhotovují takto \quotation{krásné} knihy.
+Stačí prohlédnouti si podrobněji reprodukce v~tomto díle, abychom se
+přesvědčili, že to tvrzení není přehnané.
Přece však lze pozorovati potěšitelný obrat k~lepšímu: některé české
knihtiskárny se chlubí už správně vysazenými a~dobře vytištěnými knihami.
diff --git a/tex/context/sample/third/hviezdoslav-sk.tex b/tex/context/sample/third/hviezdoslav-sk.tex
new file mode 100644
index 000000000..7c4482417
--- /dev/null
+++ b/tex/context/sample/third/hviezdoslav-sk.tex
@@ -0,0 +1,39 @@
+Pozdravujem vás, lesy, hory,
+z tej duše pozdravujem vás!
+Čo mrcha svet v nás skvári, zmorí,
+zrak jeho urknul, zmámila
+lož, ohlušila presila:
+vy k žitiu privediete zas,
+vy vzkriesite, vy zotavíte,
+z jatrivých vyliečite rán,
+v opravdu priamom, bratskom cite
+otvoriac lono dokorán,
+a srdečnosť kde odveká,
+kde nikdy nevyspela zrada,
+bez dotazu, kto on, čo hľadá,
+na lono to, hľa, v objem sladký
+ramenom láskyplnej matky
+pritúliac verne človeka\dots
+Len okamih tam pobudnutia:
+už mŕtvie bôľ, už slabnú putá,
+zrak čistí sa, tlak voľneje,
+i oživujú nádeje;
+len jeden pokyn, zášum lesný,
+len jeden horskej riavy skok:
+a duša už sa ladí k piesni,
+tkne sa jej bičík prečudesný --
+a srdce hupká vozvysok;
+len jedno orla skolotanie,
+len jeden švihot sokola,
+prez horu mužné zahvízdanie,
+na holiach jeden záblesk vatry:
+a nás už chváce povoľa,
+duch už sa zažal, už sa jatrí,
+plamenným krídlom šibe hor’,
+jak v nebo naspäť meteor;
+len chvíľka, ako vzdušný vlas
+čo preletí nám ponad hlavu --
+a už ju máme, myseľ hravú:
+zmladenej duše prez dúbravu
+tak strie sa, ako dúhy pás\dots
+\dots Z tej duše pozdravujem vás!
diff --git a/tex/context/sample/third/hviezdoslav-vlnka-sk.tex b/tex/context/sample/third/hviezdoslav-vlnka-sk.tex
new file mode 100644
index 000000000..5602be70f
--- /dev/null
+++ b/tex/context/sample/third/hviezdoslav-vlnka-sk.tex
@@ -0,0 +1,39 @@
+Pozdravujem vás, lesy, hory,
+z~tej duše pozdravujem vás!
+Čo mrcha svet v~nás skvári, zmorí,
+zrak jeho urknul, zmámila
+lož, ohlušila presila:
+vy k~žitiu privediete zas,
+vy vzkriesite, vy zotavíte,
+z~jatrivých vyliečite rán,
+v~opravdu priamom, bratskom cite
+otvoriac lono dokorán,
+a~srdečnosť kde odveká,
+kde nikdy nevyspela zrada,
+bez dotazu, kto on, čo hľadá,
+na lono to, hľa, v~objem sladký
+ramenom láskyplnej matky
+pritúliac verne človeka\dots
+Len okamih tam pobudnutia:
+už mŕtvie bôľ, už slabnú putá,
+zrak čistí sa, tlak voľneje,
+i~oživujú nádeje;
+len jeden pokyn, zášum lesný,
+len jeden horskej riavy skok:
+a~duša už sa ladí k~piesni,
+tkne sa jej bičík prečudesný --
+a~srdce hupká vozvysok;
+len jedno orla skolotanie,
+len jeden švihot sokola,
+prez horu mužné zahvízdanie,
+na holiach jeden záblesk vatry:
+a~nás už chváce povoľa,
+duch už sa zažal, už sa jatrí,
+plamenným krídlom šibe hor’,
+jak v~nebo naspäť meteor;
+len chvíľka, ako vzdušný vlas
+čo preletí nám ponad hlavu --
+a~už ju máme, myseľ hravú:
+zmladenej duše prez dúbravu
+tak strie sa, ako dúhy pás\dots
+\dots Z~tej duše pozdravujem vás!
diff --git a/tex/context/sample/third/jaros-sk.tex b/tex/context/sample/third/jaros-sk.tex
new file mode 100644
index 000000000..bd2952501
--- /dev/null
+++ b/tex/context/sample/third/jaros-sk.tex
@@ -0,0 +1,5 @@
+Ja viem prečo si ty tak zrazu ochorel, na spoveď sa ti nechce! Či chce alebo
+nie, to je teraz vedľajšie. Sama vidíš, že kľačať nemôžem \dots -- Hanbu ti
+do kostola robiť nepôjdem, ešte by som niekoho postojačky urazil \dots -- A
+s kým pôjdem na spoveď, vari sama? -- Keď nemáš s kým ísť, zober si psa. Aj
+jemu sa možno treba vyspovedať. Nebreše, beťár, ako treba \dots
diff --git a/tex/context/sample/third/jaros-vlnka-sk.tex b/tex/context/sample/third/jaros-vlnka-sk.tex
new file mode 100644
index 000000000..ea564c3de
--- /dev/null
+++ b/tex/context/sample/third/jaros-vlnka-sk.tex
@@ -0,0 +1,5 @@
+Ja viem prečo si ty tak zrazu ochorel, na spoveď sa ti nechce! Či chce alebo
+nie, to je teraz vedľajšie. Sama vidíš, že kľačať nemôžem \dots -- Hanbu ti
+do kostola robiť nepôjdem, ešte by som niekoho postojačky urazil \dots --
+A~s~kým pôjdem na spoveď, vari sama? -- Keď nemáš s~kým ísť, zober si psa. Aj
+jemu sa možno treba vyspovedať. Nebreše, beťár, ako treba \dots
diff --git a/tex/context/sample/third/kollar-cz.tex b/tex/context/sample/third/kollar-cz.tex
index 5a4f63695..7382dd102 100644
--- a/tex/context/sample/third/kollar-cz.tex
+++ b/tex/context/sample/third/kollar-cz.tex
@@ -1,4 +1,3 @@
-
Aj zde leží zem ta před okem mým slzy ronícím,
někdy kolébka, nyní národu mého rakev.
Stoj noho! posvátná místa jsou, kamkoli kráčíš,
diff --git a/tex/context/sample/third/komensky-cz.tex b/tex/context/sample/third/komensky-cz.tex
index f25bb47d9..96bfa609f 100644
--- a/tex/context/sample/third/komensky-cz.tex
+++ b/tex/context/sample/third/komensky-cz.tex
@@ -15,7 +15,7 @@ viděl, v levé ruce sázítko, pravou rukou vybírá (z přihrádek) literky a
skládá je do sázítka v slova: když naplní sloupec, přenáší je na desku.
Jakmile pak je naplněn počet sloupců pro jednu stranu archu, rozdělí je
příložkami, ováže je a stáhne železnými rámy, aby se nerozpadly; a tím se
-podle svého mínění sví povinnosti zhostil.
+podle svého mínění své povinnosti zhostil.
A tak tito všichni pracujíce vzájemně vykonávající jakoby hračkou
podivuhodné dílo, lidem kdysi nepochopitelné, jen když mají všichni to, čeho
diff --git a/tex/context/sample/third/komensky-vlnka-cz.tex b/tex/context/sample/third/komensky-vlnka-cz.tex
index 17a2ab3f7..f9998f903 100644
--- a/tex/context/sample/third/komensky-vlnka-cz.tex
+++ b/tex/context/sample/third/komensky-vlnka-cz.tex
@@ -15,7 +15,7 @@ viděl, v~levé ruce sázítko, pravou rukou vybírá (z~přihrádek) literky
a~skládá je do sázítka v~slova: když naplní sloupec, přenáší je na desku.
Jakmile pak je naplněn počet sloupců pro jednu stranu archu, rozdělí je
příložkami, ováže je a~stáhne železnými rámy, aby se nerozpadly; a~tím se
-podle svého mínění sví povinnosti zhostil.
+podle svého mínění své povinnosti zhostil.
A~tak tito všichni pracujíce vzájemně vykonávající jakoby hračkou
podivuhodné dílo, lidem kdysi nepochopitelné, jen když mají všichni to, čeho
diff --git a/tex/context/sample/third/slova-sk.tex b/tex/context/sample/third/slova-sk.tex
new file mode 100644
index 000000000..83d48ade3
--- /dev/null
+++ b/tex/context/sample/third/slova-sk.tex
@@ -0,0 +1,5 @@
+Slovenčina má veľa pekných slov:
+ďateľ, kaďa, ďobať, loďka, Ďuro, habaďúra, vľavo, špľachot, voľby, veľhad,
+veľký, veľmi, voľný , hobľovať, ďatľov, ľudový, vľúdne, vyhĺbiť, tĺcť, vĺča,
+tĺčik, tĺk, vĺn, vkĺzla, dĺžka, pĺž, vŕba, kŕdeľ, sŕdc, kŕmiť, tŕnie, tŕň,
+šťava, beťár, šťuka.
diff --git a/tex/context/sample/third/smrek-sk.tex b/tex/context/sample/third/smrek-sk.tex
new file mode 100644
index 000000000..29332cd86
--- /dev/null
+++ b/tex/context/sample/third/smrek-sk.tex
@@ -0,0 +1,40 @@
+Hľa, všetko pokrýva sneh rúškom zimy;
+ženy a panny svieže, rudolíce
+sa vyrojili hlučné na ulice;
+ja hľadám jednu medzi tisícimi \dots
+
+\dots
+
+Celý svet miluje a vzýva ženu.
+Lež básnik nadovšetko. Dante božský
+i v pekle Beatricu svoju hľadal,
+o Sandovej zas Musset verše skladal
+a Verlaine ospevoval ženské bozky \dots
+
+\quotation{No, hľaďme, vy už k bozkom veslujete!}
+
+Nie pani, to tak prišlo samo sebou.
+A i tak, bozk je vecou veľkolepou!
+Prečo mu vyhýbať v tom chladnom svete?
+Rty vaše, pani \dots Lež, ach -- odpustite!
+Nálada táto zimná rozmar tvorí.
+Len škoda, že ten večer je tak skorý \dots
+Lež prečo hľadíte tak rozpačite?
+
+\quotation{Rozmýšľam práve, či by prijali ste,
+keby vás pozvala aspoň k čaju.
+Veď sa už všetci z parku rozchádzajú.
+Kontúry mesta sú už veľmi hmlisté.}
+
+Vidíte, i tak by šiel možno s vami
+a nečakal by ani na pozvanie.
+Darmo, z vás žien vždy príťažlivosť vanie.
+Ja vzbĺknem pri ženách jak otep slamy.
+
+\dots
+
+Som iba básnik, človek nepraktický,
+parazit sŕdc, čo šťastie loví vždycky,
+ale sám záruk šťastia sotva dáva.
+
+\dots
diff --git a/tex/context/sample/third/smrek-vlnka-sk.tex b/tex/context/sample/third/smrek-vlnka-sk.tex
new file mode 100644
index 000000000..eab79aa79
--- /dev/null
+++ b/tex/context/sample/third/smrek-vlnka-sk.tex
@@ -0,0 +1,40 @@
+Hľa, všetko pokrýva sneh rúškom zimy;
+ženy a~panny svieže, rudolíce
+sa vyrojili hlučné na ulice;
+ja hľadám jednu medzi tisícimi \dots
+
+\dots
+
+Celý svet miluje a~vzýva ženu.
+Lež básnik nadovšetko. Dante božský
+i~v~pekle Beatricu svoju hľadal,
+o~Sandovej zas Musset verše skladal
+a~Verlaine ospevoval ženské bozky \dots
+
+\quotation{No, hľaďme, vy už k~bozkom veslujete!}
+
+Nie pani, to tak prišlo samo sebou.
+A~i~tak, bozk je vecou veľkolepou!
+Prečo mu vyhýbať v~tom chladnom svete?
+Rty vaše, pani \dots Lež, ach -- odpustite!
+Nálada táto zimná rozmar tvorí.
+Len škoda, že ten večer je tak skorý \dots
+Lež prečo hľadíte tak rozpačite?
+
+\quotation{Rozmýšľam práve, či by prijali ste,
+keby vás pozvala aspoň k~čaju.
+Veď sa už všetci z~parku rozchádzajú.
+Kontúry mesta sú už veľmi hmlisté.}
+
+Vidíte, i~tak by šiel možno s~vami
+a~nečakal by ani na pozvanie.
+Darmo, z~vás žien vždy príťažlivosť vanie.
+Ja vzbĺknem pri ženách jak otep slamy.
+
+\dots
+
+Som iba básnik, človek nepraktický,
+parazit sŕdc, čo šťastie loví vždycky,
+ale sám záruk šťastia sotva dáva.
+
+\dots
diff --git a/tex/context/test/mkiv/pdf-a1a-2005.mkiv b/tex/context/test/mkiv/pdf-a1a-2005.mkiv
index 90ac0c242..d7b2df9e0 100644
--- a/tex/context/test/mkiv/pdf-a1a-2005.mkiv
+++ b/tex/context/test/mkiv/pdf-a1a-2005.mkiv
@@ -1,6 +1,6 @@
% PDF/A-1a:2005
-\enabletrackers[structure.tags,backend.tags]
+\enabletrackers[structure.tags,backend.tags,backend.xmp]
\setupbackend
[format=PDF/A-1a:2005,
@@ -13,10 +13,12 @@
\setupcolors[cmyk=no]
\definecolor[rgbblack][b=0.01]
-\definecolor[transtest][r=1,g=1,t=.5]
+\definecolor[transtest][r=1,g=1,t=0.25]% transparency is not allowed
\placebookmarks[chapter][all][force=yes]
+
+
\starttext
\starttextcolor[rgbblack]
diff --git a/tex/context/test/mkiv/pdf-a1b-2005.mkiv b/tex/context/test/mkiv/pdf-a1b-2005.mkiv
index f23942a97..9b0669c61 100644
--- a/tex/context/test/mkiv/pdf-a1b-2005.mkiv
+++ b/tex/context/test/mkiv/pdf-a1b-2005.mkiv
@@ -1,6 +1,6 @@
% PDF/A-1b:2005
-\enabletrackers[structure.tags,backend.tags,backend.xmp]
+\enabletrackers[backend.xmp]
\setupbackend
[format=PDF/A-1b:2005,
@@ -9,21 +9,20 @@
% profile={sRGB.icc,default_gray.icc}]
level=0]
-\setuptagging[state=start] % needed even for 'b'-version
-
\setupcolors[cmyk=no]
\definecolor[rgbblack][b=0.01]
-\definecolor[transtest][r=1,g=1,t=.5]
+\definecolor[transtest][r=1,g=1,t=.25]% transparency is not allowed
+
+
\starttext
\starttextcolor[rgbblack] % forced /DeviceGray causes problems; we need a trigger
-Text is needed, otherwise tagging base entries are not applied.
+Test it.
\stoptextcolor
-%\startTEXpage
\hbox\bgroup
\blackrule[width=1cm,height=1cm,color=red]
\blackrule[width=1cm,height=1cm,color=green]
@@ -32,6 +31,5 @@ Text is needed, otherwise tagging base entries are not applied.
\blackrule[width=1cm,height=1cm,color=transtest]\hskip-.5cm
\blackrule[width=1cm,height=1cm,color=transtest]
\egroup
-%\stopTEXpage
\stoptext
diff --git a/tex/context/test/mkiv/pdf-a2a.mkiv b/tex/context/test/mkiv/pdf-a2a.mkiv
index a0e181e69..35f1453eb 100644
--- a/tex/context/test/mkiv/pdf-a2a.mkiv
+++ b/tex/context/test/mkiv/pdf-a2a.mkiv
@@ -1,6 +1,6 @@
% PDF/A-2a
-\enabletrackers[structure.tags,backend.tags]
+\enabletrackers[structure.tags,backend.tags,backend.xmp]
\setupbackend
[format=PDF/A-2a,
@@ -10,12 +10,17 @@
\setuptagging[state=start]
+\setupinteraction[state=start]% needed for attachment
+%\setupattachment[method=hidden]
+
\setupcolors[cmyk=no]
\definecolor[rgbblack][b=0.01]
-\definecolor[transtest][r=1,g=1,t=.5]
+\definecolor[transtest][r=1,g=1,t=.25]
\placebookmarks[chapter][all][force=yes]
+
+
\starttext
\starttextcolor[rgbblack]
@@ -37,4 +42,9 @@ Test it
\blackrule[width=1cm,height=1cm,color=transtest]
\egroup
+
+% inclusion of PDF/A is allowed; TODO: test if ANY version (even newer) is allowed
+%\attachment[file={attachment_pdf-a1a-2005.pdf}, type={application/pdf}]
+\attachment[file={attachment_pdf-a1b-2005.pdf}, type={application/pdf}]
+
\stoptext
diff --git a/tex/context/test/mkiv/pdf-a2b.mkiv b/tex/context/test/mkiv/pdf-a2b.mkiv
new file mode 100644
index 000000000..5c0d72244
--- /dev/null
+++ b/tex/context/test/mkiv/pdf-a2b.mkiv
@@ -0,0 +1,48 @@
+% PDF/A-2b
+
+\enabletrackers[backend.xmp]
+
+\setupbackend
+ [format=PDF/A-2b,
+ intent=sRGB IEC61966-2.1, % use <info> entry here; otherwise problems with predefined default profile
+ profile={sRGB.icc,default_gray.icc},
+ level=0]
+
+\setupinteraction[state=start]% needed for attachment
+%\setupattachment[method=hidden]
+
+\setupcolors[cmyk=no]
+\definecolor[rgbblack][b=0.01]
+\definecolor[transtest][r=1,g=1,t=.25]
+
+\placebookmarks[chapter][all][force=yes]
+
+
+
+\starttext
+
+\starttextcolor[rgbblack]
+
+\startchapter[title=aa,bookmark=bb,list=cc,marking=dd]
+
+Test it
+
+\stopchapter
+
+\stoptextcolor
+
+\hbox\bgroup
+ \blackrule[width=1cm,height=1cm,color=red]
+ \blackrule[width=1cm,height=1cm,color=green]
+ \blackrule[width=1cm,height=1cm,color=blue]
+ \blackrule[width=1cm,height=1cm,color=rgbblack]
+ \blackrule[width=1cm,height=1cm,color=transtest]\hskip-.5cm
+ \blackrule[width=1cm,height=1cm,color=transtest]
+\egroup
+
+
+% inclusion of PDF/A is allowed; TODO: test if ANY version (even newer) is allowed
+\attachment[file={attachment_pdf-a1a-2005.pdf}, type={application/pdf}]
+%\attachment[file={attachment_pdf-a1b-2005.pdf}, type={application/pdf}]
+
+\stoptext
diff --git a/tex/context/test/mkiv/pdf-a2u.mkiv b/tex/context/test/mkiv/pdf-a2u.mkiv
new file mode 100644
index 000000000..0b20abfe1
--- /dev/null
+++ b/tex/context/test/mkiv/pdf-a2u.mkiv
@@ -0,0 +1,48 @@
+% PDF/A-2u
+
+\enabletrackers[backend.xmp]
+
+\setupbackend
+ [format=PDF/A-2u,
+ intent=sRGB IEC61966-2.1, % use <info> entry here; otherwise problems with predefined default profile
+ profile={sRGB.icc,default_gray.icc},
+ level=0]
+
+\setupinteraction[state=start]% needed for attachment
+%\setupattachment[method=hidden]
+
+\setupcolors[cmyk=no]
+\definecolor[rgbblack][b=0.01]
+\definecolor[transtest][r=1,g=1,t=.25]
+
+\placebookmarks[chapter][all][force=yes]
+
+
+
+\starttext
+
+\starttextcolor[rgbblack]
+
+\startchapter[title=aa,bookmark=bb,list=cc,marking=dd]
+
+Test it
+
+\stopchapter
+
+\stoptextcolor
+
+\hbox\bgroup
+ \blackrule[width=1cm,height=1cm,color=red]
+ \blackrule[width=1cm,height=1cm,color=green]
+ \blackrule[width=1cm,height=1cm,color=blue]
+ \blackrule[width=1cm,height=1cm,color=rgbblack]
+ \blackrule[width=1cm,height=1cm,color=transtest]\hskip-.5cm
+ \blackrule[width=1cm,height=1cm,color=transtest]
+\egroup
+
+
+% inclusion of PDF/A is allowed; TODO: test if ANY version (even newer) is allowed
+\attachment[file={attachment_pdf-a1a-2005.pdf}, type={application/pdf}]
+%\attachment[file={attachment_pdf-a1b-2005.pdf}, type={application/pdf}]
+
+\stoptext
diff --git a/tex/context/test/mkiv/pdf-a3a.mkiv b/tex/context/test/mkiv/pdf-a3a.mkiv
index 7efb28e3c..3d5dd48ca 100644
--- a/tex/context/test/mkiv/pdf-a3a.mkiv
+++ b/tex/context/test/mkiv/pdf-a3a.mkiv
@@ -1,9 +1,6 @@
% PDF/A-3a
-\nopdfcompression
-
-
-\enabletrackers[structure.tags,backend.tags]
+\enabletrackers[structure.tags,backend.tags,backend.xmp]
\setupbackend
[format=PDF/A-3a,
@@ -13,12 +10,17 @@
\setuptagging[state=start]
+\setupinteraction[state=start]% needed for attachment
+%\setupattachment[method=hidden]
+
\setupcolors[cmyk=no]
\definecolor[rgbblack][b=0.01]
-\definecolor[transtest][r=1,g=1,t=.5]
+\definecolor[transtest][r=1,g=1,t=.25]
\placebookmarks[chapter][all][force=yes]
+
+
\starttext
\starttextcolor[rgbblack]
@@ -40,4 +42,8 @@ Test it
\blackrule[width=1cm,height=1cm,color=transtest]
\egroup
+
+% inclusion of any file type is allowed
+\attachment[file=cow.pdf, type={application/pdf}]
+
\stoptext
diff --git a/tex/context/test/mkiv/pdf-a3b.mkiv b/tex/context/test/mkiv/pdf-a3b.mkiv
new file mode 100644
index 000000000..31bbaeaba
--- /dev/null
+++ b/tex/context/test/mkiv/pdf-a3b.mkiv
@@ -0,0 +1,47 @@
+% PDF/A-3b
+
+\enabletrackers[backend.xmp]
+
+\setupbackend
+ [format=PDF/A-3b,
+ intent=sRGB IEC61966-2.1, % use <info> entry here; otherwise problems with predefined default profile
+ profile={sRGB.icc,default_gray.icc},
+ level=0]
+
+\setupinteraction[state=start]% needed for attachment
+%\setupattachment[method=hidden]
+
+\setupcolors[cmyk=no]
+\definecolor[rgbblack][b=0.01]
+\definecolor[transtest][r=1,g=1,t=.25]
+
+\placebookmarks[chapter][all][force=yes]
+
+
+
+\starttext
+
+\starttextcolor[rgbblack]
+
+\startchapter[title=aa,bookmark=bb,list=cc,marking=dd]
+
+Test it
+
+\stopchapter
+
+\stoptextcolor
+
+\hbox\bgroup
+ \blackrule[width=1cm,height=1cm,color=red]
+ \blackrule[width=1cm,height=1cm,color=green]
+ \blackrule[width=1cm,height=1cm,color=blue]
+ \blackrule[width=1cm,height=1cm,color=rgbblack]
+ \blackrule[width=1cm,height=1cm,color=transtest]\hskip-.5cm
+ \blackrule[width=1cm,height=1cm,color=transtest]
+\egroup
+
+
+% inclusion of any file type is allowed
+\attachment[file=cow.pdf, type={application/pdf}]
+
+\stoptext
diff --git a/tex/context/test/mkiv/pdf-a3u.mkiv b/tex/context/test/mkiv/pdf-a3u.mkiv
new file mode 100644
index 000000000..098d027fd
--- /dev/null
+++ b/tex/context/test/mkiv/pdf-a3u.mkiv
@@ -0,0 +1,47 @@
+% PDF/A-3u
+
+\enabletrackers[backend.xmp]
+
+\setupbackend
+ [format=PDF/A-3u,
+ intent=sRGB IEC61966-2.1, % use <info> entry here; otherwise problems with predefined default profile
+ profile={sRGB.icc,default_gray.icc},
+ level=0]
+
+\setupinteraction[state=start]% needed for attachment
+%\setupattachment[method=hidden]
+
+\setupcolors[cmyk=no]
+\definecolor[rgbblack][b=0.01]
+\definecolor[transtest][r=1,g=1,t=.25]
+
+\placebookmarks[chapter][all][force=yes]
+
+
+
+\starttext
+
+\starttextcolor[rgbblack]
+
+\startchapter[title=aa,bookmark=bb,list=cc,marking=dd]
+
+Test it
+
+\stopchapter
+
+\stoptextcolor
+
+\hbox\bgroup
+ \blackrule[width=1cm,height=1cm,color=red]
+ \blackrule[width=1cm,height=1cm,color=green]
+ \blackrule[width=1cm,height=1cm,color=blue]
+ \blackrule[width=1cm,height=1cm,color=rgbblack]
+ \blackrule[width=1cm,height=1cm,color=transtest]\hskip-.5cm
+ \blackrule[width=1cm,height=1cm,color=transtest]
+\egroup
+
+
+% inclusion of any file type is allowed
+\attachment[file=cow.pdf, type={application/pdf}]
+
+\stoptext
diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua
index 2b4755b3f..281eb84d7 100644
--- a/tex/generic/context/luatex/luatex-fonts-merged.lua
+++ b/tex/generic/context/luatex/luatex-fonts-merged.lua
@@ -1,6 +1,6 @@
-- merged file : c:/data/develop/context/sources/luatex-fonts-merged.lua
-- parent file : c:/data/develop/context/sources/luatex-fonts.lua
--- merge date : 12/06/19 19:45:18
+-- merge date : 12/12/19 00:57:44
do -- begin closure to overcome local limits and interference