From ca90ade9a3e6ded06b5dc430075751cf86f19937 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sat, 23 Apr 2011 00:58:21 +0000 Subject: luaotfload (21apr11) git-svn-id: svn://tug.org/texlive/trunk@22165 c570f23f-e606-0410-a88d-b1316a301751 --- .../texmf-dist/source/luatex/luaotfload/Makefile | 8 +- .../source/luatex/luaotfload/luaotfload.dtx | 271 ++++++++++----------- 2 files changed, 128 insertions(+), 151 deletions(-) (limited to 'Master/texmf-dist/source') diff --git a/Master/texmf-dist/source/luatex/luaotfload/Makefile b/Master/texmf-dist/source/luatex/luaotfload/Makefile index ddf2f45ff81..c649875203f 100644 --- a/Master/texmf-dist/source/luatex/luaotfload/Makefile +++ b/Master/texmf-dist/source/luatex/luaotfload/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/Master/texmf-dist/source/luatex/luaotfload/luaotfload.dtx b/Master/texmf-dist/source/luatex/luaotfload/luaotfload.dtx index 19286d52dc8..5bb9b6a3c90 100644 --- a/Master/texmf-dist/source/luatex/luaotfload/luaotfload.dtx +++ b/Master/texmf-dist/source/luatex/luaotfload/luaotfload.dtx @@ -36,7 +36,7 @@ \input docstrip.tex \Msg{************************************************************************} \Msg{* Installation} -\Msg{* Package: luaotfload v1.24 OpenType layout system} +\Msg{* Package: luaotfload v1.25 OpenType layout system} \Msg{************************************************************************} \keepsilent @@ -104,10 +104,9 @@ and the derived files %<*driver> \NeedsTeXFormat{LaTeX2e} \ProvidesFile{luaotfload.drv}% - [2011/02/16 v1.24 OpenType layout system]% + [2011/04/21 v1.25 OpenType layout system]% \documentclass{ltxdoc} \usepackage{metalogo,multicol,mdwlist,fancyvrb,xcolor,xspace} -\usepackage{charter} \usepackage[ bookmarks=true, colorlinks=true, @@ -120,6 +119,12 @@ 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} \newcommand\tex {\TeX\xspace} @@ -161,7 +166,7 @@ and the derived files % \GetFileInfo{luaotfload.drv} % % \title{The \textsf{luaotfload} package} -% \date{2011/02/16 v1.24} +% \date{2011/04/21 v1.25} % \author{Elie Roux and Khaled Hosny\\ % Support: \email{lualatex-dev@tug.org}} % @@ -212,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. +% 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 @@ -253,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 @@ -300,7 +300,7 @@ 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 @@ -316,14 +316,14 @@ 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.) +% |mapping=text-tex| using \xetex's input remapping feature.) % % % \section{Font names database} @@ -389,39 +389,39 @@ and the derived 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} % @@ -439,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 @@ -451,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.24, - date = "2011/02/16", + version = 1.25, + date = "2011/04/21", description = "OpenType layout system.", author = "Elie Roux & Hans Hagen", copyright = "Elie Roux", @@ -473,7 +470,7 @@ 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. @@ -482,7 +479,7 @@ kpse.init_prog('', 600, '/') 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 @@ -491,18 +488,18 @@ 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 +% |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} @@ -512,12 +509,12 @@ end % 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} @@ -527,9 +524,9 @@ tex.attribute[0] = 0 % Node support modules. % % \begin{macrocode} -luaotfload.loadmodule('font-ini.lua') -luaotfload.loadmodule('node-dum.lua') -luaotfload.loadmodule('node-inj.lua') +luaotfload.loadmodule("font-ini.lua") +luaotfload.loadmodule("node-dum.lua") +luaotfload.loadmodule("node-inj.lua") % \end{macrocode} % % By default \context takes some private attributes for internal use. To @@ -540,7 +537,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) @@ -552,20 +549,20 @@ end % Font handling modules. % % \begin{macrocode} -luaotfload.loadmodule('font-tfm.lua') -luaotfload.loadmodule('font-cid.lua') -luaotfload.loadmodule('font-ott.lua') -luaotfload.loadmodule('font-map.lua') -luaotfload.loadmodule('font-otf.lua') -luaotfload.loadmodule('font-otd.lua') -luaotfload.loadmodule('font-oti.lua') -luaotfload.loadmodule('font-otb.lua') -luaotfload.loadmodule('font-otn.lua') -luaotfload.loadmodule('font-ota.lua') -luaotfload.loadmodule('font-otc.lua') -luaotfload.loadmodule('font-def.lua') -luaotfload.loadmodule('font-xtx.lua') -luaotfload.loadmodule('font-dum.lua') +luaotfload.loadmodule("font-tfm.lua") +luaotfload.loadmodule("font-cid.lua") +luaotfload.loadmodule("font-ott.lua") +luaotfload.loadmodule("font-map.lua") +luaotfload.loadmodule("font-otf.lua") +luaotfload.loadmodule("font-otd.lua") +luaotfload.loadmodule("font-oti.lua") +luaotfload.loadmodule("font-otb.lua") +luaotfload.loadmodule("font-otn.lua") +luaotfload.loadmodule("font-ota.lua") +luaotfload.loadmodule("font-otc.lua") +luaotfload.loadmodule("font-def.lua") +luaotfload.loadmodule("font-xtx.lua") +luaotfload.loadmodule("font-dum.lua") % \end{macrocode} % % This is a patch for |otfl-font-def.lua|, that defines a reader for ofm @@ -581,8 +578,8 @@ 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} @@ -604,38 +601,11 @@ local function def_font(...) if type(fontdata) == "table" and fontdata.shared then % \end{macrocode} % -% Here 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'. -% -% XXX: move to \texttt{fontspec}. -% -% \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 -% \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 @@ -643,33 +613,14 @@ 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{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}. -% -% XXX: move to \texttt{unicode-math}. -% -% \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 % \end{macrocode} % @@ -710,19 +661,45 @@ end % Finally we register the callbacks % % \begin{macrocode} -luatexbase.add_to_callback('pre_linebreak_filter', +luatexbase.add_to_callback("pre_linebreak_filter", nodes.simple_font_handler, - 'luaotfload.pre_linebreak_filter') -luatexbase.add_to_callback('hpack_filter', + "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', + "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', + "luaotfload.define_font", 1) +luatexbase.add_to_callback("find_vf_file", fonts.vf.find, - 'luaotfload.find_vf_file') + "luaotfload.find_vf_file") +% \end{macrocode} +% XXX: see https://github.com/wspr/unicode-math/issues/185 +% +% \luatex does not provide interface to accessing +% |(Script)ScriptPercentScaleDown| math constants, so we +% emulate \xetex behaviour by setting |\fontdimen10| and +% |\fontdimen11|. +% +% \begin{macrocode} +local function set_sscale_diments(fontdata) + local mc = fontdata.MathConstants + if mc then + 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 +end + +luatexbase.add_to_callback("luaotfload.patch_font", set_sscale_diments, "unicodemath.set_sscale_diments") % \end{macrocode} % % \iffalse @@ -747,7 +724,7 @@ luatexbase.add_to_callback('find_vf_file', \else \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{luaotfload}% - [2011/02/16 v1.24 OpenType layout system] + [2011/04/21 v1.25 OpenType layout system] \RequirePackage{luatexbase} \fi -- cgit v1.2.3