diff options
author | Philipp Gesang <phg42.2a@gmail.com> | 2014-03-07 07:58:23 +0100 |
---|---|---|
committer | Philipp Gesang <phg42.2a@gmail.com> | 2014-03-07 07:58:23 +0100 |
commit | 2e78a8e0594fc066cbca25459dc76e79f1c3f375 (patch) | |
tree | edbd68543fed649f684000d35155796ebafb2f2c | |
parent | 2d4c42e2f033d767fa4d6065e6cc7cff36cfc4b7 (diff) | |
parent | 3ac343c10c8a02f7758eb75034e513d5509b584c (diff) | |
download | luaotfload-2e78a8e0594fc066cbca25459dc76e79f1c3f375.tar.gz |
Merge pull request #203 from phi-gamma/texlive2014
update docs
-rw-r--r-- | COPYING | 350 | ||||
-rw-r--r-- | Makefile | 18 | ||||
-rw-r--r-- | doc/luaotfload-latex.tex | 176 | ||||
-rw-r--r-- | doc/luaotfload-main.tex | 1259 | ||||
-rw-r--r-- | misc/valgrind-kpse-suppression.sup | 131 | ||||
-rw-r--r-- | src/luaotfload-database.lua | 13 | ||||
-rw-r--r-- | src/luaotfload-main.lua | 2 |
7 files changed, 1068 insertions, 881 deletions
@@ -0,0 +1,350 @@ +Context, where the fontloader Luaotfload is built around originates, is +licensed under the GPL version 2.0 (exactly). As a derived work, anything +Luaotflaod adds to that is also subject to the same license at the same +version. The “any later version” clause as used by the FSF in the license text +*does not apply* to either Context or Luaotfload, despite being kept around in +the license text given below. + +------------------------------------------------------------------------------- + LICENSE TEXT BELOW +------------------------------------------------------------------------------- + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + 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; either version 2 of the License, or + (at your option) any later version. + + 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. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. @@ -12,6 +12,8 @@ SRC = $(wildcard $(SRCSRCDIR)/luaotfload-*.lua) SRC += $(SRCSRCDIR)/luaotfload.sty SRC += $(MISCDIR)/luaotfload-blacklist.cnf +VGND = $(MISCDIR)/valgrind-kpse-suppression.sup + GLYPHSCRIPT = $(SCRIPTSRCDIR)/mkglyphlist CHARSCRIPT = $(SCRIPTSRCDIR)/mkcharacters STATUSSCRIPT = $(SCRIPTSRCDIR)/mkstatus @@ -39,12 +41,12 @@ GLYPHS = $(BUILDDIR)/$(NAME)-glyphlist.lua CHARS = $(BUILDDIR)/$(NAME)-characters.lua STATUS = $(BUILDDIR)/$(NAME)-status.lua RESOURCES = $(GLYPHS) $(CHARS) $(STATUS) -SOURCE = $(DOCSRC) $(MANSRC) $(SRC) README Makefile NEWS $(RESOURCESCRIPTS) +SOURCE = $(DOCSRC) $(MANSRC) $(SRC) README COPYING Makefile NEWS $(RESOURCESCRIPTS) # Files grouped by installation location SCRIPTSTATUS = $(TOOL) $(RESOURCESCRIPTS) RUNSTATUS = $(filter-out $(SCRIPTSTATUS),$(SRC)) -DOCSTATUS = $(DOCPDF) $(DOTPDF) README NEWS +DOCSTATUS = $(DOCPDF) $(DOTPDF) README NEWS COPYING MANSTATUS = $(MANPAGE) SRCSTATUS = $(DOCSRC) $(MANSRC) $(GRAPHSRC) Makefile @@ -64,8 +66,10 @@ TEXMFROOT = $(shell kpsewhich --var-value TEXMFHOME) # CTAN-friendly subdirectory for packaging DISTDIR = $(BUILDDIR)/$(NAME) -CTAN_ZIP = $(BUILDDIR)/$(NAME).zip -TDS_ZIP = $(BUILDDIR)/$(NAME).tds.zip +CTAN_ZIPFILE = $(NAME).zip +TDS_ZIPFILE = $(NAME).tds.zip +CTAN_ZIP = $(BUILDDIR)/$(CTAN_ZIPFILE) +TDS_ZIP = $(BUILDDIR)/$(TDS_ZIPFILE) ZIPS = $(CTAN_ZIP) $(TDS_ZIP) LUA = texlua @@ -116,17 +120,17 @@ $(BUILDDIR): /dev/null define make-ctandir @$(RM) -rf $(DISTDIR) -@mkdir -p $(DISTDIR) && cp $(SOURCE) $(COMPILED) $(DISTDIR) +@mkdir -p $(DISTDIR) && cp $(VGND) $(SOURCE) $(COMPILED) $(DISTDIR) endef $(CTAN_ZIP): $(DOCS) $(SOURCE) $(COMPILED) $(TDS_ZIP) @echo "Making $@ for CTAN upload." @$(RM) -- $@ $(make-ctandir) - @zip -r -9 $@ $(TDS_ZIP) $(DISTDIR) >/dev/null + cd $(BUILDDIR) && zip -r -9 $(CTAN_ZIPFILE) $(TDS_ZIPFILE) $(NAME) >/dev/null define run-install-doc -@mkdir -p $(DOCDIR) && cp -- $(DOCSTATUS) $(DOCDIR) +@mkdir -p $(DOCDIR) && cp -- $(DOCSTATUS) $(VGND) $(DOCDIR) @mkdir -p $(SRCDIR) && cp -- $(SRCSTATUS) $(SRCDIR) @mkdir -p $(MANDIR) && cp -- $(MANSTATUS) $(MANDIR) endef diff --git a/doc/luaotfload-latex.tex b/doc/luaotfload-latex.tex index d00a617..42799bf 100644 --- a/doc/luaotfload-latex.tex +++ b/doc/luaotfload-latex.tex @@ -34,11 +34,11 @@ \makeatletter -\usepackage{metalogo,multicol,mdwlist,fancyvrb,xspace} -\usepackage[x11names]{xcolor} +\usepackage {metalogo,multicol,mdwlist,fancyvrb,xspace} +\usepackage [x11names] {xcolor} -\def\primarycolor{DodgerBlue4} %%-> rgb 16 78 139 | #104e8b -\def\secondarycolor{Goldenrod4} %%-> rgb 139 105 200 | #8b6914 +\def \primarycolor {DodgerBlue4} %%-> rgb 16 78 139 | #104e8b +\def \secondarycolor {Goldenrod4} %%-> rgb 139 105 200 | #8b6914 \usepackage[ bookmarks=true, @@ -46,14 +46,14 @@ linkcolor=\primarycolor, urlcolor=\secondarycolor, citecolor=\primarycolor, - pdftitle={The luaotfload package}, + pdftitle={The Luaotfload package}, pdfsubject={OpenType layout system for Plain TeX and LaTeX}, pdfauthor={Elie Roux & Khaled Hosny & Philipp Gesang}, pdfkeywords={luatex, lualatex, unicode, opentype} ]{hyperref} -\usepackage{fontspec} -\usepackage{unicode-math} +\usepackage {fontspec} +\usepackage {unicode-math} \setmainfont[ % Numbers = OldStyle, %% buggy with font cache @@ -89,12 +89,16 @@ \def\restoreunderscore{\catcode`\_=12\relax} -\definehighlight [fileent][\ttfamily\restoreunderscore] %% files, dirs -\definehighlight [texmacro][\sffamily\itshape\textbackslash] %% cs -\definehighlight[luafunction][\sffamily\itshape\restoreunderscore] %% lua identifiers -\definehighlight [identifier][\sffamily] %% names -\definehighlight [abbrev][\rmfamily\scshape] %% acronyms -\definehighlight [emphasis][\rmfamily\slshape] %% level 1 emph +\definehighlight [fileent][\ttfamily\restoreunderscore] %% files, dirs +\definehighlight [texmacro][\sffamily\itshape\textbackslash] %% cs +\definehighlight [luafunction][\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 [proportional][\tt] %% font switch \newcommand*\email[1]{\href{mailto:#1}{#1}} @@ -157,6 +161,22 @@ \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 {listings} +\lstset { + basicstyle=\ttfamily, +} + +\def \inlinecode #1{% + \lstinline {#1}% +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% codelistings; this sucks hard since we lack access to buffers %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -203,6 +223,7 @@ \small \begin {quote} \bgroup + \addfontfeature {RawFeature=-tlig;-liga}%% So one can’t just turn them all off at once using the ``Ligatures`` key? \luatexcatcodetable \literalcatcodes \obeyspaces \obeylines @@ -231,12 +252,10 @@ } } -\definelist [definitions]{\normalitem {\fileent {\first}}} -\definelist [filelist]{\normalitem {\fileent {\first}}\space--\hskip 1em} -\definelist [functionlist]{\normalitem {\luafunction {\first}}\hfill\break} - -\def \beginenumeration {\begin {enumerate}} -\def \endenumeration {\end {enumerate}} +\definelist [descriptions]{\normalitem {\textbf \first}\hfill\break} +\definelist [definitions]{\normalitem {\fileent {\first}}} +\definelist [filelist]{\normalitem {\fileent {\first}}\space--\hskip 1em} +\definelist [functionlist]{\normalitem {\luafunction {\first}}\hfill\break} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% columns @@ -245,16 +264,12 @@ \def \begindoublecolumns {\begin {multicols} {2}} \def \enddoublecolumns {\end {multicols}} -\def \begintriplecolumns {\begin {multicols} {3}} -\def \endtriplecolumns {\end {multicols}} - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% alignment %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def \begincentered {\begin {center}} \def \endcentered {\end {center}} -\makeatother \def \beginnarrower {\begin {quote}} \def \endnarrower {\end {quote}} @@ -266,10 +281,125 @@ \def \beginabstractcontent {\begin {abstract}} \def \endabstractcontent {\end {abstract}} +\let \setdocumenttitle \title +\let \setdocumentdate \date +\let \setdocumentauthor \author +\let \typesetdocumenttitle \maketitle + +\let \typesetcontent \tableofcontent + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% floats +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%% syntax definition +\def \beginsyntaxfloat #1#2{%% #1:label #2:caption + \begin {figure} [b] + \edef \syntaxlabel {#1}% + \def \syntaxcaption {#2}% + \setlength\grammarparsep{12pt 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 \beginfigurefloat #1#2{%% #1:label #2:caption + \begingroup + \begin {figure} [b] + \edef \figurelabel {#1}% + \caption {#2}% +} + +\def \endfigurefloat {% + \label \figurelabel + \end {figure} + \endgroup +} + +%% tables + +\def \begintablefloat #1#2{%% #1:label #2:caption + \begingroup + \begin {table} [t] + \hrule + \edef \floatlabel {#1}% + \caption {#2}% +} + +\def \endtablefloat {% + \label \floatlabel + \hrule + \end {table} + \endgroup +} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% 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 + \begin {document} \input {luaotfload-main.tex} \end {document} diff --git a/doc/luaotfload-main.tex b/doc/luaotfload-main.tex index f5a068d..0098405 100644 --- a/doc/luaotfload-main.tex +++ b/doc/luaotfload-main.tex @@ -29,21 +29,20 @@ %% ---------------------------------------------------------------------------- %% -\title{The \identifier{luaotfload} package} -\date{2014/**/** v2.5} -\author{Elie Roux · Khaled Hosny · Philipp Gesang\\ - Home: \url {https://github.com/lualatex/luaotfload}\\ - Support: \email {lualatex-dev@tug.org}} +\setdocumenttitle {The \identifier{luaotfload} package} +\setdocumentdate {2014/**/** v2.5} +\setdocumentauthor {Elie Roux · Khaled Hosny · Philipp Gesang\\ + Home: \hyperlink {https://github.com/lualatex/luaotfload}\\ + Support: \email {lualatex-dev@tug.org}} -\maketitle +\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. + 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. \endabstractcontent - \tableofcontents %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -63,10 +62,10 @@ 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. + Unfortunately, \identifier{luaotfload} doesn‘t support many Indic + scripts right now. + Assistance in implementing the prerequisites is greatly + appreciated. } scripts. @@ -128,11 +127,11 @@ in the task and willingness to respond to our suggestions. \identifier{luaotfload} supports an extended font request syntax: \beginnarrower - |\font\foo={|% - \meta{prefix}|:|% - \meta{font name}|:|% - \meta{font features}|}|% - \meta{\TEX font features} + \inlinecode{\\font\\foo=\{}% + \meta{prefix}\inlinecode{:}% + \meta{font name}\inlinecode{:}% + \meta{font features}\inlinecode{\}}% + \meta{\TEX font features} \endnarrower \noindent @@ -144,12 +143,28 @@ 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}. -\begin {figure} [b] - \setlength\grammarparsep{12pt plus 2pt minus 2pt} - \setlength\grammarindent{5cm} - \begingroup - \small - \begin{grammar} +\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: {\ttfamily aat}, + {\ttfamily icu}, and + {\ttfamily gr}. + The special terminals are: + {\sc feature\textunderscore id} for a valid font + feature name and + {\sc feature\textunderscore value} for the corresponding + value. + {\sc tfmname} is the name of a \abbrev{tfm} file. + {\sc digit} again refers to bytes 48--57, and + {\sc all\textunderscore characters} to all byte values. + {\sc csname} and {\sc dimension} are the \TEX concepts.} +% <definition> ::= `\\font', {\sc csname}, `=', <font request>, [ <size> ] ; <size> ::= `at', {\sc dimension} ; @@ -187,29 +202,7 @@ for a more formal description see figure \ref{font-syntax}. <feature switch> ::= `+' | `-' ; <name character> ::= {\sc all_characters} - ( `(' | `/' | `:' ) ; - \end{grammar} - \endgroup - \caption{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: {\ttfamily aat}, - {\ttfamily icu}, and - {\ttfamily gr}. - The special terminals are: - {\sc feature\textunderscore id} for a valid font - feature name and - {\sc feature\textunderscore value} for the corresponding - value. - {\sc tfmname} is the name of a \abbrev{tfm} file. - {\sc digit} again refers to bytes 48--57, and - {\sc all\textunderscore characters} to all byte values. - {\sc csname} and {\sc dimension} are the \TEX concepts.} - \label{font-syntax} -\end {figure} +\endsyntaxfloat \beginsubsection{Prefix -- the \identifier{luaotfload}{ }Way} @@ -217,29 +210,28 @@ In \identifier{luaotfload}, the canonical syntax for font requests requires a \emphasis{prefix}: % \beginnarrower - |\font\fontname=|\meta{prefix}|:|\meta{fontname}\dots + \inlinecode{\\font\\fontname=}\meta{prefix}\inlinecode{:}\meta{fontname}\dots \endnarrower % -where \meta{prefix} is either \verb|file:| or \verb|name:|.\footnote{% +where \meta{prefix} is either \inlinecode{file:} or \inlinecode {name:}.\footnote{% The development version also knows two further prefixes, - \verb|kpse:| and \verb|my:|. - % - A \verb|kpse| lookup is restricted to files that can be found by + \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 \verb|my| lookup takes this a step further: it lets you define + The \inlinecode {my} lookup takes this a step further: it lets you define a custom resolver function and hook it into the \luafunction{resolve_font} callback. - % + % This ensures full control over how a file is located. - % + % For a working example see the - \href{https://bitbucket.org/phg/lua-la-tex-tests/src/5f6a535d/pln-lookup-callback-1.tex} - {test repo}. + \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 @@ -256,25 +248,24 @@ 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 - \href{http://www.ntg.nl/pipermail/ntg-context/2013/073889.html} - {this post} + \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 \verb|--find=<name>|, and you can use the file name it returns + option \inlinecode {--find=<name>}, and you can use the file name it returns in your font definition. } % @@ -287,11 +278,11 @@ create the database. File names are whatever your file system allows them to be, except that that they may not contain the characters - \verb|(|, - \verb|:|, and - \verb|/|. + \inlinecode {(}, + \inlinecode {:}, and + \inlinecode {/}. % -As is obvious from the last exception, the \verb|file:| lookup will +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. % @@ -299,9 +290,9 @@ 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}. + \fileent{lmroman12-italic.otf}, + \fileent{GFSBodoni.otf}, and + \fileent{PTZ56F.ttf}. \endsubsection @@ -314,7 +305,7 @@ There are again two modes: bracketed and unbracketed. A bracketed request looks as follows. \beginnarrower - |\font\fontname=[|\meta{path to file}|]| + \inlinecode{\\font\\fontname=[}\meta{path to file}\inlinecode{]} \endnarrower \noindent @@ -322,10 +313,10 @@ Inside the square brackets, every character except for a closing bracket is permitted, allowing for specifying paths to a font file. % Naturally, path-less file names are equally valid and processed the -same way as an ordinary \verb|file:| lookup. +same way as an ordinary \inlinecode {file:} lookup. \beginnarrower - |\font\fontname=|\meta{font name} \dots + \inlinecode{\\font\\fontname=}\meta{font name} \dots \endnarrower Unbracketed (or, for lack of a better word: \emphasis{anonymous}) @@ -335,22 +326,22 @@ 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 \verb|name:| lookup, which itself will -fall back to a \verb|file:| lookup if no database entry matches +If this fails, it performs a \inlinecode {name:} lookup, which itself will +fall back to a \inlinecode {file:} lookup if no database entry matches \meta{font name}. Furthermore, \identifier{luaotfload} supports the slashed (shorthand) font style notation from \XETEX. \beginnarrower - |\font\fontname=|\meta{font name}|/|\meta{modifier}\dots + \inlinecode{\\font\\fontname=}\meta{font name}\inlinecode{/}\meta{modifier}\dots \endnarrower \noindent Currently, four style modifiers are supported: - \verb|I| for italic shape, - \verb|B| for bold weight, - \verb|BI| or \verb|IB| for the combination of both. + \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. @@ -361,8 +352,8 @@ have no meaning in \LUATEX. \beginsubsubsection{Loading by File Name} -For example, conventional \abbrev{type1} font can be loaded with a \verb|file:| -request like so: +For example, conventional \abbrev{type1} font can be loaded with a +\inlinecode {file:} request like so: \beginlisting \font \lmromanten = {file:ec-lmr10} at 10pt @@ -370,7 +361,7 @@ request like so: The \OpenType version of Janusz Nowacki’s font \emphasis{Antykwa Półtawskiego}\footnote{% - \url{http://jmn.pl/antykwa-poltawskiego/}, also available in + \hyperlink {http://jmn.pl/antykwa-poltawskiego/}, also available in in \TEX Live. } in its condensed variant can be loaded as follows: @@ -391,7 +382,7 @@ non-standard directory: \beginsubsubsection{Loading by Font Name} -The \verb|name:| lookup does not depend on cryptic filenames: +The \inlinecode {name:} lookup does not depend on cryptic filenames: \beginlisting \font \pagellaregular = {name:TeX Gyre Pagella} at 9pt @@ -425,14 +416,14 @@ Which fits nicely with the whole set: \beginsubsubsection{Modifiers} If the entire \emphasis{Iwona} family\footnote{% - \url{http://jmn.pl/kurier-i-iwona/}, + \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 + \font \iwona = Iwona at 20pt \endlisting \noindent @@ -440,18 +431,18 @@ 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 + \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 + \font \iwonaitalic = "Iwona Italic" at 20pt + \font \iwonabold = "Iwona Bold" at 20pt + \font \iwonabolditalic = "Iwona BoldItalic" at 20pt \endlisting \endsubsubsection @@ -466,10 +457,10 @@ which is equivalent to these full names: general scheme for font requests: \beginnarrower - |\font\foo={|% - \meta{prefix}|:|% - \meta{font name}|:|% - \meta{font features}|}|% + \inlinecode{\\font\\foo=\{}% + \meta{prefix}\inlinecode{:}% + \meta{font name}\inlinecode{:}% + \meta{font features}\inlinecode{\}}% \meta{\TEX font features} \endnarrower @@ -479,277 +470,278 @@ If style modifiers are present (\XETEX style), they must precede The element \meta{font features} is a semicolon-separated list of feature tags\footnote{% - Cf. \url{http://www.microsoft.com/typography/otspec/featurelist.htm}. + Cf. \hyperlink {http://www.microsoft.com/typography/otspec/featurelist.htm}. } and font options. % -Prepending a font feature with a |+| (plus sign) enables it, whereas -a |-| (minus) disables it. For instance, the request +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 + \font \test = LatinModernRoman:+clig;-kern \endlisting -\noindent activates contextual ligatures (|clig|) and disables -kerning (|kern|). +\noindent activates contextual ligatures (\inlinecode{clig}) and +disables kerning (\inlinecode{kern}). % -Alternatively the options |true| or |false| can be passed to -the feature in a key/value expression. +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 + \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} (|salt|) are variants of -given glyphs. +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, |random|. +obviously, \inlinecode{random}. -%% TODO verify that this actually works with a font that supports -%% the salt/random feature!\fi +%% TODO verify that this actually works with a font that supports +%% the salt/random feature!\fi \beginlisting - \font\librmsaltfirst=LatinModernRoman:salt=1 + \font \librmsaltfirst = LatinModernRoman:salt=1 \endlisting -\noindent Other font options include: - -\begin{description} - -\item [mode] \hfill \\ - \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. - -\item [script] \label{script-tag} \hfill \\ - An \OpenType script tag;\footnote{% - See \url{http://www.microsoft.com/typography/otspec/scripttags.htm} - for a list of valid values. - % - For scripts derived from the Latin alphabet the value - |latn| is good choice. - } - the default value is |dlft|. - % - Some fonts, including very popular ones by foundries like Adobe, - do not assign features to the |dflt| script, in - which case the script needs to be set explicitly. - -\item [language] \hfill \\ - An \OpenType language system identifier,\footnote{% - Cf. \url{http://www.microsoft.com/typography/otspec/languagetags.htm}. - } - defaulting to |dflt|. - -\item [featurefile] \hfill \\ - A comma-separated list of feature files to be applied to the - font. - % - Feature files contain a textual representation of - \OpenType tables and extend the features of a font - on fly. - % - After they are applied to a font, features defined in a - feature file can be enabled or disabled just like any - other font feature. - % - The syntax is documented in \identifier{Adobe}’s - \OpenType Feature File Specification.\footnote{% - Cf. \url{http://www.adobe.com/devnet/opentype/afdko/topic_feature_file_syntax.html}. - Feature file support is part of the engine which at the - time of this writing (2014) implements the spec only - partially. - See the - \href{http://tracker.luatex.org/view.php?id=231} - {\LUATEX tracker} - for details. - } - - For a demonstration of how to set a |tkrn| feature consult - the file |tkrn.fea| that is part of \identifier{luaotfload}. - It can be read and applied as follows: - - |\font\test=Latin Modern Roman:featurefile=tkrn.fea;+tkrn| - -\item [color] \hfill \\ - A font color, defined as a triplet of two-digit hexadecimal - \abbrev{rgb} values, with an optional fourth value for - transparency - (where |00| is completely transparent and |FF| is opaque). - - For example, in order to set text in semitransparent red: - - \beginlisting - \font\test={Latin Modern Roman}:color=FF0000BB - \endlisting - -\item [kernfactor \& letterspace] \hfill \\ - 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 - \luafunction{keeptogether} and \luafunction{keepligature}, - respectively, inside the namespace \verb|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. - % - \luafunction{keeptogether} receives a pair of consecutive - glyph nodes in order of their appearance in the node list. - % - \luafunction{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. - - -\item [protrusion \& expansion] \hfill \\ - 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 - \beginlisting - \directlua{inspect(fonts.protrusions.setups.default) - inspect(fonts.expansions.setups.default)} - \endlisting - 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 - \verb|pdfprotrudechars=2| and - \verb|pdfadjustspacing=2| - to activate protrusion and expansion, respectively. - See the - \href{http://mirrors.ctan.org/systems/pdftex/manual/pdftex-a.pdf}% - {\PDFTEX manual} - for details. - }: - - \beginlisting - \font\test=LatinModernRoman:protrusion=default - \endlisting -\end{description} - -\paragraph{Non-standard font features} +\beginsubsection {Basic font features} + +\begindescriptions + + \altitem {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. + + \altitem {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{dlft}. + % + 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. + + \altitem {language} + An \OpenType language system identifier,\footnote{% + Cf. \hyperlink {http://www.microsoft.com/typography/otspec/languagetags.htm}. + } + defaulting to \inlinecode{dflt}. + + \altitem {featurefile} + A comma-separated list of feature files to be applied to the + font. + % + Feature files contain a textual representation of + \OpenType tables and extend the features of a font + on fly. + % + After they are applied to a font, features defined in a + feature file can be enabled or disabled just like any + other font feature. + % + The syntax is documented in \identifier{Adobe}’s + \OpenType Feature File Specification.\footnote{% + Cf. \hyperlink {http://www.adobe.com/devnet/opentype/afdko/topic_feature_file_syntax.html}. + Feature file support is part of the engine which at the + time of this writing (2014) implements the spec only + partially. + See the + \hyperlink [\LUATEX tracker]{http://tracker.luatex.org/view.php?id=231} + for details. + } + + For a demonstration of how to set a \inlinecode{tkrn} feature consult + the file \inlinecode{tkrn.fea} that is part of \identifier{luaotfload}. + It can be read and applied as follows: + + \inlinecode{\\font \\test = Latin Modern Roman:featurefile=tkrn.fea;+tkrn} + + \altitem {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 + + \altitem {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 + \luafunction{keeptogether} and \luafunction{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. + % + \luafunction{keeptogether} receives a pair of consecutive + glyph nodes in order of their appearance in the node list. + % + \luafunction{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. + + + \altitem {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 + \beginlisting +\directlua{inspect(fonts.protrusions.setups.default) + inspect(fonts.expansions.setups.default)} + \endlisting + 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 +\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: -\begin{description} +\begindescriptions - \item [anum] + \altitem {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}. - \item [tlig] + \altitem {tlig} Applies legacy \TEX ligatures: - \begin{tabular}{rlrl} - `` & \verb|``| & '' & \verb|''| \\ - ` & \verb|`| & ' & \verb|'| \\ - " & \verb|"| & -- & \verb|--| \\ - --- & \verb|---| & !` & \verb|!`| \\ - ?` & \verb|?`| & & \\ - \end{tabular} + \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 \footnote{% - These contain the feature set \verb|trep| of earlier + These contain the feature set \inlinecode {trep} of earlier versions of \identifier{luaotfload}. Note to \XETEX users: this is the equivalent of the - assignment \verb|mapping=text-tex| using \XETEX's input + assignment \inlinecode {mapping=text-tex} using \XETEX's input remapping feature. } - \item [itlc] + \altitem {itlc} Computes italic correction values (active by default). -\end{description} - +\enddescriptions +\endsubsection \endsection %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -764,9 +756,10 @@ 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 \href{http://www.lcdf.org/type/}{\fileent{otfinfo}} (comes - with \TEX Live), when invoked on a font file with the \verb|-i| - option, lists the variety of name fields defined for it. + 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, @@ -791,7 +784,7 @@ 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}} + {\fileent{luaotfload-tool}} It can still be desirable at times to do some of these steps manually, and without having to compile a document. @@ -801,12 +794,11 @@ To this end, \identifier{luaotfload} comes with the utility functionality. % Being a \LUA script, there are two ways to run it: -either make it executable (\verb|chmod +x| on unixoid systems) or +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 - \href{https://foundry.supelec.fr/projects/luajittex/}% - {\identifier{Luajit\kern-.25ex\TEX}}, + \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. @@ -814,21 +806,21 @@ pass it as an argument to \fileent{texlua}.\footnote{% On \abbrev{MS} \identifier{Windows} systems, the script can be run either by calling the wrapper application \fileent{luaotfload-tool.exe} or as - \verb|texlua.exe luaotfload-tool.lua|. + \inlinecode {texlua.exe luaotfload-tool.lua}. } % -Invoked with the argument \verb|--update| it will perform a database +Invoked with the argument \inlinecode {--update} it will perform a database update, scanning for fonts not indexed. \beginlisting - luaotfload-tool --update + luaotfload-tool --update \endlisting -Adding the \verb|--force| switch will initiate a complete +Adding the \inlinecode {--force} switch will initiate a complete rebuild of the database. \beginlisting - luaotfload-tool --update --force + luaotfload-tool --update --force \endlisting Whenever it is run under this name, it will update the database first, mimicking the behavior of earlier versions of @@ -843,43 +835,41 @@ expected to be located on a given system. % On a Linux machine it follows the paths listed in the \identifier{Fontconfig} configuration files; -consult \verb|man 5 fonts.conf| for further information. +consult \inlinecode {man 5 fonts.conf} for further information. % On \identifier{Windows} systems, the standard location is -\verb|Windows\Fonts|, +\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 -\verb+OSFONTDIR+. +\inlinecode {OSFONTDIR}. % If it is non-empty, then search will be extended to the included directories. -\begin{table}[t] - \hrule - \caption{List of paths searched for each supported operating - system.} - \renewcommand{\arraystretch}{1.2} - \begincentered - \begin{tabular}{lp{.5\textwidth}} - Windows & \verb|%WINDIR%\Fonts| - \\ - Linux & \fileent{/usr/local/etc/fonts/fonts.conf} and\hfill\break - \fileent{/etc/fonts/fonts.conf} - \\ - Mac & \fileent{\textasciitilde/Library/Fonts},\break - \fileent{/Library/Fonts},\break - \fileent{/System/Library/Fonts}, and\hfill\break - \fileent{/Network/Library/Fonts} - \\ - \end{tabular} - \endcentered - \label{table-searchpaths} - \hrule -\end{table} +\begintablefloat {table-searchpaths} + {List of paths searched for each supported operating system.} + \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 +\endtablefloat \endsubsection @@ -888,14 +878,14 @@ directories. \fileent{luaotfload-tool} also provides rudimentary means of accessing the information collected in the font database. % -If the option \verb|--find=|\emphasis{name} is given, the script will +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" + luaotfload-tool --find="Iwona Regular" \endlisting \noindent @@ -903,7 +893,7 @@ 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 -\verb|-F| (or \verb|--fuzzy|) switch to the command line to enable +\inlinecode {-F} (or \inlinecode {--fuzzy}) switch to the command line to enable approximate matching. % Suppose you cannot precisely remember if the variant of @@ -911,17 +901,17 @@ Suppose you cannot precisely remember if the variant of The query \beginlisting - luaotfload-tool -F --find="Iwona Bright" + 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 \verb|-i| option (\verb|--info|). +using the \inlinecode {-i} option (\inlinecode {--info}). % \beginlisting - luaotfload-tool -i --find="Iwona Light Italic" + luaotfload-tool -i --find="Iwona Light Italic" \endlisting % \noindent @@ -930,19 +920,19 @@ The meaning of the printed values is described in section 4.4 of the In \TEX Live: \fileent{texmf-dist/doc/luatex/base/luatexref-t.pdf}. } -For a much more detailed report about a given font try the \verb|-I| option -instead (\verb|--inspect|). +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" + luaotfload-tool -I --find="Iwona Light Italic" \endlisting -\verb|luaotfload-tool --help| will list the available command line +\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 -(\verb|man 1 luaotfload-tool|).\footnote{% - Or see \verb|luaotfload-tool.rst| in the source directory. +(\inlinecode {man 1 luaotfload-tool}).\footnote{% + Or see \inlinecode {luaotfload-tool.rst} in the source directory. } \endsubsection @@ -954,7 +944,7 @@ 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 \verb|luaotfload-tool -v| to increase verbosity. +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 @@ -966,14 +956,14 @@ plain filename should suffice. % File extensions (\fileent{.otf}, \fileent{.ttf}, etc.) may be omitted. % -Anything after a percent (|%|) character until the end of the line +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 \verb|mktexlsr| if you created a new file in + 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. @@ -982,7 +972,7 @@ or just leave it in the working directory of your document. \fileent{luaotfload-blacklist.cnf} it finds, so the fonts in \fileent{./luaotfload-blacklist.cnf} extend the global blacklist. -Furthermore, a filename prepended with a dash character (|-|) is +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. % @@ -1003,11 +993,8 @@ An example with explicit paths: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \identifier{luaotfload} relies on code originally written by Hans -Hagen\footnote{% - The creator of the \href{http://wiki.contextgarden.net}{\CONTEXT} - format. -} -for and tested with \CONTEXT. +Hagen for the \hyperlink[\identifier\CONTEXT]{http://wiki.contextgarden.net} +format. % It integrates the font loader as distributed in the \identifier{\LUATEX-Fonts} package. @@ -1045,12 +1032,10 @@ has been imported as \fileent{luaotfload-fontloader.lua}. It is generated by \fileent{mtx-package}, a \LUA source code merging too developed by Hans Hagen.\footnote{% \fileent{mtx-package} is - \href - {http://repo.or.cz/w/context.git/blob_plain/refs/heads/origin:/scripts/context/lua/mtx-package.lua} - {part of \CONTEXT} + \hyperlink [part of \CONTEXT]{http://repo.or.cz/w/context.git/blob_plain/refs/heads/origin:/scripts/context/lua/mtx-package.lua} and requires \fileent{mtxrun}. Run - \verb|mtxrun --script package --help| + \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. @@ -1063,22 +1048,22 @@ categories. of what is provided by the \identifier{lualibs} package. - \begindoublecolumns - \begindefinitions - \altitem{l-lua.lua} \altitem{l-lpeg.lua} - \altitem{l-function.lua} \altitem{l-string.lua} - \altitem{l-table.lua} \altitem{l-io.lua} - \altitem{l-file.lua} \altitem{l-boolean.lua} - \altitem{l-math.lua} \altitem{util-str.lua} - \enddefinitions - \enddoublecolumns + \begindoublecolumns + \begindefinitions + \altitem{l-lua.lua} \altitem{l-lpeg.lua} + \altitem{l-function.lua} \altitem{l-string.lua} + \altitem{l-table.lua} \altitem{l-io.lua} + \altitem{l-file.lua} \altitem{l-boolean.lua} + \altitem{l-math.lua} \altitem{util-str.lua} + \enddefinitions + \enddoublecolumns \normalitem The \emphasis{font loader} itself. These files have been written for \LUATEX-Fonts and they are distributed along with \identifier{luaotfload}. - \begindoublecolumns - \begindefinitions + \begindoublecolumns + \begindefinitions \altitem{luatex-basics-gen.lua} \altitem{luatex-basics-nod.lua} \altitem{luatex-fonts-enc.lua} @@ -1091,22 +1076,22 @@ categories. \altitem{luatex-fonts-def.lua} \altitem{luatex-fonts-ext.lua} \altitem{luatex-fonts-cbk.lua} - \enddefinitions - \enddoublecolumns + \enddefinitions + \enddoublecolumns \normalitem Code related to \emphasis{font handling and node processing}, taken directly from \CONTEXT. - \begindoublecolumns - \begindefinitions + \begindoublecolumns + \begindefinitions \altitem{data-con.lua} \altitem{font-ini.lua} \altitem{font-con.lua} \altitem{font-cid.lua} \altitem{font-map.lua} \altitem{font-oti.lua} \altitem{font-otf.lua} \altitem{font-otb.lua} \altitem{font-ota.lua} \altitem{font-def.lua} \altitem{font-otp.lua} - \enddefinitions - \enddoublecolumns + \enddefinitions + \enddoublecolumns \enddefinitions Note that if \identifier{luaotfload} cannot locate the @@ -1114,7 +1099,7 @@ merged file, it will load the individual \LUA libraries instead. % Their names remain the same as in \CONTEXT (without the -\verb|otfl|-prefix) since we imported the relevant section of +\inlinecode {otfl}-prefix) since we imported the relevant section of \fileent{luatex-fonts.lua} unmodified into \fileent{luaotfload-main.lua}. Thus if you prefer running bleeding edge code from the \CONTEXT beta, all you have to do is remove @@ -1155,11 +1140,11 @@ files not contained in the merge. Some of these have no equivalent in \altitem {luaotfload-letterspace.lua} font-based letterspacing. \endfilelist -\begin{figure}[b] - \caption{Schematic of the files in \identifier{Luaotfload}} +\beginfigurefloat + {file-graph} + {Schematic of the files in \identifier{Luaotfload}} \includegraphics[width=\textwidth]{filegraph.pdf} - \label{file-graph} -\end{figure} +\endfigurefloat \endsection @@ -1222,7 +1207,7 @@ writes an entire font object to the file \fileent{fontdump.lua}: "my_private_callbacks.dump_font" ) } - \font\dumpme=name:Iwona + \font \dumpme = name:Iwona \bye \endlisting @@ -1325,14 +1310,14 @@ are defined for which scripts. %% not implemented, may come back later % \beginsubsubsection{Database} -% +% % \beginfunctionlist % \altitem {aux.scan_external_dir(dir : string)} % Include fonts in directory \luafunction{dir} in font lookups without % adding them to the database. -% +% % \endfunctionlist -% +% % \endsubsubsection \endsubsection @@ -1350,7 +1335,7 @@ latest version of this package before reporting a bug, as target. % The development takes place on \identifier{github} at -\url{https://github.com/lualatex/luaotfload} where there is an issue +\hyperlink {https://github.com/lualatex/luaotfload} where there is an issue tracker for submitting bug reports, feature requests and the likes requests and the likes. @@ -1376,7 +1361,7 @@ verbosity level and redirecting log output to \fileent{stdout}: luaotfload-tool -fuvvv --log=file \endlisting -\noindent In the latter case, invoke the \verb|tail(1)| utility on the +\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 @@ -1393,16 +1378,16 @@ 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 \verb|dflt| script (see above on page \pageref{script-tag}), +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 \verb|latn|: +For example with \inlinecode {latn}: \beginlisting - \font\test=file:MyFont.otf:script=latn;+liga; + \font \test = file:MyFont.otf:script=latn;+liga; \endlisting You can get a list of features that a font defines for scripts and @@ -1461,435 +1446,23 @@ In this case, best define you own accessor: \endsubsection \endsection -\clearpage -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\beginsection {The GNU GPL License v2} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -The GPL requires the complete license text to be distributed along -with the code. I recommend the canonical source, instead: -\url{http://www.gnu.org/licenses/old-licenses/gpl-2.0.html}. -But if you insist on an included copy, here it is. -You might want to zoom in. - -\newsavebox{\gpl} -\begin{lrbox}{\gpl} -\begin{minipage}{3\textwidth} -\columnsep=3\columnsep -\begintriplecolumns -\begincentered - {\Large GNU GENERAL PUBLIC LICENSE\par} - \bigskip - {Version 2, June 1991} - - {\parindent 0in - - Copyright \textcopyright\ 1989, 1991 Free Software Foundation, Inc. - - \bigskip - - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - - \bigskip - - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - } - - {\bf\large Preamble} -\endcentered - - -The licenses for most software are designed to take away your freedom to -share and change it. By contrast, the GNU General Public License is -intended to guarantee your freedom to share and change free software---to -make sure the software is free for all its users. This General Public -License applies to most of the Free Software Foundation's software and to -any other program whose authors commit to using it. (Some other Free -Software Foundation software is covered by the GNU Library General Public -License instead.) You can apply it to your programs, too. - -When we speak of free software, we are referring to freedom, not price. -Our General Public Licenses are designed to make sure that you have the -freedom to distribute copies of free software (and charge for this service -if you wish), that you receive source code or can get it if you want it, -that you can change the software or use pieces of it in new free programs; -and that you know you can do these things. - -To protect your rights, we need to make restrictions that forbid anyone to -deny you these rights or to ask you to surrender the rights. These -restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - -For example, if you distribute copies of such a program, whether gratis or -for a fee, you must give the recipients all the rights that you have. You -must make sure that they, too, receive or can get the source code. And -you must show them these terms so they know their rights. - -We protect your rights with two steps: (1) copyright the software, and (2) -offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - -Also, for each author's protection and ours, we want to make certain that -everyone understands that there is no warranty for this free software. If -the software is modified by someone else and passed on, we want its -recipients to know that what they have is not the original, so that any -problems introduced by others will not reflect on the original authors' -reputations. - -Finally, any free program is threatened constantly by software patents. -We wish to avoid the danger that redistributors of a free program will -individually obtain patent licenses, in effect making the program -proprietary. To prevent this, we have made it clear that any patent must -be licensed for everyone's free use or not licensed at all. - -The precise terms and conditions for copying, distribution and -modification follow. - -\begincentered - {\Large \sc Terms and Conditions For Copying, Distribution and - Modification} -\endcentered - -\beginenumeration -\item -This License applies to any program or other work which contains a notice -placed by the copyright holder saying it may be distributed under the -terms of this General Public License. The ``Program'', below, refers to -any such program or work, and a ``work based on the Program'' means either -the Program or any derivative work under copyright law: that is to say, a -work containing the Program or a portion of it, either verbatim or with -modifications and/or translated into another language. (Hereinafter, -translation is included without limitation in the term ``modification''.) -Each licensee is addressed as ``you''. - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - -\item You may copy and distribute verbatim copies of the Program's source - code as you receive it, in any medium, provided that you conspicuously - and appropriately publish on each copy an appropriate copyright notice - and disclaimer of warranty; keep intact all the notices that refer to - this License and to the absence of any warranty; and give any other - recipients of the Program a copy of this License along with the Program. - -You may charge a fee for the physical act of transferring a copy, and you -may at your option offer warranty protection in exchange for a fee. - -\item -You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - -\beginenumeration - -\item -You must cause the modified files to carry prominent notices stating that -you changed the files and the date of any change. - -\item -You must cause any work that you distribute or publish, that in -whole or in part contains or is derived from the Program or any -part thereof, to be licensed as a whole at no charge to all third -parties under the terms of this License. - -\item -If the modified program normally reads commands interactively -when run, you must cause it, when started running for such -interactive use in the most ordinary way, to print or display an -announcement including an appropriate copyright notice and a -notice that there is no warranty (or else, saying that you provide -a warranty) and that users may redistribute the program under -these conditions, and telling the user how to view a copy of this -License. (Exception: if the Program itself is interactive but -does not normally print such an announcement, your work based on -the Program is not required to print an announcement.) - -\endenumeration - - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - -\item -You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - -\beginenumeration - -\item - -Accompany it with the complete corresponding machine-readable -source code, which must be distributed under the terms of Sections -1 and 2 above on a medium customarily used for software interchange; or, - -\item - -Accompany it with a written offer, valid for at least three -years, to give any third party, for a charge no more than your -cost of physically performing source distribution, a complete -machine-readable copy of the corresponding source code, to be -distributed under the terms of Sections 1 and 2 above on a medium -customarily used for software interchange; or, - -\item - -Accompany it with the information you received as to the offer -to distribute corresponding source code. (This alternative is -allowed only for noncommercial distribution and only if you -received the program in object code or executable form with such -an offer, in accord with Subsection b above.) - -\endenumeration - - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - -\item -You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - -\item -You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - -\item -Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - -\item -If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - -\item -If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - -\item -The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and ``any -later version'', you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - -\item -If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - -\begincentered - {\Large\sc No Warranty} -\endcentered - -\item -{\sc Because the program is licensed free of charge, there is no warranty -for the program, to the extent permitted by applicable law. Except when -otherwise stated in writing the copyright holders and/or other parties -provide the program ``as is'' without warranty of any kind, either expressed -or implied, including, but not limited to, the implied warranties of -merchantability and fitness for a particular purpose. The entire risk as -to the quality and performance of the program is with you. Should the -program prove defective, you assume the cost of all necessary servicing, -repair or correction.} - -\item -{\sc In no event unless required by applicable law or agreed to in writing -will any copyright holder, or any other party who may modify and/or -redistribute the program as permitted above, be liable to you for damages, -including any general, special, incidental or consequential damages arising -out of the use or inability to use the program (including but not limited -to loss of data or data being rendered inaccurate or losses sustained by -you or third parties or a failure of the program to operate with any other -programs), even if such holder or other party has been advised of the -possibility of such damages.} - -\endenumeration - - -\begincentered - {\Large\sc End of Terms and Conditions} -\endcentered - - -\pagebreak[2] - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\fakesection {Appendix: How to Apply These Terms to Your New Programs} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these -terms. - - To do so, attach the following notices to the program. It is safest to - attach them to the start of each source file to most effectively convey - the exclusion of warranty; and each file should have at least the - ``copyright'' line and a pointer to where the full notice is found. - -\beginnarrower - one line to give the program's name and a brief idea of what it does. \\ - Copyright (C) yyyy name of author \\ - - 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; either version 2 of the License, or - (at your option) any later version. - - 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. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -\endnarrower - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - -\beginnarrower - Gnomovision version 69, Copyright (C) yyyy name of author \\ - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. \\ - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. -\endnarrower - - -The hypothetical commands {\tt show w} and {\tt show c} should show the -appropriate parts of the General Public License. Of course, the commands -you use may be called something other than {\tt show w} and {\tt show c}; -they could even be mouse-clicks or menu items---whatever suits your -program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a ``copyright disclaimer'' for the program, if -necessary. Here is a sample; alter the names: - -\beginnarrower -Yoyodyne, Inc., hereby disclaims all copyright interest in the program \\ -`Gnomovision' (which makes passes at compilers) written by James Hacker. \\ - -signature of Ty Coon, 1 April 1989 \\ -Ty Coon, President of Vice -\endnarrower - - -This General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications -with the library. If this is what you want to do, use the GNU Library -General Public License instead of this License. - -\endtriplecolumns -\end{minipage} -\end{lrbox} - -\begincentered - \scalebox{0.33}{\usebox{\gpl}} -\endcentered +\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 diff --git a/misc/valgrind-kpse-suppression.sup b/misc/valgrind-kpse-suppression.sup new file mode 100644 index 0000000..e1cc5f5 --- /dev/null +++ b/misc/valgrind-kpse-suppression.sup @@ -0,0 +1,131 @@ +{ + kpathsea-garbage-1 + Memcheck:Leak + match-leak-kinds: definite + ... + fun:kpathsea_cnf_get +} + +{ + kpathsea-garbage-2 + Memcheck:Leak + match-leak-kinds: definite + ... + fun:kpse_program_basename +} + + +{ + kpathsea-garbage-3 + Memcheck:Leak + match-leak-kinds: definite + ... + fun:kpse_find_file +} + + +{ + kpathsea-garbage-4 + Memcheck:Leak + match-leak-kinds: definite + ... + fun:find_file +} + +{ + kpathsea-garbage-5 + Memcheck:Leak + match-leak-kinds: definite + ... + fun:lua_kpse_lookup +} + +{ + kpathsea-garbage-6 + Memcheck:Leak + match-leak-kinds: definite + ... + fun:find_file +} + + +{ + kpathsea-garbage-7 + Memcheck:Leak + match-leak-kinds: definite + ... + fun:expand_path +} + +{ + kpathsea-garbage-8 + Memcheck:Leak + match-leak-kinds: definite + ... + fun:do_lua_kpathsea_lookup +} + + +{ + kpathsea-garbage-9 + Memcheck:Leak + match-leak-kinds: definite + ... + fun:kpathsea_find_file +} + + +{ + kpathsea-garbage-10 + Memcheck:Leak + match-leak-kinds: definite + ... + fun:kpathsea_init_db +} + + +{ + kpathsea-garbage-11 + Memcheck:Leak + match-leak-kinds: definite + ... + fun:kpathsea_find_file_generic +} + + +{ + kpathsea-garbage-12 + Memcheck:Leak + match-leak-kinds: definite + ... + fun:expand_var +} + + +{ + kpathsea-garbage-13 + Memcheck:Leak + match-leak-kinds: definite + ... + fun:init_path +} + + +{ + kpathsea-garbage-14 + Memcheck:Leak + match-leak-kinds: definite + ... + fun:kpse_in_name_ok +} + + +{ + kpathsea-garbage-15 + Memcheck:Leak + match-leak-kinds: definite + ... + fun:kpathsea_var_value +} + + diff --git a/src/luaotfload-database.lua b/src/luaotfload-database.lua index 923f7c5..54738df 100644 --- a/src/luaotfload-database.lua +++ b/src/luaotfload-database.lua @@ -1346,6 +1346,7 @@ end --- find_closest() local load_font_file = function (filename, subfont) local rawfont, _msg = fontloaderopen (filename, subfont) + --local rawfont, _msg = fontloaderinfo (filename, subfont) if not rawfont then report ("log", 1, "db", "ERROR: failed to open %s.", filename) return @@ -1406,12 +1407,13 @@ end --]]-- local get_raw_info = function (metadata, basename) local fullname - local fontname + local fontname = metadata.fontname + local fullname = metadata.fullname local psname local validation_state = metadata.validation_state - if validation_state - and tablecontains (validation_state, "bad_ps_fontname") + if (validation_state and tablecontains (validation_state, "bad_ps_fontname")) + or not fontname then --- Broken names table, e.g. avkv.ttf with UTF-16 strings; --- we put some dummies in place like the fontloader @@ -1421,9 +1423,6 @@ local get_raw_info = function (metadata, basename) basename) fontname = "bad-fontname-" .. basename fullname = "bad-fullname-" .. basename - else - fontname = metadata.fontname - fullname = metadata.fullname end return { @@ -1541,7 +1540,7 @@ local organize_styledata = function (fontname, metadata, english_names, info) - local pfminfo = metadata.pfminfo + local pfminfo = metadata.pfminfo or { } local names = metadata.names return { diff --git a/src/luaotfload-main.lua b/src/luaotfload-main.lua index ed7fdd3..3c4c770 100644 --- a/src/luaotfload-main.lua +++ b/src/luaotfload-main.lua @@ -61,7 +61,7 @@ config.luaotfload.index_file = config.luaotfload.index_file or "luaot config.luaotfload.formats = config.luaotfload.formats or "otf,ttf,ttc,dfont" config.luaotfload.scan_local = config.luaotfload.scan_local == true -if not config.luaotfload.strip then +if config.luaotfload.strip == nil then config.luaotfload.strip = true end |