summaryrefslogtreecommitdiff
path: root/luaotfload.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'luaotfload.dtx')
-rw-r--r--luaotfload.dtx205
1 files changed, 111 insertions, 94 deletions
diff --git a/luaotfload.dtx b/luaotfload.dtx
index 3685083..0025e2f 100644
--- a/luaotfload.dtx
+++ b/luaotfload.dtx
@@ -315,7 +315,7 @@ and the derived files
% The next example shows how to load the \emphasis{Porson} font digitized by
% the Greek Font Society using \XETEX-style syntax and an absolute path from a
% non-standard directory:
-%
+%
% \begin{quote}
% \begin{verbatim}
% \font\gfsporson="[/tmp/GFSPorson.otf]" at 12pt
@@ -486,7 +486,7 @@ and the derived files
% Their arguments are names of \LUA tables that contain
% values for the respective features.\footnote{%
% For examples of the table layout please refer to the
-% section of the file \fileent{otfl-fonts-ext.lua} where the
+% section of the file \fileent{luaotfload-fonts-ext.lua} where the
% default values are defined.
% Alternatively and with loss of information, you can dump
% those tables into your terminal by issuing
@@ -701,7 +701,7 @@ and the derived files
% approximate matching.
% Suppose you cannot precisely remember if the variant of
% \identifier{Iwona} you are looking for was “Bright” or “Light”.
-% The query
+% The query
%
% \begin{quote}
% \begin{verbatim}
@@ -724,7 +724,7 @@ and the derived files
% \LUATEX reference manual.\footnote{%
% In \TEX Live: \fileent{texmf-dist/doc/luatex/base/luatexref-t.pdf}.
% }
-%
+%
% \verb|fontdbutil --help| will list the available command line
% switches, including some not discussed in detail here.
%
@@ -737,7 +737,7 @@ and the derived files
% running \verb|fontdbutil -v| to increase verbosity.
% Take a note of the \emphasis{filename} of the font that database
% creation fails with and append it to the file
-% \fileent{otfl-blacklist.cnf}.
+% \fileent{luaotfload-blacklist.cnf}.
%
% A blacklist file is a list of font filenames, one per line.
% Specifying the full path to where the file is located is optional, the
@@ -754,8 +754,8 @@ and the derived files
% }
% or just leave it in the working directory of your document.
% \identifier{luaotfload} reads all files named
-% \fileent{otfl-blacklist.cnf} it finds, so the fonts in
-% \fileent{./otfl-blacklist.cnf} extend the global blacklist.
+% \fileent{luaotfload-blacklist.cnf} it finds, so the fonts in
+% \fileent{./luaotfload-blacklist.cnf} extend the global blacklist.
%
% Furthermore, a filename prepended with a dash character (|-|) is
% removed from the blacklist, causing it to be temporarily whitelisted
@@ -814,10 +814,10 @@ and the derived files
% \def\incitem#1{%
% \normalitem{\fileent{#1}}
% }
-% \fileitem{luatex-fonts.lua}{otfl-fonts.lua}
+% \fileitem{luatex-fonts.lua}{luaotfload-fonts.lua}
% The wrapper that loads the font loader code.
%
-% \fileitem{luatex-fonts-merged.lua}{otfl-fonts-merged.lua}
+% \fileitem{luatex-fonts-merged.lua}{luaotfload-fonts-merged.lua}
% The font loader package.
% It is generated by \fileent{mtx-package}, a \LUA
% source code merging tool developed by Hans
@@ -890,10 +890,10 @@ and the derived files
% instead.
% Their names remain the same as in \CONTEXT (without the
% \verb|otfl|-prefix) since they are hard-coded in
-% \fileent{otfl-fonts.lua}.
+% \fileent{luaotfload-fonts.lua}.
% Thus if you prefer running bleeding edge code from the
% \CONTEXT beta, all you have to do is remove
-% \fileent{otfl-fonts-merged.lua} from the search path.
+% \fileent{luaotfload-fonts-merged.lua} from the search path.
%
% \end{itemize}
%
@@ -908,20 +908,20 @@ and the derived files
% \normalitem{\fileent{#1}}%
% \space--\hskip1em
% }
-% \ouritem {otfl-font-otc.lua} \fileent{font-otc} from \CONTEXT;
+% \ouritem {luaotfload-font-otc.lua} \fileent{font-otc} from \CONTEXT;
% font feature handling.
-% \ouritem {otfl-lib-dir.lua} \fileent{l-dir} from \CONTEXT;
+% \ouritem {luaotfload-lib-dir.lua} \fileent{l-dir} from \CONTEXT;
% contains functionality required
-% by \fileent{otfl-font-nms.lua}.
-% \ouritem {otfl-luat-ovr.lua} overrides the \CONTEXT logging
+% by \fileent{luaotfload-font-nms.lua}.
+% \ouritem {luaotfload-luat-ovr.lua} overrides the \CONTEXT logging
% functionality.
-% \ouritem {otfl-font-pfb.lua} registers the \OpenType
+% \ouritem {luaotfload-font-pfb.lua} registers the \OpenType
% font reader as handler for
% Postscript fonts.
-% \ouritem {otfl-font-nms.lua} font database.
-% \ouritem {otfl-font-clr.lua} color handling.
-% \ouritem {otfl-font-ltx.lua} font feature handling.
-% \ouritem {otfl-features.lua} definitions of the \verb|anum| and
+% \ouritem {luaotfload-font-nms.lua} font database.
+% \ouritem {luaotfload-font-clr.lua} color handling.
+% \ouritem {luaotfload-font-ltx.lua} font feature handling.
+% \ouritem {luaotfload-features.lua} definitions of the \verb|anum| and
% \verb|tlig| features.
% \end{itemize}
%
@@ -991,6 +991,7 @@ and the derived files
% \fi
% \begin{macrocode}
luaotfload = luaotfload or {}
+local luaotfload = luaotfload
luaotfload.module = {
name = "luaotfload",
@@ -1008,6 +1009,7 @@ local type, next = type, next
local stringfind = string.find
local stringsub = string.sub
local stringmatch = string.match
+local stringformat = string.format
local find_file = kpse.find_file
local add_to_callback, create_callback =
@@ -1019,6 +1021,7 @@ local dummy_function = function () end
% \end{macrocode}
%
+%
% No final decision has been made on how to handle font definition. At
% the moment, there are three candidates: The \identifier{generic}
% callback as hard-coded in the font loader, the \identifier{old}
@@ -1026,6 +1029,7 @@ local dummy_function = function () end
% that does nothing besides applying font patches.
%
% \begin{macrocode}
+
luaotfload.font_definer = "patch" --- | “generic” | “old”
local error, warning, info, log =
@@ -1033,6 +1037,7 @@ local error, warning, info, log =
% \end{macrocode}
%
+%
% This is a necessary initalization in order not to rebuild an existing
% font.
% Maybe 600 should be replaced by \texmacro{pdfpkresolution} %% (why?)
@@ -1048,6 +1053,7 @@ kpse.init_prog("", 600, "/")
% \end{macrocode}
%
+%
% We set the minimum version requirement for \LUATEX to v0.74, as it was
% the first version to include version 5.2 of the \LUA interpreter.
%
@@ -1063,15 +1069,16 @@ end
% \end{macrocode}
%
+%
% \subsection{Module loading}
%
% We load the files imported from \CONTEXT with this function.
-% It automatically prepends the prefix \fileent{otfl-} to its argument,
-% so we can refer to the files with their actual \CONTEXT name.
+% It automatically prepends the prefix \fileent{luaotfload-} to its
+% argument, so we can refer to the files with their actual \CONTEXT name.
%
% \begin{macrocode}
-local fl_prefix = "otfl" -- “luatex” for luatex-plain
+local fl_prefix = "luaotfload" -- “luatex” for luatex-plain
local loadmodule = function (name)
require(fl_prefix .."-"..name)
end
@@ -1104,51 +1111,14 @@ local find_vf_file = function (name)
return fullname
end
---[[-- keep --]]
---- from Hans (all merged):
-
---- file name modified include name
---- × basics-gen.lua t luat-basics-gen
---- × font-def -> fonts-def t luatex-font-def (there’s also the normal font-def!)
---- × fonts-enc f luatex-font-enc
---- × fonts-ext t luatex-fonts-ext
---- × fonts-lua f luatex-fonts-lua
---- fonts-tfm f luatex-fonts-tfm
---- × fonts-cbk f luatex-fonts-lua
-
---- from Hans (unmerged):
---- font-otc.lua -> otfl-font-otc.lua
-
---- from luaotfload:
---- otfl-luat-ovr.lua -- override some luat-dum functions
---- otfl-font-clr.lua
---- otfl-font-ltx.lua
---- otfl-font-nms.lua
---- otfl-font-pfb.lua -- ?
-
---[[-- new --]]
---- basics-nod (merged as fonts-nod !)
---- fonts-demo-vf-1.lua
---- fonts-syn (merged)
-
---[[-- merged, to be dropped --]]
---- otfl-data-con.lua
---- otfl-font-cid.lua
---- otfl-font-con.lua
---- otfl-font-ini.lua
---- otfl-font-ota.lua
---- otfl-font-otb.lua
---- otfl-font-otf.lua
---- otfl-font-oti.lua
---- otfl-font-otn.lua
-
% \end{macrocode}
%
%
+%
% \subsection{Preparing the Font Loader}
% We treat the fontloader as a black box so behavior is consistent
% between formats.
-% The wrapper file is \fileent{otfl-fonts.lua} which we imported from
+% The wrapper file is \fileent{luaotfload-fonts.lua} which we imported from
% \href{http://standalone.contextgarden.net/current/context/experimental/tex/generic/context/luatex/}{\LUATEX-Plain}.
% It has roughly two purposes:
%
@@ -1163,7 +1133,7 @@ end
% How the first step is executed depends on the presence on the
% \emphasis{merged font loader code}.
% In \identifier{luaotfload} this is contained in the file
-% \fileent{otfl-fonts-merged.lua}.
+% \fileent{luaotfload-fonts-merged.lua}.
% If this file cannot be found, the original libraries from \CONTEXT of
% which the merged code was composed are loaded instead.
%
@@ -1187,16 +1157,63 @@ end
% \identifier{luatexbase}-style callback handling here.
%
% \begin{macrocode}
-generic_context = {no_callbacks_yet = true}
-non_generic_context = { luatex_fonts = {
- load_before = "otfl-fonts-merged.lua",
- -- load_after = nil, --- TODO, this is meant for callbacks
+
+--- these are obsolescent due to our plan of removing luaotfload-fonts.lua
+generic_context = generic_context or { }
+non_generic_context = non_generic_context or { }
+
+generic_context.no_callbacks_yet = true
+
+non_generic_context.luatex_fonts = {
+ --- TODO we’ll kill luaotfload-fonts.lua soon, so
+ --- this is gonna vanish, and the file will become
+ --- luaotfload-merged.lua
+ load_before = "luaotfload-fonts-merged.lua",
skip_loading = true,
-}}
+}
+
+% \end{macrocode}
+%
+%
+% In its raw form, the font loader will write to the terminal quite
+% liberally, not using the proper channels (loggers) even of \CONTEXT.
+% To make it behave we temporarily replace two functions from the
+% \luafunction{texio} library with wrappers that redirect output to the
+% log.
+% Just in case Hans decides to call \luafunction{texio.write*} with the
+% optional target parameter (which he doesn’t at the moment), we catch the
+% first argument and skip it where appropriate.
+% The originals are backed up and restored after loading
+% \fileent{luaotfload-fonts.lua}.
+%
+% Should we decide to do our own packaging (we’re capable of that
+% anyways), this will most likely become unnecessary.
+%
+% \begin{macrocode}
+
+local normal_write, normal_write_nl = texio.write, texio.write_nl
+
+local log_template = "luaotfload: %s"
+local fake_write = function (first, rest)
+ if first == "log" or first == "term" then -- ignore
+ normal_write("log", stringformat(log_template, rest))
+ else
+ normal_write("log", stringformat(log_template, first))
+ end
+end
+local fake_write_nl = function (first, rest)
+ if first == "log" or first == "term" then -- ignore
+ normal_write_nl("log", stringformat(log_template, rest))
+ else
+ normal_write_nl("log", stringformat(log_template, first, rest))
+ end
+end
+texio.write, texio.write_nl = fake_write, fake_write_nl
% \end{macrocode}
%
+%
% The imported font loader will call \luafunction{callback.register} once
% while reading \fileent{font-def.lua}.
% This is unavoidable unless we modify the imported files, but harmless
@@ -1209,31 +1226,24 @@ callback.register = dummy_function
% \end{macrocode}
%
-% In order to have an output with normal verbosity, we need to pre-override
-% some \CONTEXT log function:
+%
+% Now that things are sorted out we can finally load the fontloader.
%
% \begin{macrocode}
-local dummylogfunction=function() end
-local dummylogreporter=function(c) return function(...) log(string.formatters(...)) end end
-
-logs={
- new=dummylogreporter,
- reporter=dummylogreporter,
- messenger=dummylogreporter,
- report=dummylogfunction,
-}
+loadmodule"fonts.lua"
% \end{macrocode}
%
-% Now that things are sorted out we can finally load the fontloader.
+%
+% Here we restore the original \luafunction{texio} functions.
%
% \begin{macrocode}
-
-loadmodule"fonts.lua"
+texio.write, texio.write_nl = normal_write, normal_write_nl
% \end{macrocode}
%
+%
% By default, the fontloader requires a number of \emphasis{private
% attributes} for internal use.
% These must be kept consistent with the attribute handling methods as
@@ -1241,22 +1251,22 @@ loadmodule"fonts.lua"
% Our strategy is to override the function that allocates new attributes
% before we initialize the font loader, making it a wrapper around
% \luafunction{luatexbase.new_attribute}.\footnote{%
-% Many thanks, again, to Hans Hagen for making this part
-% configurable!
+% Many thanks, again, to Hans Hagen for making this part
+% configurable!
% }
-% The attribute identifiers are prefixed “\fileent{otfl@}” to
+% The attribute identifiers are prefixed “\fileent{luaotfload@}” to
% avoid name clashes.
%
% \begin{macrocode}
do
- local new_attribute = luatexbase.new_attribute
- local the_attributes = luatexbase.attributes
+ local new_attribute = luatexbase.new_attribute
+ local the_attributes = luatexbase.attributes
attributes = attributes or { }
attributes.private = function (name)
- local attr = "otfl@" .. name
+ local attr = "luaotfload@" .. name --- used to be: “otfl@”
local number = the_attributes[attr]
if not number then
number = new_attribute(attr)
@@ -1268,6 +1278,7 @@ end
% \end{macrocode}
%
%
+%
% \subsection{Callbacks}
%
% After the fontloader is ready we can restore the callback trap from
@@ -1279,6 +1290,7 @@ callback.register = trapped_register
% \end{macrocode}
%
+%
% We do our own callback handling with the means provided by luatexbase.
%
% Note: \luafunction{pre_linebreak_filter} and \luafunction{hpack_filter}
@@ -1297,7 +1309,7 @@ add_to_callback("hpack_filter",
add_to_callback("find_vf_file",
find_vf_file, "luaotfload.find_vf_file")
-loadmodule"font-otc.lua" -- TODO check what we can drop from otfl-features
+loadmodule"font-otc.lua" -- TODO check what we can drop from luaotfload-features
loadmodule"lib-dir.lua" -- required by font-nms
loadmodule"luat-ovr.lua"
@@ -1317,6 +1329,7 @@ loadmodule"luat-ovr.lua"
% \end{macrocode}
%
%
+%
% Now we load the modules written for \identifier{luaotfload}.
%
% \begin{macrocode}
@@ -1328,15 +1341,15 @@ loadmodule"font-ltx.lua" --- new in 2.0, added 2011
% \end{macrocode}
%
%
-% This hack makes fonts called with file method found by fonts.names.resove
+% This hack makes fonts called with file method found by fonts.names.resolve
% instead of just trying to find them with kpse. It is necessary in case
-% of fonts that are not accessible by kpse but present in the database, a
+% of fonts that are not accessible by kpse but present in the database, a
% quite common case under Linux.
%
% \begin{macrocode}
-fonts.definers.resolvers.file = function (specification)
- specification.name = fonts.names.resolve('', '', specification)
+fonts.definers.resolvers.file = function (specification)
+ specification.name = fonts.names.resolve('', '', specification)
end
% \end{macrocode}
@@ -1354,6 +1367,7 @@ create_callback("luaotfload.patch_font", "simple", dummy_function)
% \end{macrocode}
%
%
+%
% This is a wrapper for the imported font loader.
% As of 2013, everything it does appear to be redundand, so we won’t use
% it unless somebody points out a cogent reason.
@@ -1405,6 +1419,7 @@ end
% \end{macrocode}
%
%
+%
% \subsection{\CONTEXT override}
%
% We provide a simplified version of the original font definition
@@ -1418,6 +1433,7 @@ local patch_defined_font = function (...)
if type(tfmdata) == "table" then
call_callback("luaotfload.patch_font", tfmdata)
end
+ -- inspect(table.keys(tfmdata))
return tfmdata
end
@@ -1427,6 +1443,7 @@ reset_callback("define_font")
% \end{macrocode}
%
+%
% Finally we register the callbacks
%
% \begin{macrocode}
@@ -1646,7 +1663,7 @@ loadmodule"features.lua"
%
% \begin{enumerate}
%
-% \item
+% \item
% You must cause the modified files to carry prominent notices stating that
% you changed the files and the date of any change.
%