From fe4f3355f35c8b0c9947035a105c3d1255036a4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcel=20Fabian=20Kr=C3=BCger?= Date: Mon, 6 Jul 2020 19:40:13 +0200 Subject: [PATCH] Improve PK font support --- luametalatex-baseregisters.lua | 6 ++++-- luametalatex-font-pk.lua | 6 +++--- luametalatex-init.lua | 1 - luametalatex-lateinit.lua | 1 - luametalatex-pdf-font-pk.lua | 14 +++++++++++++- 5 files changed, 20 insertions(+), 8 deletions(-) diff --git a/luametalatex-baseregisters.lua b/luametalatex-baseregisters.lua index 2e84965..c8f855c 100644 --- a/luametalatex-baseregisters.lua +++ b/luametalatex-baseregisters.lua @@ -148,8 +148,10 @@ pdf_variable(count_code, token.scan_int, 'uniqueresname', 0, true) -- I add this pdf_variable(count_code, token.scan_int, 'pagebox', 2, true) -- TODO (1: media, 2: crop, 3: bleed, 4: trim, 5: art pdf_variable(count_code, token.scan_int, 'forcepagebox', 0, true) -- Considered obsolete even in pdfTeX pdf_variable(count_code, token.scan_int, 'imageresolution', 72, true) -- TODO Also 0 should be the same as 72 ?!?!?!? --- The following two relate to pk fonts which we don't support, so they are ignored on a different level -pdf_variable(count_code, token.scan_int, 'pkresolution', 72) + +pdf_variable(count_code, token.scan_int, 'pkresolution', 1200) -- Original default is 72, but that's crazy +pdf_variable(count_code, token.scan_int, 'pkfixeddpi', 0) -- TODO: Implemented, but even when set to one, font sharing doesn't adapt yet. + -- Changing that is complicated because it has to be known pretty early. pdf_toks('pkmode', '') pdf_toks('pageattr', '') diff --git a/luametalatex-font-pk.lua b/luametalatex-font-pk.lua index f7311a8..adaea6e 100644 --- a/luametalatex-font-pk.lua +++ b/luametalatex-font-pk.lua @@ -192,12 +192,12 @@ local function parse_commands(buf, off, t) until cmd == 245 return off end -return function(name) - local f = assert(io.open(kpse.find_file(name, 'pk', 600), 'rb')) -- TODO configurable dpi +return function(filename) + local f = assert(io.open(filename, 'rb')) local pk = f:read'a' f:close() local res = {} - off = parse_commands(pk, off, res) + local off = parse_commands(pk, 1, res) -- assert(off == #pk+1) -- TODO: Check that only fillup bytes follow return res end diff --git a/luametalatex-init.lua b/luametalatex-init.lua index 528f3a2..1d0c1e6 100644 --- a/luametalatex-init.lua +++ b/luametalatex-init.lua @@ -38,7 +38,6 @@ package.searchers[2] = function(modname) end kpse.set_maketex("fmt", true, "compile") kpse.set_maketex("pk", true, "compile") -kpse.init_prog("LUATEX", 600, "ljfour", nil) require'luametalatex-init-config' local callback_register = callback.register local build_bytecode diff --git a/luametalatex-lateinit.lua b/luametalatex-lateinit.lua index 70c37bf..b4f7fcf 100644 --- a/luametalatex-lateinit.lua +++ b/luametalatex-lateinit.lua @@ -5,7 +5,6 @@ if initex then end bit32 = require'luametalatex-bit32' -- Why? And why so early? --- kpse.init_prog("LUATEX", 400, "nexthi", nil) -- ? status.init_kpse = 1 -- Why? status.safer_option = 0 -- compat status.shell_escape = 0 -- compat -- This is currently a lie. diff --git a/luametalatex-pdf-font-pk.lua b/luametalatex-pdf-font-pk.lua index e614a8a..6db45ab 100644 --- a/luametalatex-pdf-font-pk.lua +++ b/luametalatex-pdf-font-pk.lua @@ -1,7 +1,19 @@ +local pk_global_resolution, pk_resolution_is_fixed +local pdfvariable = pdf.variable + local read_pk = require'luametalatex-font-pk' local strip_floats = require'luametalatex-pdf-utils'.strip_floats return function(pdf, fontdir, usedcids) - local pk = read_pk(fontdir.name) + if not pk_global_resolution then + pk_global_resolution = pdfvariable.pkresolution + if not pk_global_resolution or pk_global_resolution == 0 then + pk_global_resolution = kpse.var_value'pk_dpi' or 72 + end + local mode = pdfvariable.pkmode + pk_resolution_is_fixed = pdfvariable.pkfixeddpi ~= 0 + kpse.init_prog("LUATEX", pk_global_resolution, pkmode ~= '' and pkmode or nil, nil) -- ? + end + local pk = read_pk(kpse.find_file(fontdir.name, 'pk', pk_resolution_is_fixed and pk_global_resolution or (pk_global_resolution*fontdir.size/fontdir.designsize+.5)//1)) local designsize = pk.designsize/1044654.326 -- 1044654.326=2^20*72/72.27 -- designsize in bp local hscale = 65536/pk.hppp / designsize -- 65291.158=2^16*72/72.27 local vscale = 65536/pk.vppp / designsize -- 65291.158=2^16*72/72.27