summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile15
-rw-r--r--doc/filegraph.dot2
-rw-r--r--doc/luaotfload-main.tex49
-rw-r--r--doc/luaotfload.conf.rst44
-rwxr-xr-xscripts/mkstatus116
-rw-r--r--src/luaotfload-auxiliary.lua2
-rw-r--r--src/luaotfload-colors.lua34
-rw-r--r--src/luaotfload-configuration.lua10
-rw-r--r--src/luaotfload-database.lua2
-rw-r--r--src/luaotfload-diagnostics.lua15
-rw-r--r--src/luaotfload-init.lua13
-rw-r--r--src/luaotfload-loaders.lua30
-rw-r--r--src/luaotfload-main.lua13
-rwxr-xr-xsrc/luaotfload-tool.lua17
-rw-r--r--src/luaotfload.sty1
15 files changed, 245 insertions, 118 deletions
diff --git a/Makefile b/Makefile
index bd0021b..bda7fbc 100644
--- a/Makefile
+++ b/Makefile
@@ -194,10 +194,14 @@ sign: $(CTAN_ZIPSIG)
.PHONY: install manifest clean mrproper show showtargets check import news
-install: $(ALL_STATUS)
- @echo "Installing in '$(TEXMFROOT)'."
- $(run-install-docs)
- $(run-install)
+install:
+ @echo " ××××××××××××××××××××××××××××××××"
+ @echo " There is no “install” target."
+ @echo " ××××××××××××××××××××××××××××××××"
+ @echo " Compile a TDS zipball (make tds)"
+ @echo " and extract that into your local"
+ @echo " TEXMF instead."
+ @echo " ××××××××××××××××××××××××××××××××"
manifest:
@echo "Source files:"
@@ -237,6 +241,9 @@ showtargets:
@echo " chars import char-def.lua as luaotfload-characters.lua"
@echo " status create repository info (luaotfload-status.lua)"
@echo
+ @echo " import grab files from upstream"
+ @echo " package package fontloader"
+ @echo
@echo " tds package a zipball according to the TDS"
@echo " ctan package a zipball for uploading to CTAN"
@echo " sign sign zipball"
diff --git a/doc/filegraph.dot b/doc/filegraph.dot
index af3c8ad..9773ebd 100644
--- a/doc/filegraph.dot
+++ b/doc/filegraph.dot
@@ -204,7 +204,7 @@ strict digraph luaotfload_files { //looks weird with circo ...
style = "filled,rounded",
penwidth=2]
- fontloader [label = "fontloader-reference.lua",
+ fontloader [label = "fontloader-YY-MM-DD.lua",
shape = rect,
width = "3.2cm",
height = "1.2cm",
diff --git a/doc/luaotfload-main.tex b/doc/luaotfload-main.tex
index 28f92f7..26d7314 100644
--- a/doc/luaotfload-main.tex
+++ b/doc/luaotfload-main.tex
@@ -1105,6 +1105,7 @@ Below is a commented list of the files distributed with
See figure \ref{file-graph} on page \pageref{file-graph} for a
graphical representation of the dependencies.
%
+\label{package}%
Through the script \fileent{luaotfload-package.lua} the \CONTEXT
utility \fileent{mtx-package} is invoked to create the
\identifier{luaotfload} fontloader as a merged (amalgamated) source
@@ -1120,14 +1121,24 @@ file.\footnote{%
\fileent{util-mrg.lua} that is part of \CONTEXT.
}
%
-This file constitutes the “reference fontloader” and is part of the
-\identifier{luaotfload} package as \fileent{fontloader-reference.lua}.
+This file constitutes the “default fontloader” and is part of the
+\identifier{luaotfload} package as \fileent{fontloader-YY-MM-DD.lua},
+where the uppercase letters are placeholders for the build date.
+%
A companion to it, \fileent{luatex-basics-gen.lua} must be loaded
beforehand to set up parts of the environment required by the \CONTEXT
libraries.
%
During a \TEX\ run, the fontloader initialization and injection happens
in the module \fileent{luaotfload-init.lua}.
+%
+Additionally, the “reference fontloader” as imported from \LUATEX-Fonts
+is provided as the file \fileent{fontloader-reference.lua}.
+%
+This file is self-contained in that it packages all the auxiliary \LUA
+libraries too, as Luaotfload did up to the 2.5 series; since that job
+has been offloaded to the \identifier{Lualibs} package, loading this
+fontloader introduces a certain code duplication.
A number of \emphasis{\LUA utility libraries} are not part of the
\identifier{luaotfload} fontloader, contrary to its equivalent in
@@ -1273,14 +1284,17 @@ files not contained in the merge. Some of these have no equivalent in
\beginsubsection {Packaging}
+\label{sec:pkg}%
The fontloader code is integrated as an isolated component that can be
switched out on demand.
+%
To specify the fontloader you wish to use, the configuration file
(described in section \ref{sec:conf}) provides the option
\inlinecode{fontloader}.
+%
Its value can be one of the identifiers \inlinecode{default} or
-\inlinecode{reference} or the name of a file somewhere in the search
-path of \LUATEX.
+\inlinecode{reference} (see above, section \ref{package}) or the name
+of a file somewhere in the search path of \LUATEX.
%
This will make \identifier {Luaotfload} locate the \CONTEXT source by
means of \identifier{kpathsea} lookups and use those instead of the
@@ -1298,18 +1312,12 @@ The parameter may be extended with a path to the \CONTEXT
standalone distribution or a source repository -- outside the current
\TEX distribution.
-Like the \identifier{Lualibs} package, the reference fontloader is
-deployed as a \emphasis{merged package} containing a series of \LUA
-files joined together in their expected order and stripped of
-non-significant parts.
+Like the \identifier{Lualibs} package, the fontloader is deployed as a
+\emphasis{merged package} containing a series of \LUA files joined
+together in their expected order and stripped of non-significant parts.
%
The \fileent{mkimport} utility assists in pulling the files from a
\CONTEXT tree and packaging them for use with \identifier{Luaotfload}.%
-\footnote{%
- These tasks are performed, respectively, by the build targets
- \inlinecode{import} and \inlinecode{package} of the
- \identifier{Luaotfload} makefile.
-}
%
The state of the files currently in \identifier{Luaotfload}’s
repository can be queried:
@@ -1329,6 +1337,21 @@ Whereas the command for packaging requires a path to the
./scripts/mkimport package ./src/fontloader/luaotfload-package.lua fontloader-custom.lua
\endlisting
+From the toplevel makefile, the targets \inlinecode{import} and
+\inlinecode{package} provide easy access to the commands as invoked during
+the \identifier{Luaotfload} build process.\footnote{%
+ \emphasis{Hint for those interested in the packaging process}: issue
+ \inlinecode{make show} for a list of available build routines.
+}
+These will call \inlinecode{mkimport} script with the correct
+parameters to generate a datestamped package.
+%
+Whether files have been updated in the upstream distribution can be
+queried by \inlinecode{./scripts/mkimport news}.
+%
+This will compare the imported files with their counterparts in the
+\CONTEXT distribution and report changes.
+
\endsubsection
\endsection
diff --git a/doc/luaotfload.conf.rst b/doc/luaotfload.conf.rst
index 12dd887..958ecee 100644
--- a/doc/luaotfload.conf.rst
+++ b/doc/luaotfload.conf.rst
@@ -297,27 +297,29 @@ break tools like Fontspect that rely on the ``patch_font`` callback
provided by Luaotfload to perform important corrections on font data.
The fontloader backend can be selected by setting the value of
-``fontloader``. Other than the default, which selects the packaged
-``reference`` loader as shipped with Luaotfload, a file name accessible
-by kpathsea can be specified. Alternatively, the individual files that
-constitute the fontloader can be loaded directly. While less efficient,
-this greatly aids debugging since error messages will reference the
-actual line numbers of the source files and explanatory comments are
-not stripped. Currently, three distinct loading strategies are
-available: ``unpackaged`` will load the batch that is part of
-Luaotfload. These contain the identical source code that the reference
-fontloader has been compiled from. Another option, ``context`` will
-attempt to load the same files by their names in the Context format
-from the search path. Consequently this option allows to use the
-version of Context that comes with the TeX distribution. Distros tend
-to prefer the stable version (“current” in Context jargon) of those
-files so certain bugs encountered in the more bleeding edge Luaotfload
-can be avoided this way. A third option is to use ``context`` with a
-colon to specify a directory prefix where the *TEXMF* is located that
-the files should be loaded from, e. g. ``context:~/context/tex/texmf-context``.
-This can be used when referencing another distribution like the Context
-minimals that is installed under a different path not indexed by
-kpathsea.
+``fontloader``. The most important choices are ``default``, which will
+load the dedicated Luaotfload fontloader, and ``reference``, the
+upstream package as shipped with Luaotfload. Other than those, a file
+name accessible via kpathsea can be specified.
+
+Alternatively, the individual files that constitute the fontloader can
+be loaded directly. While less efficient, this greatly aids debugging
+since error messages will reference the actual line numbers of the
+source files and explanatory comments are not stripped. Currently,
+three distinct loading strategies are available: ``unpackaged`` will
+load the batch that is part of Luaotfload. These contain the identical
+source code that the reference fontloader has been compiled from.
+Another option, ``context`` will attempt to load the same files by
+their names in the Context format from the search path. Consequently
+this option allows to use the version of Context that comes with the
+TeX distribution. Distros tend to prefer the stable version (“current”
+in Context jargon) of those files so certain bugs encountered in the
+more bleeding edge Luaotfload can be avoided this way. A third option
+is to use ``context`` with a colon to specify a directory prefix where
+the *TEXMF* is located that the files should be loaded from, e. g.
+``context:~/context/tex/texmf-context``. This can be used when
+referencing another distribution like the Context minimals that is
+installed under a different path not indexed by kpathsea.
The value of ``log-level`` sets the default verbosity of messages
printed by Luaotfload. Only messages defined with a verbosity of less
diff --git a/scripts/mkstatus b/scripts/mkstatus
index 809d4af..f27d571 100755
--- a/scripts/mkstatus
+++ b/scripts/mkstatus
@@ -35,35 +35,95 @@ local stringmatch = string.match
local verbose = false
local filelist = "./build/luaotfload-status.lua" --- result
+local srcdir = "src"
+local builddir = "build"
+local scriptdir = "scripts"
+local loaderdir = "src/fontloader"
+local rtdir = "src/fontloader/runtime"
+local miscdir = "src/fontloader/misc"
+
local names = {
- --- only the runtime files and scripts
- { "src", "luaotfload-auxiliary.lua", },
- { "src/fontloader/runtime", "fontloader-basics-gen.lua", },
- --{ "src/fontloader", "fontloader-basics-nod.lua", },
- { "build", "luaotfload-characters.lua", },
- { "src", "luaotfload-colors.lua", },
- { "src", "luaotfload-database.lua", },
- { "src", "luaotfload-diagnostics.lua", },
- { "src", "luaotfload-features.lua", },
- --{ "src/fontloader", "fontloader-fonts-cbk.lua", },
- --{ "src/fontloader", "fontloader-fonts-def.lua", },
- --{ "src/fontloader", "fontloader-fonts-enc.lua", },
- --{ "src/fontloader", "fontloader-fonts-ext.lua", },
- --{ "src/fontloader", "fontloader-fonts-lua.lua", },
- --{ "src/fontloader", "fontloader-fonts-tfm.lua", },
- { "build", "luaotfload-glyphlist.lua", },
- { "src", "luaotfload-letterspace.lua", },
- { "src", "luaotfload-loaders.lua", },
- { "src", "luaotfload-log.lua", },
- { "src", "luaotfload-main.lua", },
- { "src/fontloader/runtime", "fontloader-reference.lua", },
- --{ "src", "luaotfload-override.lua", }, --> part of init now
- { "src", "luaotfload-parsers.lua", },
- { "src", "luaotfload-tool.lua", },
- { "scripts", "mkcharacters", },
- { "scripts", "mkglyphlist", },
- { "scripts", "mkstatus", },
-}
+
+ --- Luaotfload runtime files
+ { srcdir, "luaotfload-auxiliary.lua", },
+ { srcdir, "luaotfload-colors.lua", },
+ { srcdir, "luaotfload-configuration.lua", },
+ { srcdir, "luaotfload-database.lua", },
+ { srcdir, "luaotfload-diagnostics.lua", },
+ { srcdir, "luaotfload-features.lua", },
+ { srcdir, "luaotfload-init.lua", },
+ { srcdir, "luaotfload-letterspace.lua", },
+ { srcdir, "luaotfload-loaders.lua", },
+ { srcdir, "luaotfload-log.lua", },
+ { srcdir, "luaotfload-main.lua", },
+ { srcdir, "luaotfload-parsers.lua", },
+ { srcdir, "luaotfload-resolvers.lua", },
+ { srcdir, "luaotfload-tool.lua", },
+
+ --- generated files
+ { builddir, "luaotfload-characters.lua", },
+ { builddir, "luaotfload-glyphlist.lua", },
+
+ --- scripts
+ { scriptdir, "mkcharacters", },
+ { scriptdir, "mkglyphlist", },
+ { scriptdir, "mkimport", },
+ { scriptdir, "mkstatus", },
+ { scriptdir, "mktests", },
+
+ --- merge script
+ { loaderdir, "luaotfload-package.lua", },
+
+ --- fontloader runtimes
+ { rtdir, "fontloader-basics-gen.lua", },
+ { rtdir, "fontloader-reference.lua", },
+ { rtdir, "fontloader-tl2014.lua", },
+
+ --- fontloader constituents
+ { miscdir, "fontloader-basics-nod.lua", },
+ { miscdir, "fontloader-data-con.lua", },
+ { miscdir, "fontloader-font-afk.lua", },
+ { miscdir, "fontloader-font-afm.lua", },
+ { miscdir, "fontloader-font-cid.lua", },
+ { miscdir, "fontloader-font-con.lua", },
+ { miscdir, "fontloader-font-def.lua", },
+ { miscdir, "fontloader-font-ini.lua", },
+ { miscdir, "fontloader-font-map.lua", },
+ { miscdir, "fontloader-font-otb.lua", },
+ { miscdir, "fontloader-font-otf.lua", },
+ { miscdir, "fontloader-font-oti.lua", },
+ { miscdir, "fontloader-font-otp.lua", },
+ { miscdir, "fontloader-fonts-cbk.lua", },
+ { miscdir, "fontloader-fonts-def.lua", },
+ { miscdir, "fontloader-fonts-demo-vf-1.lua", },
+ { miscdir, "fontloader-fonts-enc.lua", },
+ { miscdir, "fontloader-fonts-ext.lua", },
+ { miscdir, "fontloader-fonts-inj.lua", },
+ { miscdir, "fontloader-fonts.lua", },
+ { miscdir, "fontloader-fonts-lua.lua", },
+ { miscdir, "fontloader-fonts-ota.lua", },
+ { miscdir, "fontloader-fonts-otn.lua", },
+ { miscdir, "fontloader-fonts-syn.lua", },
+ { miscdir, "fontloader-fonts-tfm.lua", },
+ { miscdir, "fontloader-font-tfm.lua", },
+ { miscdir, "fontloader-languages.lua", },
+ { miscdir, "fontloader-l-boolean.lua", },
+ { miscdir, "fontloader-l-file.lua", },
+ { miscdir, "fontloader-l-function.lua", },
+ { miscdir, "fontloader-l-io.lua", },
+ { miscdir, "fontloader-l-lpeg.lua", },
+ { miscdir, "fontloader-l-lua.lua", },
+ { miscdir, "fontloader-l-math.lua", },
+ { miscdir, "fontloader-l-string.lua", },
+ { miscdir, "fontloader-l-table.lua", },
+ { miscdir, "fontloader-math.lua", },
+ { miscdir, "fontloader-mplib.lua", },
+ { miscdir, "fontloader-preprocessor.lua", },
+ { miscdir, "fontloader-swiglib.lua", },
+ { miscdir, "fontloader-swiglib-test.lua", },
+ { miscdir, "fontloader-util-str.lua", },
+
+} --[[local names]]
-----------------------------------------------------------------------
-- helpers
diff --git a/src/luaotfload-auxiliary.lua b/src/luaotfload-auxiliary.lua
index 15541af..c50e0cd 100644
--- a/src/luaotfload-auxiliary.lua
+++ b/src/luaotfload-auxiliary.lua
@@ -63,7 +63,7 @@ aux.start_rewrite_fontname = start_rewrite_fontname
local stop_rewrite_fontname = function ()
if rewriting == true then
- luatexbase.remove_fromt_callback
+ luatexbase.remove_from_callback
("luaotfload.patch_font", "luaotfload.rewrite_fontname")
rewriting = false
report ("log", 1, "aux",
diff --git a/src/luaotfload-colors.lua b/src/luaotfload-colors.lua
index ca5a067..c75696a 100644
--- a/src/luaotfload-colors.lua
+++ b/src/luaotfload-colors.lua
@@ -1,7 +1,7 @@
if not modules then modules = { } end modules ['luaotfload-colors'] = {
version = "2.6",
comment = "companion to luaotfload-main.lua (font color)",
- author = "Khaled Hosny, Elie Roux, Philipp Gesang, Dohyun Kim",
+ author = "Khaled Hosny, Elie Roux, Philipp Gesang, Dohyun Kim, David Carlisle",
copyright = "Luaotfload Development Team",
license = "GNU GPL v2.0"
}
@@ -37,11 +37,6 @@ local nodetail = nodedirect.tail
local getattribute = nodedirect.has_attribute
local setattribute = nodedirect.set_attribute
-local texset = tex.set
-local texget = tex.get
-local texsettoks = tex.settoks
-local texgettoks = tex.gettoks
-
local stringformat = string.format
local identifiers = fonts.hashes.identifiers
@@ -274,6 +269,12 @@ node_colorize = function (head, toplevel, current_color)
return head, current_color
end
+local getpageres = pdf.getpageresources or function() return pdf.pageresources end
+local setpageres = pdf.setpageresources or function(s) pdf.pageresources = s end
+local catat11 = luatexbase.registernumber("catcodetable@atletter")
+local gettoks, scantoks = tex.gettoks, tex.scantoks
+local pgf = { bye = "pgfutil@everybye", extgs = "\\pgf@sys@addpdfresource@extgs@plain" }
+
--- node -> node
local color_handler = function (head)
head = todirect(head)
@@ -283,12 +284,11 @@ local color_handler = function (head)
-- now append our page resources
if res then
res["1"] = true
- local tpr = texget("pdfpageresources")
- local no_extgs = not tpr:find("/ExtGState<<.*>>")
- local pgf_loaded = no_extgs and luaotfload.pgf_loaded
- if pgf_loaded then
- tpr = texgettoks(pgf_loaded)
+ if scantoks and pgf.bye and not pgf.loaded then
+ pgf.loaded = token.create(pgf.bye).cmdname == "assign_toks"
+ pgf.bye = pgf.loaded and pgf.bye
end
+ local tpr = pgf.loaded and gettoks(pgf.bye) or getpageres() or ""
local t = ""
for k in pairs(res) do
@@ -298,14 +298,14 @@ local color_handler = function (head)
end
end
if t ~= "" then
- if pgf_loaded then
- texsettoks("global", pgf_loaded, tpr..t)
+ if pgf.loaded then
+ scantoks("global", pgf.bye, catat11, stringformat("%s{%s}%s", pgf.extgs, t, tpr))
else
- if no_extgs then
- tpr = tpr .. "/ExtGState<<>>"
+ local tpr, n = tpr:gsub("/ExtGState<<", "%1"..t)
+ if n == 0 then
+ tpr = stringformat("%s/ExtGState<<%s>>", tpr, t)
end
- tpr = tpr:gsub("/ExtGState<<", "%1"..t)
- texset("global", "pdfpageresources", tpr)
+ setpageres(tpr)
end
end
res = nil -- reset res
diff --git a/src/luaotfload-configuration.lua b/src/luaotfload-configuration.lua
index 57311dc..5e2800d 100644
--- a/src/luaotfload-configuration.lua
+++ b/src/luaotfload-configuration.lua
@@ -3,7 +3,7 @@
-- FILE: luaotfload-configuration.lua
-- DESCRIPTION: config file reader
-- REQUIREMENTS: Luaotfload 2.6 or above
--- AUTHOR: Philipp Gesang (Phg), <phg42.2a@gmail.com>
+-- AUTHOR: Philipp Gesang, <phg@phi-gamma.net>
-- AUTHOR: Dohyun Kim <nomosnomos@gmail.com>
-------------------------------------------------------------------------------
--
@@ -126,8 +126,12 @@ local feature_presets = {
--doc]]--
+local default_fontloader = function ()
+ return luaotfloadstatus and luaotfloadstatus.notes.loader or "reference"
+end
+
local registered_loaders = {
- default = luaotfloadstatus and luaotfloadstatus.notes.loader or "reference",
+ default = default_fontloader (),
reference = "reference",
unpackaged = "unpackaged",
context = "context",
@@ -198,7 +202,7 @@ local default_config = {
definer = "patch",
log_level = 0,
color_callback = "post_linebreak_filter",
- fontloader = "default",
+ fontloader = default_fontloader (),
},
misc = {
bisect = false,
diff --git a/src/luaotfload-database.lua b/src/luaotfload-database.lua
index 35450b5..881cfe8 100644
--- a/src/luaotfload-database.lua
+++ b/src/luaotfload-database.lua
@@ -3414,7 +3414,7 @@ end
local getwritablecachepath = function ( )
--- fonts.handlers.otf doesn’t exist outside a Luatex run,
--- so we have to improvise
- local writable = getwritablepath (config.luaotfload.paths.cache_dir)
+ local writable = getwritablepath (config.luaotfload.paths.cache_dir, "")
if writable then
return writable
end
diff --git a/src/luaotfload-diagnostics.lua b/src/luaotfload-diagnostics.lua
index 582105a..a3a1841 100644
--- a/src/luaotfload-diagnostics.lua
+++ b/src/luaotfload-diagnostics.lua
@@ -3,7 +3,7 @@
-- FILE: luaotfload-diagnostics.lua
-- DESCRIPTION: functionality accessible by the --diagnose option
-- REQUIREMENTS: luaotfload-tool.lua
--- AUTHOR: Philipp Gesang (Phg), <phg42.2a@gmail.com>
+-- AUTHOR: Philipp Gesang <phg@phi-gamma.net>
-----------------------------------------------------------------------
--
local names = fonts.names
@@ -171,6 +171,11 @@ local get_permissions = function (t, location)
location = lpegmatch (stripslashes, location)
end
local attributes = lfsattributes (location)
+ if not attributes then
+ print""
+ print("attr", location, attributes)
+ os.exit()
+ end
if not attributes and t == "f" then
attributes = get_tentative_attributes (location)
@@ -238,12 +243,10 @@ local check_conformance = function (spec, permissions, errcnt)
return errcnt
end
-local desired_permissions
local init_desired_permissions = function ()
- inspect(config.luaotfload.paths)
local paths = config.luaotfload.paths
- desired_permissions = {
- { "d", {"r","w"}, function () return caches.getwritablepath () end },
+ return {
+ { "d", {"r","w"}, function () return caches.getwritablepath ("", "") end },
{ "d", {"r","w"}, paths.prefix },
{ "f", {"r","w"}, paths.index_path_lua .. ".gz" },
{ "f", {"r","w"}, paths.index_path_luc },
@@ -254,7 +257,7 @@ end
local check_permissions = function (errcnt)
out [[=============== file permissions ==============]]
- if not desired_permissions then init_desired_permissions () end
+ local desired_permissions = init_desired_permissions ()
for i = 1, #desired_permissions do
local t, spec, path = unpack (desired_permissions[i])
if type (path) == "function" then
diff --git a/src/luaotfload-init.lua b/src/luaotfload-init.lua
index 0f7464a..a8fc77b 100644
--- a/src/luaotfload-init.lua
+++ b/src/luaotfload-init.lua
@@ -2,7 +2,7 @@
-----------------------------------------------------------------------
-- FILE: luaotfload-init.lua
-- DESCRIPTION: Luaotfload font loader initialization
--- REQUIREMENTS: luatex v.0.80 or later; packages lualibs, luatexbase
+-- REQUIREMENTS: luatex v.0.80 or later; packages lualibs
-- AUTHOR: Philipp Gesang (Phg), <phg@phi-gamma.net>
-----------------------------------------------------------------------
--
@@ -292,10 +292,19 @@ local init_main = function ()
or "reference"
fontloader = tostring (fontloader)
- if fontloader == "reference" or fontloader == "default" then
+ if fontloader == "reference" then
logreport ("log", 4, "init", "Using reference fontloader.")
load_fontloader_module (luaotfload.fontloader_package)
+ elseif fontloader == "default" then
+ --- Same as above but loader name not correctly replaced by the file name
+ --- of our fontloader package. Perhaps something’s wrong with the status
+ --- file which contains the datestamped filename? In any case, it can’t
+ --- hurt reporting it as a bug.
+ logreport ("both", 0, "init", "Fontloader substitution failed, got “default”.")
+ logreport ("log", 4, "init", "Falling back to reference fontloader.")
+ load_fontloader_module (luaotfload.fontloader_package)
+
elseif fontloader == "unpackaged" then
logreport ("both", 4, "init",
"Loading fontloader components individually.")
diff --git a/src/luaotfload-loaders.lua b/src/luaotfload-loaders.lua
index 715aa8a..0f22f46 100644
--- a/src/luaotfload-loaders.lua
+++ b/src/luaotfload-loaders.lua
@@ -2,8 +2,9 @@
-----------------------------------------------------------------------
-- FILE: luaotfload-loaders.lua
-- DESCRIPTION: Luaotfload callback handling
--- REQUIREMENTS: luatex v.0.80 or later; packages lualibs, luatexbase
--- AUTHOR: Philipp Gesang (Phg), <phg@phi-gamma.net>, Hans Hagen, Khaled Hosny, Elie Roux
+-- REQUIREMENTS: luatex v.0.80 or later; package lualibs
+-- AUTHOR: Philipp Gesang <phg@phi-gamma.net>
+-- AUTHOR: Hans Hagen, Khaled Hosny, Elie Roux, David Carlisle
-----------------------------------------------------------------------
--
--- Contains parts of the earlier main script.
@@ -110,13 +111,22 @@ end
--doc]]--
-local function reset_callback(name,make_false)
- for _,v in pairs(luatexbase.callback_descriptions(name))
- do
- luatexbase.remove_from_callback(name,v)
- end
- if make_false == true then
- luatexbase.disable_callback(name)
+local purge_define_font = function ()
+ local cdesc = luatexbase.callback_descriptions "define_font"
+ --- define_font is an “exclusive” callback, meaning that there can
+ --- only ever be one entry. Everything beyond that would indicate
+ --- that something is broken.
+ local _, d = next (cdesc)
+ if d then
+ local i, d2 = next (cdesc, 1)
+ if d2 then --> issue warning
+ logreport ("both", 0, "loaders",
+ "Callback table for define_font contains multiple entries: \z
+ { [%d] = “%s” } -- seems fishy.", i, d2)
+ end
+ logreport ("log", 0, "loaders",
+ "Entry ``%s`` present in define_font callback; overriding.", d)
+ luatexbase.remove_from_callback ("define_font", d)
end
end
@@ -125,7 +135,7 @@ local install_callbacks = function ()
local dummy_function = function () end
create_callback ("luaotfload.patch_font", "simple", dummy_function)
create_callback ("luaotfload.patch_font_unsafe", "simple", dummy_function)
- reset_callback "define_font"
+ purge_define_font ()
local definer = config.luaotfload.run.definer
luatexbase.add_to_callback ("define_font",
definers[definer or "patch"],
diff --git a/src/luaotfload-main.lua b/src/luaotfload-main.lua
index 17d06d4..b8050e4 100644
--- a/src/luaotfload-main.lua
+++ b/src/luaotfload-main.lua
@@ -1,7 +1,7 @@
-----------------------------------------------------------------------
-- FILE: luaotfload-main.lua
-- DESCRIPTION: Luaotfload entry point
--- REQUIREMENTS: luatex v.0.80 or later; packages lualibs, luatexbase
+-- REQUIREMENTS: luatex v.0.80 or later; packages lualibs
-- AUTHOR: Élie Roux, Khaled Hosny, Philipp Gesang
-----------------------------------------------------------------------
--
@@ -62,8 +62,7 @@ local luatexbase = luatexbase
local require = require
local type = type
-local _error, _warning, _info, _log =
- luatexbase.provides_module(luaotfload.module)
+luatexbase.provides_module (luaotfload.module)
--[[doc--
@@ -99,7 +98,13 @@ end
local make_loader_name = function (prefix, name)
local msg = luaotfload.log and luaotfload.log.report
- or function (...) texio.write_nl ("log", ...) end
+ or function (stream, lvl, cat, ...)
+ if lvl > 1 then --[[not pressing]] return end
+ texio.write_nl ("log",
+ string.format ("luaotfload | %s : ",
+ tostring (cat)))
+ texio.write (string.format (...))
+ end
if not name then
msg ("both", 0, "load",
"Fatal error: make_loader_name (“%s”, “%s”).",
diff --git a/src/luaotfload-tool.lua b/src/luaotfload-tool.lua
index ab025b3..ab495a9 100755
--- a/src/luaotfload-tool.lua
+++ b/src/luaotfload-tool.lua
@@ -858,7 +858,7 @@ end
--- bisect mode
-------------------------------------------------------------------------------
-local bisect_status_path = caches.getwritablepath "bisect"
+local bisect_status_path = caches.getwritablepath ("bisect", "")
local bisect_status_file = bisect_status_path .."/" .. "luaotfload-bisect-status.lua"
local bisect_status_fmt = [[
--[==[-------------------------------------------------------------------------
@@ -1174,14 +1174,17 @@ actions.flush = function (job)
return false, false
end
-local cache_directives = {
- ["purge"] = fonts.names.purge_cache,
- ["erase"] = fonts.names.erase_cache,
- ["show"] = fonts.names.show_cache,
-}
+local cache_directives = function ()
+ --- These exist only after initialization.
+ return {
+ ["purge"] = fonts.names.purge_cache,
+ ["erase"] = fonts.names.erase_cache,
+ ["show"] = fonts.names.show_cache,
+ }
+end
actions.cache = function (job)
- local directive = cache_directives[job.cache]
+ local directive = cache_directives()[job.cache]
if not directive or type(directive) ~= "function" then
logreport ("info", 2, "cache",
"Invalid font cache directive %s.", job.cache)
diff --git a/src/luaotfload.sty b/src/luaotfload.sty
index ad4ef2d..c674ab0 100644
--- a/src/luaotfload.sty
+++ b/src/luaotfload.sty
@@ -4,6 +4,7 @@
%% and Khaled Hosny <khaledhosny@eglug.org>
%% and Philipp Gesang <philipp.gesang@alumni.uni-heidelberg.de>
%% and Dohyun Kim <nomosnomos@gmail.com>
+%% and David Carlisle <d.p.carlisle@gmail.com>
%%
%% This file is part of Luaotfload.
%%