summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorContext Git Mirror Bot <phg42.2a@gmail.com>2016-06-20 23:10:11 +0200
committerContext Git Mirror Bot <phg42.2a@gmail.com>2016-06-20 23:10:11 +0200
commitb2276ae7a04a9f9c35403e508670049d8c3e4b3e (patch)
tree8d1268cc16b5f861cb410d900fa5f71086adfa8f
parent1a2aea301716b0572d22ed6ec5a58627a92dbccc (diff)
downloadcontext-b2276ae7a04a9f9c35403e508670049d8c3e4b3e.tar.gz
2016-06-20 22:19:00
-rw-r--r--doc/context/documents/general/manuals/luatex.pdfbin1006863 -> 1007493 bytes
-rw-r--r--doc/context/sources/general/manuals/luatex/luatex-fonts.tex4
-rw-r--r--scripts/context/lua/mtxrun.lua13
-rw-r--r--scripts/context/stubs/mswin/mtxrun.lua13
-rw-r--r--scripts/context/stubs/unix/mtxrun13
-rw-r--r--scripts/context/stubs/win64/mtxrun.lua13
-rw-r--r--tex/context/base/context-version.pdfbin4249 -> 4250 bytes
-rw-r--r--tex/context/base/mkiv/cont-new.mkiv2
-rw-r--r--tex/context/base/mkiv/context.mkiv2
-rw-r--r--tex/context/base/mkiv/font-cft.lua543
-rw-r--r--tex/context/base/mkiv/font-chk.lua2
-rw-r--r--tex/context/base/mkiv/font-con.lua139
-rw-r--r--tex/context/base/mkiv/font-ctx.lua37
-rw-r--r--tex/context/base/mkiv/font-def.lua5
-rw-r--r--tex/context/base/mkiv/font-lib.mkvi1
-rw-r--r--tex/context/base/mkiv/font-tra.mkiv12
-rw-r--r--tex/context/base/mkiv/l-table.lua16
-rw-r--r--tex/context/base/mkiv/page-mix.lua69
-rw-r--r--tex/context/base/mkiv/status-files.pdfbin9210 -> 9084 bytes
-rw-r--r--tex/context/base/mkiv/status-lua.pdfbin269096 -> 268913 bytes
-rw-r--r--tex/context/interface/mkiv/i-context.pdfbin821347 -> 821218 bytes
-rw-r--r--tex/context/interface/mkiv/i-readme.pdfbin60789 -> 60787 bytes
-rw-r--r--tex/generic/context/luatex/luatex-fonts-merged.lua131
23 files changed, 759 insertions, 256 deletions
diff --git a/doc/context/documents/general/manuals/luatex.pdf b/doc/context/documents/general/manuals/luatex.pdf
index 4a5d53202..bcdf92610 100644
--- a/doc/context/documents/general/manuals/luatex.pdf
+++ b/doc/context/documents/general/manuals/luatex.pdf
Binary files differ
diff --git a/doc/context/sources/general/manuals/luatex/luatex-fonts.tex b/doc/context/sources/general/manuals/luatex/luatex-fonts.tex
index 7384f3b3e..90412ea81 100644
--- a/doc/context/sources/general/manuals/luatex/luatex-fonts.tex
+++ b/doc/context/sources/general/manuals/luatex/luatex-fonts.tex
@@ -36,7 +36,9 @@ The top|-|level keys in the table are as follows:
\NC fonts \NC yes \NC no \NC yes \NC table \NC locally used fonts \NC \NR
\NC psname \NC no \NC no \NC yes \NC string \NC This is the \POSTSCRIPT\ fontname in the incoming font
source, and it's used as fontname identifier in the \PDF\
- output. \NC \NR
+ output. This has to be a valid string, e.g.\ no spaces
+ and such, as the backend will not do a cleanup. This gives
+ complete control to the loader. \NC \NR
\NC fullname \NC no \NC no \NC yes \NC string \NC output font name, used as a fallback in the \PDF\ output
if the \type {psname} is not set \NC \NR
\NC header \NC yes \NC no \NC no \NC string \NC header comments, if any \NC \NR
diff --git a/scripts/context/lua/mtxrun.lua b/scripts/context/lua/mtxrun.lua
index 14b54e05d..975761cca 100644
--- a/scripts/context/lua/mtxrun.lua
+++ b/scripts/context/lua/mtxrun.lua
@@ -1389,7 +1389,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-table"] = package.loaded["l-table"] or true
--- original size: 36997, stripped down to: 22376
+-- original size: 37593, stripped down to: 22615
if not modules then modules={} end modules ['l-table']={
version=1.001,
@@ -1851,6 +1851,7 @@ local function do_serialize(root,name,depth,level,indexed)
else
handle(format("%s [%s]=%s,",depth,k and "true" or "false",v))
end
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
if hexify then
handle(format("%s %s=0x%X,",depth,k,v))
@@ -1873,6 +1874,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=%q,",depth,k and "true" or "false",v))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=%q,",depth,k,v))
else
@@ -1888,6 +1890,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]={},",depth,k and "true" or "false"))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s={},",depth,k))
else
@@ -1904,6 +1907,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]={ %s },",depth,k and "true" or "false",concat(st,", ")))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s={ %s },",depth,k,concat(st,", ")))
else
@@ -1924,6 +1928,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=%s,",depth,tostring(k),v and "true" or "false"))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=%s,",depth,k,v and "true" or "false"))
else
@@ -1940,6 +1945,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=load(%q),",depth,k and "true" or "false",f))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=load(%q),",depth,k,f))
else
@@ -1955,6 +1961,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=%q,",depth,k and "true" or "false",tostring(v)))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=%q,",depth,k,tostring(v)))
else
@@ -18756,8 +18763,8 @@ end -- of closure
-- used libraries : l-lua.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-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 trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-mrg.lua util-tpl.lua util-env.lua luat-env.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 : 797752
--- stripped bytes : 289399
+-- original bytes : 798348
+-- stripped bytes : 289756
-- end library merge
diff --git a/scripts/context/stubs/mswin/mtxrun.lua b/scripts/context/stubs/mswin/mtxrun.lua
index 14b54e05d..975761cca 100644
--- a/scripts/context/stubs/mswin/mtxrun.lua
+++ b/scripts/context/stubs/mswin/mtxrun.lua
@@ -1389,7 +1389,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-table"] = package.loaded["l-table"] or true
--- original size: 36997, stripped down to: 22376
+-- original size: 37593, stripped down to: 22615
if not modules then modules={} end modules ['l-table']={
version=1.001,
@@ -1851,6 +1851,7 @@ local function do_serialize(root,name,depth,level,indexed)
else
handle(format("%s [%s]=%s,",depth,k and "true" or "false",v))
end
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
if hexify then
handle(format("%s %s=0x%X,",depth,k,v))
@@ -1873,6 +1874,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=%q,",depth,k and "true" or "false",v))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=%q,",depth,k,v))
else
@@ -1888,6 +1890,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]={},",depth,k and "true" or "false"))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s={},",depth,k))
else
@@ -1904,6 +1907,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]={ %s },",depth,k and "true" or "false",concat(st,", ")))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s={ %s },",depth,k,concat(st,", ")))
else
@@ -1924,6 +1928,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=%s,",depth,tostring(k),v and "true" or "false"))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=%s,",depth,k,v and "true" or "false"))
else
@@ -1940,6 +1945,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=load(%q),",depth,k and "true" or "false",f))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=load(%q),",depth,k,f))
else
@@ -1955,6 +1961,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=%q,",depth,k and "true" or "false",tostring(v)))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=%q,",depth,k,tostring(v)))
else
@@ -18756,8 +18763,8 @@ end -- of closure
-- used libraries : l-lua.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-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 trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-mrg.lua util-tpl.lua util-env.lua luat-env.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 : 797752
--- stripped bytes : 289399
+-- original bytes : 798348
+-- stripped bytes : 289756
-- end library merge
diff --git a/scripts/context/stubs/unix/mtxrun b/scripts/context/stubs/unix/mtxrun
index 14b54e05d..975761cca 100644
--- a/scripts/context/stubs/unix/mtxrun
+++ b/scripts/context/stubs/unix/mtxrun
@@ -1389,7 +1389,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-table"] = package.loaded["l-table"] or true
--- original size: 36997, stripped down to: 22376
+-- original size: 37593, stripped down to: 22615
if not modules then modules={} end modules ['l-table']={
version=1.001,
@@ -1851,6 +1851,7 @@ local function do_serialize(root,name,depth,level,indexed)
else
handle(format("%s [%s]=%s,",depth,k and "true" or "false",v))
end
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
if hexify then
handle(format("%s %s=0x%X,",depth,k,v))
@@ -1873,6 +1874,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=%q,",depth,k and "true" or "false",v))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=%q,",depth,k,v))
else
@@ -1888,6 +1890,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]={},",depth,k and "true" or "false"))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s={},",depth,k))
else
@@ -1904,6 +1907,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]={ %s },",depth,k and "true" or "false",concat(st,", ")))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s={ %s },",depth,k,concat(st,", ")))
else
@@ -1924,6 +1928,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=%s,",depth,tostring(k),v and "true" or "false"))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=%s,",depth,k,v and "true" or "false"))
else
@@ -1940,6 +1945,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=load(%q),",depth,k and "true" or "false",f))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=load(%q),",depth,k,f))
else
@@ -1955,6 +1961,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=%q,",depth,k and "true" or "false",tostring(v)))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=%q,",depth,k,tostring(v)))
else
@@ -18756,8 +18763,8 @@ end -- of closure
-- used libraries : l-lua.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-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 trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-mrg.lua util-tpl.lua util-env.lua luat-env.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 : 797752
--- stripped bytes : 289399
+-- original bytes : 798348
+-- stripped bytes : 289756
-- end library merge
diff --git a/scripts/context/stubs/win64/mtxrun.lua b/scripts/context/stubs/win64/mtxrun.lua
index 14b54e05d..975761cca 100644
--- a/scripts/context/stubs/win64/mtxrun.lua
+++ b/scripts/context/stubs/win64/mtxrun.lua
@@ -1389,7 +1389,7 @@ do -- create closure to overcome 200 locals limit
package.loaded["l-table"] = package.loaded["l-table"] or true
--- original size: 36997, stripped down to: 22376
+-- original size: 37593, stripped down to: 22615
if not modules then modules={} end modules ['l-table']={
version=1.001,
@@ -1851,6 +1851,7 @@ local function do_serialize(root,name,depth,level,indexed)
else
handle(format("%s [%s]=%s,",depth,k and "true" or "false",v))
end
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
if hexify then
handle(format("%s %s=0x%X,",depth,k,v))
@@ -1873,6 +1874,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=%q,",depth,k and "true" or "false",v))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=%q,",depth,k,v))
else
@@ -1888,6 +1890,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]={},",depth,k and "true" or "false"))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s={},",depth,k))
else
@@ -1904,6 +1907,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]={ %s },",depth,k and "true" or "false",concat(st,", ")))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s={ %s },",depth,k,concat(st,", ")))
else
@@ -1924,6 +1928,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=%s,",depth,tostring(k),v and "true" or "false"))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=%s,",depth,k,v and "true" or "false"))
else
@@ -1940,6 +1945,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=load(%q),",depth,k and "true" or "false",f))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=load(%q),",depth,k,f))
else
@@ -1955,6 +1961,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=%q,",depth,k and "true" or "false",tostring(v)))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=%q,",depth,k,tostring(v)))
else
@@ -18756,8 +18763,8 @@ end -- of closure
-- used libraries : l-lua.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-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 trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-mrg.lua util-tpl.lua util-env.lua luat-env.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 : 797752
--- stripped bytes : 289399
+-- original bytes : 798348
+-- stripped bytes : 289756
-- end library merge
diff --git a/tex/context/base/context-version.pdf b/tex/context/base/context-version.pdf
index 4f5952d9b..91591b038 100644
--- a/tex/context/base/context-version.pdf
+++ b/tex/context/base/context-version.pdf
Binary files differ
diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv
index 852e0fddd..89a6d4c7f 100644
--- a/tex/context/base/mkiv/cont-new.mkiv
+++ b/tex/context/base/mkiv/cont-new.mkiv
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2016.06.19 13:29}
+\newcontextversion{2016.06.20 22:14}
%D This file is loaded at runtime, thereby providing an excellent place for
%D hacks, patches, extensions and new features.
diff --git a/tex/context/base/mkiv/context.mkiv b/tex/context/base/mkiv/context.mkiv
index c441cf7ad..dd869f035 100644
--- a/tex/context/base/mkiv/context.mkiv
+++ b/tex/context/base/mkiv/context.mkiv
@@ -39,7 +39,7 @@
%D up and the dependencies are more consistent.
\edef\contextformat {\jobname}
-\edef\contextversion{2016.06.19 13:29}
+\edef\contextversion{2016.06.20 22:14}
\edef\contextkind {beta}
%D For those who want to use this:
diff --git a/tex/context/base/mkiv/font-cft.lua b/tex/context/base/mkiv/font-cft.lua
new file mode 100644
index 000000000..63c056022
--- /dev/null
+++ b/tex/context/base/mkiv/font-cft.lua
@@ -0,0 +1,543 @@
+if not modules then modules = { } end modules ['font-cft'] = {
+ version = 1.001,
+ comment = "companion to font-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- context font tables
+
+-- todo: extra:
+--
+-- extra_space => space.extra
+-- space => space.width
+-- space_stretch => space.stretch
+-- space_shrink => space.shrink
+
+-- We do keep the x-height, extra_space, space_shrink and space_stretch
+-- around as these are low level official names.
+
+local type = type
+
+local fonts = fonts or { }
+local tables = fonts.tables or { }
+fonts.tables = tables
+
+local data = utilities.storage.allocate()
+tables.data = data
+
+do
+
+ local t_units = "<units>"
+ local t_unicode = "<unicode>"
+ local t_unispec = "<unispec>" -- t_unicode | { t_unicode }
+ local t_index = "<index>"
+ local t_cardinal = "<cardinal>"
+ local t_integer = "<integer>"
+ local t_float = "<float>"
+ local t_boolean = "<boolean>"
+ local t_string = "<string>"
+ local t_array = "<array>"
+ local t_hash = "<hash>"
+ local t_scaled = "<scaled>"
+ local t_keyword = "<keyword>"
+ local t_scale = "<scale>" -- 1000 based tex scale
+ local t_value = "<value>" -- number, string, boolean
+ local t_function = "<function>"
+
+ data.types = {
+ ["units"] = "<units>",
+ ["unicode"] = "<unicode>",
+ ["unispec"] = "<unispec>" , -- t_unicode | { t_unicode }
+ ["index"] = "<index>",
+ ["cardinal"] = "<cardinal>",
+ ["integer"] = "<integer>",
+ ["float"] = "<float>",
+ ["boolean"] = "<boolean>",
+ ["string"] = "<string>",
+ ["array"] = "<array>",
+ ["hash"] = "<hash>",
+ ["scaled"] = "<scaled>",
+ ["keyword"] = "<keyword>",
+ ["scale"] = "<scale>", -- 1000 based tex scale
+ ["value"] = "<value>", -- number, string, boolean
+ ["function"] = "<function>",
+ }
+
+ local boundingbox = {
+ t_units,
+ t_units,
+ t_units,
+ t_units
+ }
+
+ local mathvariants = {
+ t_array
+ }
+
+ local mathparts = {
+ {
+ advance = t_units,
+ ["end"] = t_units,
+ extender = t_units,
+ glyph = t_unicode,
+ start = t_units,
+ }
+ }
+
+ local mathkerns = {
+ {
+ height = t_units,
+ kern = t_units,
+ },
+ }
+
+ local mathparts = {
+ {
+ advance = t_scaled,
+ ["end"] = t_scaled,
+ extender = t_scaled,
+ glyph = t_unicode,
+ start = t_scaled,
+ }
+ }
+
+ local mathkerns = {
+ {
+ height = t_scaled,
+ kern = t_scaled,
+ },
+ }
+
+ local vfcommands = {
+ { t_keyword, t_value },
+ }
+
+ local description = {
+ width = t_units,
+ height = t_units,
+ depth = t_units,
+ italic = t_units,
+ index = t_index,
+ boundingbox = boundingbox,
+ unicode = t_unispec,
+ math = {
+ accent = t_units,
+ hvariants = mathvariants,
+ vvariants = mathvariants,
+ hparts = mathparts,
+ vparts = mathparts,
+ kerns = {
+ bottomright = mathkerns,
+ bottomleft = mathkerns,
+ topright = mathkerns,
+ topleft = mathkerns,
+ }
+ },
+ }
+
+ local character = {
+ width = t_scaled,
+ height = t_scaled,
+ depth = t_scaled,
+ italic = t_scaled,
+ index = t_index,
+ expansion_factor = t_scaled,
+ left_protruding = t_scaled,
+ right_protruding = t_scaled,
+ tounicode = t_string,
+ unicode = t_unispec,
+ commands = vfcommands,
+ accent = t_scaled,
+ hvariants = mathvariants,
+ vvariants = mathvariants,
+ hparts = math_parts,
+ vparts = math_parts,
+ kerns = {
+ bottomright = math_kerns,
+ bottomleft = math_kerns,
+ topright = math_kerns,
+ topleft = math_kerns,
+ },
+ ligatures = t_hash,
+ kerns = t_hash,
+ next = t_array,
+ }
+
+ data.original = {
+ cache_uuid = t_string,
+ cache_version = t_float,
+ compacted = t_boolean,
+ creator = t_string,
+ descriptions = { description },
+ format = t_string,
+ goodies = t_hash,
+ metadata = {
+ ascender = t_units,
+ averagewidth = t_units,
+ capheight = t_units,
+ descender = t_units,
+ family = t_string,
+ familyname = t_string,
+ fontname = t_string,
+ fullname = t_string,
+ italicangle = t_float,
+ monospaced = t_boolean,
+ panoseweight = t_string,
+ panosewidth = t_string,
+ pfmweight = t_units,
+ pfmwidth = t_units,
+ subfamily = t_string,
+ subfamilyname = t_string,
+ subfontindex = t_index,
+ units = t_cardinal,
+ version = t_string,
+ weight = t_string,
+ width = t_string,
+ xheight = t_units,
+ },
+ private = t_unicode,
+ properties = {
+ hascolor = t_boolean,
+ hasitalics = t_boolean,
+ hasspacekerns = t_boolean,
+ },
+ resources = {
+ duplicates = t_hash,
+ features = {
+ gpos = t_hash,
+ gsub = t_hash,
+ },
+ filename = t_string,
+ markclasses = t_hash,
+ marks = t_hash,
+ marksets = t_hash,
+ mathconstants = t_hash,
+ private = t_cardinal,
+ sequences = t_array,
+ -- unicodes = t_hash,
+ version = t_string,
+ },
+ size = t_cardinal,
+ -- tables = t_array,
+ tableversion = t_float,
+ time = t_cardinal,
+ }
+
+ data.scaled = {
+ properties = {
+ encodingbytes = t_cardinal,
+ embedding = t_cardinal, -- ?
+ cidinfo = t_hash,
+ format = t_string,
+ fontname = t_string,
+ fullname = t_string,
+ filename = t_string,
+ psname = t_string,
+ name = t_string,
+ virtualized = t_boolean,
+ hasitalics = t_boolean,
+ autoitalicamount = t_float,
+ nostackmath = t_boolean,
+ noglyphnames = t_boolean,
+ mode = t_string,
+ hasmath = t_boolean,
+ mathitalics = t_boolean,
+ textitalics = t_boolean,
+ finalized = t_boolean,
+ },
+ parameters = {
+ mathsize = t_cardinal,
+ scriptpercentage = t_float,
+ scriptscriptpercentage = t_float,
+ units = t_cardinal,
+ designsize = t_scaled,
+ expansion = {
+ stretch = t_scale,
+ shrink = t_scale,
+ step = t_scale,
+ auto = t_boolean,
+ },
+ protrusion = {
+ auto = t_boolean,
+ },
+ slantfactor = t_float,
+ extendfactor = t_float,
+ factor = t_float,
+ hfactor = t_float,
+ vfactor = t_float,
+ size = t_scaled,
+ units = t_scaled,
+ scaledpoints = t_scaled,
+ slantperpoint = t_scaled,
+ xheight = t_scaled,
+ quad = t_scaled,
+ ascender = t_scaled,
+ descender = t_scaled,
+ spacing = {
+ width = t_scaled,
+ stretch = t_scaled,
+ shrink = t_scaled,
+ extra = t_scaled,
+ },
+ -- synonyms = {
+ -- space = "spacing.width",
+ -- spacestretch = "spacing.stretch",
+ -- spaceshrink = "spacing.shrink",
+ -- extraspace = "spacing.extra",
+ -- x_height = "xheight",
+ -- space_stretch = "spacing.stretch",
+ -- space_shrink = "spacing.shrink",
+ -- extra_space = "spacing.extra",
+ -- em = "quad",
+ -- ex = "xheight",
+ -- slant = "slantperpoint",
+ -- },
+ },
+ descriptions = { description },
+ characters = { character },
+ }
+
+ data.goodies = {
+ -- preamble
+ name = t_string,
+ version = t_string,
+ comment = t_string,
+ author = t_string,
+ copyright = t_string,
+ --
+ remapping = {
+ tounicode = t_boolean,
+ unicodes = {
+ [t_string] = t_index,
+ },
+ },
+ mathematics = {
+ mapfiles = {
+ t_string,
+ },
+ virtuals = {
+ [t_string] = {
+ {
+ name = t_string,
+ features = t_hash,
+ main = t_boolean,
+ extension = t_boolean,
+ vector = t_string,
+ skewchar = t_unicode,
+ parameters = t_boolean,
+ },
+ },
+ },
+ italics = {
+ [t_string] = {
+ defaultfactor = t_float,
+ disableengine = t_boolean,
+ corrections = {
+ [t_unicode] = t_float,
+ }
+ },
+ },
+ kerns = {
+ [t_unicode] = {
+ bottomright = math_kerns,
+ topright = math_kerns,
+ bottomleft = math_kerns,
+ topleft = math_kerns,
+ },
+ },
+ alternates = {
+ [t_string] = {
+ feature = t_hash,
+ value = t_float,
+ comment = t_string,
+ },
+ },
+ variables = {
+ [t_string] = t_value,
+ },
+ parameters = {
+ [t_string] = t_value,
+ [t_string] = t_function,
+ },
+ dimensions = {
+ [t_string] = {
+ [t_unicode] = {
+ width = t_units,
+ height = t_units,
+ depth = t_units,
+ xoffset = t_units,
+ yoffset = t_units,
+ },
+ },
+ },
+ },
+ filenames = {
+ [t_string] = {
+ t_string,
+ },
+ },
+ compositions = {
+ [t_string] = {
+ dy = t_unit,
+ dx = t_unit,
+ [t_unicode] = {
+ dy = t_unit
+ },
+ [t_unicode] = {
+ anchors = {
+ top = {
+ x = t_unit,
+ y = t_unit,
+ },
+ bottom = {
+ x = t_unit,
+ y = t_unit,
+ },
+ },
+ },
+ },
+ },
+ postprocessors = {
+ [t_string] = t_function,
+ },
+ designsizes = {
+ [t_string] = {
+ [t_string] = t_string,
+ default = t_string
+ },
+ },
+ featuresets = {
+ [t_string] = {
+ t_string,
+ [t_keyword] = t_value
+ },
+ },
+ solutions = {
+ experimental = {
+ less = { t_string },
+ more = { t_string },
+ },
+ },
+ stylistics = {
+ [t_string] = t_string,
+ [t_string] = t_string,
+ },
+ colorschemes = {
+ default = {
+ [1] = { t_string },
+ }
+ },
+ files = {
+ name = t_string,
+ list = {
+ [t_string] = {
+ name = t_string,
+ weight = t_string,
+ style = t_string,
+ width = t_string,
+ },
+ },
+ },
+ typefaces = {
+ [t_string] = {
+ shortcut = t_string,
+ shape = t_string,
+ fontname = t_string,
+ normalweight = t_string,
+ boldweight = t_string,
+ width = t_string,
+ size = t_string,
+ features = t_string,
+ },
+ },
+ }
+
+end
+
+-- compatibility (for now)
+
+if fonts.constructors then
+ fonts.constructors.keys = data.scaled
+end
+
+-- handy helpers
+
+local report = logs.reporter("fonts")
+
+function tables.savefont(specification)
+ local method = specification.method
+ local filename = specification.filename
+ local fontname = specification.fontname
+ if not method or method ~= "original" then
+ method = "scaled"
+ end
+ if not filename or filename == "" then
+ filename = "temp-font-" .. method .. ".lua"
+ else
+ filename = file.addsuffix(filename,"lua")
+ end
+ if not fontname or fontname == "" then
+ fontname = true
+ end
+ if fontname == true then
+ report("saving current font in %a",filename)
+ elseif tonumber(fontname) then
+ report("saving font id %a in %a",fontname,filename)
+ fontname = tonumber(fontname)
+ else
+ report("saving font %a in %a",fontname,filename)
+ tfmdata = fonts.definers.define {
+ name = fontname
+ }
+ end
+ if tfmdata then
+ tfmdata = fonts.hashes.identifiers[tfmdata]
+ end
+ if not tfmdata then
+ -- bad news
+ elseif method == "original" then
+ tfmdata = tfmdata.shared and tfmdata.shared.rawdata
+ else
+ tfmdata = {
+ characters = tfmdata.characters,
+ parameters = tfmdata.parameters,
+ properties = tfmdata.properties,
+ specification = tfmdata.specification,
+ }
+ end
+ if tfmdata then
+ table.save(filename,tfmdata)
+ else
+ -- os.remove(filename)
+ report("saving font failed")
+ end
+end
+
+function tables.saveoriginal(filename,specification)
+ local tfmdata = get(specification)
+ if tfmdata then
+ local rawdata = tfmdata.shared and tfmdata.shared.rawdata
+ if rawdata then
+ table.save(filename,rawdata)
+ end
+ end
+end
+
+if context then
+
+ interfaces.implement {
+ name = "savefont",
+ actions = tables.savefont,
+ arguments = {
+ {
+ { "filename" },
+ { "fontname" },
+ { "method" },
+ }
+ },
+ }
+
+end
+
diff --git a/tex/context/base/mkiv/font-chk.lua b/tex/context/base/mkiv/font-chk.lua
index aaada574e..179a9b80e 100644
--- a/tex/context/base/mkiv/font-chk.lua
+++ b/tex/context/base/mkiv/font-chk.lua
@@ -428,7 +428,7 @@ local dummyzero = {
commands = { { "special", "" } },
}
-local function adddummysymbols(tfmdata,...)
+local function adddummysymbols(tfmdata)
local characters = tfmdata.characters
if not characters[0] then
characters[0] = dummyzero
diff --git a/tex/context/base/mkiv/font-con.lua b/tex/context/base/mkiv/font-con.lua
index 1a0daff63..6139b8911 100644
--- a/tex/context/base/mkiv/font-con.lua
+++ b/tex/context/base/mkiv/font-con.lua
@@ -9,7 +9,7 @@ if not modules then modules = { } end modules ['font-con'] = {
-- some names of table entries will be changed (no _)
local next, tostring, rawget = next, tostring, rawget
-local format, match, lower, gsub = string.format, string.match, string.lower, string.gsub
+local format, match, lower, gsub, find = string.format, string.match, string.lower, string.gsub, string.find
local sort, insert, concat, sortedkeys, serialize, fastcopy = table.sort, table.insert, table.concat, table.sortedkeys, table.serialize, table.fastcopy
local derivetable = table.derive
@@ -46,102 +46,6 @@ constructors.privateoffset = 0xF0000 -- 0x10FFFF
constructors.cacheintex = true -- so we see the original table in fonts.font
--- Some experimental helpers (handy for tracing):
---
--- todo: extra:
---
--- extra_space => space.extra
--- space => space.width
--- space_stretch => space.stretch
--- space_shrink => space.shrink
-
--- We do keep the x-height, extra_space, space_shrink and space_stretch
--- around as these are low level official names.
-
-constructors.keys = {
- properties = {
- encodingbytes = "number",
- embedding = "number",
- cidinfo = { },
- format = "string",
- fontname = "string",
- fullname = "string",
- filename = "filename",
- psname = "string",
- name = "string",
- virtualized = "boolean",
- hasitalics = "boolean",
- autoitalicamount = "basepoints",
- nostackmath = "boolean",
- noglyphnames = "boolean",
- mode = "string",
- hasmath = "boolean",
- mathitalics = "boolean",
- textitalics = "boolean",
- finalized = "boolean",
- },
- parameters = {
- mathsize = "number",
- scriptpercentage = "float",
- scriptscriptpercentage = "float",
- units = "cardinal",
- designsize = "scaledpoints",
- expansion = {
- stretch = "integerscale", -- might become float
- shrink = "integerscale", -- might become float
- step = "integerscale", -- might become float
- auto = "boolean",
- },
- protrusion = {
- auto = "boolean",
- },
- slantfactor = "float",
- extendfactor = "float",
- factor = "float",
- hfactor = "float",
- vfactor = "float",
- size = "scaledpoints",
- units = "scaledpoints",
- scaledpoints = "scaledpoints",
- slantperpoint = "scaledpoints",
- spacing = {
- width = "scaledpoints",
- stretch = "scaledpoints",
- shrink = "scaledpoints",
- extra = "scaledpoints",
- },
- xheight = "scaledpoints",
- quad = "scaledpoints",
- ascender = "scaledpoints",
- descender = "scaledpoints",
- synonyms = {
- space = "spacing.width",
- spacestretch = "spacing.stretch",
- spaceshrink = "spacing.shrink",
- extraspace = "spacing.extra",
- x_height = "xheight",
- space_stretch = "spacing.stretch",
- space_shrink = "spacing.shrink",
- extra_space = "spacing.extra",
- em = "quad",
- ex = "xheight",
- slant = "slantperpoint",
- },
- },
- description = {
- width = "basepoints",
- height = "basepoints",
- depth = "basepoints",
- boundingbox = { },
- },
- character = {
- width = "scaledpoints",
- height = "scaledpoints",
- depth = "scaledpoints",
- italic = "scaledpoints",
- },
-}
-
-- This might become an interface:
local designsizes = allocate()
@@ -351,6 +255,25 @@ local function mathkerns(v,vdelta)
return k
end
+local psfake = 0
+
+local function fixedpsname(psname,fallback)
+ local usedname = psname
+ if not psname or psname == "" then
+ -- filenames can be a mess so we do a drastic cleanup
+ psname = fallback
+ usedname = gsub(psname,"[^a-zA-Z0-9]+","-")
+ elseif find(psname," ") then
+ -- we assume that the name is sane enough (we might sanitize completely some day)
+ usedname = gsub(psname,"[%s]+","-")
+ end
+ if not psname or psname == "" then
+ psfake = psfake + 1
+ psname = "fakename-" .. psfake
+ end
+ return usedname, psname ~= usedname
+end
+
function constructors.scale(tfmdata,specification)
local target = { } -- the new table
--
@@ -453,23 +376,22 @@ function constructors.scale(tfmdata,specification)
target.format = properties.format
target.cache = constructors.cacheintex and "yes" or "renew"
--
- local fontname = properties.fontname or tfmdata.fontname -- for the moment we fall back on
- local fullname = properties.fullname or tfmdata.fullname -- names in the tfmdata although
- local filename = properties.filename or tfmdata.filename -- that is not the right place to
- local psname = properties.psname or tfmdata.psname -- pass them
+ local fontname = properties.fontname or tfmdata.fontname
+ local fullname = properties.fullname or tfmdata.fullname
+ local filename = properties.filename or tfmdata.filename
+ local psname = properties.psname or tfmdata.psname
local name = properties.name or tfmdata.name
--
- if not psname or psname == "" then
- -- name used in pdf file as well as for selecting subfont in ttc/dfont
- psname = fontname or (fullname and fonts.names.cleanname(fullname))
- end
+ -- the psname used in pdf file as well as for selecting subfont in ttc
+ --
+ local psname, psfixed = fixedpsname(psname,fontname or fullname or file.nameonly(filename))
+ --
target.fontname = fontname
target.fullname = fullname
target.filename = filename
target.psname = psname
target.name = name
--
- --
properties.fontname = fontname
properties.fullname = fullname
properties.filename = filename
@@ -602,8 +524,9 @@ function constructors.scale(tfmdata,specification)
-- end of context specific trickery
--
if trace_defining then
- report_defining("defining tfm, name %a, fullname %a, filename %a, hscale %a, vscale %a, math %a, italics %a",
- name,fullname,filename,hdelta,vdelta,hasmath and "enabled" or "disabled",hasitalics and "enabled" or "disabled")
+ report_defining("defining tfm, name %a, fullname %a, filename %a, %spsname %a, hscale %a, vscale %a, math %a, italics %a",
+ name,fullname,filename,psfixed and "(fixed) " or "",psname,hdelta,vdelta,
+ hasmath and "enabled" or "disabled",hasitalics and "enabled" or "disabled")
end
--
constructors.beforecopyingcharacters(target,tfmdata)
diff --git a/tex/context/base/mkiv/font-ctx.lua b/tex/context/base/mkiv/font-ctx.lua
index 4a4808316..6b9434d7b 100644
--- a/tex/context/base/mkiv/font-ctx.lua
+++ b/tex/context/base/mkiv/font-ctx.lua
@@ -1387,7 +1387,7 @@ function constructors.calculatescale(tfmdata,scaledpoints,relativeid,specificati
local scaledpoints, delta = calculatescale(tfmdata,scaledpoints)
-- if enable_auto_r_scale and relativeid then -- for the moment this is rather context specific (we need to hash rscale then)
-- local relativedata = fontdata[relativeid]
- -- local rfmdata = relativedata and relativedata.unscaled and relativedata.unscaled
+ -- local rfmdata = relativedata and relativedata.unscaled and relativedata.unscaled -- just use metadata instead
-- local id_x_height = rfmdata and rfmdata.parameters and rfmdata.parameters.x_height
-- local tf_x_height = tfmdata and tfmdata.parameters and tfmdata.parameters.x_height
-- if id_x_height and tf_x_height then
@@ -2519,3 +2519,38 @@ function helpers.getcoloredglyphs(tfmdata)
table.sort(collected)
return collected
end
+
+-- for the font manual
+
+local trace_files = false
+
+trackers.register("fonts.files",function(v) trace_files = v end)
+
+statistics.register("used fonts",function()
+ if trace_files then
+ local files = { }
+ local list = { }
+ for id, tfmdata in sortedhash(fontdata) do
+ local filename = tfmdata.properties.filename
+ local filedata = files[filename]
+ if filedata then
+ filedata.instances = filedata.instances + 1
+ else
+ local rawdata = tfmdata.shared and tfmdata.shared.rawdata
+ local metadata = rawdata and rawdata.metadata
+ files[filename] = {
+ instances = 1,
+ filename = filename,
+ version = metadata and metadata.version,
+ size = rawdata and rawdata.size,
+ }
+ end
+ end
+ for k, v in sortedhash(files) do
+ list[#list+1] = v
+ end
+ local filename = file.nameonly(environment.jobname) .. "-usedfonts.lua"
+ table.save(filename,list)
+ return format("log saved in '%s'",filename)
+ end
+end)
diff --git a/tex/context/base/mkiv/font-def.lua b/tex/context/base/mkiv/font-def.lua
index add42ee38..88d614566 100644
--- a/tex/context/base/mkiv/font-def.lua
+++ b/tex/context/base/mkiv/font-def.lua
@@ -8,10 +8,11 @@ if not modules then modules = { } end modules ['font-def'] = {
-- We can overload some of the definers.functions so we don't local them.
-local format, gmatch, match, find, lower, gsub = string.format, string.gmatch, string.match, string.find, string.lower, string.gsub
+local lower, gsub = string.lower, string.gsub
local tostring, next = tostring, next
local lpegmatch = lpeg.match
local suffixonly, removesuffix = file.suffix, file.removesuffix
+local formatters = string.formatters
local allocate = utilities.storage.allocate
@@ -264,7 +265,7 @@ function definers.applypostprocessors(tfmdata)
if type(extrahash) == "string" and extrahash ~= "" then
-- e.g. a reencoding needs this
extrahash = gsub(lower(extrahash),"[^a-z]","-")
- properties.fullname = format("%s-%s",properties.fullname,extrahash)
+ properties.fullname = formatters["%s-%s"](properties.fullname,extrahash)
end
end
end
diff --git a/tex/context/base/mkiv/font-lib.mkvi b/tex/context/base/mkiv/font-lib.mkvi
index fe9198ec7..f6bb734fd 100644
--- a/tex/context/base/mkiv/font-lib.mkvi
+++ b/tex/context/base/mkiv/font-lib.mkvi
@@ -18,6 +18,7 @@
\registerctxluafile{font-ini}{1.001}
\registerctxluafile{font-log}{1.001}
\registerctxluafile{font-con}{1.001}
+\registerctxluafile{font-cft}{1.001}
\registerctxluafile{font-enc}{1.001}
\registerctxluafile{font-agl}{1.001} % if needed we can comment this and delay loading
\registerctxluafile{font-cid}{1.001} % cid maps
diff --git a/tex/context/base/mkiv/font-tra.mkiv b/tex/context/base/mkiv/font-tra.mkiv
index f5290d614..38b172ba6 100644
--- a/tex/context/base/mkiv/font-tra.mkiv
+++ b/tex/context/base/mkiv/font-tra.mkiv
@@ -287,4 +287,16 @@
\stopotfsample
\endgroup}
+% new
+
+\unexpanded\def\savefont[#1]% not yet in i-*.xml
+ {\begingroup
+ \getdummyparameters[#1]%
+ \clf_savefont {
+ filename {\dummyparameter\c!file}
+ fontname {\dummyparameter\c!name}
+ method {\dummyparameter\c!method}
+ }%
+ \endgroup}
+
\protect \endinput
diff --git a/tex/context/base/mkiv/l-table.lua b/tex/context/base/mkiv/l-table.lua
index 552097e1c..d1e05928f 100644
--- a/tex/context/base/mkiv/l-table.lua
+++ b/tex/context/base/mkiv/l-table.lua
@@ -673,6 +673,8 @@ local function do_serialize(root,name,depth,level,indexed)
else
handle(format("%s [%s]=%s,",depth,k and "true" or "false",v)) -- %.99g
end
+ elseif tk ~= "string" then
+ -- ignore
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
if hexify then
handle(format("%s %s=0x%X,",depth,k,v))
@@ -695,6 +697,8 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk == "boolean" then
handle(format("%s [%s]=%q,",depth,k and "true" or "false",v))
+ elseif tk ~= "string" then
+ -- ignore
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=%q,",depth,k,v))
else
@@ -710,6 +714,8 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk == "boolean" then
handle(format("%s [%s]={},",depth,k and "true" or "false"))
+ elseif tk ~= "string" then
+ -- ignore
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s={},",depth,k))
else
@@ -726,6 +732,8 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk == "boolean" then
handle(format("%s [%s]={ %s },",depth,k and "true" or "false",concat(st,", ")))
+ elseif tk ~= "string" then
+ -- ignore
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s={ %s },",depth,k,concat(st,", ")))
else
@@ -746,6 +754,8 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk == "boolean" then
handle(format("%s [%s]=%s,",depth,tostring(k),v and "true" or "false"))
+ elseif tk ~= "string" then
+ -- ignore
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=%s,",depth,k,v and "true" or "false"))
else
@@ -763,6 +773,8 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk == "boolean" then
handle(format("%s [%s]=load(%q),",depth,k and "true" or "false",f))
+ elseif tk ~= "string" then
+ -- ignore
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=load(%q),",depth,k,f))
else
@@ -778,6 +790,8 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk == "boolean" then
handle(format("%s [%s]=%q,",depth,k and "true" or "false",tostring(v)))
+ elseif tk ~= "string" then
+ -- ignore
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=%q,",depth,k,tostring(v)))
else
@@ -1165,7 +1179,7 @@ function table.has_one_entry(t)
return t and next(t,next(t)) == nil
end
--- new
+-- new (rather basic, not indexed and nested)
function table.loweredkeys(t) -- maybe utf
local l = { }
diff --git a/tex/context/base/mkiv/page-mix.lua b/tex/context/base/mkiv/page-mix.lua
index 1154a24f5..bafd6d234 100644
--- a/tex/context/base/mkiv/page-mix.lua
+++ b/tex/context/base/mkiv/page-mix.lua
@@ -62,6 +62,8 @@ local getbox = nuts.getbox
local getskip = nuts.getskip
local getattribute = nuts.getattribute
+local texgetcount = tex.getcount
+
local theprop = nuts.theprop
local nodepool = nuts.pool
@@ -106,9 +108,7 @@ local function collectinserts(result,nxt,nxtid)
local inserts, currentskips, nextskips, inserttotal = { }, 0, 0, 0
while nxt do
if nxtid == insert_code then
- inserttotal = inserttotal
- + getfield(nxt,"height")
- + getfield(nxt,"depth")
+ inserttotal = inserttotal + getfield(nxt,"height") -- height includes depth
local s = getsubtype(nxt)
local c = inserts[s]
if trace_detail then
@@ -449,8 +449,8 @@ local function preparesplit(specification) -- a rather large function
end
end
if trace_detail then
- report_state("%-7s > column %s, delta %p, threshold %p, advance %p, total %p, target %p => %a (height %p, depth %p, skip %p)",
- where,curcol,delta,threshold,advance,total,target,state,skipped,height,depth,skip)
+ report_state("%-8s > column %s, delta %p, threshold %p, advance %p, total %p, target %p => %a (height %p, depth %p, skip %p)",
+ where,curcol,delta,threshold,advance,total,target,state,height,depth,skip)
end
return state, skipped
end
@@ -474,9 +474,9 @@ local function preparesplit(specification) -- a rather large function
if advance ~= 0 then
local state, skipped = checked(advance,"glue")
if trace_state then
- report_state("%-7s > column %s, state %a, advance %p, height %p","glue",column,state,advance,height)
+ report_state("%-8s > column %s, state %a, advance %p, height %p","glue",column,state,advance,height)
if skipped ~= 0 then
- report_state("%-7s > column %s, discarded %p","glue",column,skipped)
+ report_state("%-8s > column %s, discarded %p","glue",column,skipped)
end
end
if state == "quit" then
@@ -486,15 +486,15 @@ local function preparesplit(specification) -- a rather large function
depth = 0
if advance < 0 then
height = height + advance
- skip = 0
+ skip = 0
if height < 0 then
height = 0
end
else
- skip = height > 0 and advance or 0
+ skip = height > 0 and advance or 0
end
if trace_state then
- report_state("%-7s > column %s, height %p, depth %p, skip %p","glue",column,height,depth,skip)
+ report_state("%-8s > column %s, height %p, depth %p, skip %p","glue",column,height,depth,skip)
end
else
-- what else? ignore? treat as valid as usual?
@@ -509,9 +509,9 @@ local function preparesplit(specification) -- a rather large function
if advance ~= 0 then
local state, skipped = checked(advance,"kern")
if trace_state then
- report_state("%-7s > column %s, state %a, advance %p, height %p, state %a","kern",column,state,advance,height)
+ report_state("%-8s > column %s, state %a, advance %p, height %p, state %a","kern",column,state,advance,height)
if skipped ~= 0 then
- report_state("%-7s > column %s, discarded %p","kern",column,skipped)
+ report_state("%-8s > column %s, discarded %p","kern",column,skipped)
end
end
if state == "quit" then
@@ -521,7 +521,7 @@ local function preparesplit(specification) -- a rather large function
depth = 0
skip = 0
if trace_state then
- report_state("%-7s > column %s, height %p, depth %p, skip %p","kern",column,height,depth,skip)
+ report_state("%-8s > column %s, height %p, depth %p, skip %p","kern",column,height,depth,skip)
end
end
end
@@ -532,9 +532,9 @@ local function preparesplit(specification) -- a rather large function
if advance ~= 0 then
local state, skipped = checked(advance,"rule")
if trace_state then
- report_state("%-7s > column %s, state %a, rule, advance %p, height %p","rule",column,state,advance,inserttotal,height)
+ report_state("%-8s > column %s, state %a, rule, advance %p, height %p","rule",column,state,advance,inserttotal,height)
if skipped ~= 0 then
- report_state("%-7s > column %s, discarded %p","rule",column,skipped)
+ report_state("%-8s > column %s, discarded %p","rule",column,skipped)
end
end
if state == "quit" then
@@ -579,14 +579,14 @@ local function preparesplit(specification) -- a rather large function
if trace_state then
report_state("cycle: %s, forced column break, same page",cycle)
if skipped ~= 0 then
- report_state("%-7s > column %s, discarded %p","penalty",column,skipped)
+ report_state("%-8s > column %s, discarded %p","penalty",column,skipped)
end
end
else
if trace_state then
report_state("cycle: %s, forced column break, next page",cycle)
if skipped ~= 0 then
- report_state("%-7s > column %s, discarded %p","penalty",column,skipped)
+ report_state("%-8s > column %s, discarded %p","penalty",column,skipped)
end
end
return true
@@ -611,17 +611,18 @@ local function preparesplit(specification) -- a rather large function
line = line + 1
local inserts, insertskips, nextskips, inserttotal = nil, 0, 0, 0
local advance = getfield(current,"height")
+ local more = nxt and (nxtid == insert_code or nxtid == mark_code)
if trace_state then
- report_state("%-7s > column %s, content: %s","line",column,listtoutf(getlist(current),true,true))
+ report_state("%-8s > column %s, content: %s","line (1)",column,listtoutf(getlist(current),true,true))
end
- if nxt and (nxtid == insert_code or nxtid == mark_code) then
- nxt, inserts, localskips, insertskips, inserttotal = collectinserts(result,nxt,nxtid)
+ if more then
+ nxt, inserts, insertskips, nextskips, inserttotal = collectinserts(result,nxt,nxtid)
end
- local state, skipped = checked(advance+inserttotal+insertskips,"line",lastlocked)
+ local state, skipped = checked(advance+inserttotal+insertskips,more and "line (2)" or "line only",lastlocked)
if trace_state then
- report_state("%-7s > column %s, state %a, line %s, advance %p, insert %p, height %p","line",column,state,line,advance,inserttotal,height)
+ report_state("%-8s > column %s, state %a, line %s, advance %p, insert %p, height %p","line (3)",column,state,line,advance,inserttotal,height)
if skipped ~= 0 then
- report_state("%-7s > column %s, discarded %p","line",column,skipped)
+ report_state("%-8s > column %s, discarded %p","line (4)",column,skipped)
end
end
if state == "quit" then
@@ -658,7 +659,7 @@ local function preparesplit(specification) -- a rather large function
appendinserts(result.inserts,inserts)
end
if trace_state then
- report_state("%-7s > column %s, height %p, depth %p, skip %p","line",column,height,depth,skip)
+ report_state("%-8s > column %s, height %p, depth %p, skip %p","line (5)",column,height,depth,skip)
end
lastcontent = current
end
@@ -681,6 +682,7 @@ local function preparesplit(specification) -- a rather large function
elseif id == rule_code then
if process_rule(current,nxt) then break end
else
+ -- skip inserts and such
end
if backtracked then
@@ -751,12 +753,12 @@ local function finalize(result)
local h = r.head
if h then
setprev(h)
-if r.back then
- local k = new_glue(r.back)
- setlink(k,h)
- h = k
- r.head = h
-end
+ if r.back then
+ local k = new_glue(r.back)
+ setlink(k,h)
+ h = k
+ r.head = h
+ end
local t = r.tail
if t then
setnext(t,nil)
@@ -771,8 +773,11 @@ end
local h = new_hlist()
t[i] = h
setlist(h,getfield(l,"head"))
- setfield(h,"height",getfield(l,"height"))
- setfield(h,"depth",getfield(l,"depth"))
+ local ht = getfield(l,"height")
+ local dp = getfield(l,"depth")
+ -- here ht is still ht + dp !
+ setfield(h,"height",ht)
+ setfield(h,"depth",dp)
setfield(l,"head",nil)
end
setprev(t[1]) -- needs checking
diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf
index 08d64337b..c79387699 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 4582f1650..e011f4e49 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/interface/mkiv/i-context.pdf b/tex/context/interface/mkiv/i-context.pdf
index 4a675467a..0e4fab907 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 d2d76e5ba..3894aae56 100644
--- a/tex/context/interface/mkiv/i-readme.pdf
+++ b/tex/context/interface/mkiv/i-readme.pdf
Binary files differ
diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua
index 6c33374c7..9981b1aa6 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 : 06/19/16 13:29:04
+-- merge date : 06/20/16 22:14:55
do -- begin closure to overcome local limits and interference
@@ -1487,6 +1487,7 @@ local function do_serialize(root,name,depth,level,indexed)
else
handle(format("%s [%s]=%s,",depth,k and "true" or "false",v))
end
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
if hexify then
handle(format("%s %s=0x%X,",depth,k,v))
@@ -1509,6 +1510,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=%q,",depth,k and "true" or "false",v))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=%q,",depth,k,v))
else
@@ -1524,6 +1526,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]={},",depth,k and "true" or "false"))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s={},",depth,k))
else
@@ -1540,6 +1543,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]={ %s },",depth,k and "true" or "false",concat(st,", ")))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s={ %s },",depth,k,concat(st,", ")))
else
@@ -1560,6 +1564,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=%s,",depth,tostring(k),v and "true" or "false"))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=%s,",depth,k,v and "true" or "false"))
else
@@ -1576,6 +1581,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=load(%q),",depth,k and "true" or "false",f))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=load(%q),",depth,k,f))
else
@@ -1591,6 +1597,7 @@ local function do_serialize(root,name,depth,level,indexed)
end
elseif tk=="boolean" then
handle(format("%s [%s]=%q,",depth,k and "true" or "false",tostring(v)))
+ elseif tk~="string" then
elseif noquotes and not reserved[k] and lpegmatch(propername,k) then
handle(format("%s %s=%q,",depth,k,tostring(v)))
else
@@ -5682,7 +5689,7 @@ if not modules then modules={} end modules ['font-con']={
license="see context related readme files"
}
local next,tostring,rawget=next,tostring,rawget
-local format,match,lower,gsub=string.format,string.match,string.lower,string.gsub
+local format,match,lower,gsub,find=string.format,string.match,string.lower,string.gsub,string.find
local sort,insert,concat,sortedkeys,serialize,fastcopy=table.sort,table.insert,table.concat,table.sortedkeys,table.serialize,table.fastcopy
local derivetable=table.derive
local trace_defining=false trackers.register("fonts.defining",function(v) trace_defining=v end)
@@ -5702,89 +5709,6 @@ constructors.version=1.01
constructors.cache=containers.define("fonts","constructors",constructors.version,false)
constructors.privateoffset=0xF0000
constructors.cacheintex=true
-constructors.keys={
- properties={
- encodingbytes="number",
- embedding="number",
- cidinfo={},
- format="string",
- fontname="string",
- fullname="string",
- filename="filename",
- psname="string",
- name="string",
- virtualized="boolean",
- hasitalics="boolean",
- autoitalicamount="basepoints",
- nostackmath="boolean",
- noglyphnames="boolean",
- mode="string",
- hasmath="boolean",
- mathitalics="boolean",
- textitalics="boolean",
- finalized="boolean",
- },
- parameters={
- mathsize="number",
- scriptpercentage="float",
- scriptscriptpercentage="float",
- units="cardinal",
- designsize="scaledpoints",
- expansion={
- stretch="integerscale",
- shrink="integerscale",
- step="integerscale",
- auto="boolean",
- },
- protrusion={
- auto="boolean",
- },
- slantfactor="float",
- extendfactor="float",
- factor="float",
- hfactor="float",
- vfactor="float",
- size="scaledpoints",
- units="scaledpoints",
- scaledpoints="scaledpoints",
- slantperpoint="scaledpoints",
- spacing={
- width="scaledpoints",
- stretch="scaledpoints",
- shrink="scaledpoints",
- extra="scaledpoints",
- },
- xheight="scaledpoints",
- quad="scaledpoints",
- ascender="scaledpoints",
- descender="scaledpoints",
- synonyms={
- space="spacing.width",
- spacestretch="spacing.stretch",
- spaceshrink="spacing.shrink",
- extraspace="spacing.extra",
- x_height="xheight",
- space_stretch="spacing.stretch",
- space_shrink="spacing.shrink",
- extra_space="spacing.extra",
- em="quad",
- ex="xheight",
- slant="slantperpoint",
- },
- },
- description={
- width="basepoints",
- height="basepoints",
- depth="basepoints",
- boundingbox={},
- },
- character={
- width="scaledpoints",
- height="scaledpoints",
- depth="scaledpoints",
- italic="scaledpoints",
- },
-}
local designsizes=allocate()
constructors.designsizes=designsizes
local loadedfonts=allocate()
@@ -5922,6 +5846,21 @@ local function mathkerns(v,vdelta)
end
return k
end
+local psfake=0
+local function fixedpsname(psname,fallback)
+ local usedname=psname
+ if not psname or psname=="" then
+ psname=fallback
+ usedname=gsub(psname,"[^a-zA-Z0-9]+","-")
+ elseif find(psname," ") then
+ usedname=gsub(psname,"[%s]+","-")
+ end
+ if not psname or psname=="" then
+ psfake=psfake+1
+ psname="fakename-"..psfake
+ end
+ return usedname,psname~=usedname
+end
function constructors.scale(tfmdata,specification)
local target={}
if tonumber(specification) then
@@ -5995,14 +5934,12 @@ function constructors.scale(tfmdata,specification)
target.cidinfo=properties.cidinfo
target.format=properties.format
target.cache=constructors.cacheintex and "yes" or "renew"
- local fontname=properties.fontname or tfmdata.fontname
- local fullname=properties.fullname or tfmdata.fullname
- local filename=properties.filename or tfmdata.filename
- local psname=properties.psname or tfmdata.psname
+ local fontname=properties.fontname or tfmdata.fontname
+ local fullname=properties.fullname or tfmdata.fullname
+ local filename=properties.filename or tfmdata.filename
+ local psname=properties.psname or tfmdata.psname
local name=properties.name or tfmdata.name
- if not psname or psname=="" then
- psname=fontname or (fullname and fonts.names.cleanname(fullname))
- end
+ local psname,psfixed=fixedpsname(psname,fontname or fullname or file.nameonly(filename))
target.fontname=fontname
target.fullname=fullname
target.filename=filename
@@ -6115,8 +6052,9 @@ function constructors.scale(tfmdata,specification)
end
end
if trace_defining then
- report_defining("defining tfm, name %a, fullname %a, filename %a, hscale %a, vscale %a, math %a, italics %a",
- name,fullname,filename,hdelta,vdelta,hasmath and "enabled" or "disabled",hasitalics and "enabled" or "disabled")
+ report_defining("defining tfm, name %a, fullname %a, filename %a, %spsname %a, hscale %a, vscale %a, math %a, italics %a",
+ name,fullname,filename,psfixed and "(fixed) " or "",psname,hdelta,vdelta,
+ hasmath and "enabled" or "disabled",hasitalics and "enabled" or "disabled")
end
constructors.beforecopyingcharacters(target,tfmdata)
local sharedkerns={}
@@ -24583,10 +24521,11 @@ if not modules then modules={} end modules ['font-def']={
copyright="PRAGMA ADE / ConTeXt Development Team",
license="see context related readme files"
}
-local format,gmatch,match,find,lower,gsub=string.format,string.gmatch,string.match,string.find,string.lower,string.gsub
+local lower,gsub=string.lower,string.gsub
local tostring,next=tostring,next
local lpegmatch=lpeg.match
local suffixonly,removesuffix=file.suffix,file.removesuffix
+local formatters=string.formatters
local allocate=utilities.storage.allocate
local trace_defining=false trackers .register("fonts.defining",function(v) trace_defining=v end)
local directive_embedall=false directives.register("fonts.embedall",function(v) directive_embedall=v end)
@@ -24747,7 +24686,7 @@ function definers.applypostprocessors(tfmdata)
local extrahash=postprocessors[i](tfmdata)
if type(extrahash)=="string" and extrahash~="" then
extrahash=gsub(lower(extrahash),"[^a-z]","-")
- properties.fullname=format("%s-%s",properties.fullname,extrahash)
+ properties.fullname=formatters["%s-%s"](properties.fullname,extrahash)
end
end
end