From 78334b0d4607b242273f9d0cde94f6a6fba51832 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Wed, 26 Sep 2018 20:50:34 +0000 Subject: luaotfload (26sep18) git-svn-id: svn://tug.org/texlive/trunk@48771 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/luatex/luaotfload/NEWS | 12 + Master/texmf-dist/doc/luatex/luaotfload/README | 97 - Master/texmf-dist/doc/luatex/luaotfload/README.md | 103 ++ .../texmf-dist/doc/luatex/luaotfload/filegraph.pdf | Bin 59899 -> 37564 bytes .../texmf-dist/doc/luatex/luaotfload/filegraph.tex | 265 +++ .../doc/luatex/luaotfload/luaotfload-conf.pdf | Bin 0 -> 77373 bytes .../doc/luatex/luaotfload/luaotfload-conf.tex | 707 ++++++++ .../doc/luatex/luaotfload/luaotfload-latex.pdf | Bin 0 -> 324726 bytes .../doc/luatex/luaotfload/luaotfload-latex.tex | 520 ++++++ .../doc/luatex/luaotfload/luaotfload-main.tex | 1899 ++++++++++++++++++++ .../doc/luatex/luaotfload/luaotfload-tool.pdf | Bin 0 -> 76599 bytes .../doc/luatex/luaotfload/luaotfload-tool.rst | 328 ++++ .../doc/luatex/luaotfload/luaotfload-tool.tex | 517 ++++++ .../doc/luatex/luaotfload/luaotfload.conf.rst | 409 +++++ .../doc/luatex/luaotfload/luaotfload.pdf | Bin 225981 -> 0 bytes .../luaotfload/valgrind-kpse-suppression.sup | 140 -- 16 files changed, 4760 insertions(+), 237 deletions(-) delete mode 100644 Master/texmf-dist/doc/luatex/luaotfload/README create mode 100644 Master/texmf-dist/doc/luatex/luaotfload/README.md create mode 100644 Master/texmf-dist/doc/luatex/luaotfload/filegraph.tex create mode 100644 Master/texmf-dist/doc/luatex/luaotfload/luaotfload-conf.pdf create mode 100644 Master/texmf-dist/doc/luatex/luaotfload/luaotfload-conf.tex create mode 100644 Master/texmf-dist/doc/luatex/luaotfload/luaotfload-latex.pdf create mode 100644 Master/texmf-dist/doc/luatex/luaotfload/luaotfload-latex.tex create mode 100644 Master/texmf-dist/doc/luatex/luaotfload/luaotfload-main.tex create mode 100644 Master/texmf-dist/doc/luatex/luaotfload/luaotfload-tool.pdf create mode 100644 Master/texmf-dist/doc/luatex/luaotfload/luaotfload-tool.rst create mode 100644 Master/texmf-dist/doc/luatex/luaotfload/luaotfload-tool.tex create mode 100644 Master/texmf-dist/doc/luatex/luaotfload/luaotfload.conf.rst delete mode 100644 Master/texmf-dist/doc/luatex/luaotfload/luaotfload.pdf delete mode 100644 Master/texmf-dist/doc/luatex/luaotfload/valgrind-kpse-suppression.sup (limited to 'Master/texmf-dist/doc/luatex/luaotfload') diff --git a/Master/texmf-dist/doc/luatex/luaotfload/NEWS b/Master/texmf-dist/doc/luatex/luaotfload/NEWS index 83ac5c20d73..ff28406d0c1 100644 --- a/Master/texmf-dist/doc/luatex/luaotfload/NEWS +++ b/Master/texmf-dist/doc/luatex/luaotfload/NEWS @@ -1,5 +1,17 @@ Change History -------------- +2018-09-21 luaotfload v2.9 + * added various testfiles for the l3build system/travis tests to the github repository + * solved a bug regarding directions https://github.com/u-fischer/lua-font-pond/issues/12 + * adapted luaotfload-letterspace to new fontloader + * solved the case problem see https://github.com/u-fischer/lua-font-pond/issues/6 + * Fix parsing of font.conf see https://github.com/lualatex/luaotfload/pull/420 + * imported new versions of the context files - fontloader is compatible with luatex 1.08 again + * adapted the files list + * created a luaotfload-filelist.lua which describes the files of the package + * removed some not functional files + * adapted mkstatus to use the new file list. + 2017-01-29, luaotfload v2.8: * Latest fontloader code. * Support for Luatex 1.0. diff --git a/Master/texmf-dist/doc/luatex/luaotfload/README b/Master/texmf-dist/doc/luatex/luaotfload/README deleted file mode 100644 index 3df136f0d3e..00000000000 --- a/Master/texmf-dist/doc/luatex/luaotfload/README +++ /dev/null @@ -1,97 +0,0 @@ -******************************************************************************* - The Luaotfload Package -******************************************************************************* - -Luaotfload is an adaptation of the ConTeXt font loading system for the Plain -and LaTeX formats. It allows OpenType fonts to be loaded with font features -accessible using an extended font request syntax while providing compatibility -with XeTeX. By indexing metadata in a database it facilitates loading fonts by -their proper names instead of file names. - -Luaotfload may be loaded in Plain LuaTeX with "\input luaotfload.sty" and in -LuaLaTeX with "\usepackage{luaotfload}". LuaLaTeX users may be interested in -the fontspec package which provides a high-level interface to the functionality -provided by this package. - -Please see the documentation luaotfload.pdf for more information. - -This package is developed by the LuaLaTeX dev team on -. Please report bugs to the issue -tracker there. - -The development for LuaLaTeX is discussed on the lualatex-dev mailing list. See - for details. - - -Responsible Persons -------------------------------------------------------------------------------- -The following people have contributed to this package. - -Khaled Hosny -Elie Roux -Will Robertson -Philipp Gesang -Dohyun Kim -Reuben Thomas -Joseph Wright -Manuel Pégourié-Gonnard -Olof-Joachim Frahm -Patrick Gundlach -Philipp Stephani -David Carlisle -Yan Zhou @zhouyan - -Installation -------------------------------------------------------------------------------- - -Here are the recommended installation methods (preferred first). - -1. If you are using TeX Live 2008 or later, use 'tlmgr install luaotfload'. - Alternatively, try your (TeX or Linux) distribution's package management - system. - -2. a. Download luaotfload.tds.zip from CTAN. - b. Unzip it at the root of one or your TDS trees. - c. You may need to update some filename database after, see your TeX - distribution's manual for details. - -3. a. Grab the sources from CTAN or github. - b. Run 'make install DESTDIR=/path/to/texmf'. - c. See 2c. - -4. Try to figure it out by looking at the Makefile and comments in the sources. - -Prerequisites -------------------------------------------------------------------------------- - -You need GNU make to use the Makefile. The executable may be called "gmake" on -your system. - -Typesetting the documentation requires LuaTeX and GraphViz. The Docutils are -needed to generate the manpage. - -License -------------------------------------------------------------------------------- - -The luaotfload bundle, as a derived work of ConTeXt, is distributed under the -GNU GPLv2 license: - - - -This license requires the license itself to be distributed with the work. For -its full text see the documentation in luaotfload.pdf. - - - DISCLAIMER - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - See headers of each source file for copyright details. - diff --git a/Master/texmf-dist/doc/luatex/luaotfload/README.md b/Master/texmf-dist/doc/luatex/luaotfload/README.md new file mode 100644 index 00000000000..1b80398bcdd --- /dev/null +++ b/Master/texmf-dist/doc/luatex/luaotfload/README.md @@ -0,0 +1,103 @@ +# The Luaotfload Package + +VERSION: 2.9 + +DATE: 2018-09-24 + + +## Description + +Luaotfload is an adaptation of the ConTeXt font loading system for the Plain +and LaTeX formats. It allows OpenType fonts to be loaded with font features +accessible using an extended font request syntax while providing compatibility +with XeTeX. By indexing metadata in a database it facilitates loading fonts by +their proper names instead of file names. + +Luaotfload may be loaded in Plain LuaTeX with "\input luaotfload.sty" and in +LuaLaTeX with "\usepackage{luaotfload}". LuaLaTeX users may be interested in +the fontspec package which provides a high-level interface to the functionality +provided by this package. + +Please see the documentation luaotfload.pdf for more information. + +## Maintenance + +This package is currently maintained at +. + +Issues can be reported at the issue tracker or at the old issue tracker on +. + +The development for LuaLaTeX is discussed on the lualatex-dev mailing list. See + for details. + + +## Responsible Persons + +The following people have contributed to this package. + +- Khaled Hosny +- Elie Roux +- Will Robertson +- Philipp Gesang +- Dohyun Kim +- Reuben Thomas +- Joseph Wright +- Manuel Pégourié-Gonnard +- Olof-Joachim Frahm +- Patrick Gundlach +- Philipp Stephani +- David Carlisle +- Yan Zhou @zhouyan +- Ulrike Fischer +- Marcel Krüger + +## Installation + +1. Install the current version with the package management tools of your TeX system. + If you want to install manually: there is a tds-zip file which can be unpacked in a texmf tree. + +2. If you want to try the development version download the texmf folder in the development branch. + at + +3. Manual installation: + * luaotfload-tool.lua belongs in scripts/luatex/luaotfload + * fontloader-reference-load-order.tex and fontloader-reference-load-order.lua are source files and can got in source or doc + * the other lua-files and the sty belong in tex/luatex/luaotfload + * luaotfload.conf.5 and luaotfload-tool.1 belong in doc/man + * the rest in doc/luatex/luaotfload + +## Documentation + +* The main documentation is luaotfload-latex.pdf. +* luaotfload.conf.5 and luaotfload-tool.1 are man-files, their sources are the rst-files. +* README.md, NEWS and COPYING contain what their name says. +* The rest are input files. + + + + +## License + +The luaotfload bundle, as a derived work of ConTeXt, is distributed under the +GNU GPLv2 license: + + + +This license requires the license itself to be distributed with the work. For +its full text see the documentation in luaotfload.pdf. + + +## DISCLAIMER + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; version 2. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + See headers of each source file for copyright details. + diff --git a/Master/texmf-dist/doc/luatex/luaotfload/filegraph.pdf b/Master/texmf-dist/doc/luatex/luaotfload/filegraph.pdf index 15a752213ee..5dada16b980 100644 Binary files a/Master/texmf-dist/doc/luatex/luaotfload/filegraph.pdf and b/Master/texmf-dist/doc/luatex/luaotfload/filegraph.pdf differ diff --git a/Master/texmf-dist/doc/luatex/luaotfload/filegraph.tex b/Master/texmf-dist/doc/luatex/luaotfload/filegraph.tex new file mode 100644 index 00000000000..e37167400c5 --- /dev/null +++ b/Master/texmf-dist/doc/luatex/luaotfload/filegraph.tex @@ -0,0 +1,265 @@ +% !Mode:: "TeX:EN:UTF-8:Main" +%created with by @marmot 14.09.2018 +% +\documentclass[border=3.14mm,tikz]{standalone} +\usetikzlibrary{fit,matrix,positioning,arrows.meta,decorations.text,shapes.callouts} +\pgfdeclarelayer{background} +\pgfdeclarelayer{container} +\pgfdeclarelayer{foreground} +\pgfsetlayers{container,background,main,foreground} +\usepackage {fontspec} +\usepackage {unicode-math} +\usepackage{tikzmarmots,tikzducks} + +\setmainfont[ +% Numbers = OldStyle, %% buggy with font cache + Ligatures = TeX, + BoldFont = {Linux Libertine O Bold}, + ItalicFont = {Linux Libertine O Italic}, + SlantedFont = {Linux Libertine O Italic}, +]{Linux Libertine O} +\setmonofont[Ligatures=TeX,Scale=MatchLowercase]{InconsolataN-Regular.otf} +%setsansfont[Ligatures=TeX]{Linux Biolinum O} +\setsansfont[Ligatures=TeX,Scale=MatchLowercase]{Iwona Medium} + +\usepackage{luacode} +\begin{luacode} +require("luaotfload-filelist.lua") + +function printctxfontlist () + t= luaotfload.filelist.selectctxfontentries (luaotfload.filelist.data) + for i,v in ipairs (t) do + tex.sprint("\\mbox{"..v.name..v.ext.."} ") + end +end + +function printctxlibslist () + t= luaotfload.filelist.selectctxlibsentries (luaotfload.filelist.data) + local rowcnt = 0 + local sep = "&" + for i,v in ipairs (t) do + rowcnt = rowcnt + 1 + if rowcnt % 4 == 0 then sep = "\\\\" else sep = "&" end + tex.sprint("\\mbox{"..v.name..v.ext.."}".. sep) + end +end + +function printctxgenericlist () + t= luaotfload.filelist.selectctxgeneusedentries (luaotfload.filelist.data) + local rowcnt = 0 + local sep = "&" + for i,v in ipairs (t) do + rowcnt = rowcnt + 1 + if rowcnt % 2 == 0 then sep = "\\\\" else sep = "&" end + tex.sprint("\\mbox{"..v.ctxpref..v.name..v.ext.."}".. sep) + end +end + + +function printlibrarylist () + t = luaotfload.filelist.selectlollibentries (luaotfload.filelist.data) + local rowcnt = 0 + local sep = "&" + for i,v in ipairs (t) do + rowcnt = rowcnt + 1 + if rowcnt % 2 == 0 then sep = "\\\\" else sep = "&" end + tex.sprint("\\mbox{"..v.gitpref..v.name..v.ext.."}".. sep) + end +end + +function printscriptlist () + t = luaotfload.filelist.selectlolscrentries (luaotfload.filelist.data) + for i,v in ipairs ( t ) do + if v.kind == 8 then + tex.sprint( v.name .."\\\\") + end + end +end + +\end{luacode} +\begin{document} +\begin{tikzpicture}[rounded corners,basic/.style={inner +sep=9pt,font=\ttfamily,align=center}] +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% text nodes +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% m1 +\matrix [matrix of nodes,font=\ttfamily,nodes={anchor=base west}, +label={[name=mL1,font=\itshape]above:Luaotfload Libraries}] (m1) +{% +%<<<<<<<<<<<<<<<< +\directlua{printlibrarylist()} +%>>>>>>>>>>>>>>>> +}; +% m2 +\node[right=4.2cm of m1,fill=gray!20,draw=gray!30,dashed,basic] (m2) {luaotfload-blacklist.cnf}; +% m3 +\matrix [below=2cm of m1,matrix of nodes,font=\ttfamily,nodes={anchor=base west}, +label={[name=mL3,font=\itshape,anchor=south]above:Lualibs -- Lua Libraries from Context}] (m3) +{% +%<<<<<<<<<<<<<<<< +\directlua{printctxlibslist ()} +%>>>>>>>>>>>>>>>> +}; +% m4 +\node[left=2cm of m3,fill=gray!20,draw=gray!30,thick,basic,inner sep=6mm] (m4) {luaotfload-main.lua}; +% m5 +\node[fill=gray!20,draw=gray!30,dashed,basic,inner sep=6mm,anchor=south west] at (m3.south -| +m2.west)(m5){% +%<<<<<<<<<<<<<<<< +luaotfload-names.lua.gz\\ +luaotfload-names.luc +%>>>>>>>>>>>>>>>> +}; +% m6 +\node[below=3cm of m3,fill=gray!20,draw=gray!30,thick,basic,inner sep=6mm] (m6){luaotfload-init.lua}; +% m7 +\node[above right=0.5cm and 2.5cm of m6,fill=gray!20,draw=gray!30,thick,basic,inner sep=6mm] (m7){luaotfload-log.lua}; +% m8 +\matrix [below left=1cm and 2cm of m6,matrix of nodes,font=\ttfamily, +row sep=5mm, +nodes={inner sep=3mm,fill=orange!10,rounded corners}, +label={[name=mL8,font=\it]above:Fontloader}] (m8) +{% +%<<<<<<<<<<<<<<<< +fontloader-basics-gen.lua\\ +fontloader-YY-MM-DD.lua\\ +%<<<<<<<<<<<<<<<< +}; +% m9 +\node [below right=1cm and 2cm of m6,font=\ttfamily, +inner sep=3mm,text width=7.3cm,align=left, +label={[name=mL9,font=\itshape]Font and Node Libraries from Context}] (m9) +{\spaceskip=1.5em \raggedright +%%<<<<<<<<<<<<<<<< +\directlua{printctxfontlist()} +%>>>>>>>>>>>>>>>> +}; +% m10 +\node [below=1cm of m9,font=\ttfamily, +inner sep=3mm,text width=7.3cm,align=center, +label={[name=mL10,font=\itshape]Font Loader (LuaTeX-Fonts)}] (m10) +{\tabcolsep=0.5em + \begin{tabular}{@{}ll@{}} +%<<<<<<<<<<<<<<<< +\directlua{printctxgenericlist ()} +%>>>>>>>>>>>>>>>> + \end{tabular} +}; +% m11 +\node [above=1cm of m9] (m11) {Merged libraries}; +% m12 +\matrix [below=4cm of m6,xshift=-1cm,matrix of nodes,font=\ttfamily, +row sep=5mm, +nodes={inner sep=3mm,fill=gray!10,rounded corners,text width=3cm,align=center}, +label={[name=mL12,font=\sffamily]above:Standalone scripts}] (m12) +{% +%<<<<<<<<<<<<<<<< +\directlua{printscriptlist ()} +%>>>>>>>>>>>>>>>> +}; +% m13 +\node[below=1.2cm of m10,fill=gray!20,draw=gray!30,thick,basic,inner sep=6mm] (m13) +{% +%<<<<<<<<<<<<<<<< +luaotfload-glyphlist.lua +%>>>>>>>>>>>>>>>> +}; +% m14 +\node[below=0.8cm of m13,fill=gray!20,draw=gray!30,thick,basic,inner sep=6mm] (m14) +{% +%<<<<<<<<<<<<<<<< +luaotfload-characters.lua +%>>>>>>>>>>>>>>>> +}; +% m15 +\node[below=3cm of m8,fill=gray!20,draw=gray!30,thick,basic,inner sep=6mm] +(m15) {% +%<<<<<<<<<<<<<<<< +luaotfload-tool.lua +%>>>>>>>>>>>>>>>> +}; +% m16 +\node[below=1cm of m15,fill=gray!20,draw=gray!30,thick,basic,inner sep=6mm] +(m16) {% +%<<<<<<<<<<<<<<<< +luaotfload-diagnostics.lua +%>>>>>>>>>>>>>>>> +}; +% m17 +\node[below=2cm of m16,xshift=3cm,fill=gray!20,draw=gray!30,dashed,basic,inner sep=6pt] +(m17) {% +%<<<<<<<<<<<<<<<< +luaotfload-status.lua +%>>>>>>>>>>>>>>>> +}; + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% envelopes +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{pgfonlayer}{background} +%M1 +\node[fill=gray!10,fit=(m1)(mL1),rounded corners=0](mF1){}; +%M3 +\node[fill=blue!10,fit=(m3)(mL3),rounded corners=0](mF3){}; +%M9 +\node[fill=purple!10,fit=(m9)(mL9)](mF9){}; +%M10 +\node[fill=purple!10,fit=(m10)(mL10)](mF10){}; +\end{pgfonlayer} +\begin{pgfonlayer}{container} +%M1 +\node[fill=gray!20,fit=(mF1)](M1){}; +%M3 +\node[fill=blue!20,fit=(mF3)](M3){}; +%M8 +\node[fill=orange!20,fit=(m8)(mL8)](mF8){}; +%M11 +\node[fill=purple!20,fit=(m11)(mF9)(mF10)](M11){}; +%M11 +\node[top color=gray!40,bottom color=red!60!black,fit=(mL12)(m12)](M12){}; +\end{pgfonlayer} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% arrows +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{scope}[font=\sffamily,>={Triangle[open]},annotate/.style={postaction={decorate,decoration={text along path,text +align=center,raise=2pt,text={|\sffamily| #1}}}}] +\draw[->,annotate=luaotfload-database.lua] (M1) -- (m2); +\draw[->,annotate=main()] (m4) -- (M1); +\draw[->] (m4) -- (M3); +\draw[->,annotate=luaotfload-database.lua] (M1.-15) to[out=0,in=90] (m5); +\draw[->,annotate=main()] (m4) to[out=-70,in=120] (m6); +\draw[->,annotate=init{{\_}}early()] (m6) to[out=45,in=190] (m7); +\draw[<-,annotate=init{{\_}}early()] (m8-1-1) to[in=-150,out=0] (m6); +\draw[<-,annotate=init{{\_}}main()] (m8-2-1) to[in=-100,out=4] (m6); +\draw[->,annotate=unmerged] (m6) to[out=0,in=180] (mF9.150); +\draw[->,dashed,annotate=merged] (m8-2-1) to[out=0,in=180] (mF9.170); +\draw[->,dashed,annotate=pulls] (m12-1-1) to[out=0,in=180] (mF9); +\draw[->,dashed,annotate=pulls] (m12-1-1) to[out=0,in=180] (mF10); +\draw[<-,dashed,annotate=merges] (m8-2-1) to[out=-45,in=180] (m12-1-1); +\draw[->] (mF10) to node[midway,left]{luatex-fonts-enc.lua} (m13); +\draw[->] (mF10.-30) to[out=-60,in=50]node[pos=0.3,right]{ luaotfload-auxiliary.lua} (m14.15); +\draw[->,dashed,annotate=generates from glyphlist.txt] (m12-2-1) to[out=0,in=180] (m13); +\draw[->,dashed,annotate=generates from Context's char-def.lua] (m12-3-1) to[out=0,in=180] (m14); +\draw[->,dashed,annotate={{-}{-}update}] (m15) to[out=130,in=-80] ++ (-3.5,4) +to[out=100,in=-110] ++ (0,2) +to[out=70,in=-165] (m5); +\draw[->,annotate=version information] (m15) to[out=-170,in=90] ++(-3.5,-3) +to[out=-90,in=180] (m17); +\draw[->] (m15) -- node[midway,right]{-\,-diagnose} (m16); +\draw[->,annotate=hash files] (m16) -- (m17); +\draw[<-,dashed,annotate=generates from distribution files] (m17) +to[out=0,in=-135] ++(5,1) to[out=45,in=0] (m12-4-1); +\end{scope} + +\begin{scope}[shift={([xshift=2cm,yshift=-3cm]current bounding box.north west)}] +\marmot; +\duck[invisible]; +\node[anchor=south,draw,text width=3cm,shape=rectangle callout,font=\sffamily\scriptsize,align=center] +at ([yshift=1cm,xshift=-0.5cm]bill) +{It looks complicated\\ because it is complicated!}; +% +\end{scope} + +\end{tikzpicture} +\end{document} \ No newline at end of file diff --git a/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-conf.pdf b/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-conf.pdf new file mode 100644 index 00000000000..c3fd47ce7ee Binary files /dev/null and b/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-conf.pdf differ diff --git a/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-conf.tex b/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-conf.tex new file mode 100644 index 00000000000..2ae6e89196d --- /dev/null +++ b/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-conf.tex @@ -0,0 +1,707 @@ +\documentclass[a4paper]{article} +% generated by Docutils +% rubber: set program xelatex +\usepackage{fontspec} +% \defaultfontfeatures{Scale=MatchLowercase} +% straight double quotes (defined T1 but missing in TU): +\ifdefined \UnicodeEncodingName + \DeclareTextCommand{\textquotedbl}{\UnicodeEncodingName}{% + {\addfontfeatures{RawFeature=-tlig,Mapping=}\char34}}% +\fi +\usepackage{ifthen} +\usepackage{alltt} +\setcounter{secnumdepth}{0} +\usepackage{longtable,ltcaption,array} +\setlength{\extrarowheight}{2pt} +\newlength{\DUtablewidth} % internal use in tables +\usepackage{tabularx} + +%%% Custom LaTeX preamble +% Linux Libertine (free, wide coverage, not only for Linux) +\setmainfont{Linux Libertine O} +\setsansfont{Linux Biolinum O} +\setmonofont[HyphenChar=None,Scale=MatchLowercase]{DejaVu Sans Mono} + +%%% User specified packages and stylesheets + +%%% Fallback definitions for Docutils-specific commands + +% providelength (provide a length variable and set default, if it is new) +\providecommand*{\DUprovidelength}[2]{ + \ifthenelse{\isundefined{#1}}{\newlength{#1}\setlength{#1}{#2}}{} +} + +% docinfo (width of docinfo table) +\DUprovidelength{\DUdocinfowidth}{0.9\linewidth} + +% subtitle (in document title) +\providecommand*{\DUdocumentsubtitle}[1]{{\large #1}} +% hyperlinks: +\ifthenelse{\isundefined{\hypersetup}}{ + \usepackage[colorlinks=true,linkcolor=blue,urlcolor=blue]{hyperref} + \usepackage{bookmark} + \urlstyle{same} % normal text font (alternatives: tt, rm, sf) +}{} +\hypersetup{ + pdftitle={luaotfload.conf}, +} + +\title{luaotfload.conf% + \label{luaotfload-conf}% + \\ % subtitle% + \DUdocumentsubtitle{Luaotfload configuration file}% + \label{luaotfload-configuration-file}} +\author{} +\date{} + +%%% Body +\begin{document} +\maketitle + +% Docinfo +\begin{center} +\begin{tabularx}{\DUdocinfowidth}{lX} +\textbf{Date}: & + 2018-09-21 \\ +\textbf{Copyright}: & + GPL v2.0 \\ +\textbf{Version}: & + 2.9 \\ +\textbf{Manual section}: & +5 +\\ +\textbf{Manual group}: & +text processing +\\ +\end{tabularx} +\end{center} + + +\section{SYNOPSIS% + \label{synopsis}% +} + +\begin{itemize} +\item \textbf{./luaotfload\{.conf,rc\}} + +\item \textbf{XDG\_CONFIG\_HOME/luaotfload/luaotfload\{.conf,rc\}} + +\item \textbf{\textasciitilde{}/.luaotfloadrc} +\end{itemize} + + +\section{DESCRIPTION% + \label{description}% +} + +The file \texttt{luaotfload.conf} contains configuration options for +\emph{Luaotfload}, a font loading and font management component for LuaTeX. + + +\section{EXAMPLE% + \label{example}% +} + +A small Luaotfload configuration file with few customizations could +look as follows: + +\begin{quote} +\begin{alltt} +[db] + formats = afm,ttf + compress = false + +[misc] + termwidth = 60 + +[run] + log-level = 6 +\end{alltt} +\end{quote} + +This will make Luaotfload ignore all font files except for PostScript +binary fonts with a matching AFM file, and Truetype fonts. Also, an +uncompressed index file will be dumped which is going to be much larger +than the default gzip’ed index. The terminal width +is truncated to 60 characters which influences the verbose output +during indexing. Finally, the verbosity is increased greatly: each font +file being processed will be printed to the stdout on a separate line, +along with lots of other information. + +To observe the difference in behavior, save above snippet to +\texttt{./luaotfload.conf} and update the font index: + +\begin{quote} +\begin{alltt} +luaotfload-tool --update --force +\end{alltt} +\end{quote} + +The current configuration can be written to disk using +\textbf{luaotfload-tool}: + +\begin{quote} +\begin{alltt} +luaotfload-tool --dumpconf > luaotfload.conf +\end{alltt} +\end{quote} + +The result can itself be used as a configuration file. + + +\section{SYNTAX% + \label{syntax}% +} + +The configuration file syntax follows the common INI format. For a more +detailed description please refer to the section “CONFIGURATION FILE” +of \textbf{git-config}(1). A brief list of rules is given below: + +\begin{quote} +\begin{itemize} +\item Blank lines and lines starting with a semicolon (\texttt{;}) are ignored. + +\item A configuration file is partitioned into sections that are declared +by specifying the section title in brackets on a separate line: + +\begin{quote} +\begin{alltt} +[some-section] +... section content ... +\end{alltt} +\end{quote} + +\item Sections consist of one or more variable assignments of the form +\texttt{variable-name = value} E. g.: + +\begin{quote} +\begin{alltt} +[foo] + bar = baz + quux = xyzzy + ... +\end{alltt} +\end{quote} + +\item Section and variable names may contain only uppercase and lowercase +letters as well as dashes (\texttt{-}). +\end{itemize} +\end{quote} + + +\section{VARIABLES% + \label{variables}% +} + +Variables in belong into a configuration section and their values must +be of a certain type. Some of them have further constraints. For +example, the “color callback” must be a string of one of the values +\texttt{post\_linebreak\_filter}, \texttt{pre\_linebreak\_filter}, or +\texttt{pre\_output\_filter}, defined in the section \emph{run} of the +configuration file. + +Currently, the configuration is organized into four sections: + +\begin{description} +\item[{db}] \leavevmode +Options relating to the font index. + +\item[{misc}] \leavevmode +Options without a clearly defined category. + +\item[{paths}] \leavevmode +Path and file name settings. + +\item[{run}] \leavevmode +Options controlling runtime behavior of Luaotfload. + +\end{description} + +The list of valid variables, the sections they are part of and their +type is given below. Types represent Lua types that the values must be +convertible to; they are abbreviated as follows: \texttt{s} for the \emph{string} +type, \texttt{n} for \emph{number}, \texttt{b} for \emph{boolean}. A value of \texttt{nil} means +the variable is unset. + + +\subsection{Section \texttt{db}% + \label{section-db}% +} + +\setlength{\DUtablewidth}{\linewidth} +\begin{longtable*}[c]{|p{0.249\DUtablewidth}|p{0.110\DUtablewidth}|p{0.331\DUtablewidth}|} +\hline + +variable + & +type + & +default + \\ +\hline + +compress + & +b + & +\texttt{true} + \\ +\hline + +designsize-dimen + & +b + & +\texttt{bp} + \\ +\hline + +formats + & +s + & +\texttt{\textquotedbl{}otf,ttf,ttc\textquotedbl{}} + \\ +\hline + +max-fonts + & +n + & +\texttt{2\textasciicircum{}51} + \\ +\hline + +scan-local + & +b + & +\texttt{false} + \\ +\hline + +skip-read + & +b + & +\texttt{false} + \\ +\hline + +strip + & +b + & +\texttt{true} + \\ +\hline + +update-live + & +b + & +\texttt{true} + \\ +\hline +\end{longtable*} + +The flag \texttt{compress} determines whether the font index (usually +\texttt{luaotfload-names.lua{[}.gz{]}} will be stored in compressed forms. +If unset it is equivalent of passing \texttt{--no-compress} to +\textbf{luaotfload-tool}. Since the file is only created for convenience +and has no effect on the runtime behavior of Luaotfload, the flag +should remain set. Most editors come with zlib support anyways. + +The setting \texttt{designsize-dimen} applies when looking up fonts from +families with design sizes. In Opentype, these are specified as +“decipoints” where one decipoint equals ten DTP style “big points”. +When indexing fonts these values are converted to \texttt{sp}. In order to +treat the values as though they were specified in TeX points or Didot +points, set \texttt{designsize-dimen} to \texttt{pt} or \texttt{dd}. + +The list of \texttt{formats} must be a comma separated sequence of strings +containing one or more of these elements: + +\begin{itemize} +\item \texttt{otf} (OpenType format), + +\item \texttt{ttf} and \texttt{ttc} (TrueType format), + +\item \texttt{afm} (Adobe Font Metrics), +\end{itemize} + +It corresponds loosely to the \texttt{--formats} option to +\textbf{luaotfload-tool}. Invalid or duplicate members are ignored; if the +list does not contain any useful identifiers, the default list +\texttt{\textquotedbl{}otf,ttf,ttc\textquotedbl{}} will be used. + +The variable \texttt{max-fonts} determines after processing how many font +files the font scanner will terminate the search. This is useful for +debugging issues with the font index and has the same effect as the +option \texttt{--max-fonts} to \textbf{luaotfload-tools}. + +The \texttt{scan-local} flag, if set, will incorporate the current working +directory as a font search location. NB: This will potentially slow +down document processing because a font index with local fonts will not +be saved to disk, so these fonts will have to be re-indexed whenever +the document is built. + +The \texttt{skip-read} flag is only useful for debugging: It makes +Luaotfload skip reading fonts. The font information for rebuilding the +index is taken from the presently existing one. + +Unsetting the \texttt{strip} flag prevents Luaotfload from removing data +from the index that is only useful when processing font files. NB: this +can increase the size of the index files significantly and has no +effect on the runtime behavior. + +If \texttt{update-live} is set, Luaotfload will reload the database if it +cannot find a requested font. Those who prefer to update manually using +\textbf{luaotfload-tool} should unset this flag. This option does not affect +rebuilds due to version mismatch. + + +\subsection{Section \texttt{default-features}% + \label{section-default-features}% +} + +By default Luaotfload enables \texttt{node} mode and picks the default font +features that are prescribed in the OpenType standard. This behavior +may be overridden in the \texttt{default-features} section. Global defaults +that will be applied for all scripts can be set via the \texttt{global} +option, others by the script they are to be applied to. For example, +a setting of + +\begin{quote} +\begin{alltt} +[default-features] + global = mode=base,color=0000FF + dflt = smcp,onum +\end{alltt} +\end{quote} + +would force \emph{base} mode, tint all fonts blue and activate small +capitals and text figures globally. Features are specified as a comma +separated list of variables or variable-value pairs. Variables without +an explicit value are set to \texttt{true}. + + +\subsection{Section \texttt{misc}% + \label{section-misc}% +} + +\setlength{\DUtablewidth}{\linewidth} +\begin{longtable*}[c]{|p{0.191\DUtablewidth}|p{0.110\DUtablewidth}|p{0.307\DUtablewidth}|} +\hline + +variable + & +type + & +default + \\ +\hline + +statistics + & +b + & +\texttt{false} + \\ +\hline + +termwidth + & +n + & +\texttt{nil} + \\ +\hline + +version + & +s + & + + \\ +\hline +\end{longtable*} + +With \texttt{statistics} enabled, extra statistics will be collected during +index creation and appended to the index file. It may then be queried +at the Lua end or inspected by reading the file itself. + +The value of \texttt{termwidth}, if set, overrides the value retrieved by +querying the properties of the terminal in which Luatex runs. This is +useful if the engine runs with \texttt{shell\_escape} disabled and the actual +terminal dimensions cannot be retrieved. + +The value of \texttt{version} is derived from the version string hard-coded +in the Luaotfload source. Override at your own risk. + + +\subsection{Section \texttt{paths}% + \label{section-paths}% +} + +\setlength{\DUtablewidth}{\linewidth} +\begin{longtable*}[c]{|p{0.226\DUtablewidth}|p{0.110\DUtablewidth}|p{0.435\DUtablewidth}|} +\hline + +variable + & +type + & +default + \\ +\hline + +cache-dir + & +s + & +\texttt{\textquotedbl{}fonts\textquotedbl{}} + \\ +\hline + +names-dir + & +s + & +\texttt{\textquotedbl{}names\textquotedbl{}} + \\ +\hline + +index-file + & +s + & +\texttt{\textquotedbl{}luaotfload-names.lua\textquotedbl{}} + \\ +\hline + +lookups-file + & +s + & +\texttt{\textquotedbl{}luaotfload-lookup-cache.lua\textquotedbl{}} + \\ +\hline +\end{longtable*} + +The paths \texttt{cache-dir} and \texttt{names-dir} determine the subdirectory +inside the Luaotfload subtree of the \texttt{luatex-cache} directory where +the font cache and the font index will be stored, respectively. + +Inside the index directory, the names of the index file and the font +lookup cache will be derived from the respective values of +\texttt{index-file} and \texttt{lookups-file}. This is the filename base for the +bytecode compiled version as well as -- for the index -- the gzipped +version. + + +\subsection{Section \texttt{run}% + \label{section-run}% +} + +\setlength{\DUtablewidth}{\linewidth} +\begin{longtable*}[c]{|p{0.226\DUtablewidth}|p{0.110\DUtablewidth}|p{0.365\DUtablewidth}|} +\hline + +variable + & +type + & +default + \\ +\hline + +anon-sequence + & +s + & +\texttt{\textquotedbl{}tex,path,name\textquotedbl{}} + \\ +\hline + +color-callback + & +s + & +\texttt{\textquotedbl{}post\_linebreak\_filter\textquotedbl{}} + \\ +\hline + +definer + & +s + & +\texttt{\textquotedbl{}patch\textquotedbl{}} + \\ +\hline + +log-level + & +n + & +\texttt{0} + \\ +\hline + +resolver + & +s + & +\texttt{\textquotedbl{}cached\textquotedbl{}} + \\ +\hline + +fontloader + & +s + & +\texttt{\textquotedbl{}default\textquotedbl{}} + \\ +\hline +\end{longtable*} + +Unqualified font lookups are treated with the flexible “anonymous” +mechanism. This involves a chain of lookups applied successively until +the first one yields a match. By default, the lookup will first search +for TFM fonts using the Kpathsea library. If this wasn’t successful, an +attempt is made at interpreting the request as an absolute path (like +the \texttt{{[}/path/to/font/foo.ttf{]}} syntax) or a file name +(\texttt{file:foo.ttf}). Finally, the request is interpreted as a font name +and retrieved from the index (\texttt{name:Foo Regular}). This behavior can +be configured by specifying a list as the value to \texttt{anon-sequence}. +Available items are \texttt{tex}, \texttt{path}, \texttt{name} -- representing the +lookups described above, respectively --, and \texttt{file} for searching a +filename but not an absolute path. Also, \texttt{my} lookups are valid +values but they should only be used from within TeX documents, because +there is no means of customizing a \texttt{my} lookups on the command line. + +The \texttt{color-callback} option determines the stage at which fonts that +defined with a \texttt{color=xxyyzz} feature will be colorized. By default +this happens in a \texttt{post\_linebreak\_filter} but alternatively the +\texttt{pre\_linebreak\_filter} or \texttt{pre\_output\_filter} may be chosen, which +is faster but might produce inconsistent output. The +\texttt{pre\_output\_filter} used to be the default in the 1.x series of +Luaotfload, whilst later versions up to and including 2.5 hooked into +the \texttt{pre\_linebreak\_filter} which naturally didn’t affect any glyphs +inserting during hyphenation. Both are kept around as options to +restore the previous behavior if necessary. + +The \texttt{definer} allows for switching the \texttt{define\_font} callback. +Apart from the default \texttt{patch} one may also choose the \texttt{generic} +one that comes with the vanilla fontloader. Beware that this might +break tools like Fontspec that rely on the \texttt{patch\_font} callback +provided by Luaotfload to perform important corrections on font data. + +The fontloader backend can be selected by setting the value of +\texttt{fontloader}. The most important choices are \texttt{default}, which will +load the dedicated Luaotfload fontloader, and \texttt{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: \texttt{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, \texttt{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 \texttt{context} with a colon to specify a directory prefix where +the \emph{TEXMF} is located that the files should be loaded from, e. g. +\texttt{context:\textasciitilde{}/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 \texttt{log-level} sets the default verbosity of messages +printed by Luaotfload. Only messages defined with a verbosity of less +than or equal to the supplied value will be output on the terminal. +At a log level of five Luaotfload can be very noisy. Also, printing too +many messages will slow down the interpreter due to line buffering +being disabled (see \textbf{setbuf}(3)). + +The \texttt{resolver} setting allows choosing the font name resolution +function: With the default value \texttt{cached} Luaotfload saves the result +of a successful font name request to a cache file to speed up +subsequent lookups. The alternative, \texttt{normal} circumvents the cache +and resolves every request individually. (Since to the restructuring of +the font name index in Luaotfload 2.4 the performance difference +between the cached and uncached lookups should be marginal.) + + +\section{FILES% + \label{files}% +} + +Luaotfload only processes the first configuration file it encounters at +one of the search locations. The file name may be either +\texttt{luaotfload.conf} or \texttt{luaotfloadrc}, except for the dotfile in the +user’s home directory which is expected at \texttt{\textasciitilde{}/.luaotfloadrc}. + +Configuration files are located following a series of steps. The search +terminates as soon as a suitable file is encountered. The sequence of +locations that Luaotfload looks at is + +\begin{enumerate} +\renewcommand{\labelenumi}{\roman{enumi}.} +\item The current working directory of the LuaTeX process. + +\item The subdirectory \texttt{luaotfload/} inside the XDG configuration +tree, e. g. \texttt{/home/oenothea/config/luaotfload/}. + +\item The dotfile. + +\item The \emph{TEXMF} (using kpathsea). +\end{enumerate} + + +\section{SEE ALSO% + \label{see-also}% +} + +\textbf{luaotfload-tool}(1), \textbf{luatex}(1), \textbf{lua}(1) + +\begin{itemize} +\item \texttt{texdoc luaotfload} to display the PDF manual for the \emph{Luaotfload} +package + +\item Luaotfload development \url{https://github.com/u-fischer/luaotfload} + +\item LuaLaTeX mailing list \url{http://tug.org/pipermail/lualatex-dev/} + +\item LuaTeX \url{http://luatex.org/} + +\item Luaotfload on CTAN \url{http://ctan.org/pkg/luaotfload} +\end{itemize} + + +\section{REFERENCES% + \label{references}% +} + +\begin{itemize} +\item The XDG base specification +\url{http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html}. +\end{itemize} + + +\section{AUTHORS% + \label{authors}% +} + +\emph{Luaotfload} was developed by the LuaLaTeX dev team +(\url{https://github.com/lualatex/}). It is currently maintained by Ulrike Fischer +and Marcel Krüger at \url{https://github.com/u-fischer/luaotfload} + +This manual page was written by Philipp Gesang <\href{mailto:phg@phi-gamma.net}{phg@phi-gamma.net}>. + +\end{document} diff --git a/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-latex.pdf b/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-latex.pdf new file mode 100644 index 00000000000..75eaaaff1d8 Binary files /dev/null and b/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-latex.pdf differ diff --git a/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-latex.tex b/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-latex.tex new file mode 100644 index 00000000000..f7ff510afef --- /dev/null +++ b/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-latex.tex @@ -0,0 +1,520 @@ +% !Mode:: "TeX:EN:UTF-8:Main" +\suppresslongerror1%% sigh ... +%% Copyright (C) 2009-2018 +%% +%% by Elie Roux +%% and Khaled Hosny +%% and Philipp Gesang +%% +%% This file is part of Luaotfload. +%% +%% Home: https://github.com/lualatex/luaotfload +%% Support: . +%% +%% Luaotfload is under the GPL v2.0 (exactly) license. +%% +%% ---------------------------------------------------------------------------- +%% +%% Luaotfload is free software; you can redistribute it and/or +%% modify it under the terms of the GNU General Public License +%% as published by the Free Software Foundation; version 2 +%% of the License. +%% +%% Luaotfload is distributed in the hope that it will be useful, +%% but WITHOUT ANY WARRANTY; without even the implied warranty of +%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +%% GNU General Public License for more details. +%% +%% You should have received a copy of the GNU General Public License +%% along with Luaotfload; if not, see . +%% +%% ---------------------------------------------------------------------------- +%% + +\documentclass{ltxdoc} + +\makeatletter + +\usepackage {metalogo,multicol,fancyvrb,xspace} +\usepackage [x11names] {xcolor} + +\def \primarycolor {DodgerBlue4} %%-> rgb 16 78 139 | #104e8b +\def \secondarycolor {Goldenrod4} %%-> rgb 139 105 200 | #8b6914 + +\usepackage[ + bookmarks=true, + colorlinks=true, + linkcolor=\primarycolor, + urlcolor=\secondarycolor, + citecolor=\primarycolor, + pdftitle={The Luaotfload package}, + pdfsubject={OpenType layout system for Plain TeX and LaTeX}, + pdfauthor={Elie Roux & Khaled Hosny & Philipp Gesang & Ulrike Fischer}, + pdfkeywords={luatex, lualatex, unicode, opentype} +]{hyperref} + +\usepackage {fontspec} +\usepackage {unicode-math} + +\setmainfont[ +% Numbers = OldStyle, %% buggy with font cache + Ligatures = TeX, + BoldFont = {Linux Libertine O Bold}, + ItalicFont = {Linux Libertine O Italic}, + SlantedFont = {Linux Libertine O Italic}, +]{Linux Libertine O} +\setmonofont[Ligatures=TeX,Scale=MatchLowercase]{InconsolataN-Regular.otf} +%setsansfont[Ligatures=TeX]{Linux Biolinum O} +\setsansfont[Ligatures=TeX,Scale=MatchLowercase]{Iwona Medium} +%setmathfont{XITS Math} + +\usepackage{hologo} + +\newcommand\TEX {\TeX\xspace} +\newcommand\LUA {Lua\xspace} +\newcommand\PDFTEX {pdf\TeX\xspace} +\newcommand\LUATEX {Lua\TeX\xspace} +\newcommand\XETEX {\XeTeX\xspace} +\newcommand\LATEX {\LaTeX\xspace} +\newcommand\LUALATEX {Lua\LaTeX\xspace} +\newcommand\CONTEXT {Con\TeX t\xspace} +\newcommand\OpenType {\identifier{Open\kern-.25ex Type}\xspace} + +%% \groupedcommand, with some omissions taken from syst-aux.mkiv +\let \handlegroupnormalbefore \relax +\let \handlegroupnormalafter \relax + +\protected \def \handlegroupnormal #1#2{% + \bgroup % 1 + \def \handlegroupbefore {#1}% + \def \handlegroupafter {#2}% + \afterassignment \handlegroupnormalbefore + \let \next = +} + +\def \handlegroupnormalbefore {% + \bgroup % 2 + \handlegroupbefore + \bgroup % 3 + \aftergroup \handlegroupnormalafter% +} + +\def \handlegroupnormalafter {% + \handlegroupafter + \egroup % 3 + \egroup % 2 +} + +\let \groupedcommand \handlegroupnormal %% only the two arg version + +\def \definehighlight [#1][#2]{% + \ifcsname #1\endcsname\else + \expandafter\def\csname #1\endcsname{% + \leavevmode + \groupedcommand {#2}\empty% + } + \fi% +} + +%% old, simplistic definition: obsolete now that we have +%% \groupedcommand +%\def\definehighlight[#1][#2]% + %{\ifcsname #1\endcsname\else + %\expandafter\def\csname #1\endcsname% + %{\bgroup#2\csname #1_indeed\endcsname} + %\expandafter\def\csname #1_indeed\endcsname##1% + %{##1\egroup}% + %\fi} + +\def\restoreunderscore{\catcode`\_=12\relax} + +\definehighlight [fileent][\ttfamily\restoreunderscore] %% files, dirs +\definehighlight [texmacro][\sffamily\itshape\textbackslash] %% cs +\definehighlight [luaident][\sffamily\itshape\restoreunderscore] %% lua identifiers +\definehighlight [identifier][\sffamily] %% names +\definehighlight [abbrev][\rmfamily\scshape] %% acronyms +\definehighlight [emphasis][\rmfamily\slshape] %% level 1 emph + +\definehighlight [Largefont][\Large] %% font size +\definehighlight [smallcaps][\sc] %% font feature +\definehighlight [nonproportional][\tt] %% font switch + +\newcommand*\email[1]{\href{mailto:#1}{#1}} + +\renewcommand\partname{Part}%% gets rid of the stupid “file” heading + +\usepackage{syntax}%% bnf for font request syntax + +\usepackage{titlesec} + +\def\movecountertomargin#1{\llap{\rmfamily\upshape#1\hskip2em}} +\def\zeropoint{0pt} +\titleformat \part + {\normalsize\rmfamily\bfseries} + {\movecountertomargin\thepart} \zeropoint {} +\titleformat \section + {\normalsize\rmfamily\scshape} + {\movecountertomargin\thesection} \zeropoint {} +\titleformat \subsection + {\small\rmfamily\itshape} + {\movecountertomargin\thesubsection} \zeropoint {} +\titleformat \subsubsection + {\normalsize\rmfamily\upshape} + {\movecountertomargin\thesubsubsection} \zeropoint {} + +\usepackage{tocloft} +\renewcommand \cftpartfont {\rmfamily\upshape} +\renewcommand \cftsecfont {\rmfamily\upshape} +\renewcommand \cftsubsecfont {\rmfamily\upshape} +\setlength \cftbeforepartskip {1ex} +\setlength \cftbeforesecskip {1ex} + +\VerbatimFootnotes + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% structurals +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\def \definestructural #1{% + \expandafter \let \csname end#1\endcsname \relax + + \expandafter \def \csname begin#1\endcsname {% + \@ifnextchar[{\csname begin#1indeed\endcsname} + {\csname begin#1indeed\endcsname[]}% + } + + \expandafter \def \csname begin#1indeed\endcsname [##1]##2{% + \edef \first {##1}% + \ifx \first \empty + \csname #1\endcsname [##2]{##2}% + \else + \csname #1\endcsname [\first]{##2}% + \fi + } +} + +\definestructural {section} +\definestructural {subsection} +\definestructural {subsubsection} + +\def \fakesection #1{\section*{#1}} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% inline verbatim +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%% Context offers both \type{…} and \type<<…>>, but not an unbalanced +%% one that we could map directly onto Latex’s \verb|…|. +\usepackage{pdfpages} +\usepackage {listings} +\usepackage {luatexbase} +\lstset { + basicstyle=\ttfamily, +} + +%\let \inlinecode \lstinline +\protected \def \inlinecode {\lstinline} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% codelistings; this sucks hard since we lack access to buffers +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\newcount \othercatcode \othercatcode 12 +\newcount \activecatcode \othercatcode 13 + +\newcatcodetable \vrbcatcodes +\setcatcodetable \vrbcatcodes {% + \catcodetable \CatcodeTableIniTeX + \catcode 9 \othercatcode %% \tabasciicode + \catcode 13 \othercatcode %% \endoflineasciicode + \catcode 12 \othercatcode %% \formfeedasciicode + \catcode 26 \othercatcode %% \endoffileasciicode + \catcode 32 \othercatcode %% \spaceasciicode +} + +\directlua { + document = document or { } + document.vrbcatcodesidx = tonumber (\the \vrbcatcodes) +} + +\newcatcodetable \literalcatcodes +\setcatcodetable \literalcatcodes {% + \catcodetable \CatcodeTableString + \catcode 32 \activecatcode %% \spaceasciicode +} + +\def \listingsurroundskip {\vskip \baselineskip} + +\def \beginlisting {% + \noindent + \begingroup + \catcodetable \vrbcatcodes + \beginlistingindeed% +} + +\directlua { + local texsprint = tex.sprint + local stringis_empty = string.is_empty + local stringsub = string.sub + local stringgsub = string.gsub + %local backslash = unicode.utf8.char (0x200c) + local backslash = unicode.utf8.char (0x5c) + local escaped = [[\string\string\string\]] + document.printlines = function (buffer) + local lines = string.explode (buffer, "\noexpand\n") + print "" + for i, line in next, lines do + local line = stringgsub (line, backslash, escaped) + if stringis_empty (line) then + print (i, "listing: ") + texsprint [[\string\listingpar]] + else + local line = [[\string\beginlistingline]] + .. line + .. [[\string\endlistingline]] + .. [[\string\listingpar]] + print (i, "listing: «" .. line .. "»") + texsprint (document.vrbcatcodesidx, line) + end + end + end +} + +\def \listingpar {\endgraf} + +\let \endlistingline \relax +\let \endlisting \relax + +\protected \def \beginlistingline{% + \leavevmode + \begingroup + \beginlistinglineindeed% +} + +\def \beginlistinglineindeed #1\endlistingline{% + \endgroup + \hbox{% + \addfontfeature {RawFeature=-tlig;-liga}%% So one can’t just turn them all off at once using the ``Ligatures`` key? + \obeyspaces + #1}% +} + +\def \beginlistingindeed#1\endlisting{% + \endgroup + \begingroup + \endgraf + \listingsurroundskip + \ttfamily + \small + \parindent = 0em + \leftskip = 2em + \hangindent = 2em + \directlua{document.printlines ([==[\detokenize {#1}]==])}% + \listingsurroundskip + \endgroup +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% enumerations and lists +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\def \definelist [#1]#2{% name, itemcode + \expandafter \def \csname begin#1\endcsname {% + \begin {itemize} + \let \normalitem = \item + \def \altitem ####1{% + \def \first {####1}% + #2 + } + \let \beginnormalitem \item + \let \endnormalitem \relax + \let \beginaltitem \altitem + \let \endaltitem \relax + } + + \expandafter \def \csname end#1\endcsname {% + \end {itemize} + } +} + +\definelist [descriptions]{\normalitem {\textbf \first}\hfill\break} +\definelist [definitions]{\normalitem {\fileent {\first}}} +\definelist [filelist]{\normalitem {\fileent {\first}}\space--\hskip 1em} +\definelist [functionlist]{\normalitem {\luaident {\first}}\hfill\break} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% columns +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\def \begindoublecolumns {\begin {multicols} {2}} +\def \enddoublecolumns {\end {multicols}} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% alignment +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\def \begincentered {\begin {center}} +\def \endcentered {\end {center}} + +\def \beginnarrower {\begin {quote}} +\def \endnarrower {\end {quote}} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% special elements +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\let \beginfrontmatter \relax +\let \endfrontmatter \relax + +\def \beginabstractcontent {\begin {abstract}} +\def \endabstractcontent {\end {abstract}} + +\let \setdocumenttitle \title +\let \setdocumentdate \date +\let \setdocumentauthor \author +\let \typesetdocumenttitle \maketitle + +\AtBeginDocument {%% seriously? + \let \typesetcontent \tableofcontents% +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% floats +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%% syntax definition +\def \beginsyntaxfloat #1#2{%% #1:label #2:caption + \begin {figure} [b] + \edef \syntaxlabel {#1}% + \def \syntaxcaption {#2}% + \setlength\grammarparsep{0pt plus 2pt minus 2pt}% + \setlength\grammarindent{5cm}% + \begingroup + \small + \begin {grammar} +} + +\def \endsyntaxfloat {% + \end {grammar} + \endgroup + \caption \syntaxcaption + \label \syntaxlabel + \end {figure} +} + +%% figures, e.g. the file graph +\def \figurefloat #1#2#3{%% #1:label #2:caption #3:file + \begin {figure} [b] + \caption {#2}% + \includegraphics[width=\textwidth]{#3}% + \label {#1} + \end {figure} +} + +%% tables +\def \tablefloat #1#2{%% #1:label #2:caption + \begin {table} [t] + \hrule + \caption {#2}% + \label {#1} + \hrule + \end {table} +} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% hyperlinks +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\protected \def \hyperlink{% + \@ifnextchar[{\hyperlinkindeed}% + {\hyperlinkindeed[]}% +} + +\def \hyperlinkindeed [#1]#2{% + \def \first {#1}% + \ifx \first \empty + \url {#2}% + \else + \href {#2}{#1}% + \fi% +} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% tables +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Our tables aren’t anything special so we stick with “tabular” on the +%% Latex end. +%% +%% This is going to be largely incompatible with Context since format +%% specifications work quite differently (even between different +%% Context table variants). + +\def \begintabulate [#1]#2\endtabulate{% + \begingroup + \let \beginrow = \relax %% -> \NC in Context + \let \newcell = & %% -> \NC + \let \endrow = \cr %% -> \NC \NR + \begin {tabular}{#1}% + #2 + \end {tabular} + \endgroup +} + +\let \endtabulate \relax + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% escaped characters +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\let \charpercent \textpercent +\let \charbackslash \textbackslash +\let \chartilde \textasciitilde + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% main +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\makeatother + +\newif \ifcontextmkiv \contextmkivfalse + +\usepackage{luacode} + +% a few lua functions to grab the file lists. +\begin{luacode} +require("luaotfload-filelist.lua") + +function printctxlibslist () + t= luaotfload.filelist.selectctxlibsentries (luaotfload.filelist.data) + for i,v in ipairs (t) do + tex.sprint("\\beginaltitem {"..v.name.. v.ext.."}\\endaltitem") + end +end + +function printctxallgenericlist () + t= luaotfload.filelist.selectctxgeneentries (luaotfload.filelist.data) + for i,v in ipairs (t) do + tex.sprint("\\beginaltitem {"..v.ctxpref..v.name..v.ext.."}\\endaltitem") + end +end + +function printctxfontlist () + t= luaotfload.filelist.selectctxfontentries (luaotfload.filelist.data) + for i,v in ipairs (t) do + tex.sprint("\\beginaltitem {"..v.name..v.ext.."}\\endaltitem") + end +end +\end{luacode} + + +\begin {document} + \input {luaotfload-main.tex} +\clearpage +\includepdf[fitpaper,pagecommand={\label{file-graph}}]{filegraph} +\includepdf[pages=-]{luaotfload-conf.pdf} +\includepdf[pages=-]{luaotfload-tool.pdf} +\end {document} + + diff --git a/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-main.tex b/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-main.tex new file mode 100644 index 00000000000..429f8646e08 --- /dev/null +++ b/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-main.tex @@ -0,0 +1,1899 @@ +%% Copyright (C) 2009-2018 +%% +%% by Elie Roux +%% and Khaled Hosny +%% and Philipp Gesang +%% +%% This file is part of Luaotfload. +%% +%% Home: https://github.com/lualatex/luaotfload +%% Support: . +%% +%% Luaotfload is under the GPL v2.0 (exactly) license. +%% +%% ---------------------------------------------------------------------------- +%% +%% Luaotfload is free software; you can redistribute it and/or +%% modify it under the terms of the GNU General Public License +%% as published by the Free Software Foundation; version 2 +%% of the License. +%% +%% Luaotfload is distributed in the hope that it will be useful, +%% but WITHOUT ANY WARRANTY; without even the implied warranty of +%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +%% GNU General Public License for more details. +%% +%% You should have received a copy of the GNU General Public License +%% along with Luaotfload; if not, see . +%% +%% ---------------------------------------------------------------------------- +%% + +\beginfrontmatter + + \setdocumenttitle {The \identifier{luaotfload} package} + \setdocumentdate {2018/09/24 v2.9} + \setdocumentauthor {Elie Roux · Khaled Hosny · Philipp Gesang · Ulrike Fischer\\ + Home: \hyperlink {https://github.com/lualatex/luaotfload}\\ + New Home: \hyperlink {https://github.com/u-fischer/luaotfload}\\ + Support: \email {lualatex-dev@tug.org}} + + \typesetdocumenttitle + + \beginabstractcontent + This package is an adaptation of the \CONTEXT font loading system. + It allows for loading \OpenType fonts with an extended syntax and adds + support for a variety of font features. + + After discussion of the font loading API, this manual gives an + overview of the core components of \identifier{Luaotfload}: The + packaged font loader code, the names database, configuration, and + helper functions on the \LUA\ end. + \endabstractcontent + +\endfrontmatter + +\typesetcontent + +\beginsection {New in version 2.9 (by Ulrike Fischer)} + +On the one side there is not very much new in this version: The native components of \identifier{Luaotfload} are nearly unchanged. A few bugs have been corrected, the various files lists which loads the components of the font loader have been cleaned up. + +On the other side there is a lot new: + +\begindescriptions + + \beginaltitem {Fontloader} The fontloader files imported from \CONTEXT\ have been updated to the current version. + This was necessary to make \identifier{Luaotfload} compatible with the comimg \LUATEX 1.08. Compared to the previous version from february 2017 quite a number of things have changed. Most importantly the handling of arabic fonts has greatly improved. But this also means that changes in the output are possible. + \endaltitem + + \beginaltitem {Lualibs} The update of the fontloader files also required an update of the \identifier{Lualibs} package. This \identifier{Luaotfload} versions needs version 2.6 of \identifier{Lualibs}. + \endaltitem + + \beginaltitem {Maintenance} As the current maintainer wasn't available and it was urgent to get a \identifier{Luaotfload} compatible with \LUATEX 1.08 maintenance has been transfered to Ulrike Fischer and Marcel Krüger. The package is currently maintained and developed at \hyperlink{https://github.com/u-fischer/luaotfload.git}. Issues should be reported there. + \endaltitem + + \beginaltitem {Documentation} + The core of documentation is nearly unchanged. I added this introduction. I recreated with the help of @marmot the graphic. I updated the file lists. I imported as appendix pdf versions of the two man files which are part of the \identifier{Luaotfload} documentation. + \endaltitem + +\enddescriptions + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\beginsection {Introduction} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +Font management and installation has always been painful with \TEX. A +lot of files are needed for one font (\abbrev{tfm}, \abbrev{pfb}, +\abbrev{map}, \abbrev{fd}, \abbrev{vf}), and due to the 8-Bit encoding +each font is limited to 256 characters. + +But the font world has evolved since the original \TEX, and new +typographic systems have appeared, most notably the so called +\emphasis{smart font} technologies like \OpenType fonts (\abbrev{otf}). + +These fonts can contain many more characters than \TEX fonts, as well +as additional functionality like ligatures, old-style numbers, small +capitals, etc., and support more complex writing systems like Arabic +and Indic\footnote{% + Unfortunately, \identifier{luaotfload} doesn‘t support many Indic + scripts right now. + Assistance in implementing the prerequisites is greatly + appreciated. +} +scripts. + +\OpenType fonts are widely deployed and available for all modern +operating systems. + +As of 2013 they have become the de facto standard for advanced text +layout. + +However, until recently the only way to use them directly in the \TEX +world was with the \XETEX engine. + +Unlike \XETEX, \LUATEX has no built-in support for \OpenType or +technologies other than the original \TEX fonts. + +Instead, it provides hooks for executing \LUA code during the \TEX run +that allow implementing extensions for loading fonts and manipulating +how input text is processed without modifying the underlying engine. + +This is where \identifier{luaotfload} comes into play: +Based on code from \CONTEXT, it extends \LUATEX with functionality necessary +for handling \OpenType fonts. + +Additionally, it provides means for accessing fonts known to the operating +system conveniently by indexing the metadata. + +\endsection + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\beginsection {Thanks} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\identifier{Luaotfload} is part of \LUALATEX, the community-driven +project to provide a foundation for using the \LATEX format with the +full capabilites of the \LUATEX engine. +% +As such, the distinction between end users, contributors, and project +maintainers is intentionally kept less strict, lest we unduly +personalize the common effort. + +Nevertheless, the current maintainers would like to express their +gratitude to Khaled Hosny, Akira Kakuto, Hironori Kitagawa and Dohyun +Kim. +% +Their contributions -- be it patches, advice, or systematic +testing -- made the switch from version 1.x to 2.2 possible. +% +Also, Hans Hagen, the author of the font loader, made porting the +code to \LATEX a breeze due to the extra effort he invested into +isolating it from the rest of \CONTEXT, not to mention his assistance +in the task and willingness to respond to our suggestions. + +\endsection + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\beginsection {Loading Fonts} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\identifier{luaotfload} supports an extended font request syntax: + +\beginnarrower + \nonproportional{\string\font\string\foo\space= \string{}% + \meta{prefix}\nonproportional{:}% + \meta{font name}\nonproportional{:}% + \meta{font features}\nonproportional{\string}}% + \meta{\TEX font features} +\endnarrower + +\noindent +The curly brackets are optional and escape the spaces in the enclosed +font name. +% +Alternatively, double quotes serve the same purpose. +% +A selection of individual parts of the syntax are discussed below; +for a more formal description see figure \ref{font-syntax}. + +\beginsyntaxfloat + {font-syntax} + {Font request syntax. + Braces or double quotes around the + \emphasis{specification} rule will + preserve whitespace in file names. + In addition to the font style modifiers + (\emphasis{slash-notation}) given above, there + are others that are recognized but will be silently + ignored: \nonproportional{aat}, + \nonproportional{icu}, and + \nonproportional{gr}. + The special terminals are: + \smallcaps {feature\textunderscore id} for a valid font + feature name and + \smallcaps {feature\textunderscore value} for the corresponding + value. + \smallcaps {tfmname} is the name of a \abbrev{tfm} file. + \smallcaps {digit} again refers to bytes 48--57, and + \smallcaps {all\textunderscore characters} to all byte values. + \smallcaps {csname} and \smallcaps {dimension} are the \TEX concepts.} +% + ::= `\\font', {\sc csname}, `=', , [ ] ; + + ::= `at', {\sc dimension} ; + + ::= `"', `"' + \alt `{', `}' + \alt ; + + ::= , [`:', ] + \alt , [ [`:'], ] ; + + ::= , [ ], \{ \} + \alt , \{ \} ; + + ::= `combo:', + \alt `file:', + \alt `name:', ; + + ::= , \{ `;', \} ; + + ::= , `->', ; + + ::= , `->', ; + + ::= (`(', \{ {\sc digit} \}, `)' | \{ {\sc digit} \} ) ; + + ::= (`(', \{ {\sc digit} \}, `,', , `)' + \alt \{ {\sc digit} \} ) ; + + ::= `fallback' + \alt \{ , \{ `*', \} \} ; + + ::= , [ `-', ] ; + + ::= `0x', \{ {\sc hexdigit} \} + \alt `U+', \{ {\sc digit} \} + \alt \{ {\sc digit} \} ; + + ::= \{ \} ; + + ::= \{ \} ; + + ::= {\sc tfmname} | ; + + ::= `[', \{ \}, `]', [ ] ; + + ::= + \alt `\\', {\sc all_characters} + \alt {\sc all_characters} - `]' + + ::= `[', [ ], `]' + + ::= `/', (`I' | `B' | `BI' | `IB' | `S=', \{ {\sc digit} \} ) ; + + ::= `(', \{ {\sc digit} \}, `)' ; + + ::= , \{ `;', \} ; + + ::= {\sc feature_id}, `=', {\sc feature_value} + \alt , {\sc feature_id} ; + + ::= `+' | `-' ; + + ::= {\sc all_characters} - ( `(' | `/' | `:' ) ; +\endsyntaxfloat + +%% Below guarded space gets borked in index; why‽ +\beginsubsection{Prefix -- the \identifier{luaotfload}{ }Way} + +In \identifier{luaotfload}, the canonical syntax for font requests +requires a \emphasis{prefix}: +% +\beginnarrower + \nonproportional{\string\font\string\fontname\space= }% + \meta{prefix}% + \nonproportional{:}% + \meta{fontname}% + \dots +\endnarrower +% +where \meta{prefix} is either \inlinecode{file:} or \inlinecode {name:}.\footnote{% + \identifier{Luaotfload} also knows two further prefixes, \inlinecode {kpse:} + and \inlinecode {my:}. + % + A \inlinecode {kpse} lookup is restricted to files that can be found by + \identifier{kpathsea} and will not attempt to locate system fonts. + % + This behavior can be of value when an extra degree of encapsulation is + needed, for instance when supplying a customized tex distribution. + + The \inlinecode {my} lookup takes this a step further: it lets you define + a custom resolver function and hook it into the \luaident{resolve_font} + callback. + % + This ensures full control over how a file is located. + % + For a working example see the + \hyperlink [test repo]{https://bitbucket.org/phg/lua-la-tex-tests/src/5f6a535d/pln-lookup-callback-1.tex}. +} +% +It determines whether the font loader should interpret the request as +a \emphasis{file name} or + \emphasis{font name}, respectively, +which again influences how it will attempt to locate the font. +% +Examples for font names are + “Latin Modern Italic”, + “GFS Bodoni Rg”, and + “PT Serif Caption” +-- they are the human readable identifiers +usually listed in drop-down menus and the like.\footnote{% + Font names may appear like a great choice at first because they + offer seemingly more intuitive identifiers in comparison to arguably + cryptic file names: + % + “PT Sans Bold” is a lot more descriptive than \fileent{PTS75F.ttf}. + On the other hand, font names are quite arbitrary and there is no + universal method to determine their meaning. + % + While \identifier{luaotfload} provides fairly sophisticated heuristic + to figure out a matching font style, weight, and optical size, it + cannot be relied upon to work satisfactorily for all font files. + % + For an in-depth analysis of the situation and how broken font names + are, please refer to + \hyperlink [this post]{http://www.ntg.nl/pipermail/ntg-context/2013/073889.html} + by Hans Hagen, the author of the font loader. + % + If in doubt, use filenames. + % + \fileent{luaotfload-tool} can perform the matching for you with the + option \inlinecode {--find=}, and you can use the file name it returns + in your font definition. +} +% +In order for fonts installed both in system locations and in your +\fileent{texmf} to be accessible by font name, \identifier{luaotfload} must +first collect the metadata included in the files. +% +Please refer to section~\ref{sec:fontdb} below for instructions on how to +create the database. + +File names are whatever your file system allows them to be, except +that that they may not contain the characters + \inlinecode {(}, + \inlinecode {:}, and + \inlinecode {/}. +% +As is obvious from the last exception, the \inlinecode {file:} lookup will +not process paths to the font location -- only those +files found when generating the database are addressable this way. +% +Continue below in the \XETEX section if you need to load your fonts +by path. +% +The file names corresponding to the example font names above are + \fileent{lmroman12-italic.otf}, + \fileent{GFSBodoni.otf}, and + \fileent{PTZ56F.ttf}. + +\endsubsection + +\beginsubsection {Bracketed Lookups} +\label{sec:bracket} +Bracketed lookups allow for arbitrary character content to be used in a +definition. +% +A simple bracketed request looks follows the scheme + +\beginnarrower + \nonproportional{\string\font\string\fontname\space = [}% + \meta{/path/to/file}% + \nonproportional{]} +\endnarrower + +\noindent +Inside the square brackets, every character except for a closing bracket is +permitted, allowing for arbitrary paths to a font file -- including Windows +style paths with UNC or drive letter prepended -- to be specified. +% +The \identifier{Luaotfload} syntax differs from \XETEX in that the subfont +selector goes \emphasis{after} the closing bracket: + +\beginnarrower + \nonproportional{\string\font\string\fontname\space = [}% + \meta{/path/to/file}% + \nonproportional{]} + \nonproportional{(}n\nonproportional{)} +\endnarrower + +Naturally, path-less file names are equally valid and processed the +same way as an ordinary \inlinecode {file:} lookup. + +\beginsubsection {Compatibility} + +In addition to the regular prefixed requests, \identifier{luaotfload} +accepts loading fonts the \XETEX way. +% +There are again two modes: bracketed and unbracketed. +For the bracketed variety, see above, \ref{sec:bracket}. + +Unbracketed (or, for lack of a better word: \emphasis{anonymous}) +font requests resemble the conventional \TEX syntax. + +\beginnarrower + \nonproportional{\string\font\string\fontname\space= }% + \meta{font name} + \dots +\endnarrower +\endsubsection + +However, they have a broader spectrum of possible interpretations: +before anything else, \identifier{luaotfload} attempts to load a +traditional \TEX Font Metric (\abbrev{tfm} or \abbrev{ofm}). +% +If this fails, it performs a \inlinecode {path:} lookup, which itself will +fall back to a \inlinecode {file:} lookup. +% +Lastly, if none of the above succeeded, attempt to resolve the request as a +\inlinecode {name:} lookup by searching the font index for \meta{font name}. +% +The behavior of this “anonymous” lookup is configurable, see the configuation +manpage for details. + +Furthermore, \identifier{luaotfload} supports the slashed (shorthand) +font style notation from \XETEX. + +\beginnarrower + \nonproportional{\string\font\string\fontname\space= }% + \meta{font name}% + \nonproportional{/}% + \meta{modifier} + \dots +\endnarrower + +\noindent +Currently, four style modifiers are supported: + \inlinecode {I} for italic shape, + \inlinecode {B} for bold weight, + \inlinecode {BI} or \inlinecode {IB} for the combination of both. +% +Other “slashed” modifiers are too specific to the \XETEX engine and +have no meaning in \LUATEX. + +\endsubsection + +\beginsubsection{Examples} + +\beginsubsubsection{Loading by File Name} + +For example, conventional \TeX\ font can be loaded with a +\inlinecode {file:} request like so: + +\beginlisting + \font \lmromanten = {file:ec-lmr10} at 10pt +\endlisting + +The \OpenType version of Janusz Nowacki’s font \emphasis{Antykwa +Półtawskiego}\footnote{% + \hyperlink {http://jmn.pl/antykwa-poltawskiego/}, also available in + in \TEX Live. +} +in its condensed variant can be loaded as follows: + +\beginlisting + \font \apcregular = file:antpoltltcond-regular.otf at 42pt +\endlisting + +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: + +\beginlisting + \font \gfsporson = "[/tmp/GFSPorson.otf]" at 12pt +\endlisting + +\identifier{TrueType} collection files (the extension is usually +\inlinecode{.ttc}) contain more than a single font. In order to refer to these +subfonts, the respective index may be added in parentheses after the file +name.\footnote{% + Incidentally, this syntactical detail also prevents one from loading files + that end in balanced parentheses. +} + +\beginlisting + \font \cambriamain = "file:cambria.ttc(0)" at 10pt + \font \cambriamath = "file:cambria.ttc(1)" at 10pt +\endlisting + +and likewise, requesting subfont inside a TTC container by path: + +\beginlisting + \font \asanamain = "[/home/typesetter/.fonts/math/asana.ttc](0):mode=node;+tlig" at 10pt + \font \asanamath = "[/home/typesetter/.fonts/math/asana.ttc](1):mode=base" at 10pt +\endlisting + +\endsubsubsection + +\beginsubsubsection{Loading by Font Name} + +The \inlinecode {name:} lookup does not depend on cryptic filenames: + +\beginlisting + \font \pagellaregular = {name:TeX Gyre Pagella} at 9pt +\endlisting + +A bit more specific but essentially the same lookup would be: + +\beginlisting + \font \pagellaregular = {name:TeX Gyre Pagella Regular} at 9pt +\endlisting + +\noindent +Which fits nicely with the whole set: + +\beginlisting + \font\pagellaregular = {name:TeX Gyre Pagella Regular} at 9pt + \font\pagellaitalic = {name:TeX Gyre Pagella Italic} at 9pt + \font\pagellabold = {name:TeX Gyre Pagella Bold} at 9pt + \font\pagellabolditalic = {name:TeX Gyre Pagella Bolditalic} at 9pt + + {\pagellaregular foo bar baz\endgraf} + {\pagellaitalic foo bar baz\endgraf} + {\pagellabold foo bar baz\endgraf} + {\pagellabolditalic foo bar baz\endgraf} + + ... +\endlisting + +\endsubsubsection + +\beginsubsubsection{Modifiers} + +If the entire \emphasis{Iwona} family\footnote{% + \hyperlink {http://jmn.pl/kurier-i-iwona/}, + also in \TEX Live. +} +is installed in some location accessible by \identifier{luaotfload}, +the regular shape can be loaded as follows: + +\beginlisting + \font \iwona = Iwona at 20pt +\endlisting + +\noindent +To load the most common of the other styles, the slash notation can +be employed as shorthand: + +\beginlisting + \font \iwonaitalic = Iwona/I at 20pt + \font \iwonabold = Iwona/B at 20pt + \font \iwonabolditalic = Iwona/BI at 20pt +\endlisting + +\noindent +which is equivalent to these full names: + +\beginlisting + \font \iwonaitalic = "Iwona Italic" at 20pt + \font \iwonabold = "Iwona Bold" at 20pt + \font \iwonabolditalic = "Iwona BoldItalic" at 20pt +\endlisting + +\endsubsubsection +\endsubsection +\endsection + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\beginsection {Font features} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\emphasis{Font features} are the second to last component in the +general scheme for font requests: + +\beginnarrower + \nonproportional{\string\font\string\foo\space= "}% + \meta{prefix}% + \nonproportional{:}% + \meta{font name}% + \nonproportional{:}% + \meta{font features}% + \meta{\TEX font features}% + \nonproportional{"} +\endnarrower + +\noindent +If style modifiers are present (\XETEX style), they must precede +\meta{font features}. + +The element \meta{font features} is a semicolon-separated list of feature +tags\footnote{% + Cf. \hyperlink {http://www.microsoft.com/typography/otspec/featurelist.htm}. +} +and font options. +% +Prepending a font feature with a \inlinecode{+} (plus sign) enables it, +whereas a \inlinecode{-} (minus) disables it. For instance, the request + +\beginlisting + \font \test = LatinModernRoman:+clig;-kern +\endlisting + +\noindent activates contextual ligatures (\inlinecode{clig}) and +disables kerning (\inlinecode{kern}). +% +Alternatively the options \inlinecode{true} or \inlinecode{false} can +be passed to the feature in a key/value expression. +% +The following request has the same meaning as the last one: + +\beginlisting + \font \test = LatinModernRoman:clig=true;kern=false +\endlisting + +\noindent +Furthermore, this second syntax is required should a font feature +accept other options besides a true/false switch. +% +For example, \emphasis{stylistic alternates} (\inlinecode{salt}) are +variants of given glyphs. +% +They can be selected either explicitly by supplying the variant +index (starting from one), or randomly by setting the value to, +obviously, \inlinecode{random}. + +%% TODO verify that this actually works with a font that supports +%% the salt/random feature!\fi +\beginlisting + \font \librmsaltfirst = LatinModernRoman:salt=1 +\endlisting + +\beginsubsection {Basic font features} + +\begindescriptions + + \beginaltitem {mode} + \identifier{luaotfload} has two \OpenType processing + \emphasis{modes}: + \identifier{base} and \identifier{node}. + + \identifier{base} mode works by mapping \OpenType + features to traditional \TEX ligature and kerning mechanisms. + % + Supporting only non-contextual substitutions and kerning + pairs, it is the slightly faster, albeit somewhat limited, variant. + % + \identifier{node} mode works by processing \TeX’s internal + node list directly at the \LUA end and supports + a wider range of \OpenType features. + % + The downside is that the intricate operations required for + \identifier{node} mode may slow down typesetting especially + with complex fonts and it does not work in math mode. + + By default \identifier{luaotfload} is in \identifier{node} + mode, and \identifier{base} mode has to be requested where needed, + e.~g. for math fonts. + \endaltitem + + \beginaltitem {script} \label{script-tag} + An \OpenType script tag;\footnote{% + See \hyperlink {http://www.microsoft.com/typography/otspec/scripttags.htm} + for a list of valid values. + % + For scripts derived from the Latin alphabet the value + \inlinecode{latn} is good choice. + } + the default value is \inlinecode{dflt}. + % + Some fonts, including very popular ones by foundries like Adobe, + do not assign features to the \inlinecode{dflt} script, in + which case the script needs to be set explicitly. + \endaltitem + + \beginaltitem {language} + An \OpenType language system identifier,\footnote{% + Cf. \hyperlink {http://www.microsoft.com/typography/otspec/languagetags.htm}. + } + defaulting to \inlinecode{dflt}. + \endaltitem + + \beginaltitem {color} + A font color, defined as a triplet of two-digit hexadecimal + \abbrev{rgb} values, with an optional fourth value for + transparency + (where \inlinecode{00} is completely transparent and + \inlinecode{FF} is opaque). + + For example, in order to set text in semitransparent red: + + \beginlisting + \font \test = "Latin Modern Roman:color=FF0000BB" + \endlisting + \endaltitem + + \beginaltitem {kernfactor \& letterspace} + Define a font with letterspacing (tracking) enabled. + % + In \identifier{luaotfload}, letterspacing is implemented by + inserting additional kerning between glyphs. + + This approach is derived from and still quite similar to the + \emphasis{character kerning} (\texmacro{setcharacterkerning} / + \texmacro{definecharacterkerning} \& al.) functionality of + Context, see the file \fileent{typo-krn.lua} there. + % + The main difference is that \identifier{luaotfload} does not + use \LUATEX attributes to assign letterspacing to regions, + but defines virtual letterspaced versions of a font. + + The option \identifier{kernfactor} accepts a numeric value that + determines the letterspacing factor to be applied to the font + size. + % + E.~g. a kern factor of $0.42$ applied to a $10$ pt font + results in $4.2$ pt of additional kerning applied to each + pair of glyphs. + % + Ligatures are split into their component glyphs unless + explicitly ignored (see below). + + For compatibility with \XETEX an alternative + \identifier{letterspace} option is supplied that interprets the + supplied value as a \emphasis{percentage} of the font size but + is otherwise identical to \identifier{kernfactor}. + % + Consequently, both definitions in below snippet yield the same + letterspacing width: + + \beginlisting + \font \iwonakernedA = "file:Iwona-Regular.otf:kernfactor=0.125" + \font \iwonakernedB = "file:Iwona-Regular.otf:letterspace=12.5" + \endlisting + + Specific pairs of letters and ligatures may be exempt from + letterspacing by defining the \LUA functions + \luaident{keeptogether} and \luaident{keepligature}, + respectively, inside the namespace \inlinecode {luaotfload.letterspace}. + % + Both functions are called whenever the letterspacing callback + encounters an appropriate node or set of nodes. + % + If they return a true-ish value, no extra kern is inserted at + the current position. + % + \luaident{keeptogether} receives a pair of consecutive + glyph nodes in order of their appearance in the node list. + % + \luaident{keepligature} receives a single node which can be + analyzed into components. + % + (For details refer to the \emphasis{glyph nodes} section in the + \LUATEX reference manual.) + % + The implementation of both functions is left entirely to the + user. + \endaltitem + +\iffalse + \startbuffer [printvectors] + \directlua{inspect(fonts.protrusions.setups.default) + inspect(fonts.expansions.setups.default)} + \stopbuffer +\fi + + \beginaltitem {protrusion \& expansion} + These keys control microtypographic features of the font, + namely \emphasis{character protrusion} and \emphasis{font + expansion}. + % + 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{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 + \unless \iffalse + \beginlisting + \directlua{inspect(fonts.protrusions.setups.default) + inspect(fonts.expansions.setups.default)} + \endlisting + \else + \typebuffer [printvectors] + \fi + at some point after loading \fileent{luaotfload.sty}. + } + % + For both, only the set \identifier{default} is predefined. + + For example, to define a font with the default + protrusion vector applied\footnote{% + You also need to set + \inlinecode {pdfprotrudechars=2} and + \inlinecode {pdfadjustspacing=2} + to activate protrusion and expansion, respectively. + See the + \hyperlink [\PDFTEX manual]{http://mirrors.ctan.org/systems/pdftex/manual/pdftex-a.pdf}% + for details. + }: + + \beginlisting + \font \test = LatinModernRoman:protrusion=default + \endlisting + \endaltitem +\enddescriptions + +\endsubsection + +\beginsubsection {Non-standard font features} +\identifier{luaotfload} adds a number of features that are not defined +in the original \OpenType specification, most of them +aiming at emulating the behavior familiar from other \TEX engines. +% +Currently (2014) there are three of them: + +\begindescriptions + + \beginaltitem {anum} + Substitutes the glyphs in the \abbrev{ascii} number range + with their counterparts from eastern Arabic or Persian, + depending on the value of \identifier{language}. + \endaltitem + + \beginaltitem {tlig} + Applies legacy \TEX ligatures\footnote{% + These contain the feature set \inlinecode {trep} of earlier + versions of \identifier{luaotfload}. + + Note to \XETEX users: this is the equivalent of the + assignment \inlinecode {mapping=text-tex} using \XETEX's input + remapping feature. + }: + + \unless \iffalse + %% Using braced arg syntax with inline code appears to be + %% impossible within Latex tables -- just ignore the weird + %% exclamation points below. + \begintabulate [rlrl] + \beginrow `` \newcell {\inlinecode !``! } \newcell '' \newcell {\inlinecode !''!} \endrow + \beginrow ` \newcell {\inlinecode !`! } \newcell ' \newcell {\inlinecode !'! } \endrow + \beginrow " \newcell {\inlinecode !"! } \newcell -- \newcell {\inlinecode !--!} \endrow + \beginrow --- \newcell {\inlinecode !---!} \newcell !` \newcell {\inlinecode ?!`?} \endrow + \beginrow ?` \newcell {\inlinecode !?`! } \newcell \newcell \endrow + \endtabulate + \else + %% XXX find a way to wrap these in the tabulate environment + \startframed [frame=off,width=broad,align=middle] + \startframed [frame=off,width=\dimexpr(\textwidth/2)] + \startxtable [align=middle] + \startxrow \startxcell `` \stopxcell \startxcell \inlinecode {``} \stopxcell \startxcell '' \stopxcell \startxcell \inlinecode {''} \stopxcell \stopxrow + \startxrow \startxcell ` \stopxcell \startxcell \inlinecode {`} \stopxcell \startxcell ' \stopxcell \startxcell \inlinecode {'} \stopxcell \stopxrow + \startxrow \startxcell " \stopxcell \startxcell \inlinecode {"} \stopxcell \startxcell -- \stopxcell \startxcell \inlinecode {--} \stopxcell \stopxrow + \startxrow \startxcell --- \stopxcell \startxcell \inlinecode {---} \stopxcell \startxcell !` \stopxcell \startxcell \inlinecode {!`} \stopxcell \stopxrow + \startxrow \startxcell ?` \stopxcell \startxcell \inlinecode {?`} \stopxcell \startxcell \stopxcell \startxcell \stopxcell \stopxrow + \stopxtable + \stopframed + \stopframed + \fi + \endaltitem + + \beginaltitem {itlc} + Computes italic correction values (active by default). + \endaltitem + +\enddescriptions + +\endsubsection +\endsection + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\beginsection {Combining fonts} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +Version 2.7 and later support combining characters from multiple fonts into a +single virtualized one. This requires that the affected fonts be loaded in +advance as well as a special \emphasis{request syntax}. Furthermore, this +allows to define \emphasis{fallback fonts} to supplement fonts that may lack +certain required glyphs. + +Combinations are created by defining a font using the \luaident{combo:} prefix. + +\beginsubsection {Fallbacks} + +For example, the \identifier{Latin Modern} family of fonts does, as indicated +in the name, not provide Cyrillic glyphs. If Latin script dominates in the copy +with interspersed Cyrillic, a fallback can be created from a similiar looking +font like \identifier{Computer Modern Unicode}, taking advantage of the fact +that it too derives from Knuth’s original \identifier{Computer Modern} series: + +\beginlisting + \input luaotfload.sty + \font \lm = file:lmroman10-regular.otf:mode=base + \font \cmu = file:cmunrm.otf:mode=base + \font \lmu = "combo: 1->\fontid\lm; 2->\fontid\cmu,fallback" + \lmu Eh bien, mon prince. Gênes et Lueques ne sont plus que des + apanages, des поместья, de la famille Buonaparte. + \bye +\endlisting + +As simple as this may look on the first glance, this approach is entirely +inappropriate if more than a couple letters are required from a different font. +Because the combination pulls nothing except the glyph data, all of the +important other information that constitute a proper font -- kerning, styles, +features, and suchlike -- will be missing. + +\endsubsection %% Fallbacks + +\beginsubsection {Combinations} + +Generalizing the idea of a \emphasis{fallback font}, it is also possible to +pick definite sets of glyphs from multiple fonts. On a bad day, for instance, +it may be the sanest choice to start out with \identifier{EB Garamond} italics, +typeset all decimal digits in the bold italics of \identifier{GNU Freefont}, +and tone down the punctuation with extra thin glyphs from \identifier{Source +Sans}: + +\beginlisting + \def \feats {-tlig;-liga;mode=base;-kern} + \def \fileone {EBGaramond12-Italic.otf} + \def \filetwo {FreeMonoBoldOblique.otf} + \def \filethree {SourceSansPro-ExtraLight.otf} + + \input luaotfload.sty + + \font \one = file:\fileone :\feats + \font \two = file:\filetwo :\feats + \font \three = file:\filethree:\feats + + \font \onetwothree = "combo: 1 -> \fontid\one; + 2 -> \fontid\two, 0x30-0x39; + 3 -> \fontid\three, 0x21*0x3f; " + + {\onetwothree \TeX—0123456789—?!} + \bye +\endlisting + +\noindent Despite the atrocious result, the example demonstrates well the +syntax that is used to specify ranges and fonts. Fonts are being referred to by +their internal index which can be obtained by passing the font command into the +\texmacro{fontid} macro, e. g. \inlinecode{\fontid\one}, after a font has been +defined. The first component of the combination is the base font which will be +extended by the others. It is specified by the index alone. + +All further fonts require either the literal \inlinecode{fallback} or a list of +codepoint definitions to be appended after a comma. The elements of this list +again denote either single codepoints like \inlinecode{0x21} (referring to the +exclamation point character) or ranges of codepoints (\inlinecode{0x30-0x39}). +Elements are separated by the \identifier{ASCII} asterisk character +(\inlinecode{*}). The characters referenced in the list will be imported from +the respective font, if available. + +\endsubsection %% Combinations + +\endsection + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\beginsection {Font names database} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\label{sec:fontdb} + +As mentioned above, \identifier{luaotfload} keeps track of which +fonts are available to \LUATEX by means of a \emphasis{database}. +% +This allows referring to fonts not only by explicit filenames but +also by the proper names contained in the metadata which is often +more accessible to humans.\footnote{% + The tool \hyperlink[\fileent{otfinfo}]{http://www.lcdf.org/type/} + (comes with \TEX Live), when invoked on a font file with the + \inlinecode {-i} option, lists the variety of name fields defined for + it. +} + +When \identifier{luaotfload} is asked to load a font by a font name, +it will check if the database exists and load it, or else generate a +fresh one. +% +Should it then fail to locate the font, an update to the database is +performed in case the font has been added to the system only +recently. +% +As soon as the database is updated, the resolver will try +and look up the font again, all without user intervention. +% +The goal is for \identifier{luaotfload} to act in the background and +behave as unobtrusively as possible, while providing a convenient +interface to the fonts installed on the system. + +Generating the database for the first time may take a while since it +inspects every font file on your computer. +% +This is particularly noticeable if it occurs during a typesetting run. +In any case, subsequent updates to the database will be quite fast. + +\beginsubsection[luaotfload-tool] + {\fileent{luaotfload-tool}} + +It can still be desirable at times to do some of these steps +manually, and without having to compile a document. +% +To this end, \identifier{luaotfload} comes with the utility +\fileent{luaotfload-tool} that offers an interface to the database +functionality. +% +Being a \LUA script, there are two ways to run it: +either make it executable (\inlinecode {chmod +x} on unixoid systems) or +pass it as an argument to \fileent{texlua}.\footnote{% + Tests by the maintainer show only marginal performance gain by + running with Luigi Scarso’s + \hyperlink [\identifier{Luajit\kern-.25ex\TEX}]{https://foundry.supelec.fr/projects/luajittex/}, + which is probably due to the fact that most of the time is spent + on file system operations. + + \emphasis{Note}: + On \abbrev{MS} \identifier{Windows} systems, the script can be run + either by calling the wrapper application + \fileent{luaotfload-tool.exe} or as + \inlinecode {texlua.exe luaotfload-tool.lua}. +} +% +Invoked with the argument \inlinecode {--update} it will perform a database +update, scanning for fonts not indexed. + +\beginlisting + luaotfload-tool --update +\endlisting + +Adding the \inlinecode {--force} switch will initiate a complete +rebuild of the database. + +\beginlisting + luaotfload-tool --update --force +\endlisting + +\endsubsection + +\beginsubsection{Search Paths} + +\identifier{luaotfload} scans those directories where fonts are +expected to be located on a given system. +% +On a Linux machine it follows the paths listed in the +\identifier{Fontconfig} configuration files; +consult \inlinecode {man 5 fonts.conf} for further information. +% +On \identifier{Windows} systems, the standard location is +\inlinecode {Windows\\Fonts}, +% +while \identifier{Mac OS~X} requires a multitude of paths to +be examined. +% +The complete list is is given in table \ref{table-searchpaths}. +Other paths can be specified by setting the environment variable +\inlinecode {OSFONTDIR}. +% +If it is non-empty, then search will be extended to the included +directories. + +\tablefloat {table-searchpaths} + {List of paths searched for each supported operating system.} + {% + \unless \iffalse + \begincentered + \begintabulate [lp{.5\textwidth}] + \beginrow + Windows \newcell \inlinecode !\% WINDIR\%\\ Fonts! + \endrow + \beginrow + Linux \newcell \fileent{/usr/local/etc/fonts/fonts.conf} and\hfill\break + \fileent{/etc/fonts/fonts.conf} + \endrow + \beginrow + Mac \newcell \fileent{\textasciitilde/Library/Fonts},\break + \fileent{/Library/Fonts},\break + \fileent{/System/Library/Fonts}, and\hfill\break + \fileent{/Network/Library/Fonts} + \endrow + \endtabulate + \endcentered + \else + \setuplocalinterlinespace [14pt] + \starttabulate [|l|p(.5\textwidth)|] + \NC Windows \NC \inlinecode {\% WINDIR\%\\ Fonts} \NC \NR + \NC Linux \NC \fileent{/usr/local/etc/fonts/fonts.conf} and\crlf + \fileent{/etc/fonts/fonts.conf} \NC \NR + \NC + Mac \NC \fileent{\textasciitilde/Library/Fonts},\crlf + \fileent{/Library/Fonts},\break + \fileent{/System/Library/Fonts}, and\crlf + \fileent{/Network/Library/Fonts} \NC \NR + \stoptabulate + \fi% + } + +\endsubsection + +\beginsubsection{Querying from Outside} + +\fileent{luaotfload-tool} also provides rudimentary means of +accessing the information collected in the font database. +% +If the option \inlinecode {--find=}\emphasis{name} is given, the script will +try and search the fonts indexed by \identifier{luaotfload} for a +matching name. +% +For instance, the invocation + +\beginlisting + luaotfload-tool --find="Iwona Regular" +\endlisting + +\noindent +will verify if “Iwona Regular” is found in the database and can be +readily requested in a document. + +If you are unsure about the actual font name, then add the +\inlinecode {-F} (or \inlinecode {--fuzzy}) switch to the command line to enable +approximate matching. +% +Suppose you cannot precisely remember if the variant of +\identifier{Iwona} you are looking for was “Bright” or “Light”. +The query + +\beginlisting + luaotfload-tool -F --find="Iwona Bright" +\endlisting + +\noindent +will tell you that indeed the latter name is correct. + +Basic information about fonts in the database can be displayed +using the \inlinecode {-i} option (\inlinecode {--info}). +% +\beginlisting + luaotfload-tool -i --find="Iwona Light Italic" +\endlisting +% +\noindent +The meaning of the printed values is described in section 4.4 of the +\LUATEX reference manual.\footnote{% + In \TEX Live: \fileent{texmf-dist/doc/luatex/base/luatexref-t.pdf}. +} + +For a much more detailed report about a given font try the +\inlinecode {-I} option instead (\inlinecode {--inspect}). +\beginlisting + luaotfload-tool -I --find="Iwona Light Italic" +\endlisting + +\inlinecode {luaotfload-tool --help} will list the available command line +switches, including some not discussed in detail here. +% +For a full documentation of \identifier{luaotfload-tool} and its +capabilities refer to the manpage +(\inlinecode {man 1 luaotfload-tool}).\footnote{% + Or see \inlinecode {luaotfload-tool.rst} in the source directory. +} + +\endsubsection + +\beginsubsection {Blacklisting Fonts} +\label{font-blacklist} + +Some fonts are problematic in general, or just in \LUATEX. +% +If you find that compiling your document takes far too long or eats +away all your system’s memory, you can track down the culprit by +running \inlinecode {luaotfload-tool -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{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 +plain filename should suffice. +% +File extensions (\fileent{.otf}, \fileent{.ttf}, etc.) may be omitted. +% +Anything after a percent (\inlinecode {\%}) character until the end of the line +is ignored, so use this to add comments. +% +Place this file to some location where the \identifier{kpse} +library can find it, e.~g. +\fileent{texmf-local/tex/luatex/luaotfload} if you are running +\identifier{\TEX Live},\footnote{% + You may have to run \inlinecode {mktexlsr} if you created a new file in + your \fileent{texmf} tree. +} +or just leave it in the working directory of your document. +% +\identifier{luaotfload} reads all files named +\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 (\inlinecode{-}) is +removed from the blacklist, causing it to be temporarily whitelisted +without modifying the global file. +% +An example with explicit paths: + +\beginlisting +% example otf-blacklist.cnf +/Library/Fonts/GillSans.ttc % Luaotfload ignores this font. +-/Library/Fonts/Optima.ttc % This one is usable again, even if + % blacklisted somewhere else. +\endlisting + +\endsubsection +\endsection + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\beginsection {The Fontloader} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\beginsubsection {Overview} + +To a large extent, \identifier{luaotfload} relies on code originally +written by Hans Hagen for the +\hyperlink[\identifier{\CONTEXT}]{http://wiki.contextgarden.net} +format. +% +It integrates the font loader, written entirely in \LUA, as distributed +in the \identifier{\LUATEX-Fonts} package. +% +The original \LUA source files have been combined using the \CONTEXT +packaging library into a single, self-contained blob. In +this form the font loader depends only on the \identifier{lualibs} +package and requires only minor adaptions to integrate into +\identifier{luaotfload}. + +The guiding principle is to let \CONTEXT/\LUATEX-Fonts take care of the +implementation, and update the imported code as frequently as +necessary. +% +As maintainers, we aim at importing files from upstream essentially +\emphasis{unmodified}, except for renaming them to prevent name +clashes. +% +This job has been greatly alleviated since the advent of +\LUATEX-Fonts, prior to which the individual dependencies had to be +manually spotted and extracted from the \CONTEXT source code in a +complicated and error-prone fashion. + +\endsubsection + +\beginsubsection {Contents and Dependencies} + +Below is a commented list of the files distributed with +\identifier{luaotfload} in one way or the other. +% +See see the figure on page \pageref{file-graph} for a +graphical representation of the dependencies. +% +\label{package}% +Through the script \fileent{mkimport} a \CONTEXT library +is invoked to create the \identifier{luaotfload} fontloader as a merged +(amalgamated) source file.\footnote{% + In \CONTEXT, this facility can be accessed by means of a + \hyperlink[script]{https://bitbucket.org/phg/context-mirror/src/beta/scripts/context/lua/mtx-package.lua?at=beta} + which is integrated into \fileent{mtxrun} as a subcommand. + Run \inlinecode {mtxrun --script package --help} to display further + information. + For the actual merging code see the file + \fileent{util-mrg.lua} that is part of \CONTEXT. +} +% +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} (renamed to \fileent{fontloader-basics-gen.lua} in \identifier{luaotfload}) +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 +\LUATEX-Fonts. These are already provided by the \identifier{lualibs} +and have thus been omitted from the merge.\footnote{% + Faithful listeners will remember the pre-2.6 era when the fontloader + used to be integrated as-is which caused all kinds of code + duplication with the pervasive \identifier{lualibs} package. + This conceptual glitch has since been amended by tightening the + coupling with the excellent \CONTEXT\ toolchain. +} + +\begindoublecolumns + \begindefinitions + \directlua{ printctxlibslist ()} + \enddefinitions +\enddoublecolumns + +The reference fontloader is home to several \LUA files that can be +grouped twofold as below: + +\begindefinitions + \beginnormalitem + The \emphasis{font loader} itself. + These files have been written for \LUATEX-Fonts and they are + distributed along with \identifier{luaotfload} so as to resemble + the state of the code when it was imported. Their purpose is either + to give a slightly aged version of a file if upstream considers + latest developments for not yet ready for use outside Context; or, + to install placeholders or minimalist versions of APIs relied upon + but usually provided by parts of Context not included in the + fontloader. + \begindoublecolumns + \begindefinitions + \directlua{printctxallgenericlist ()} + \enddefinitions + \enddoublecolumns + \endnormalitem + + \beginnormalitem + Code related to \emphasis{font handling and node processing}, taken + directly from \CONTEXT. + \begindoublecolumns + \begindefinitions + \directlua{printctxfontlist ()} + \enddefinitions + \enddoublecolumns + \endnormalitem +\enddefinitions + +As an alternative to the merged file, \identifier {Luaotfload} may load +individual unpackaged \LUA libraries that come with the source, or even +use the files from Context directly. +% +Thus if you prefer running bleeding edge code from the \CONTEXT beta, +choose the \inlinecode {context} fontloader via the configuration file +(see sections \ref{sec:conf} and \ref{sec:pkg} below). + +Also, the merged file at some point loads the Adobe Glyph List from a +\LUA table that is contained in \fileent{luaotfload-glyphlist.lua}, +which is automatically generated by the script +\fileent{mkglyphlist}.\footnote{% + See \fileent{luaotfload-font-enc.lua}. + The hard-coded file name is why we have to replace the procedure + that loads the file in \fileent{luaotfload-init.lua}. +} +% +There is a make target \identifier{glyphs} that will create a fresh +glyph list so we don’t need to import it from \CONTEXT any longer. + +In addition to these, \identifier{luaotfload} requires a number of +files not contained in the merge. Some of these have no equivalent in +\LUATEX-Fonts or \CONTEXT, some were taken unmodified from the latter. + + +\beginfilelist + \beginaltitem {luaotfload-features.lua} + font feature handling; incorporates some of the code from + \fileent{font-otc} from \CONTEXT; + \endaltitem + \beginaltitem {luaotfload-configuration.lua} + handling of \fileent{luaotfload.conf(5)}. + \endaltitem + \beginaltitem {luaotfload-log.lua} + overrides the \CONTEXT logging functionality. + \endaltitem + \beginaltitem {luaotfload-loaders.lua} + registers readers in the fontloader for various kinds of + font formats + \endaltitem + \beginaltitem {luaotfload-parsers.lua} + various \abbrev{lpeg}-based parsers. + \endaltitem + \beginaltitem {luaotfload-database.lua} + font names database. + \endaltitem + \beginaltitem {luaotfload-resolvers.lua} + file name resolvers. + \endaltitem + \beginaltitem {luaotfload-colors.lua} + color handling. + \endaltitem + \beginaltitem {luaotfload-auxiliary.lua} + access to internal functionality for package authors (proposals + for additions welcome). + \endaltitem + \beginaltitem {luaotfload-letterspace.lua} + font-based letterspacing. + \endaltitem + \beginaltitem {luaotfload-filelist.lua} + data about the files in the package. + \endaltitem +\endfilelist + +%\figurefloat +% {file-graph} +% {Schematic of the files in \identifier{Luaotfload}} +% {filegraph.pdf} + +\endsubsection + +\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} (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 +merged package. +% +The parameter may be extended with a path to the \CONTEXT +\fileent{texmf}, separated with a colon: + +\beginlisting +[run] + fontloader = context:~/context/tex/texmf-context +\endlisting + +\noindent This setting allows accessing an installation -- e. g. the +standalone distribution or a source repository -- outside the current +\TEX distribution. + +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}.% +% +The state of the files currently in \identifier{Luaotfload}’s +repository can be queried: +\beginlisting +./scripts/mkimport news +\endlisting +% +The subcommand for importing takes the prefix of the desired \CONTEXT +\identifier{texmf} as an optional argument: +\beginlisting +./scripts/mkimport import ~/context/tex/texmf-context +\endlisting +% +Whereas the command for packaging requires a path to the +\emphasis{package description file} and the output name to be passed. +\beginlisting +./scripts/mkimport package 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 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\beginsection {Configuration Files} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\beginnarrower + \emphasis{Caution}: For the authoritative documentation, consult the + manpage for \fileent{luaotfload.conf(5)}. +\endnarrower + +\label{sec:conf} +The runtime behavior of \identifier{Luaotfload} can be customized by +means of a configuration file. +% location +At startup, it attempts to locate a file called \fileent +{luaotfload.conf} or \fileent {luaotfloadrc} at a number of candidate +locations: + +\begincentered + \begindefinitions + \beginnormalitem \fileent{./luaotfload.conf} \endnormalitem + \beginnormalitem \fileent{./luaotfloadrc} \endnormalitem + \beginnormalitem \fileent{\$XDG_CONFIG_HOME/luaotfload/luaotfload.conf} \endnormalitem + \beginnormalitem \fileent{\$XDG_CONFIG_HOME/luaotfload/luaotfload.rc} \endnormalitem + \beginnormalitem \fileent{~/.luaotfloadrc} \endnormalitem + \enddefinitions +\endcentered + +\beginnarrower + \emphasis{Caution}: The configuration potentially modifies the final + document. A project-local file belongs under version control along + with the rest of the document. This is to ensure that everybody who + builds the project also receives the same customizations as the + author. +\endnarrower + +% syntax +The syntax is fairly close to the format used by +\fileent{git-config(1)} which in turn was derived from the popular +\identifier{.INI} format: Lines of key-value pairs are grouped under +different configuration “sections”.\footnote{% + The configuration parser in \fileent {luoatfload-parsers.lua} might + be employed by other packages for similar purposes. +} +% example settings +An example for customization via \fileent {luaotfload.conf} might look +as below: + +\beginlisting +; Example luaotfload.conf containing a rudimentary configuration +[db] + update-live = false +[run] + color-callback = pre_linebreak_filter + definer = info_patch + log-level = 5 +[default-features] + global = mode=base +\endlisting + +This specifies that for the given project, \identifier{Luaotfload} +shall not attempt to automatically scan for fonts if it can’t resolve a +request. The font-based colorization will happen during \LUATEX’s +pre-linebreak filter. The fontloader will output verbose information +about the fonts at definition time along with globally increased +verbosity. Lastly, the fontloader defaults to the less expensive +\luaident{base} mode like it does in \CONTEXT. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\beginsection {Auxiliary Functions} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +With release version 2.2, \identifier{Luaotfload} received +additional functions for package authors to call from outside +(see the file \fileent{luaotfload-auxiliary.lua} for details). +% +The purpose of this addition twofold. +% +Firstly, \identifier{luaotfload} failed to provide a stable interface +to internals in the past which resulted in an unmanageable situation +of different packages abusing the raw access to font objects by means +of the \luaident{patch_font} callback. +% +When the structure of the font object changed due to an update, all +of these imploded and several packages had to be fixed while +simultaneously providing fallbacks for earlier versions. +% +Now the patching is done on the \identifier{luaotfload} side and can +be adapted with future modifications to font objects without touching +the packages that depend on it. +% +Second, some the capabilities of the font loader and the names +database are not immediately relevant in \identifier{luaotfload} +itself but might nevertheless be of great value to package authors or +end users. + +Note that the current interface is not yet set in stone and the +development team is open to suggestions for improvements or +additions. + +\beginsubsection {Callback Functions} + +The \luaident{patch_font} callback is inserted in the wrapper +\identifier{luaotfload} provides for the font definition callback. +% +At this place it allows manipulating the font object immediately after +the font loader is done creating it. +% +For a short demonstration of its usefulness, here is a snippet that +writes an entire font object to the file \fileent{fontdump.lua}: + +\beginlisting + \input luaotfload.sty + \directlua{ + local dumpfile = "fontdump.lua" + local dump_font = function (tfmdata) + local data = table.serialize(tfmdata) + io.savedata(dumpfile, data) + end + + luatexbase.add_to_callback( + "luaotfload.patch_font", + dump_font, + "my_private_callbacks.dump_font" + ) + } + \font \dumpme = name:Iwona + \bye +\endlisting + +\emphasis{Beware}: this creates a Lua file of around 150,000 lines of +code, taking up 3~\abbrev{mb} of disk space. +% +By inspecting the output you can get a first impression of how a font +is structured in \LUATEX’s memory, what elements it is composed of, +and in what ways it can be rearranged. + +\beginsubsubsection {Compatibility with Earlier Versions} + +As has been touched on in the preface to this section, the structure +of the object as returned by the fontloader underwent rather drastic +changes during different stages of its development, and not all +packages that made use of font patching have kept up with every one +of it. +% +To ensure compatibility with these as well as older versions of +some packages, \identifier{luaotfload} sets up copies of or references +to data in the font table where it used to be located. +% +For instance, important parameters like the requested point size, the +units factor, and the font name have again been made accessible from +the toplevel of the table even though they were migrated to different +subtables in the meantime. + +\endsubsubsection + +\beginsubsubsection{Patches} + +These are mostly concerned with establishing compatibility with \XETEX. + +\beginfunctionlist + + \beginaltitem {set_sscale_dimens} + Calculate \texmacro{fontdimen}s 10 and 11 to emulate \XETEX. + \endaltitem + + \beginaltitem {set_capheight} + Calculates \texmacro{fontdimen} 8 like \XETEX. + \endaltitem + + \beginaltitem {patch_cambria_domh} + Correct some values of the font \emphasis{Cambria Math}. + \endaltitem + +\endfunctionlist + +\endsubsection + +\beginsubsection {Package Author’s Interface} + +As \LUATEX release 1.0 is nearing, the demand for a reliable interface +for package authors increases. + +\endsubsubsection + +\beginsubsubsection{Font Properties} + +Below functions mostly concern querying the different components of a +font like for instance the glyphs it contains, or what font features +are defined for which scripts. + +\beginfunctionlist + + \beginaltitem {aux.font_has_glyph (id : int, index : int)} + Predicate that returns true if the font \luaident{id} + has glyph \luaident{index}. + \endaltitem + + \beginaltitem {aux.slot_of_name(name : string)} + Translates an Adobe Glyph name to the corresponding glyph + slot. + \endaltitem + + \beginaltitem {aux.name_of_slot(slot : int)} + The inverse of \luaident{slot_of_name}; note that this + might be incomplete as multiple glyph names may map to the + same codepoint, only one of which is returned by + \luaident{name_of_slot}. + \endaltitem + + \beginaltitem {aux.provides_script(id : int, script : string)} + Test if a font supports \luaident{script}. + \endaltitem + + \beginaltitem {aux.provides_language(id : int, script : string, language : string)} + Test if a font defines \luaident{language} for a given + \luaident{script}. + \endaltitem + + \beginaltitem {aux.provides_feature(id : int, script : string, + language : string, feature : string)} + Test if a font defines \luaident{feature} for + \luaident{language} for a given \luaident{script}. + \endaltitem + + \beginaltitem {aux.get_math_dimension(id : int, dimension : string)} + Get the dimension \luaident{dimension} of font \luaident{id}. + \endaltitem + + \beginaltitem {aux.sprint_math_dimension(id : int, dimension : string)} + Same as \luaident{get_math_dimension()}, but output the value + in scaled points at the \TEX end. + \endaltitem + +\endfunctionlist + +\endsubsubsection + +\beginsubsubsection{Database} + +%% not implemented, may come back later +\beginfunctionlist +% \beginaltitem {aux.scan_external_dir(dir : string)} +% Include fonts in directory \luaident{dir} in font lookups without +% adding them to the database. +% + \beginaltitem {aux.read_font_index (void)} + Read the index file from the appropriate location (usually + the bytecode file \fileent{luaotfload-names.luc} somewhere + in the \fileent{texmf-var} tree) and return the result as a + table. The file is processed with each call so it is up to + the user to store the result for later access. + \endaltitem + + \beginaltitem {aux.font_index (void)} + Return a reference of the font names table used internally + by \identifier{luaotfload}. The index will be read if it + has not been loaded up to this point. Also a font scan that + overwrites the current index file might be triggered. Since + the return value points to the actual index, any + modifications to the table might influence runtime behavior + of \identifier{luaotfload}. + \endaltitem + +\endfunctionlist + +\endsubsubsection + +\endsubsection +\endsection + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\beginsection {Troubleshooting} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\beginsubsection {Database Generation} + +If you encounter problems with some fonts, please first update to the +latest version of this package before reporting a bug, as +\identifier{luaotfload} is under active development and still a moving +target. +% +The development takes place on \identifier{github} at +\hyperlink {https://github.com/lualatex/luaotfload} where there is an issue +tracker for submitting bug reports, feature requests and the likes. + +Bug reports are more likely to be addressed if they contain the output +of + +\beginlisting + luaotfload-tool --diagnose=environment,files,permissions +\endlisting + +\noindent Consult the man page for a description of these options. + +Errors during database generation can be traced by increasing the +verbosity level and redirecting log output to \fileent{stdout}: + +\beginlisting + luaotfload-tool -fuvvv --log=stdout +\endlisting + +\noindent or to a file in \fileent{/tmp}: + +\beginlisting + luaotfload-tool -fuvvv --log=file +\endlisting + +\noindent In the latter case, invoke the \inlinecode {tail(1)} utility on the +file for live monitoring of the progress. + +If database generation fails, the font last printed to the terminal or +log file is likely to be the culprit. +% +Please specify it when reporting a bug, and blacklist it for the time +being (see above, page \pageref{font-blacklist}). + +\endsubsection + +\beginsubsection {Font Features} + +A common problem is the lack of features for some +\OpenType fonts even when specified. +% +This can be related to the fact that some fonts do not provide features +for the \inlinecode {dflt} script (see above on page \pageref{script-tag}), +which is the default one in this package. +% +If this happens, assigning a noth script when the font is defined should +fix it. +% +For example with \inlinecode {latn}: + +\beginlisting + \font \test = file:MyFont.otf:script=latn;+liga; +\endlisting + +You can get a list of features that a font defines for scripts and +languages by querying it in \fileent{luaotfload-tool}: + +\beginlisting + luaotfload-tool --find="Iwona" --inspect +\endlisting + +\endsubsection + +\beginsubsection {\LUATEX Programming} + +Another strategy that helps avoiding problems is to not access raw +\LUATEX internals directly. +% +Some of them, even though they are dangerous to access, have not been +overridden or disabled. +% +Thus, whenever possible prefer the functions in the \luaident{aux} +namespace over direct manipulation of font objects. For example, raw +access to the \luaident{font.fonts} table like: + +\beginlisting + local somefont = font.fonts[2] +\endlisting + +\noindent can render already defined fonts unusable. +% +Instead, the function \luaident{font.getfont()} should be used +because it has been replaced by a safe variant. + +However, \luaident{font.getfont()} only covers fonts handled by the +font loader, e.~g. \identifier{OpenType} and \identifier{TrueType} +fonts, but not \abbrev{tfm} or \abbrev{ofm}. +% +Should you absolutely require access to all fonts known to \LUATEX, +including the virtual and autogenerated ones, then you need to query +both \luaident{font.getfont()} and \luaident{font.fonts}. +% +In this case, best define you own accessor: + +\beginlisting + local unsafe_getfont = function (id) + local tfmdata = font.getfont (id) + if not tfmdata then + tfmdata = font.fonts[id] + end + return tfmdata + end + + --- use like getfont() + local somefont = unsafe_getfont (2) +\endlisting + +\endsubsection +\endsection + +\beginsection {License} + +\identifier {luaotfload} is licensed under the terms of the +\hyperlink [GNU General Public License version 2.0]% + {https://www.gnu.org/licenses/old-licenses/gpl-2.0.html}. +Following the underlying fontloader code \identifier {luaotfload} +recognizes only that exact version as its license. +The „any later version” clause of the original license text as +copyrighted by the \hyperlink [Free Software Foundation]{http://www.fsf.org/} +\emphasis {does not apply} to either \identifier {luaotfload} or the +code imported from \CONTEXT. + +The complete text of the license is given as a separate file \fileent +{COPYING} in the toplevel directory of the +\hyperlink [\fileent {Luaotfload} Git repository]{https://github.com/lualatex/luaotfload/blob/master/COPYING}. +Distributions probably package it as \fileent +{doc/luatex/luaotfload/COPYING} in the relevant \fileent {texmf} tree. + +\endsection + +\endinput + +% vim:ft=tex:tw=79:et:sw=2 diff --git a/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-tool.pdf b/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-tool.pdf new file mode 100644 index 00000000000..cf13510a3c7 Binary files /dev/null and b/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-tool.pdf differ diff --git a/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-tool.rst b/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-tool.rst new file mode 100644 index 00000000000..9a3c4b25e37 --- /dev/null +++ b/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-tool.rst @@ -0,0 +1,328 @@ +======================================================================= + luaotfload-tool +======================================================================= + +----------------------------------------------------------------------- + generate and query the Luaotfload font names database +----------------------------------------------------------------------- + +:Date: 2018-09-21 +:Copyright: GPL v2.0 +:Version: 2.9 +:Manual section: 1 +:Manual group: text processing + +SYNOPSIS +======================================================================= + +**luaotfload-tool** [ -bcDfFiIlLnpqRSuvVhw ] + +**luaotfload-tool** --update [ --force ] [ --quiet ] [ --verbose ] + [ --prefer-texmf ] [ --dry-run ] + [ --formats=[+|-]EXTENSIONS ] + [ --no-compress ] [ --no-strip ] + [ --local ] [ --max-fonts=N ] + +**luaotfload-tool** --find=FONTNAME [ --fuzzy ] [ --info ] [ --inspect ] + [ --no-reload ] + +**luaotfload-tool** --flush-lookups + +**luaotfload-tool** --cache=DIRECTIVE + +**luaotfload-tool** --list=CRITERION[:VALUE] [ --fields=F1,F2,...,Fn ] + +**luaotfload-tool** --bisect=DIRECTIVE + +**luaotfload-tool** --help + +**luaotfload-tool** --version + +**luaotfload-tool** --show-blacklist + +**luaotfload-tool** --diagnose=CHECK + +**luaotfload-tool** --conf=FILE --dumpconf + +DESCRIPTION +======================================================================= + +luaotfload-tool accesses the font names database that is required by +the *Luaotfload* package. There are two general modes: **update** and +**query**. + ++ **update**: update the database or rebuild it entirely; ++ **query**: resolve a font name or display close matches. + +OPTIONS +======================================================================= + +update mode +----------------------------------------------------------------------- +--update, -u Update the database; indexes new fonts. +--force, -f Force rebuilding of the database; re-indexes + all fonts. +--local, -L Include font files in ``$PWD``. This option + will cause large parts of the database to be + rebuilt. Thus it is quite inefficient. + Additionally, if local font files are found, + the database is prevented from being saved + to disk, so the local fonts need to be parsed + with every invocation of ``luaotfload-tool``. +--no-reload, -n Suppress auto-updates to the database (e.g. + when ``--find`` is passed an unknown name). +--no-compress, -c Do not filter the plain text version of the + font index through gzip. Useful for debugging + if your editor is built without zlib. + +--prefer-texmf, -p Organize the file name database in a way so + that it prefer fonts in the *TEXMF* tree over + system fonts if they are installed in both. +--formats=EXTENSIONS Extensions of the font files to index. + Where *EXTENSIONS* is a comma-separated list of + supported file extensions (otf, ttf, ttc). + If the list is prefixed + with a ``+`` sign, the given list is added to + the currently active one; ``-`` subtracts. + Default: *otf,ttf,ttc*. + Examples: + + 1) ``--formats=-ttc,ttf`` would skip + TrueType fonts and font collections; + 2) ``--formats=otf`` would scan only OpenType + files; + 3) ``--formats=+afm`` includes binary + Postscript files accompanied by an AFM file. + +query mode +----------------------------------------------------------------------- +--find=NAME Resolve a font name; this looks up in + the database and prints the file name it is + mapped to. + ``--find`` also understands request syntax, + i.e. ``--find=file:foo.otf`` checks whether + ``foo.otf`` is indexed. +--fuzzy, -F Show approximate matches to the file name if + the lookup was unsuccessful (requires + ``--find``). + +--info, -i Display basic information to a resolved font + file (requires ``--find``). +--inspect, -I Display detailed information by loading the + font and analyzing the font table; very slow! + For the meaning of the returned fields see + the LuaTeX documentation. + (requires ``--find``). + +--list=CRITERION Show entries, where *CRITERION* is one of the + following: + + 1) the character ``*``, selecting all entries; + 2) a field of a database entry, for instance + *version* or *format**, according to which + the output will be sorted. + Information in an unstripped database (see + the option ``--no-strip`` above) is nested: + Subfields of a record can be addressed using + the ``->`` separator, e. g. + ``file->location``, ``style->units_per_em``, + or + ``names->sanitized->english->prefmodifiers``. + NB: shell syntax requires that arguments + containing ``->`` be properly quoted! + 3) an expression of the form ``field:value`` to + limit the output to entries whose ``field`` + matches ``value``. + + For example, in order to output file names and + corresponding versions, sorted by the font + format:: + + ./luaotfload-tool.lua --list="format" --fields="file->base,version" + + This prints:: + + otf latinmodern-math.otf Version 1.958 + otf lmromancaps10-oblique.otf 2.004 + otf lmmono8-regular.otf 2.004 + otf lmmonoproplt10-bold.otf 2.004 + otf lmsans10-oblique.otf 2.004 + otf lmromanslant8-regular.otf 2.004 + otf lmroman12-italic.otf 2.004 + otf lmsansdemicond10-oblique.otf 2.004 + ... + +--fields=FIELDS Comma-separated list of fields that should be + printed. + Information in an unstripped database (see the + option ``--no-strip`` above) is nested: + Subfields of a record can be addressed using + the ``->`` separator, e. g. + ``file->location``, ``style->units_per_em``, + or ``names->sanitized->english->subfamily``. + The default is plainname,version*. + (Only meaningful with ``--list``.) + +font and lookup caches +----------------------------------------------------------------------- +--flush-lookups Clear font name lookup cache (experimental). + +--cache=DIRECTIVE Cache control, where *DIRECTIVE* is one of the + following: + + 1) ``purge`` -> delete Lua files from cache; + 2) ``erase`` -> delete Lua and Luc files from + cache; + 3) ``show`` -> print stats. + +debugging methods +----------------------------------------------------------------------- +--show-blacklist, -b Show blacklisted files (not directories). +--dry-run, -D Don’t load fonts when updating the database; + scan directories only. + (For debugging file system related issues.) +--no-strip Do not strip redundant information after + building the database. Warning: this will + inflate the index to about two to three times + the normal size. +--max-fonts=N Process at most *N* font files, including fonts + already indexed in the count. +--bisect=DIRECTIVE Bisection of the font database. + This mode is intended as assistance in + debugging the Luatex engine, especially when + tracking memleaks or buggy fonts. + + *DIRECTIVE* can be one of the following: + + 1) ``run`` -> Make ``luaotfload-tool`` respect + the bisection progress when running. + Combined with ``--update`` and possibly + ``--force`` this will only process the files + from the start up until the pivot and ignore + the rest. + 2) ``start`` -> Start bisection: create a + bisection state file and initialize the low, + high, and pivot indices. + 3) ``stop`` -> Terminate the current bisection + session by deleting the state file. + 4) ``good`` | ``bad`` -> Mark the section + processed last as “good” or “bad”, + respectively. The next bisection step will + continue with the bad section. + 5) ``status`` -> Print status information about + the current bisection session. Hint: Use + with higher verbosity settings for more + output. + + A bisection session is initiated by issuing the + ``start`` directive. This sets the pivot to the + middle of the list of available font files. + Now run *luaotfload-tool* with the ``--update`` + flag set as well as ``--bisect=run``: only the + fonts up to the pivot will be considered. If + that task exhibited the issue you are tracking, + then tell Luaotfload using ``--bisect=bad``. + The next step of ``--bisect=run`` will continue + bisection with the part of the files below the + pivot. + Likewise, issue ``--bisect=good`` in order to + continue with the fonts above the pivot, + assuming the tested part of the list did not + trigger the bug. + + Once the culprit font is tracked down, ``good`` + or ``bad`` will have no effect anymore. ``run`` + will always end up processing the single font + file that was left. + Use ``--bisect=stop`` to clear the bisection + state. + +miscellaneous +----------------------------------------------------------------------- +--verbose=N, -v Set verbosity level to *n* or the number of + repetitions of ``-v``. +--quiet No verbose output (log level set to zero). +--log=CHANNEL Redirect log output (for database + troubleshooting), where *CHANNEL* can be + + 1) ``stdout`` -> all output will be + dumped to the terminal (default); or + 2) ``file`` -> write to a file to the temporary + directory (the name will be chosen + automatically. + +--version, -V Show version numbers of components as well as + some basic information and exit. +--help, -h Show help message and exit. + +--diagnose=CHECK Run the diagnostic procedure *CHECK*. Available + procedures are: + + 1) ``files`` -> check *Luaotfload* files for + modifications; + 2) ``permissions`` -> check permissions of + cache directories and files; + 3) ``environment`` -> print relevant + environment and kpse variables; + 4) ``repository`` -> check the git repository + for new releases, + 5) ``index`` -> check database, display + information about it. + + Procedures can be chained by concatenating with + commas, e.g. ``--diagnose=files,permissions``. + Specify ``thorough`` to run all checks. + +--conf=FILE Read the configuration from *FILE*. See + **luaotfload.conf**\(%) for documentation + concerning the format and available options. +--dumpconf Print the currently active configuration; the + output can be saved to a file and used for + bootstrapping a custom configuration files. + +FILES +======================================================================= + +The font name database is usually located in the directory +``texmf-var/luatex-cache/generic/names/`` (``$TEXMFCACHE`` as set in +``texmf.cnf``) of your *TeX Live* distribution as a zlib-compressed +file ``luaotfload-names.lua.gz``. +The experimental lookup cache will be created as +``luaotfload-lookup-cache.lua`` in the same directory. +These Lua tables are not used directly by Luaotfload, though. +Instead, they are compiled to Lua bytecode which is written to +corresponding files with the extension ``.luc`` in the same directory. +When modifying the files by hand keep in mind that only if the bytecode +files are missing will Luaotfload use the plain version instead. +Both kinds of files are safe to delete, at the cost of regenerating +them with the next run of *LuaTeX*. + +SEE ALSO +======================================================================= + +**luaotfload.conf**\(5), **luatex**\(1), **lua**\(1) + +* ``texdoc luaotfload`` to display the manual for the *Luaotfload* + package +* Luaotfload development ``_ +* LuaLaTeX mailing list ``_ +* LuaTeX ``_ +* ConTeXt ``_ +* Luaotfload on CTAN ``_ + +BUGS +======================================================================= + +Tons, probably. + +AUTHORS +======================================================================= + +*Luaotfload* was developed by the LuaLaTeX dev team +(``__). It is currently maintained by Ulrike Fischer +and Marcel Krüger at ``__ +The fontloader code is provided by Hans Hagen of Pragma ADE, Hasselt +NL (``__). + +This manual page was written by Philipp Gesang . + diff --git a/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-tool.tex b/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-tool.tex new file mode 100644 index 00000000000..eab3b38b1de --- /dev/null +++ b/Master/texmf-dist/doc/luatex/luaotfload/luaotfload-tool.tex @@ -0,0 +1,517 @@ +\documentclass[a4paper]{article} +% generated by Docutils +% rubber: set program xelatex +\usepackage{fontspec} +% \defaultfontfeatures{Scale=MatchLowercase} +% straight double quotes (defined T1 but missing in TU): +\ifdefined \UnicodeEncodingName + \DeclareTextCommand{\textquotedbl}{\UnicodeEncodingName}{% + {\addfontfeatures{RawFeature=-tlig,Mapping=}\char34}}% +\fi +\usepackage{ifthen} +\usepackage{alltt} +\setcounter{secnumdepth}{0} +\usepackage{tabularx} + +%%% Custom LaTeX preamble +% Linux Libertine (free, wide coverage, not only for Linux) +\setmainfont{Linux Libertine O} +\setsansfont{Linux Biolinum O} +\setmonofont[HyphenChar=None,Scale=MatchLowercase]{DejaVu Sans Mono} + +%%% User specified packages and stylesheets + +%%% Fallback definitions for Docutils-specific commands + +% providelength (provide a length variable and set default, if it is new) +\providecommand*{\DUprovidelength}[2]{ + \ifthenelse{\isundefined{#1}}{\newlength{#1}\setlength{#1}{#2}}{} +} + +% docinfo (width of docinfo table) +\DUprovidelength{\DUdocinfowidth}{0.9\linewidth} + +% subtitle (in document title) +\providecommand*{\DUdocumentsubtitle}[1]{{\large #1}} + +% optionlist environment +\providecommand*{\DUoptionlistlabel}[1]{\bf #1 \hfill} +\DUprovidelength{\DUoptionlistindent}{3cm} +\ifthenelse{\isundefined{\DUoptionlist}}{ + \newenvironment{DUoptionlist}{% + \list{}{\setlength{\labelwidth}{\DUoptionlistindent} + \setlength{\rightmargin}{1cm} + \setlength{\leftmargin}{\rightmargin} + \addtolength{\leftmargin}{\labelwidth} + \addtolength{\leftmargin}{\labelsep} + \renewcommand{\makelabel}{\DUoptionlistlabel}} + } + {\endlist} +}{} +% hyperlinks: +\ifthenelse{\isundefined{\hypersetup}}{ + \usepackage[colorlinks=true,linkcolor=blue,urlcolor=blue]{hyperref} + \usepackage{bookmark} + \urlstyle{same} % normal text font (alternatives: tt, rm, sf) +}{} +\hypersetup{ + pdftitle={luaotfload-tool}, +} + +\title{luaotfload-tool% + \label{luaotfload-tool}% + \\ % subtitle% + \DUdocumentsubtitle{generate and query the Luaotfload font names database}% + \label{generate-and-query-the-luaotfload-font-names-database}} +\author{} +\date{} + +%%% Body +\begin{document} +\maketitle + +% Docinfo +\begin{center} +\begin{tabularx}{\DUdocinfowidth}{lX} +\textbf{Date}: & + 2018-09-21 \\ +\textbf{Copyright}: & + GPL v2.0 \\ +\textbf{Version}: & + 2.9 \\ +\textbf{Manual section}: & +1 +\\ +\textbf{Manual group}: & +text processing +\\ +\end{tabularx} +\end{center} + + +\section{SYNOPSIS% + \label{synopsis}% +} + +\textbf{luaotfload-tool} {[} -bcDfFiIlLnpqRSuvVhw {]} + +\begin{description} +\item[{\textbf{luaotfload-tool} --update {[} --force {]} {[} --quiet {]} {[} --verbose {]}}] \leavevmode +{[} --prefer-texmf {]} {[} --dry-run {]} +{[} --formats={[}+|-{]}EXTENSIONS {]} +{[} --no-compress {]} {[} --no-strip {]} +{[} --local {]} {[} --max-fonts=N {]} + +\item[{\textbf{luaotfload-tool} --find=FONTNAME {[} --fuzzy {]} {[} --info {]} {[} --inspect {]}}] \leavevmode +{[} --no-reload {]} + +\end{description} + +\textbf{luaotfload-tool} --flush-lookups + +\textbf{luaotfload-tool} --cache=DIRECTIVE + +\textbf{luaotfload-tool} --list=CRITERION{[}:VALUE{]} {[} --fields=F1,F2,...,Fn {]} + +\textbf{luaotfload-tool} --bisect=DIRECTIVE + +\textbf{luaotfload-tool} --help + +\textbf{luaotfload-tool} --version + +\textbf{luaotfload-tool} --show-blacklist + +\textbf{luaotfload-tool} --diagnose=CHECK + +\textbf{luaotfload-tool} --conf=FILE --dumpconf + + +\section{DESCRIPTION% + \label{description}% +} + +luaotfload-tool accesses the font names database that is required by +the \emph{Luaotfload} package. There are two general modes: \textbf{update} and +\textbf{query}. + +\begin{itemize} +\item \textbf{update}: update the database or rebuild it entirely; + +\item \textbf{query}: resolve a font name or display close matches. +\end{itemize} + + +\section{OPTIONS% + \label{options}% +} + + +\subsection{update mode% + \label{update-mode}% +} + +\begin{DUoptionlist} +\item[--update, -u] Update the database; indexes new fonts. + +\item[--force, -f] Force rebuilding of the database; re-indexes +all fonts. + +\item[--local, -L] Include font files in \texttt{\$PWD}. This option +will cause large parts of the database to be +rebuilt. Thus it is quite inefficient. +Additionally, if local font files are found, +the database is prevented from being saved +to disk, so the local fonts need to be parsed +with every invocation of \texttt{luaotfload-tool}. + +\item[--no-reload, -n] Suppress auto-updates to the database (e.g. +when \texttt{--find} is passed an unknown name). + +\item[--no-compress, -c] Do not filter the plain text version of the +font index through gzip. Useful for debugging +if your editor is built without zlib. + +\item[--prefer-texmf, -p] Organize the file name database in a way so +that it prefer fonts in the \emph{TEXMF} tree over +system fonts if they are installed in both. + +\item[--formats=EXTENSIONS] Extensions of the font files to index. +Where \emph{EXTENSIONS} is a comma-separated list of +supported file extensions (otf, ttf, ttc). +If the list is prefixed +with a \texttt{+} sign, the given list is added to +the currently active one; \texttt{-} subtracts. +Default: \emph{otf,ttf,ttc}. +Examples: + +\begin{enumerate} +\renewcommand{\labelenumi}{\arabic{enumi})} +\item \texttt{--formats=-ttc,ttf} would skip +TrueType fonts and font collections; + +\item \texttt{--formats=otf} would scan only OpenType +files; + +\item \texttt{--formats=+afm} includes binary +Postscript files accompanied by an AFM file. +\end{enumerate} +\end{DUoptionlist} + + +\subsection{query mode% + \label{query-mode}% +} + +\begin{DUoptionlist} +\item[--find=NAME] Resolve a font name; this looks up in +the database and prints the file name it is +mapped to. +\texttt{--find} also understands request syntax, +i.e. \texttt{--find=file:foo.otf} checks whether +\texttt{foo.otf} is indexed. + +\item[--fuzzy, -F] Show approximate matches to the file name if +the lookup was unsuccessful (requires +\texttt{--find}). + +\item[--info, -i] Display basic information to a resolved font +file (requires \texttt{--find}). + +\item[--inspect, -I] Display detailed information by loading the +font and analyzing the font table; very slow! +For the meaning of the returned fields see +the LuaTeX documentation. +(requires \texttt{--find}). + +\item[--list=CRITERION] Show entries, where \emph{CRITERION} is one of the +following: + +\begin{enumerate} +\renewcommand{\labelenumi}{\arabic{enumi})} +\item the character \texttt{*}, selecting all entries; + +\item a field of a database entry, for instance +\emph{version} or \emph{format*}, according to which +the output will be sorted. +Information in an unstripped database (see +the option \texttt{--no-strip} above) is nested: +Subfields of a record can be addressed using +the \texttt{->} separator, e. g. +\texttt{file->location}, \texttt{style->units\_per\_em}, +or +\texttt{names->sanitized->english->prefmodifiers}. +NB: shell syntax requires that arguments +containing \texttt{->} be properly quoted! + +\item an expression of the form \texttt{field:value} to +limit the output to entries whose \texttt{field} +matches \texttt{value}. +\end{enumerate} + +For example, in order to output file names and +corresponding versions, sorted by the font +format: + +\begin{quote} +\begin{alltt} +./luaotfload-tool.lua --list="format" --fields="file->base,version" +\end{alltt} +\end{quote} + +This prints: + +\begin{quote} +\begin{alltt} +otf latinmodern-math.otf Version 1.958 +otf lmromancaps10-oblique.otf 2.004 +otf lmmono8-regular.otf 2.004 +otf lmmonoproplt10-bold.otf 2.004 +otf lmsans10-oblique.otf 2.004 +otf lmromanslant8-regular.otf 2.004 +otf lmroman12-italic.otf 2.004 +otf lmsansdemicond10-oblique.otf 2.004 +... +\end{alltt} +\end{quote} + +\item[--fields=FIELDS] Comma-separated list of fields that should be +printed. +Information in an unstripped database (see the +option \texttt{--no-strip} above) is nested: +Subfields of a record can be addressed using +the \texttt{->} separator, e. g. +\texttt{file->location}, \texttt{style->units\_per\_em}, +or \texttt{names->sanitized->english->subfamily}. +The default is plainname,version*. +(Only meaningful with \texttt{--list}.) +\end{DUoptionlist} + + +\subsection{font and lookup caches% + \label{font-and-lookup-caches}% +} + +\begin{DUoptionlist} +\item[--flush-lookups] Clear font name lookup cache (experimental). + +\item[--cache=DIRECTIVE] Cache control, where \emph{DIRECTIVE} is one of the +following: + +\begin{enumerate} +\renewcommand{\labelenumi}{\arabic{enumi})} +\item \texttt{purge} -> delete Lua files from cache; + +\item \texttt{erase} -> delete Lua and Luc files from +cache; + +\item \texttt{show} -> print stats. +\end{enumerate} +\end{DUoptionlist} + + +\subsection{debugging methods% + \label{debugging-methods}% +} + +\begin{DUoptionlist} +\item[--show-blacklist, -b] Show blacklisted files (not directories). + +\item[--dry-run, -D] Don’t load fonts when updating the database; +scan directories only. +(For debugging file system related issues.) + +\item[--no-strip] Do not strip redundant information after +building the database. Warning: this will +inflate the index to about two to three times +the normal size. + +\item[--max-fonts=N] Process at most \emph{N} font files, including fonts +already indexed in the count. + +\item[--bisect=DIRECTIVE] Bisection of the font database. +This mode is intended as assistance in +debugging the Luatex engine, especially when +tracking memleaks or buggy fonts. + +\emph{DIRECTIVE} can be one of the following: + +\begin{enumerate} +\renewcommand{\labelenumi}{\arabic{enumi})} +\item \texttt{run} -> Make \texttt{luaotfload-tool} respect +the bisection progress when running. +Combined with \texttt{--update} and possibly +\texttt{--force} this will only process the files +from the start up until the pivot and ignore +the rest. + +\item \texttt{start} -> Start bisection: create a +bisection state file and initialize the low, +high, and pivot indices. + +\item \texttt{stop} -> Terminate the current bisection +session by deleting the state file. + +\item \texttt{good} | \texttt{bad} -> Mark the section +processed last as “good” or “bad”, +respectively. The next bisection step will +continue with the bad section. + +\item \texttt{status} -> Print status information about +the current bisection session. Hint: Use +with higher verbosity settings for more +output. +\end{enumerate} + +A bisection session is initiated by issuing the +\texttt{start} directive. This sets the pivot to the +middle of the list of available font files. +Now run \emph{luaotfload-tool} with the \texttt{--update} +flag set as well as \texttt{--bisect=run}: only the +fonts up to the pivot will be considered. If +that task exhibited the issue you are tracking, +then tell Luaotfload using \texttt{--bisect=bad}. +The next step of \texttt{--bisect=run} will continue +bisection with the part of the files below the +pivot. +Likewise, issue \texttt{--bisect=good} in order to +continue with the fonts above the pivot, +assuming the tested part of the list did not +trigger the bug. + +Once the culprit font is tracked down, \texttt{good} +or \texttt{bad} will have no effect anymore. \texttt{run} +will always end up processing the single font +file that was left. +Use \texttt{--bisect=stop} to clear the bisection +state. +\end{DUoptionlist} + + +\subsection{miscellaneous% + \label{miscellaneous}% +} + +\begin{DUoptionlist} +\item[--verbose=N, -v] Set verbosity level to \emph{n} or the number of +repetitions of \texttt{-v}. + +\item[--quiet] No verbose output (log level set to zero). + +\item[--log=CHANNEL] Redirect log output (for database +troubleshooting), where \emph{CHANNEL} can be + +\begin{enumerate} +\renewcommand{\labelenumi}{\arabic{enumi})} +\item \texttt{stdout} -> all output will be +dumped to the terminal (default); or + +\item \texttt{file} -> write to a file to the temporary +directory (the name will be chosen +automatically. +\end{enumerate} + +\item[--version, -V] Show version numbers of components as well as +some basic information and exit. + +\item[--help, -h] Show help message and exit. + +\item[--diagnose=CHECK] Run the diagnostic procedure \emph{CHECK}. Available +procedures are: + +\begin{enumerate} +\renewcommand{\labelenumi}{\arabic{enumi})} +\item \texttt{files} -> check \emph{Luaotfload} files for +modifications; + +\item \texttt{permissions} -> check permissions of +cache directories and files; + +\item +\begin{description} +\item[{\texttt{environment} -> print relevant}] \leavevmode +environment and kpse variables; + +\end{description} + +\item \texttt{repository} -> check the git repository +for new releases, + +\item \texttt{index} -> check database, display +information about it. +\end{enumerate} + +Procedures can be chained by concatenating with +commas, e.g. \texttt{--diagnose=files,permissions}. +Specify \texttt{thorough} to run all checks. + +\item[--conf=FILE] Read the configuration from \emph{FILE}. See +\textbf{luaotfload.conf}(\%) for documentation +concerning the format and available options. + +\item[--dumpconf] Print the currently active configuration; the +output can be saved to a file and used for +bootstrapping a custom configuration files. +\end{DUoptionlist} + + +\section{FILES% + \label{files}% +} + +The font name database is usually located in the directory +\texttt{texmf-var/luatex-cache/generic/names/} (\texttt{\$TEXMFCACHE} as set in +\texttt{texmf.cnf}) of your \emph{TeX Live} distribution as a zlib-compressed +file \texttt{luaotfload-names.lua.gz}. +The experimental lookup cache will be created as +\texttt{luaotfload-lookup-cache.lua} in the same directory. +These Lua tables are not used directly by Luaotfload, though. +Instead, they are compiled to Lua bytecode which is written to +corresponding files with the extension \texttt{.luc} in the same directory. +When modifying the files by hand keep in mind that only if the bytecode +files are missing will Luaotfload use the plain version instead. +Both kinds of files are safe to delete, at the cost of regenerating +them with the next run of \emph{LuaTeX}. + + +\section{SEE ALSO% + \label{see-also}% +} + +\textbf{luaotfload.conf}(5), \textbf{luatex}(1), \textbf{lua}(1) + +\begin{itemize} +\item \texttt{texdoc luaotfload} to display the manual for the \emph{Luaotfload} +package + +\item Luaotfload development \url{https://github.com/lualatex/luaotfload} + +\item LuaLaTeX mailing list \url{http://tug.org/pipermail/lualatex-dev/} + +\item LuaTeX \url{http://luatex.org/} + +\item ConTeXt \url{http://wiki.contextgarden.net} + +\item Luaotfload on CTAN \url{http://ctan.org/pkg/luaotfload} +\end{itemize} + + +\section{BUGS% + \label{bugs}% +} + +Tons, probably. + + +\section{AUTHORS% + \label{authors}% +} + +\emph{Luaotfload} was developed by the LuaLaTeX dev team +(\url{https://github.com/lualatex/}). It is currently maintained by Ulrike Fischer +and Marcel Krüger at \url{https://github.com/u-fischer/luaotfload} +The fontloader code is provided by Hans Hagen of Pragma ADE, Hasselt +NL (\url{http://pragma-ade.com/}). + +This manual page was written by Philipp Gesang <\href{mailto:phg@phi-gamma.net}{phg@phi-gamma.net}>. + +\end{document} diff --git a/Master/texmf-dist/doc/luatex/luaotfload/luaotfload.conf.rst b/Master/texmf-dist/doc/luatex/luaotfload/luaotfload.conf.rst new file mode 100644 index 00000000000..a7a1c73d79d --- /dev/null +++ b/Master/texmf-dist/doc/luatex/luaotfload/luaotfload.conf.rst @@ -0,0 +1,409 @@ +======================================================================= + luaotfload.conf +======================================================================= + +----------------------------------------------------------------------- + Luaotfload configuration file +----------------------------------------------------------------------- + +:Date: 2018-09-21 +:Copyright: GPL v2.0 +:Version: 2.9 +:Manual section: 5 +:Manual group: text processing + +SYNOPSIS +======================================================================= + +- **./luaotfload{.conf,rc}** +- **XDG_CONFIG_HOME/luaotfload/luaotfload{.conf,rc}** +- **~/.luaotfloadrc** + +DESCRIPTION +======================================================================= + +The file ``luaotfload.conf`` contains configuration options for +*Luaotfload*, a font loading and font management component for LuaTeX. + + +EXAMPLE +======================================================================= + +A small Luaotfload configuration file with few customizations could +look as follows: :: + + [db] + formats = afm,ttf + compress = false + + [misc] + termwidth = 60 + + [run] + log-level = 6 + +This will make Luaotfload ignore all font files except for PostScript +binary fonts with a matching AFM file, and Truetype fonts. Also, an +uncompressed index file will be dumped which is going to be much larger +than the default gzip’ed index. The terminal width +is truncated to 60 characters which influences the verbose output +during indexing. Finally, the verbosity is increased greatly: each font +file being processed will be printed to the stdout on a separate line, +along with lots of other information. + +To observe the difference in behavior, save above snippet to +``./luaotfload.conf`` and update the font index: :: + + luaotfload-tool --update --force + +The current configuration can be written to disk using +**luaotfload-tool**: :: + + luaotfload-tool --dumpconf > luaotfload.conf + +The result can itself be used as a configuration file. + + +SYNTAX +======================================================================= + +The configuration file syntax follows the common INI format. For a more +detailed description please refer to the section “CONFIGURATION FILE” +of **git-config**\(1). A brief list of rules is given below: + + * Blank lines and lines starting with a semicolon (``;``) are ignored. + + * A configuration file is partitioned into sections that are declared + by specifying the section title in brackets on a separate line: :: + + [some-section] + ... section content ... + + * Sections consist of one or more variable assignments of the form + ``variable-name = value`` E. g.:: + + [foo] + bar = baz + quux = xyzzy + ... + + * Section and variable names may contain only uppercase and lowercase + letters as well as dashes (``-``). + + +VARIABLES +======================================================================= + +Variables in belong into a configuration section and their values must +be of a certain type. Some of them have further constraints. For +example, the “color callback” must be a string of one of the values +``post_linebreak_filter``, ``pre_linebreak_filter``, or +``pre_output_filter``, defined in the section *run* of the +configuration file. + +Currently, the configuration is organized into four sections: + +db + Options relating to the font index. + +misc + Options without a clearly defined category. + +paths + Path and file name settings. + +run + Options controlling runtime behavior of Luaotfload. + +The list of valid variables, the sections they are part of and their +type is given below. Types represent Lua types that the values must be +convertible to; they are abbreviated as follows: ``s`` for the *string* +type, ``n`` for *number*, ``b`` for *boolean*. A value of ``nil`` means +the variable is unset. + + +Section ``db`` +----------------------------------------------------------------------- + ++--------------------+--------+---------------------------+ +| variable | type | default | ++--------------------+--------+---------------------------+ +| compress | b | ``true`` | ++--------------------+--------+---------------------------+ +| designsize-dimen | b | ``bp`` | ++--------------------+--------+---------------------------+ +| formats | s | ``"otf,ttf,ttc"`` | ++--------------------+--------+---------------------------+ +| max-fonts | n | ``2^51`` | ++--------------------+--------+---------------------------+ +| scan-local | b | ``false`` | ++--------------------+--------+---------------------------+ +| skip-read | b | ``false`` | ++--------------------+--------+---------------------------+ +| strip | b | ``true`` | ++--------------------+--------+---------------------------+ +| update-live | b | ``true`` | ++--------------------+--------+---------------------------+ + +The flag ``compress`` determines whether the font index (usually +``luaotfload-names.lua[.gz]`` will be stored in compressed forms. +If unset it is equivalent of passing ``--no-compress`` to +**luaotfload-tool**. Since the file is only created for convenience +and has no effect on the runtime behavior of Luaotfload, the flag +should remain set. Most editors come with zlib support anyways. + +The setting ``designsize-dimen`` applies when looking up fonts from +families with design sizes. In Opentype, these are specified as +“decipoints” where one decipoint equals ten DTP style “big points”. +When indexing fonts these values are converted to ``sp``. In order to +treat the values as though they were specified in TeX points or Didot +points, set ``designsize-dimen`` to ``pt`` or ``dd``. + +The list of ``formats`` must be a comma separated sequence of strings +containing one or more of these elements: + +* ``otf`` (OpenType format), +* ``ttf`` and ``ttc`` (TrueType format), +* ``afm`` (Adobe Font Metrics), + +It corresponds loosely to the ``--formats`` option to +**luaotfload-tool**. Invalid or duplicate members are ignored; if the +list does not contain any useful identifiers, the default list +``"otf,ttf,ttc"`` will be used. + +The variable ``max-fonts`` determines after processing how many font +files the font scanner will terminate the search. This is useful for +debugging issues with the font index and has the same effect as the +option ``--max-fonts`` to **luaotfload-tools**. + +The ``scan-local`` flag, if set, will incorporate the current working +directory as a font search location. NB: This will potentially slow +down document processing because a font index with local fonts will not +be saved to disk, so these fonts will have to be re-indexed whenever +the document is built. + +The ``skip-read`` flag is only useful for debugging: It makes +Luaotfload skip reading fonts. The font information for rebuilding the +index is taken from the presently existing one. + +Unsetting the ``strip`` flag prevents Luaotfload from removing data +from the index that is only useful when processing font files. NB: this +can increase the size of the index files significantly and has no +effect on the runtime behavior. + +If ``update-live`` is set, Luaotfload will reload the database if it +cannot find a requested font. Those who prefer to update manually using +**luaotfload-tool** should unset this flag. This option does not affect +rebuilds due to version mismatch. + +Section ``default-features`` +----------------------------------------------------------------------- + +By default Luaotfload enables ``node`` mode and picks the default font +features that are prescribed in the OpenType standard. This behavior +may be overridden in the ``default-features`` section. Global defaults +that will be applied for all scripts can be set via the ``global`` +option, others by the script they are to be applied to. For example, +a setting of :: + + [default-features] + global = mode=base,color=0000FF + dflt = smcp,onum + +would force *base* mode, tint all fonts blue and activate small +capitals and text figures globally. Features are specified as a comma +separated list of variables or variable-value pairs. Variables without +an explicit value are set to ``true``. + + +Section ``misc`` +----------------------------------------------------------------------- + ++---------------+--------+-------------------------+ +| variable | type | default | ++---------------+--------+-------------------------+ +| statistics | b | ``false`` | ++---------------+--------+-------------------------+ +| termwidth | n | ``nil`` | ++---------------+--------+-------------------------+ +| version | s | | ++---------------+--------+-------------------------+ + +With ``statistics`` enabled, extra statistics will be collected during +index creation and appended to the index file. It may then be queried +at the Lua end or inspected by reading the file itself. + +The value of ``termwidth``, if set, overrides the value retrieved by +querying the properties of the terminal in which Luatex runs. This is +useful if the engine runs with ``shell_escape`` disabled and the actual +terminal dimensions cannot be retrieved. + +The value of ``version`` is derived from the version string hard-coded +in the Luaotfload source. Override at your own risk. + + +Section ``paths`` +----------------------------------------------------------------------- + ++------------------+--------+------------------------------------+ +| variable | type | default | ++------------------+--------+------------------------------------+ +| cache-dir | s | ``"fonts"`` | ++------------------+--------+------------------------------------+ +| names-dir | s | ``"names"`` | ++------------------+--------+------------------------------------+ +| index-file | s | ``"luaotfload-names.lua"`` | ++------------------+--------+------------------------------------+ +| lookups-file | s | ``"luaotfload-lookup-cache.lua"`` | ++------------------+--------+------------------------------------+ + +The paths ``cache-dir`` and ``names-dir`` determine the subdirectory +inside the Luaotfload subtree of the ``luatex-cache`` directory where +the font cache and the font index will be stored, respectively. + +Inside the index directory, the names of the index file and the font +lookup cache will be derived from the respective values of +``index-file`` and ``lookups-file``. This is the filename base for the +bytecode compiled version as well as -- for the index -- the gzipped +version. + + +Section ``run`` +----------------------------------------------------------------------- + ++------------------+--------+------------------------------+ +| variable | type | default | ++------------------+--------+------------------------------+ +| anon-sequence | s | ``"tex,path,name"`` | ++------------------+--------+------------------------------+ +| color-callback | s | ``"post_linebreak_filter"`` | ++------------------+--------+------------------------------+ +| definer | s | ``"patch"`` | ++------------------+--------+------------------------------+ +| log-level | n | ``0`` | ++------------------+--------+------------------------------+ +| resolver | s | ``"cached"`` | ++------------------+--------+------------------------------+ +| fontloader | s | ``"default"`` | ++------------------+--------+------------------------------+ + +Unqualified font lookups are treated with the flexible “anonymous” +mechanism. This involves a chain of lookups applied successively until +the first one yields a match. By default, the lookup will first search +for TFM fonts using the Kpathsea library. If this wasn’t successful, an +attempt is made at interpreting the request as an absolute path (like +the ``[/path/to/font/foo.ttf]`` syntax) or a file name +(``file:foo.ttf``). Finally, the request is interpreted as a font name +and retrieved from the index (``name:Foo Regular``). This behavior can +be configured by specifying a list as the value to ``anon-sequence``. +Available items are ``tex``, ``path``, ``name`` -- representing the +lookups described above, respectively --, and ``file`` for searching a +filename but not an absolute path. Also, ``my`` lookups are valid +values but they should only be used from within TeX documents, because +there is no means of customizing a ``my`` lookups on the command line. + +The ``color-callback`` option determines the stage at which fonts that +defined with a ``color=xxyyzz`` feature will be colorized. By default +this happens in a ``post_linebreak_filter`` but alternatively the +``pre_linebreak_filter`` or ``pre_output_filter`` may be chosen, which +is faster but might produce inconsistent output. The +``pre_output_filter`` used to be the default in the 1.x series of +Luaotfload, whilst later versions up to and including 2.5 hooked into +the ``pre_linebreak_filter`` which naturally didn’t affect any glyphs +inserting during hyphenation. Both are kept around as options to +restore the previous behavior if necessary. + +The ``definer`` allows for switching the ``define_font`` callback. +Apart from the default ``patch`` one may also choose the ``generic`` +one that comes with the vanilla fontloader. Beware that this might +break tools like Fontspec 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``. 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 +than or equal to the supplied value will be output on the terminal. +At a log level of five Luaotfload can be very noisy. Also, printing too +many messages will slow down the interpreter due to line buffering +being disabled (see **setbuf**\(3)). + +The ``resolver`` setting allows choosing the font name resolution +function: With the default value ``cached`` Luaotfload saves the result +of a successful font name request to a cache file to speed up +subsequent lookups. The alternative, ``normal`` circumvents the cache +and resolves every request individually. (Since to the restructuring of +the font name index in Luaotfload 2.4 the performance difference +between the cached and uncached lookups should be marginal.) + + +FILES +======================================================================= + +Luaotfload only processes the first configuration file it encounters at +one of the search locations. The file name may be either +``luaotfload.conf`` or ``luaotfloadrc``, except for the dotfile in the +user’s home directory which is expected at ``~/.luaotfloadrc``. + +Configuration files are located following a series of steps. The search +terminates as soon as a suitable file is encountered. The sequence of +locations that Luaotfload looks at is + +i. The current working directory of the LuaTeX process. +ii. The subdirectory ``luaotfload/`` inside the XDG configuration + tree, e. g. ``/home/oenothea/config/luaotfload/``. +iii. The dotfile. +iv. The *TEXMF* (using kpathsea). + + +SEE ALSO +======================================================================= + +**luaotfload-tool**\(1), **luatex**\(1), **lua**\(1) + +* ``texdoc luaotfload`` to display the PDF manual for the *Luaotfload* + package +* Luaotfload development ``_ +* LuaLaTeX mailing list ``_ +* LuaTeX ``_ +* Luaotfload on CTAN ``_ + + +REFERENCES +======================================================================= + +* The XDG base specification + ``_. + +AUTHORS +======================================================================= + +*Luaotfload* was developed by the LuaLaTeX dev team +(``_). It is currently maintained by Ulrike Fischer +and Marcel Krüger at ``_ + +This manual page was written by Philipp Gesang . + diff --git a/Master/texmf-dist/doc/luatex/luaotfload/luaotfload.pdf b/Master/texmf-dist/doc/luatex/luaotfload/luaotfload.pdf deleted file mode 100644 index 64fd5d8416a..00000000000 Binary files a/Master/texmf-dist/doc/luatex/luaotfload/luaotfload.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/luatex/luaotfload/valgrind-kpse-suppression.sup b/Master/texmf-dist/doc/luatex/luaotfload/valgrind-kpse-suppression.sup deleted file mode 100644 index dc325869fa1..00000000000 --- a/Master/texmf-dist/doc/luatex/luaotfload/valgrind-kpse-suppression.sup +++ /dev/null @@ -1,140 +0,0 @@ -{ - kpathsea-garbage-1 - Memcheck:Leak - match-leak-kinds: all - ... - fun:kpathsea_cnf_get -} - -{ - kpathsea-garbage-2 - Memcheck:Leak - match-leak-kinds: all - ... - fun:kpse_program_basename -} - - -{ - kpathsea-garbage-3 - Memcheck:Leak - match-leak-kinds: all - ... - fun:kpse_find_file -} - - -{ - kpathsea-garbage-4 - Memcheck:Leak - match-leak-kinds: all - ... - fun:find_file -} - -{ - kpathsea-garbage-5 - Memcheck:Leak - match-leak-kinds: all - ... - fun:lua_kpse_lookup -} - -{ - kpathsea-garbage-6 - Memcheck:Leak - match-leak-kinds: all - ... - fun:find_file -} - - -{ - kpathsea-garbage-7 - Memcheck:Leak - match-leak-kinds: all - ... - fun:expand_path -} - -{ - kpathsea-garbage-8 - Memcheck:Leak - match-leak-kinds: all - ... - fun:do_lua_kpathsea_lookup -} - - -{ - kpathsea-garbage-9 - Memcheck:Leak - match-leak-kinds: all - ... - fun:kpathsea_find_file -} - - -{ - kpathsea-garbage-10 - Memcheck:Leak - match-leak-kinds: all - ... - fun:kpathsea_init_db -} - - -{ - kpathsea-garbage-11 - Memcheck:Leak - match-leak-kinds: all - ... - fun:kpathsea_find_file_generic -} - - -{ - kpathsea-garbage-12 - Memcheck:Leak - match-leak-kinds: all - ... - fun:expand_var -} - - -{ - kpathsea-garbage-13 - Memcheck:Leak - match-leak-kinds: all - ... - fun:init_path -} - - -{ - kpathsea-garbage-14 - Memcheck:Leak - match-leak-kinds: all - ... - fun:kpse_in_name_ok -} - - -{ - kpathsea-garbage-15 - Memcheck:Leak - match-leak-kinds: all - ... - fun:kpathsea_var_value -} - - -{ - kpathsea-garbage-16 - Memcheck:Leak - match-leak-kinds: all - ... - fun:kpse_set_program_name -} - - -- cgit v1.2.3