summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKhaled Hosny <khaledhosny@eglug.org>2011-03-02 20:46:35 +0200
committerKhaled Hosny <khaledhosny@eglug.org>2011-03-02 20:46:35 +0200
commit63b91e48730d3396e8291dd6151f8164b0e96aac (patch)
treeb219d3ac7d81f5f313be6435eeb242eb11d0f28a
parent9883a4f6bb58473e3620ec6614315b546a2c6a9b (diff)
parent8151f93bac4474b23b51e941ab69b9a817daf82c (diff)
downloadluaotfload-63b91e48730d3396e8291dd6151f8164b0e96aac.tar.gz
Merge remote branch 'origin/master' into unstable
Conflicts: luaotfload.dtx
-rw-r--r--Makefile8
-rw-r--r--NEWS14
-rw-r--r--luaotfload.dtx349
-rwxr-xr-xmkluatexfontdb.lua58
-rw-r--r--otfl-font-nms.lua31
-rw-r--r--otfl-font-otf.lua4
-rw-r--r--otfl-luat-dum.lua2
-rw-r--r--tests/font_patch.tex24
-rw-r--r--tests/opbd.fea83
-rw-r--r--tests/opbd.tex2
-rw-r--r--tests/tkrn.fea14
11 files changed, 235 insertions, 354 deletions
diff --git a/Makefile b/Makefile
index ddf2f45..c649875 100644
--- a/Makefile
+++ b/Makefile
@@ -41,7 +41,7 @@ TDS_ZIP = $(NAME).tds.zip
ZIPS = $(CTAN_ZIP) $(TDS_ZIP)
DO_TEX = tex --interaction=batchmode $< >/dev/null
-DO_PDFLATEX = pdflatex --interaction=batchmode $< >/dev/null
+DO_LATEX = lualatex --interaction=batchmode $< >/dev/null
DO_MAKEINDEX = makeindex -s gind.ist $(subst .dtx,,$<) >/dev/null 2>&1
all: $(GENERATED)
@@ -52,10 +52,10 @@ tds: $(TDS_ZIP)
world: all ctan
$(COMPILED): $(DTX)
- $(DO_PDFLATEX)
+ $(DO_LATEX)
$(DO_MAKEINDEX)
- $(DO_PDFLATEX)
- $(DO_PDFLATEX)
+ $(DO_LATEX)
+ $(DO_LATEX)
$(UNPACKED): $(DTX)
$(DO_TEX)
diff --git a/NEWS b/NEWS
index 3ab4678..ee579ed 100644
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,20 @@
Change History
--------------
+2011/02/16, luaotfload v1.24:
+ * Fix infinite loop first time creating a name list
+
+2011/02/04, luaotfload v1.23:
+ * Fix a typo breaking fonts.names.scan()
+
+2011/01/25, luaotfload v1.22:
+ * Remove --database-dir and --sys options from mkluatexfontdb
+ * Provide a "luaotfload.patch_font" callback for on the fly patching of fonts
+ * Some documentation improvements
+
+2010/11/11, luaotfload v1.21:
+ * Adapt to luatexbase v3.0
+
2010/10/16, luaotfload v1.20:
* Make cache directory creation more robust
* Fix GPOS mark placement in left-to-right direction
diff --git a/luaotfload.dtx b/luaotfload.dtx
index 1643239..68750df 100644
--- a/luaotfload.dtx
+++ b/luaotfload.dtx
@@ -2,6 +2,7 @@
%
% Copyright (C) 2009-2010 by Elie Roux <elie.roux@telecom-bretagne.eu>
% and Khaled Hosny <khaledhosny@eglug.org>
+% (Support: <lualatex-dev@tug.org>.)
%
% This work is under the CC0 license.
%
@@ -35,7 +36,7 @@
\input docstrip.tex
\Msg{************************************************************************}
\Msg{* Installation}
-\Msg{* Package: luaotfload 2010/10/16 v1.20 OpenType layout system}
+\Msg{* Package: luaotfload v1.24 OpenType layout system}
\Msg{************************************************************************}
\keepsilent
@@ -48,6 +49,7 @@ This is a generated file.
Copyright (C) 2009-2010 by by Elie Roux <elie.roux@telecom-bretagne.eu>
and Khaled Hosny <khaledhosny@eglug.org>
+ (Support: <lualatex-dev@tug.org>.)
This work is under the CC0 license.
@@ -102,10 +104,9 @@ and the derived files
%<*driver>
\NeedsTeXFormat{LaTeX2e}
\ProvidesFile{luaotfload.drv}%
- [2010/10/16 v1.20 OpenType layout system]%
+ [2011/02/16 v1.24 OpenType layout system]%
\documentclass{ltxdoc}
-\usepackage{metalogo,multicol,mdwlist,fancyvrb,xcolor}
-\usepackage{charter}
+\usepackage{metalogo,multicol,mdwlist,fancyvrb,xcolor,xspace}
\usepackage[
bookmarks=true,
colorlinks=true,
@@ -118,10 +119,22 @@ and the derived files
pdfkeywords={luatex, lualatex, unicode, opentype}
]{hyperref}
+\usepackage{fontspec}
+\usepackage{unicode-math}
+\setmainfont[Ligatures=TeX]{Linux Libertine O}
+\setsansfont[Ligatures=TeX]{Linux Biolinum O}
+\setmathfont{XITS Math}
+
\definecolor{niceblue}{rgb}{0.4,0.6,1.000}
-\def\LuaTeX{Lua\TeX}
-\def\ConTeXt{Con\TeX t}
+\newcommand\tex {\TeX\xspace}
+\newcommand\pdftex {PDF\TeX\xspace}
+\newcommand\luatex {Lua\TeX\xspace}
+\newcommand\xetex {\XeTeX\xspace}
+\newcommand\latex {\LaTeX\xspace}
+\newcommand\context{Con\TeX t\xspace}
+
+\newcommand*\email[1]{\href{mailto:#1}{#1}}
\EnableCrossrefs
\CodelineIndex
@@ -153,14 +166,14 @@ and the derived files
% \GetFileInfo{luaotfload.drv}
%
% \title{The \textsf{luaotfload} package}
-% \date{2010/10/16 v1.20}
-% \author{ Elie Roux\footnote{\texttt{elie.roux@telecom-bretagne.eu}}
-% \and Khaled Hosny\footnote{\texttt{khaledhosny@eglug.org}}}
+% \date{2011/02/16 v1.24}
+% \author{Elie Roux and Khaled Hosny\\
+% Support: \email{lualatex-dev@tug.org}}
%
% \maketitle
%
% \begin{abstract}
-% This package is an adaptation of the \ConTeXt\ font loading system,
+% This package is an adaptation of the \context font loading system,
% providing the ability to load \textsf{OpenType} fonts with extended font
% loading syntax supporting a large selection of OpenType font features.
% \end{abstract}
@@ -169,10 +182,10 @@ and the derived files
%
% \section{Introduction}
%
-% Font management and installation has always been painful with \TeX.
+% Font management and installation has always been painful with \tex.
% A lot of files are needed for one font (tfm, pfb, map, fd, vf), and as
-% \TeX\ is 8-bit each font is limited to 256 characters.
-% But the font world has evolved since \TeX, and new font technologies have
+% \tex is 8-bit each font is limited to 256 characters.
+% But the font world has evolved since \tex, and new font technologies have
% appeared, most notably the so called \emph{smart font} technologies like
% \textsf{OpenType} fonts. These fonts can contain a lot of characters, and
% additional functionalities like ligatures, old-style numbers, small capitals,
@@ -181,12 +194,12 @@ and the derived files
% scripts right now} scripts.
% They are widely deployed and available for all modern operating systems and
% are becoming the de facto standard fonts for advanced text layout.
-% Until now the only way to use them directly in the \TeX\ world was by using
-% them with \XeTeX.
+% Until now the only way to use them directly in the \tex world was by using
+% them with \xetex.
%
-% Unlike \XeTeX, \LuaTeX\ does not provide direct support for using these fonts
+% Unlike \xetex, \luatex does not provide direct support for using these fonts
% by default, but it provides a way to hook Lua code in some points of the
-% \TeX\ processing; for instance, we can improve the font loading system, and
+% \tex processing; for instance, we can improve the font loading system, and
% text procession, which what this package is about.
%
% \section{Loading fonts}
@@ -195,7 +208,7 @@ and the derived files
% like:
%
% \begin{center}
-% |\font\foo={|\meta{prefix}|:|\meta{font name}|:|\meta{font features}|}| \meta{\TeX\ font features}
+% |\font\foo={|\meta{prefix}|:|\meta{font name}|:|\meta{font features}|}| \meta{\tex font features}
% \end{center}
%
% \noindent
@@ -204,12 +217,12 @@ and the derived files
%
% \paragraph{Prefix}
%
-% The \meta{prefix} be either \texttt{file:} or \texttt{name:}, which specify
+% The \meta{prefix} be either |file:| or |name:|, which specify
% whether to use a select the font from its filename or font name,
-% respectively. If no prefix is specified, then \texttt{file:} is assumed.
+% respectively. If no prefix is specified, then |file:| is assumed.
%
-% For compatibility with \XeTeX, surrounding the \meta{font name}
-% with square brackets is synonymous to using the \texttt{file:} prefix.
+% For compatibility with \xetex, surrounding the \meta{font name}
+% with square brackets is synonymous to using the |file:| prefix.
%
% Accessing fonts by fontname allows loading system installed fonts as well as
% \textsc{texmf} ones, and requires a font names database; see
@@ -245,20 +258,15 @@ and the derived files
% The supported keys are:
% \begin{description}
% \item [mode] \hfill \\
-% \textsf{luaotfload} has two OpenType processing modes;
-% \texttt{base} or \texttt{node}.
-% Using \texttt{mode=base}
-% only supports a subset of OpenType features and works by mapping those
-% features to traditional \TeX\ ligature and kerning mechanisms and is a bit
-% faster
-% Using \texttt{mode=node} hopefully supports OpenType fully and
-% works by direct processing of the node list with Lua; it is slower and
-% is not designed to work in math mode.
-%
-% By default \texttt{mode=base} is used, but it is advisable to always
-% enable \texttt{node} made, except for math fonts, otherwise many OpenType
-% features will not function properly or even not work at all, especially for
-% advanced scripts like Arabic.
+% \textsf{luaotfload} has two OpenType processing modes; |base| and |node|.
+% |base| mode works by mapping OpenType features to traditional \tex ligature
+% and kerning mechanisms, thus supporting only non-contextual substitutions and
+% kerning pairs, but is slightly faster. |node| works by direct processing of
+% the node list at Lua end and have more wide support of OpenType features but
+% can be slow especially with complex fonts and can't be used in math mode.
+%
+% By default |node| mode is used, and you have to manually force |base| mode
+% when needed e.g. for math fonts.
%
% \item [script] \hfill \\
% OpenType script string, default value is |dflt|. Some fonts don't assign
@@ -272,9 +280,8 @@ and the derived files
% feature files are textual representation of OpenType tables and can be used to
% extend OpenType features of the font on fly. The file name of the feature file
% is passed, then features defined in the file can be enabled/disabled like any
-% other feature. The actual syntax is described at
-% \url{http://fontforge.sourceforge.net/featurefile.html} and
-% \url{http://www.adobe.com/devnet/opentype/afdko/topic_feature_file_syntax.html}.
+% other feature. The syntax is documented in Adobe's
+% \href{http://www.adobe.com/devnet/opentype/afdko/topic_feature_file_syntax.html}{OpenType Feature File Specification}.
%
% For example, to set a |tkrn| feature from |mykern.fea| file:
%
@@ -293,12 +300,12 @@ and the derived files
% Both keys control microtypographic features of the font, namely glyph
% protrusion and expansion. The value of the key is the name of predefined
% Lua tables of protrusion and expansion values; see the end of
-% \texttt{otfl-font-dum.lua} file for an example of such tables. The only
+% |otfl-font-dum.lua| file for an example of such tables. The only
% predefined value is |default|.
%
% For example, to enable default protrusion\footnote{You also need to set
% |\pdfprotrudechars2 \pdfadjustspacing2| to activate protrusion and expansion,
-% respectively. See PDF\TeX\ manual for details}:
+% respectively. See \pdftex manual for details}:
%
% |\font\lmr=Latin Modern Roman:protrusion=default|
%
@@ -309,21 +316,21 @@ and the derived files
% OpenType, currently three features are defined:
%
% \begin{itemize*}
-% \item \texttt{anum}: replaces European numbers with eastern Arabic numbers or
+% \item |anum|: replaces European numbers with eastern Arabic numbers or
% Persian numbers, depending on the value of |language|.
-% \item \texttt{tlig}: applies legacy \TeX\ ligatures (|``''-- -- !` ?` <<>>|).
-% \item \texttt{trep}: applies legacy \TeX\ replacements (|`'"|).
+% \item |tlig|: applies legacy \tex ligatures (|``''-- -- !` ?` <<>>|).
+% \item |trep|: applies legacy \tex replacements (|`'"|).
% \end{itemize*}
%
-% (For \XeTeX\ users: these last two are the equivalent of writing
-% \texttt{mapping=text-tex} using \XeTeX's input remapping feature.)
+% (For \xetex users: these last two are the equivalent of writing
+% |mapping=text-tex| using \xetex's input remapping feature.)
%
%
% \section{Font names database}
% \label{sec:fontdb}
%
% As introduced in the previous section, \textsf{luaotfload} uses a database
-% to keep track of fonts available to \LuaTeX. Using this database, fonts can
+% to keep track of fonts available to \luatex. Using this database, fonts can
% be loaded by font name as well as filename.
%
% When \textsf{luaotfload} is asked to load a font by font name, it will check
@@ -363,7 +370,7 @@ and the derived files
%
% \subsection{Blacklisting fonts}
%
-% Some fonts are problematic in \LuaTeX, if you found that your document takes
+% Some fonts are problematic in \luatex, if you found that your document takes
% too long to compile, or eats all the free memory, you can find the culprit
% file by running |mkluatexfontdb| utility with |-v| option to see which font
% file it is stuck with. You can then instruct \textsf{luaotfload} to ignore
@@ -374,49 +381,47 @@ and the derived files
% can find. You can either use the base name or the full path. Any thing after
% a |%| sign is ignored.
%
-% \section{Required \ConTeXt\ files}
+% \section{Required \context files}
%
-% This package is a wrapper for several files taken from the \ConTeXt\ macro
-% package. The philosophy is to let \ConTeXt\ do all the implementation and
-% update these files from time to time. To do so we did not modify the files
-% taken from \ConTeXt, we only changed their names to prevent name clashes.
-% You can thus update the font system of this package simply by updating the
-% files taken from \ConTeXt, without (theoretically) changing the \texttt{.sty}
-% file nor the main \texttt{.lua} file.
+% This package is a wrapper for several files taken from the \context macro
+% package. The philosophy is to let \context do all the implementation and
+% update these files from time to time. So we try not to modify the files
+% taken from \context as far as possible, but we changed their names to
+% prevent name clashes.
%
-% The \ConTeXt\ files are renamed by adding the prefix \texttt{otfl-} to them
-% (\texttt{otfl} as \texttt{OTF L}oad). The files are:
+% The \context files are renamed by adding the prefix |otfl-| to them
+% (|otfl| as |OTF L|oad). The files are:
%
% \begin{multicols}{3}
% \begin{itemize*}
-% \item \texttt{luat-dum.lua}
-% \item \texttt{data-con.lua}
-% \item \texttt{node-inj.lua}
-% \item \texttt{node-dum.lua}
-% \item \texttt{font-ini.lua}
-% \item \texttt{font-tfm.lua}
-% \item \texttt{font-cid.lua}
-% \item \texttt{font-ott.lua}
-% \item \texttt{font-otf.lua}
-% \item \texttt{font-otd.lua}
-% \item \texttt{font-oti.lua}
-% \item \texttt{font-otb.lua}
-% \item \texttt{font-otn.lua}
-% \item \texttt{font-ota.lua}
-% \item \texttt{font-otc.lua}
-% \item \texttt{font-def.lua}
-% \item \texttt{font-xtx.lua}
-% \item \texttt{font-map.lua}
-% \item \texttt{font-dum.lua}
+% \item |luat-dum.lua|
+% \item |data-con.lua|
+% \item |node-inj.lua|
+% \item |node-dum.lua|
+% \item |font-ini.lua|
+% \item |font-tfm.lua|
+% \item |font-cid.lua|
+% \item |font-ott.lua|
+% \item |font-otf.lua|
+% \item |font-otd.lua|
+% \item |font-oti.lua|
+% \item |font-otb.lua|
+% \item |font-otn.lua|
+% \item |font-ota.lua|
+% \item |font-otc.lua|
+% \item |font-def.lua|
+% \item |font-xtx.lua|
+% \item |font-map.lua|
+% \item |font-dum.lua|
% \end{itemize*}
% \end{multicols}
%
% The following files have been written for this package:
% \begin{multicols}{3}
% \begin{itemize*}
-% \item \texttt{font-clr.lua}
-% \item \texttt{font-nms.lua}
-% \item \texttt{luat-ovr.lua}
+% \item |font-clr.lua|
+% \item |font-nms.lua|
+% \item |luat-ovr.lua|
% \end{itemize*}
% \end{multicols}
%
@@ -434,9 +439,6 @@ and the derived files
%
% |\font\myfont = MyFont.otf:script=latn;+liga;|
%
-% Also remember to set |mode=node| as most OpenType features
-% (such as contextual substitution, |calt|), will not work without it.
-%
% \part{\texttt{luaotfload.lua}}
%
% \iffalse
@@ -446,12 +448,12 @@ and the derived files
% First some usual initializations.
%
% \begin{macrocode}
-module('luaotfload', package.seeall)
+module("luaotfload", package.seeall)
luaotfload.module = {
name = "luaotfload",
- version = 1.20,
- date = "2010/10/16",
+ version = 1.24,
+ date = "2011/02/16",
description = "OpenType layout system.",
author = "Elie Roux & Hans Hagen",
copyright = "Elie Roux",
@@ -468,16 +470,16 @@ local error, warning, info, log = luatexbase.provides_module(luaotfload.module)
% fine even if |\pdfpkresolution| is changed.
%
% \begin{macrocode}
-kpse.init_prog('', 600, '/')
+kpse.init_prog("", 600, "/")
% \end{macrocode}
%
-% The minimal required \LuaTeX\ version.
+% The minimal required \luatex version.
%
% \begin{macrocode}
local luatex_version = 60
if tex.luatexversion < luatex_version then
- warning('LuaTeX v%.2f is old, v%.2f is recommended.',
+ warning("LuaTeX v%.2f is old, v%.2f is recommended.",
tex.luatexversion/100,
luatex_version /100)
end
@@ -502,34 +504,34 @@ end
%
% \subsection{Module loading}
%
-% We load the \ConTeXt\ files with this function. It automatically adds the
-% \texttt{otfl-} prefix to it, so that we call it with the actual \ConTeXt\
+% We load the \context files with this function. It automatically adds the
+% |otfl-| prefix to it, so that we call it with the actual \context
% name.
%
% \begin{macrocode}
function luaotfload.loadmodule(name)
- local tofind = 'otfl-'..name
+ local tofind = "otfl-"..name
local found = kpse.find_file(tofind,"tex")
if found then
- log('loading file %s.', found)
+ log("loading file %s.", found)
dofile(found)
else
- error('file %s not found.', tofind)
+ error("file %s not found.", tofind)
end
end
% \end{macrocode}
%
% We start loading some lua files. These two are some code not used by
-% \ConTeXt\ at all that allow other modules to be used, it provides some
-% low-level \ConTeXt\ functions.
+% \context at all that allow other modules to be used, it provides some
+% low-level \context functions.
%
% \begin{macrocode}
-luaotfload.loadmodule('luat-dum.lua') -- not used in context at all
-luaotfload.loadmodule('luat-ovr.lua') -- override some luat-dum functions
-luaotfload.loadmodule('data-con.lua') -- maybe some day we don't need this one
+luaotfload.loadmodule("luat-dum.lua") -- not used in context at all
+luaotfload.loadmodule("luat-ovr.lua") -- override some luat-dum functions
+luaotfload.loadmodule("data-con.lua") -- maybe some day we don't need this one
% \end{macrocode}
%
-% A hack to remove a warning from \texttt{node-dum.lua} as it is \ConTeXt\
+% A hack to remove a warning from |node-dum.lua| as it is \context
% specific.
%
% \begin{macrocode}
@@ -543,7 +545,7 @@ luaotfload.loadmodule('node-dum.lua')
luaotfload.loadmodule('node-inj.lua')
% \end{macrocode}
%
-% By default \ConTeXt\ takes some private attributes for internal use. To
+% By default \context takes some private attributes for internal use. To
% avoide attribute clashes with other packages, we override the function
% that allocates new attributes, making it a wraper around
% |luatexbase.new_attribute()|. We also prefix attributes with |otfl@| to
@@ -551,7 +553,7 @@ luaotfload.loadmodule('node-inj.lua')
%
% \begin{macrocode}
function attributes.private(name)
- local attr = 'otfl@' .. name
+ local attr = "otfl@" .. name
local number = luatexbase.attributes[attr]
if not number then
number = luatexbase.new_attribute(attr)
@@ -583,8 +585,7 @@ luaotfload.loadmodule('font-dum.lua')
%
% This is a patch for |otfl-font-def.lua|, that defines a reader for ofm
% fonts, this is necessary if we set the forced field of the specification
-% to |ofm|, we use it only when using \textsf{luaotfload}, not
-% |mkluatexfontdb|.
+% to |ofm|.
%
% \begin{macrocode}
if fonts and fonts.tfm and fonts.tfm.readers then
@@ -595,51 +596,34 @@ end
% \textsf{luaotfload} specific modules.
%
% \begin{macrocode}
-luaotfload.loadmodule('font-nms.lua')
-luaotfload.loadmodule('font-clr.lua')
+luaotfload.loadmodule("font-nms.lua")
+luaotfload.loadmodule("font-clr.lua")
% \end{macrocode}
%
% \subsection{Post-processing TFM table}
%
% Here we do some final touches to the loaded TFM table before passing it
-% to the \TeX\ end.
+% to the \tex end.
%
+% First we create a callback for patching fonts on the fly, to be used by
+% other packages.
% \begin{macrocode}
-local function def_font(...)
- local fontdata = fonts.definers.read(...)
- if type(fontdata) == "table" and fontdata.shared then
+luatexbase.create_callback("luaotfload.patch_font", "simple", function() end)
% \end{macrocode}
%
-% First, we add some code to emulate \XeTeX's \cs{fontdimen8},
-% which stores the caps-height of the font. (Cf.\ \cs{fontdimen5} which
-% stores the x-height.)
-%
-% Falls back to measuring the glyph if the font doesn't contain the
-% necessary information.
-% This needs to be extended for fonts that don't contain an `X'.
+% then define a function where font manipulation will take place.
%
% \begin{macrocode}
- local capheight
- local units = fontdata.units
- local size = fontdata.size
- local otfdata = fontdata.shared.otfdata
-
- if otfdata.pfminfo.os2_capheight > 0 then
- capheight = otfdata.pfminfo.os2_capheight / units * size
- else
- if fontdata.characters[string.byte("X")] then
- capheight = fontdata.characters[string.byte("X")].height
- else
- capheight = otfdata.metadata.ascent / units * size
- end
- end
- fontdata.parameters[8] = capheight
+local function def_font(...)
+ local fontdata = fonts.define.read(...)
+ if type(fontdata) == "table" and fontdata.shared then
% \end{macrocode}
%
-% Then we populate \texttt{MathConstants} table, which is required for
+% Then we populate |MathConstants| table, which is required for
% OpenType math.
%
% \begin{macrocode}
+ local otfdata = fontdata.shared.otfdata
if otfdata.metadata.math then
local mc = { }
for k,v in next, otfdata.metadata.math do
@@ -647,41 +631,29 @@ local function def_font(...)
-- keep percent values as is
mc[k] = v
else
- mc[k] = v / units * size
+ mc[k] = v / fontdata.units * fontdata.size
end
end
-- for \overwithdelims
- mc["FractionDelimiterSize"] = 1.01 * size
- mc["FractionDelimiterDisplayStyleSize"] = 2.39 * size
+ mc.FractionDelimiterSize = 1.01 * fontdata.size
+ mc.FractionDelimiterDisplayStyleSize = 2.39 * fontdata.size
fontdata.MathConstants = mc
+ end
% \end{macrocode}
%
-% \LuaTeX\ does not provide interface to accessing
-% \texttt{(Script)ScriptPercentScaleDown} math constants, so we emulate
-% \XeTeX\ behaviour by setting \cs{fontdimen10} and \cs{fontdimen11}.
+% Execute any registered font patching callbacks.
%
% \begin{macrocode}
- if mc["ScriptPercentScaleDown"] then
- fontdata.parameters[10] = mc["ScriptPercentScaleDown"]
- else -- resort to plain TeX default
- fontdata.parameters[10] = 70
- end
- if mc["ScriptScriptPercentScaleDown"] then
- fontdata.parameters[11] = mc["ScriptScriptPercentScaleDown"]
- else -- resort to plain TeX default
- fontdata.parameters[11] = 50
- end
- end
-
+ luatexbase.call_callback("luaotfload.patch_font", fontdata)
end
return fontdata
end
% \end{macrocode}
%
-% \subsection{\ConTeXt\ override}
+% \subsection{\context override}
%
-% Here we override some defaults set in \ConTeXt\ code.
+% Here we override some defaults set in \context code.
%
% \begin{macrocode}
fonts.mode = "node"
@@ -704,35 +676,22 @@ for _,v in next, gsubs do
end
% \end{macrocode}
%
-% Finally two functions
+% Finally we register the callbacks
%
% \begin{macrocode}
-function luaotfload.register_callbacks()
- luatexbase.add_to_callback('pre_linebreak_filter',
- nodes.simple_font_handler,
- 'luaotfload.pre_linebreak_filter')
- luatexbase.add_to_callback('hpack_filter',
- nodes.simple_font_handler,
- 'luaotfload.hpack_filter')
- luatexbase.reset_callback('define_font')
- luatexbase.add_to_callback('define_font',
- def_font,
- 'luaotfload.define_font', 1)
- luatexbase.add_to_callback('find_vf_file',
- fonts.vf.find,
- 'luaotfload.find_vf_file')
-end
-
-function luaotfload.unregister_callbacks()
- luatexbase.remove_from_callback('pre_linebreak_filter',
- 'luaotfload.pre_linebreak_filter')
- luatexbase.remove_from_callback('hpack_filter',
- 'luaotfload.hpack_filter')
- luatexbase.remove_from_callback('define_font',
- 'luaotfload.define_font')
- luatexbase.remove_from_callback('find_vf_file',
- 'luaotfload.find_vf_file')
-end
+luatexbase.add_to_callback("pre_linebreak_filter",
+ nodes.simple_font_handler,
+ "luaotfload.pre_linebreak_filter")
+luatexbase.add_to_callback("hpack_filter",
+ nodes.simple_font_handler,
+ "luaotfload.hpack_filter")
+luatexbase.reset_callback("define_font")
+luatexbase.add_to_callback("define_font",
+ def_font,
+ "luaotfload.define_font", 1)
+luatexbase.add_to_callback("find_vf_file",
+ fonts.vf.find,
+ "luaotfload.find_vf_file")
% \end{macrocode}
%
% \iffalse
@@ -745,7 +704,7 @@ end
%<*package>
% \fi
%
-% Classical Plain+\LaTeX\ package initialization.
+% Classical Plain+\latex package initialization.
%
% \begin{macrocode}
\csname ifluaotfloadloaded\endcsname
@@ -757,39 +716,17 @@ end
\else
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{luaotfload}%
- [2010/10/16 v1.20 OpenType layout system]
+ [2011/02/16 v1.24 OpenType layout system]
\RequirePackage{luatexbase}
\fi
-\RequireLuaModule{lualibs}
-
-\expandafter\edef\csname otfl@AtEnd\endcsname{%
- \catcode64 \the\catcode64\relax
-}
-
-\catcode64 11
-% \end{macrocode}
-%
-% Two small macros to register or unregister the callbacks. Without the
-% callbacks this package is totally turned off.
-%
-% \begin{macrocode}
-\def\otfl@off{
-\directlua{luaotfload.unregister_callbacks()}
-}
-\def\otfl@on{
-\directlua{luaotfload.register_callbacks()}
-}
+\RequireLuaModule{lualibs}
% \end{macrocode}
%
-% We load the |lua| file, and we turn the package on.
+% Finally we load the |lua| module.
%
% \begin{macrocode}
\RequireLuaModule{luaotfload}
-
-\otfl@on
-
-\otfl@AtEnd
% \end{macrocode}
% \iffalse
%</package>
diff --git a/mkluatexfontdb.lua b/mkluatexfontdb.lua
index 98db095..dc46ac0 100755
--- a/mkluatexfontdb.lua
+++ b/mkluatexfontdb.lua
@@ -18,11 +18,6 @@ local version = '1.07' -- same version number as luaotfload
local names = fonts.names
--- the directory in which the database will be saved, can be overwritten
-local output_directory = names.path.localdir
-
-local log = logs.report
-
local function help_msg()
texio.write(string.format([[
Usage: %s [OPTION]...
@@ -30,14 +25,11 @@ Usage: %s [OPTION]...
Rebuild the LuaTeX font database.
Valid options:
- -d --database-dir=DIRECTORY install the database in the specified directory
-f --force force re-indexing all fonts
-q --quiet don't output anything
-v --verbose=LEVEL be more verbose (print the searched directories)
-vv print the loaded fonts
-vvv print all steps of directory searching
- --sys install the database system-wide
- (default is only for the current user)
-V --version print version and exit
-h --help print this message
@@ -60,9 +52,10 @@ the list. For example (using a bash shell),
export OSFONTDIR='/path/to/other/fonts:/Users/will/Library/Fonts:...'
-The output database file is named otfl-fonts.lua. By default it is placed
-in $TEXMFVAR/luatex-cache/generic/names."
-]], name))
+The output database file is named otfl-fonts.lua and is placed under:
+
+ %s"
+]], name, names.path.localdir))
end
local function version_msg()
@@ -76,16 +69,14 @@ Here we fill cmdargs with the good values, and then analyze it.
--]]
local long_opts = {
- ['database-dir'] = "d",
force = "f",
quiet = "q",
help = "h",
- sys = 0 ,
verbose = 1 ,
version = "V",
}
-local short_opts = "d:fqpvVh"
+local short_opts = "fqpvVh"
local force_reload = nil
@@ -107,50 +98,19 @@ local function process_cmdline()
elseif v == "h" then
help_msg()
os.exit(0)
- elseif v == "d" then
- output_directory = optarg [i]
elseif v == "f" then
force_reload = 1
- elseif v == "sys" then
- output_directory = names.path.systemdir
end
end
- if string.match(arg[0], '-sys') then
- output_directory = names.path.systemdir
- end
- output_directory = fonts.path_normalize(output_directory)
names.set_log_level(log_level)
end
-process_cmdline()
-
local function generate(force)
- local savepath = output_directory
- if not lfs.isdir(savepath) then
- log("creating directory %s", savepath)
- dir.mkdirs(savepath)
- if not lfs.isdir(savepath) then
- texio.write_nl(string.format("Error: cannot create directory '%s', exiting.\n", savepath))
- os.exit(1)
- end
- end
- savepath = file.join(savepath, names.path.basename)
- local fh = io.open(savepath, 'a+')
- if not fh then
- texio.write_nl(string.format("Error: cannot write file '%s', exiting.\n", savepath))
- os.exit(1)
- end
- fh:close()
- local fontnames
- if not force_reload and file.isreadable(savepath) then
- fontnames = dofile(savepath)
- else
- fontnames = nil
- end
+ local fontnames, saved
fontnames = names.update(fontnames, force)
- log("%s fonts in the database", #fontnames.mappings)
- table.tofile(savepath, fontnames, true)
- log("saved font names database in %s\n", savepath)
+ logs.report("%s fonts in the database", #fontnames.mappings)
+ saved = names.save(fontnames)
end
+process_cmdline()
generate(force_reload)
diff --git a/otfl-font-nms.lua b/otfl-font-nms.lua
index 938b6bd..0e4bbda 100644
--- a/otfl-font-nms.lua
+++ b/otfl-font-nms.lua
@@ -47,7 +47,7 @@ local function fontnames_init()
}
end
-function names.load()
+local function load_names()
local localpath = file.join(names.path.localdir, names.path.basename)
local systempath = file.join(names.path.systemdir, names.path.basename)
local kpsefound = kpse.find_file(names.path.basename)
@@ -68,14 +68,15 @@ function names.load()
else
logs.info([[Font names database not found, generating new one.
This can take several minutes; please be patient.]])
- data = names.update()
+ data = names.update(fontnames_init())
names.save(data)
end
return data
end
-local synonyms = {
+local synonyms = {
regular = { "normal", "roman", "plain", "book", "medium" },
+ bold = { "boldregular" },
italic = { "regularitalic", "normalitalic", "oblique", "slant" },
bolditalic = { "boldoblique", "boldslat" },
}
@@ -238,7 +239,7 @@ end
local lastislog = 0
-function log(fmt, ...)
+local function log(fmt, ...)
lastislog = 1
texio.write_nl(format("luaotfload | %s", format(fmt,...)))
io.flush()
@@ -248,8 +249,6 @@ logs = logs or { }
logs.report = logs.report or log
logs.info = logs.info or log
-local log = names.log
-
local function font_fullinfo(filename, subfont, texmf)
local t = { }
local f = fontloader.open(filename, subfont)
@@ -635,9 +634,10 @@ local function update_names(fontnames, force)
if force then
fontnames = fontnames_init()
else
- if not fontnames
- or not fontnames.version
- or fontnames.version ~= names.version then
+ if not fontnames then
+ fontnames = names.load()
+ end
+ if fontnames.version ~= names.version then
fontnames = fontnames_init()
if trace_search then
logs.report("No font names database or old one found; "
@@ -659,7 +659,15 @@ local function save_names(fontnames)
if not lfs.isdir(savepath) then
dir.mkdirs(savepath)
end
- table.tofile(file.join(savepath, names.path.basename), fontnames, true)
+ savepath = file.join(savepath, names.path.basename)
+ if file.iswritable(savepath) then
+ table.tofile(savepath, fontnames, true)
+ logs.info("Font names database saved: %s \n", savepath)
+ return savepath
+ else
+ logs.info("Failed to save names database\n")
+ return nil
+ end
end
local function scan_external_dir(dir)
@@ -671,10 +679,11 @@ local function scan_external_dir(dir)
loaded = true
end
new_names = table.copy(old_names)
- scan_dir("zapfino", old_names, new_names)
+ scan_dir(dir, old_names, new_names)
names.data = new_names
end
names.scan = scan_external_dir
+names.load = load_names
names.update = update_names
names.save = save_names
diff --git a/otfl-font-otf.lua b/otfl-font-otf.lua
index 25bccfa..7656f13 100644
--- a/otfl-font-otf.lua
+++ b/otfl-font-otf.lua
@@ -332,7 +332,9 @@ function otf.load(filename,format,sub,featurefile)
local attr = lfs.attributes(filename)
local size, time = attr and attr.size or 0, attr and attr.modification or 0
if featurefile then
- name = name .. "@" .. file.removesuffix(file.basename(featurefile))
+ local fattr = lfs.attributes(featurefile)
+ local fsize, ftime = fattr and fattr.size or 0, fattr and fattr.modification or 0
+ name = name .. "@" .. file.removesuffix(file.basename(featurefile)) .. ftime .. fsize
end
if sub == "" then sub = false end
local hash = name
diff --git a/otfl-luat-dum.lua b/otfl-luat-dum.lua
index 695306b..bd10e89 100644
--- a/otfl-luat-dum.lua
+++ b/otfl-luat-dum.lua
@@ -62,7 +62,7 @@ local remapper = {
otf = "opentype fonts",
ttf = "truetype fonts",
ttc = "truetype fonts",
- dfont = "truetype dictionary",
+ dfont = "truetype fonts",
cid = "cid maps",
fea = "font feature files",
}
diff --git a/tests/font_patch.tex b/tests/font_patch.tex
new file mode 100644
index 0000000..e096551
--- /dev/null
+++ b/tests/font_patch.tex
@@ -0,0 +1,24 @@
+\input{luaotfload.sty}
+\directlua {
+ local function patch(fontdata)
+ local mc = fontdata.MathConstants
+ local em = fontdata.units
+ local sz = fontdata.size
+ if fontdata.psname == "CambriaMath" and mc then
+ mc.DisplayOperatorMinHeight = 2800 / em * sz
+ end
+ end
+ luatexbase.add_to_callback("luaotfload.patch_font", patch, "cambria.domh")
+}
+
+\font\4={name:Cambria Math:mode=base;script=math} at 10pt
+\font\5={name:Cambria Math:mode=base;script=math;ssty=1} at 7pt
+\font\6={name:Cambria Math:mode=node;script=math;ssty=2} at 5pt
+\textfont4=\4 \scriptfont4=\5 \scriptscriptfont4=\6
+
+$$
+\Umathchar"1"4`∫
+\Umathchar"1"4`∑
+$$
+\bye
+
diff --git a/tests/opbd.fea b/tests/opbd.fea
index affc3c5..54f687a 100644
--- a/tests/opbd.fea
+++ b/tests/opbd.fea
@@ -1,5 +1,15 @@
+languagesystem DFLT dlft;
+languagesystem grek dflt;
+languagesystem latn dflt;
+languagesystem latn AZE;
+languagesystem latn CRT;
+languagesystem latn MOL;
+languagesystem latn NLD;
+languagesystem latn PLK;
+languagesystem latn ROM;
+languagesystem latn TRK;
-lookup RightBounds {
+feature rtbd {
lookupflag 0;
pos \exclam <100 0 0 0>;
pos \percent <100 0 0 0>;
@@ -98,9 +108,9 @@ lookup RightBounds {
pos \L_uni0303 <50 0 0 0>;
pos \T_uni0303 <50 0 0 0>;
pos \T_uni0308 <50 0 0 0>;
-} RightBounds;
+} rtbd;
-lookup LeftBounds {
+feature lfbd {
lookupflag 0;
pos \percent <-100 0 -100 0>;
pos \ampersand <-50 0 -50 0>;
@@ -174,71 +184,4 @@ lookup LeftBounds {
pos \J_uni030C.cap <-50 0 -50 0>;
pos \T_uni0303 <-50 0 -50 0>;
pos \T_uni0308 <-50 0 -50 0>;
-} LeftBounds;
-
-feature rtbd {
-
- script DFLT;
- language dflt ;
- lookup RightBounds;
-
- script grek;
- language dflt ;
- lookup RightBounds;
-
- script latn;
- language dflt ;
- lookup RightBounds;
- language AZE exclude_dflt;
- lookup RightBounds;
- language CRT exclude_dflt;
- lookup RightBounds;
- language MOL exclude_dflt;
- lookup RightBounds;
- language NLD exclude_dflt;
- lookup RightBounds;
- language PLK exclude_dflt;
- lookup RightBounds;
- language ROM exclude_dflt;
- lookup RightBounds;
- language TRK exclude_dflt;
- lookup RightBounds;
-
- script thai;
- language dflt ;
- lookup RightBounds;
-} rtbd;
-
-feature lfbd {
-
- script DFLT;
- language dflt ;
- lookup LeftBounds;
-
- script grek;
- language dflt ;
- lookup LeftBounds;
-
- script latn;
- language dflt ;
- lookup LeftBounds;
- language AZE exclude_dflt;
- lookup LeftBounds;
- language CRT exclude_dflt;
- lookup LeftBounds;
- language MOL exclude_dflt;
- lookup LeftBounds;
- language NLD exclude_dflt;
- lookup LeftBounds;
- language PLK exclude_dflt;
- lookup LeftBounds;
- language ROM exclude_dflt;
- lookup LeftBounds;
- language TRK exclude_dflt;
- lookup LeftBounds;
-
- script thai;
- language dflt ;
- lookup LeftBounds;
} lfbd;
-
diff --git a/tests/opbd.tex b/tests/opbd.tex
index 4c45781..50c4dfd 100644
--- a/tests/opbd.tex
+++ b/tests/opbd.tex
@@ -2,7 +2,7 @@
\pdfprotrudechars2 \pdfadjustspacing2
-\font\testa=file:texgyrepagella-regular:script=latn at 12pt
+\font\testa=file:texgyrepagella-regular:script=latn at 12pt
\font\testb=file:texgyrepagella-regular:mode=node;script=latn;protrusion=yes;featurefile=opbd.fea;+opbd at 12pt
\testa \input tufte \par
\testb \input tufte \par
diff --git a/tests/tkrn.fea b/tests/tkrn.fea
index 30fc11f..c83927d 100644
--- a/tests/tkrn.fea
+++ b/tests/tkrn.fea
@@ -1,16 +1,8 @@
+languagesystem DFLT dflt;
+languagesystem latn dflt;
-lookup TeXkern {
+feature tkrn {
lookupflag 0;
pos E X -125;
pos T <0 0 -166 0> E <0 -235 0 0>;
-} TeXkern;
-
-feature tkrn {
- script DFLT;
- language dflt ;
- lookup TeXkern;
- script latn;
- language dflt ;
- lookup TeXkern;
-
} tkrn;