diff options
author | Karl Berry <karl@freefriends.org> | 2018-09-26 20:50:34 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2018-09-26 20:50:34 +0000 |
commit | 78334b0d4607b242273f9d0cde94f6a6fba51832 (patch) | |
tree | 5b604ee30bb611eeeae95ed4218b4e7fd6eb00b8 /Master/texmf-dist/source/luatex | |
parent | 3a0140d05a7e481750ec23a30ed5cf3cdef61eb7 (diff) |
luaotfload (26sep18)
git-svn-id: svn://tug.org/texlive/trunk@48771 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/luatex')
8 files changed, 490 insertions, 3788 deletions
diff --git a/Master/texmf-dist/source/luatex/luaotfload/Makefile b/Master/texmf-dist/source/luatex/luaotfload/Makefile deleted file mode 100644 index e59b43e290c..00000000000 --- a/Master/texmf-dist/source/luatex/luaotfload/Makefile +++ /dev/null @@ -1,263 +0,0 @@ -# Makefile for luaotfload - -NAME = luaotfload - -DOCSRCDIR = ./doc -SCRIPTSRCDIR = ./scripts -SRCSRCDIR = ./src -FONTLOADERDIR = $(SRCSRCDIR)/fontloader/runtime -FONTLOADERSRCDIR= $(SRCSRCDIR)/fontloader/misc -PACKAGEDIR = $(SRCSRCDIR)/fontloader -BUILDDIR = ./build -MISCDIR = ./misc - -SRC = $(wildcard $(SRCSRCDIR)/luaotfload-*.lua) -SRC += $(wildcard $(FONTLOADERDIR)/*.lua) -SRC += $(SRCSRCDIR)/luaotfload.sty -SRC += $(MISCDIR)/luaotfload-blacklist.cnf - -VGND = $(MISCDIR)/valgrind-kpse-suppression.sup -CONFDEMO = $(MISCDIR)/luaotfload.conf.example - -GLYPHSCRIPT = $(SCRIPTSRCDIR)/mkglyphlist -CHARSCRIPT = $(SCRIPTSRCDIR)/mkcharacters -STATUSSCRIPT = $(SCRIPTSRCDIR)/mkstatus -IMPORTSCRIPT = $(SCRIPTSRCDIR)/mkimport -TESTSCRIPT = $(SCRIPTSRCDIR)/mktests - -GLYPHSOURCE = $(BUILDDIR)/glyphlist.txt - -RESOURCESCRIPTS = $(GLYPHSCRIPT) $(CHARSCRIPT) $(STATUSSCRIPT) -RESOURCESCRIPTS+= $(IMPORTSCRIPT) $(TESTSCRIPT) - -TOOLNAME = luaotfload-tool -TOOL = $(SRCSRCDIR)/$(TOOLNAME).lua - -CONFNAME = luaotfload.conf - -GRAPH = filegraph -DOCSRC = $(addprefix $(DOCSRCDIR)/$(NAME), -main.tex -latex.tex) -LOADERSRC = $(wildcard $(FONTLOADERSRCDIR)/*.lua) -LOADERSRC += $(wildcard $(FONTLOADERSRCDIR)/*.tex) -GRAPHSRC = $(DOCSRCDIR)/$(GRAPH).dot -MANSRC = $(DOCSRCDIR)/$(TOOLNAME).rst $(DOCSRCDIR)/$(CONFNAME).rst - -DOCPDF = $(DOCSRCDIR)/$(NAME).pdf -DOTPDF = $(DOCSRCDIR)/$(GRAPH).pdf -TOOLMAN = $(DOCSRCDIR)/$(TOOLNAME).1 -CONFMAN = $(DOCSRCDIR)/$(CONFNAME).5 -MANPAGES = $(TOOLMAN) $(CONFMAN) - -DOCS = $(DOCPDF) $(DOTPDF) $(MANPAGES) - -# Files grouped by generation mode -GLYPHS = $(BUILDDIR)/$(NAME)-glyphlist.lua -CHARS = $(BUILDDIR)/$(NAME)-characters.lua -STATUS = $(BUILDDIR)/$(NAME)-status.lua -LOADER = $(BUILDDIR)/fontloader-$(shell date +%F).lua -RESOURCES = $(GLYPHS) $(CHARS) $(LOADER) $(STATUS) -SOURCE = $(DOCSRC) $(LOADERSRC) $(MANSRC) -SOURCE += $(SRC) README COPYING Makefile NEWS $(RESOURCESCRIPTS) - -# Files grouped by installation location -SCRIPTSTATUS = $(TOOL) $(RESOURCESCRIPTS) -RUNSTATUS = $(filter-out $(SCRIPTSTATUS),$(SRC)) -DOCSTATUS = $(DOCPDF) $(DOTPDF) README NEWS COPYING -SRCSTATUS = $(DOCSRC) $(MANSRC) $(GRAPHSRC) Makefile - -# The following definitions should be equivalent -# ALL_STATUS = $(RUNSTATUS) $(DOCSTATUS) $(SRCSTATUS) -ALL_STATUS = $(RESOURCES) $(SOURCE) - -# Installation locations -FORMAT = luatex -SCRIPTDIR = $(TEXMFROOT)/scripts/$(NAME) -RUNDIR = $(TEXMFROOT)/tex/$(FORMAT)/$(NAME) -DOCDIR = $(TEXMFROOT)/doc/$(FORMAT)/$(NAME) -MAN1DIR = $(TEXMFROOT)/doc/man/man1/ -MAN5DIR = $(TEXMFROOT)/doc/man/man5/ -SRCDIR = $(TEXMFROOT)/source/$(FORMAT)/$(NAME) -TEXMFROOT = $(shell kpsewhich --var-value TEXMFHOME) - -# CTAN-friendly subdirectory for packaging -DISTDIR = $(BUILDDIR)/$(NAME) - -CTAN_ZIPFILE = $(NAME).zip -CTAN_ZIPSIG = $(BUILDDIR)/$(CTAN_ZIPFILE).asc -TDS_ZIPFILE = $(NAME).tds.zip -CTAN_ZIP = $(BUILDDIR)/$(CTAN_ZIPFILE) -TDS_ZIP = $(BUILDDIR)/$(TDS_ZIPFILE) -ZIPS = $(CTAN_ZIP) $(TDS_ZIP) - -LUA = texlua - -## For now the $(BUILDDIR) is hardcoded in the scripts -## but we might just as well pass it to them by as environment -## variables. -DO_GLYPHS = $(LUA) $(GLYPHSCRIPT) > /dev/null -DO_CHARS = $(LUA) $(CHARSCRIPT) > /dev/null -DO_STATUS = $(LUA) $(STATUSSCRIPT) --fontloader=$(LOADER) >/dev/null -DO_IMPORT = $(LUA) $(IMPORTSCRIPT) import >/dev/null -DO_PACKAGE = $(LUA) $(IMPORTSCRIPT) package $(LOADER) >/dev/null - -define check-lua-files -@echo validating syntax -@for f in $$(find . -name '*.lua') ; do \ - echo -n checking $$f ...; \ - if texluac -p $$f &>/dev/null; then \ - echo -e " \e[1;32mgood.\e[m"; \ - else \ - echo -e " \e[1;31mBAD.\e[m"; \ - exit 1; \ - fi; \ -done -endef - -show: showtargets -check: - $(check-lua-files) - -all: ctan -builddir: $(BUILDDIR) -resources: $(RESOURCES) -chars: $(CHARS) -status: $(STATUS) -package: loader -loader: $(LOADER) -ctan: $(CTAN_ZIP) -tds: $(TDS_ZIP) -import: - $(DO_IMPORT) - -graph: $(DOTPDF) -doc: $(DOCS) -pdf: $(DOCPDF) -manual: $(MANPAGES) - -$(DOTPDF): - @$(MAKE) -C $(DOCSRCDIR) graph - -$(DOCPDF): - @$(MAKE) -C $(DOCSRCDIR) doc - -$(MANPAGES): - @$(MAKE) -C $(DOCSRCDIR) manuals - -$(GLYPHS): builddir - $(DO_GLYPHS) - -$(CHARS): builddir - $(DO_CHARS) - -$(STATUS): builddir loader - $(DO_STATUS) - -$(LOADER): builddir - $(DO_PACKAGE) - -$(BUILDDIR): /dev/null - mkdir -p $(BUILDDIR) - -define make-ctandir -@$(RM) -rf -- $(DISTDIR) -@mkdir -p $(DISTDIR) && cp $(RESOURCES) $(DOCPDF) $(VGND) $(CONFDEMO) $(SOURCE) $(DISTDIR) -endef - -$(CTAN_ZIP): $(DOCS) $(SOURCE) $(TDS_ZIP) - @echo "Making $@ for CTAN upload." - @$(RM) -- $@ - $(make-ctandir) - @cd $(BUILDDIR) && zip -r -9 $(CTAN_ZIPFILE) $(TDS_ZIPFILE) $(NAME) >/dev/null - -$(CTAN_ZIPSIG): $(CTAN_ZIP) - @echo "Signing package $(CTAN_ZIP)" - @$(RM) -- $@ - @gpg --batch --armor --detach-sign "$(CTAN_ZIP)" - -define run-install-doc -@mkdir -p $(DOCDIR) && cp -- $(DOCSTATUS) $(VGND) $(CONFDEMO) $(DOCDIR) -@mkdir -p $(SRCDIR) && cp -- $(SRCSTATUS) $(SRCDIR) -@mkdir -p $(MAN1DIR) && cp -- $(TOOLMAN) $(MAN1DIR) -@mkdir -p $(MAN5DIR) && cp -- $(CONFMAN) $(MAN5DIR) -endef - -define run-install -@mkdir -p $(SCRIPTDIR) && cp -- $(SCRIPTSTATUS) $(SCRIPTDIR) -@mkdir -p $(RUNDIR) && cp -- $(RESOURCES) $(RUNSTATUS) $(RUNDIR) -@mkdir -p $(RUNDIR) && cp -- $(LOADERSRC) $(RUNDIR) -endef - -$(TDS_ZIP): TEXMFROOT=./tmp-texmf -$(TDS_ZIP): $(DOCS) $(ALL_STATUS) check - @echo "Making TDS-ready archive $@." - @$(RM) -- $@ - $(run-install-doc) - $(run-install) - @cd $(TEXMFROOT) && zip -9 ../$@ -r . >/dev/null - @$(RM) -r -- $(TEXMFROOT) - -sign: $(CTAN_ZIPSIG) - -.PHONY: package install manifest clean mrproper show showtargets -.PHONY: check import news tds ctan sign package loader - -ifndef DESTDIR -install: - $(error "in order to install you need to provide $$DESTDIR") -else -install: $(TDS_ZIP) - $(info installing to destination “$(DESTDIR)”) - install -dm755 "$(DESTDIR)" - unzip "$(TDS_ZIP)" -d "$(DESTDIR)" -endif - -manifest: - @echo "Source files:" - @for f in $(SOURCE); do echo $$f; done - @echo "" - @echo "Derived files:" - @for f in $(GENERATED); do echo $$f; done - -CLEANEXTS = log aux toc idx ind ilg out -CLEANME = $(foreach ext,$(CLEANEXTS),$(wildcard *.$(ext))) -CLEANME += $(foreach ext,$(CLEANEXTS),$(wildcard $(BUILDDIR)/*$(ext))) - -clean: - $(MAKE) -C $(DOCSRCDIR) $@ - @$(RM) -- $(CLEANME) - -mrproper: clean - $(MAKE) -C $(DOCSRCDIR) $@ - @$(RM) -- $(GENERATED) $(ZIPS) $(GLYPHSOURCE) - @$(RM) -r -- $(BUILDDIR) - -############################################################################### -showtargets: - @echo "Available targets:" - @echo - @echo " check check Lua files for syntax errors" - @echo - @echo " doc compile PDF documentation" - @echo " resources generate resource files (chars, glyphs)" - @echo - @echo " pdf build luaotfload.pdf" - @echo " manual crate manpages for luaotfload-tool(1) and" - @echo " luaotfload.conf(5) (requires Docutils)" - @echo " graph generate file graph (requires GraphViz)" - @echo - @echo " loader merge fontloader" - @echo " chars import char-def.lua as luaotfload-characters.lua" - @echo " status create repository info (luaotfload-status.lua)" - @echo - @echo " import grab files from upstream" - @echo " package package fontloader" - @echo - @echo " tds package a zipball according to the TDS" - @echo " ctan package a zipball for uploading to CTAN" - @echo " sign sign zipball" - @echo - @echo " clean cleanup side-effects" - @echo " mrproper cleanup side-effects as well as make targets" - @echo - -# vim:noexpandtab:tabstop=8:shiftwidth=2 diff --git a/Master/texmf-dist/source/luatex/luaotfload/filegraph.dot b/Master/texmf-dist/source/luatex/luaotfload/filegraph.dot deleted file mode 100644 index 34c462ab4cb..00000000000 --- a/Master/texmf-dist/source/luatex/luaotfload/filegraph.dot +++ /dev/null @@ -1,396 +0,0 @@ -strict digraph luaotfload_files { //looks weird with circo ... - compound = true; - -// label = "Schematic of the files included in Luaotfload."; -// labelloc = "b"; - - fontsize = "14.4"; - labelfontname = "Iwona Medium Regular"; - fontname = "Iwona Light Regular"; - size = "21cm"; - - rankdir = LR; - ranksep = 0.618; - nodesep = 1.618; - - edge [ - arrowhead = onormal, - fontname = "Iwona Cond Regular", - penwidth = 1.0, - ]; - node [ - //penwidth = 0.7, - fontname = "Liberation Mono", - fontsize = 12, - ]; - -/* ···································································· - * file structure - * ································································· */ - fontdbutil -> font_names [label="--update", - style=dashed] - - luaotfload -> merged_lua_libs [style=solid] - luaotfload -> luaotfload_init [label="main()", style=solid] - luaotfload -> luaotfload_libs [label="main()", style=solid] - - fontloader -> merged_luatex_fonts [label="merged", - style=dotted, - lhead=cluster_merged] - fontloader -> merged_context_libs [label="merged", - style=dotted, - lhead=cluster_merged] - - luaotfload_init -> luaotfload_log [label="init_early()", style=solid] - luaotfload_init -> luaotfload_basics_gen [label="init_early()", style=solid] - luaotfload_init -> fontloader [label="init_main()", style=solid] - - luaotfload_init -> merged_luatex_fonts [label="unmerged", style=solid] - luaotfload_init -> merged_context_libs [label="unmerged", style=solid] - - merged_luatex_fonts -> font_age [label="luatex-fonts-enc.lua", - ltail=cluster_merged] - - fontdbutil -> fontdbutil_diagnostics [label="--diagnose"] - fontdbutil -> status [label="version information"] - - mkimport -> fontloader [label="merges", style=dashed] - - merged_luatex_fonts -> characters [label="luaotfload-auxiliary.lua", - ltail=cluster_merged] - - luaotfload_libs -> font_names [label="luaotfload-database.lua"] - luaotfload_libs -> otfl_blacklist_cnf [label="luaotfload-database.lua"] - - - mkstatus -> status [label="generates from distribution files", - style=dashed] - - mkglyphlist -> font_age [label="generates from glyphlist.txt", - style=dashed] - - mkcharacters -> characters [label="generates from Context’s char-def.lua", - style=dashed] - - fontdbutil_diagnostics -> status [label="hash files"] - - mkimport -> merged_luatex_fonts [label="pulls", style=dashed, constraint=no]; - mkimport -> merged_context_libs [label="pulls", style=dashed, constraint=no]; - - subgraph { rank = same; - fontdbutil; - luaotfload } - - subgraph cluster_scripts { - node [style=filled, color=white]; - style = "filled,rounded"; - color = "#44000011:#CCCCCC77"; - //nodesep = "3.0"; - rank = same; - label = "Standalone scripts"; - gradientangle=90; - mkcharacters; - mkglyphlist; - mkimport; - mktest; - mkstatus; - } - -/* ···································································· - * main files - * ································································· */ - - fontdbutil [label = "luaotfload-tool.lua", - shape = rect, - width = "3.2cm", - height = "1.2cm", - color = "#01012222", - style = "filled,rounded", - penwidth=2] - - fontdbutil_diagnostics [label = "luaotfload-diagnostics.lua", - shape = rect, - width = "3.2cm", - height = "1.2cm", - color = "#01012222", - style = "filled,rounded", - penwidth=2] - - mktest [label = "mktest", - shape = rect, - width = "3.2cm", - height = "0.618cm", - color = "#FFFFFF66", - style = "filled,rounded", - penwidth=2] - - mkimport [label = "mkimport", - shape = rect, - width = "3.2cm", - height = "0.618cm", - color = "#FFFFFF66", - style = "filled,rounded", - penwidth=2] - - mkstatus [label = "mkstatus", - shape = rect, - width = "3.2cm", - height = "0.618cm", - color = "#FFFFFF66", - style = "filled,rounded", - penwidth=2] - - mkglyphlist [label = "mkglyphlist", - shape = rect, - width = "3.2cm", - height = "0.618cm", - color = "#FFFFFF66", - style = "filled,rounded", - penwidth=2] - - mkcharacters [label = "mkcharacters", - shape = rect, - width = "3.2cm", - height = "0.618cm", - color = "#FFFFFF66", - style = "filled,rounded", - penwidth=2] - - luaotfload [label = "luaotfload-main.lua", - shape = rect, - width = "3.2cm", - height = "1.2cm", - color = "#01012222", - style = "filled,rounded", - penwidth=2] - /* - *otfl_fonts [label = "luaotfload-fonts.lua", - * shape = rect, - * width = "3.2cm", - * height = "1.2cm", - * color = "#01012222", - * style = "filled,rounded", - * penwidth=2] - */ - luaotfload_init [label = "luaotfload-init.lua", - shape = rect, - width = "3.2cm", - height = "1.2cm", - color = "#44440122", - style = "filled,rounded", - penwidth=2] - - luaotfload_log [label = "luaotfload-log.lua", - shape = rect, - width = "3.2cm", - height = "1.2cm", - color = "#44440122", - style = "filled,rounded", - penwidth=2] - - luaotfload_basics_gen [label = "fontloader-basics-gen.lua", - shape = rect, - width = "3.2cm", - height = "1.2cm", - color = "#FFFFFF66", - style = "filled,rounded", - penwidth=2] - - fontloader [label = "fontloader-YY-MM-DD.lua", - shape = rect, - width = "3.2cm", - height = "1.2cm", - color = "#FFFFFF66", - style = "filled,rounded", - penwidth=2] - -/* ···································································· - * luaotfload files - * ································································· */ - - characters [style = "filled,dashed", - shape = rect, - width = "3.2cm", - fillcolor = "#01012222", - color = grey40, - style = "filled,dotted,rounded", - label = "luaotfload-characters.lua"] - - font_age [style = "filled,dashed", - shape = rect, - width = "3.2cm", - fillcolor = "#01012222", - color = grey40, - style = "filled,dotted,rounded", - label = "luaotfload-glyphlist.lua"] - - font_names [style = "filled,dashed", - shape = rect, - width = "3.2cm", - fillcolor = "#01012222", - color = grey40, - style = "filled,dotted,rounded", - label = "luaotfload-names.lua.gz\nluaotfload-names.luc"] - - status [style = "filled,dashed", - shape = rect, - width = "3.2cm", - fillcolor = "#01012222", - color = grey40, - style = "filled,dotted,rounded", - label = "luaotfload-status.lua"] - - otfl_blacklist_cnf [style = "filled,dashed", - shape = rect, - width = "3.2cm", - fillcolor = "#01012222", - color = grey40, - style = "filled,dotted,rounded", - label = "luaotfload-blacklist.cnf"] - - luaotfload_libs [ - shape = box, - style = "filled,rounded", - color = "grey90", - fontsize = 10, - label = < - <table cellborder="0" bgcolor="#FFFFFFAA"> - <th> <td colspan="2"> <font point-size="12" face="Iwona Italic">Luaotfload Libraries</font> </td> </th> - <tr> <td>luaotfload-auxiliary.lua</td> <td>luaotfload-features.lua</td> </tr> - <tr> <td>luaotfload-loaders.lua</td> <td>luaotfload-colors.lua</td> </tr> - <tr> <td>luaotfload-resolvers.lua</td> <td>luaotfload-letterspace.lua</td> </tr> - <tr> <td>luaotfload-parsers.lua</td> <td>luaotfload-database.lua</td> </tr> - <tr> <td>luaotfload-configuration.lua</td><td></td> </tr> - </table> - >, - ] - -/* ···································································· - * merged files - * ································································· */ - - subgraph cluster_merged { - node [style=filled, color=white]; - style = "filled,rounded"; - color = "#912CEE33"; - //nodesep = "3.0"; - rank = same; - label = "Merged Libraries"; - gradientangle=0; - merged_luatex_fonts; - merged_context_libs; - } - - fontloader -> merged_luatex_fonts - fontloader -> merged_context_libs - - subgraph cluster_fontloader { - node [style=filled, color=white]; - style = "filled,rounded"; - color = "bisque"; - //nodesep = "3.0"; - rank = same; - label = "Fontloader"; - gradientangle=0; - luaotfload_basics_gen; - fontloader; - } - - merged_lua_libs [ - shape = box, - style = "filled,rounded", - color = "#CCCC1166", - fontsize = 10, - fontsize = 10, - label = < - <table border="0"> - <th> <td colspan="3"> <font point-size="12" face="Iwona Italic"> - Lualibs – Lua Libraries from Context</font> </td> </th> - <tr> <td>l-lua.lua</td> <td>l-lpeg.lua</td> <td>l-function.lua</td> </tr> - <tr> <td>l-string.lua</td> <td>l-table.lua</td> <td>l-io.lua</td> </tr> - <tr> <td>l-file.lua</td> <td>l-boolean.lua</td> <td>l-math.lua</td> </tr> - <tr> <td>util-str.lua</td> <td>util-fil.lua</td> </tr> - </table> - >, - ] - - merged_luatex_fonts [ - shape = box, - style = "filled,rounded", - color = "#FFFFFFAA", - fontsize = 10, - label = < - <table border="0"> - <th> <td colspan="2"> <font point-size="12" face="Iwona Italic">Font Loader (LuaTeX-Fonts)</font> </td> </th> - <tr> - <td>luatex-basics-nod.lua</td> - <td>luatex-basics-chr.lua</td> - </tr> - <tr> - <td>luatex-fonts-enc.lua</td> - <td>luatex-fonts-syn.lua</td> - </tr> - <tr> - <td>luatex-fonts-ext.lua</td> - </tr> - </table> - >, - ] - - merged_context_libs [ - shape = box, - style = "filled,rounded", - color = "#FFFFFFAA", - fontsize = 10, - label = < - <table border="0"> - <th> <td colspan="3"> <font point-size="12" face="Iwona Italic"> Font and Node Libraries from Context </font> </td> </th> - <tr> - <td>data-con.lua</td> - <td>font-ini.lua</td> - <td>font-con.lua</td> - </tr> - <tr> - <td>font-cid.lua</td> - <td>font-map.lua</td> - <td>font-tfm.lua</td> - </tr> - <tr> - <td>font-one.lua</td> - <td>font-afk.lua</td> - <td>font-oti.lua</td> - </tr> - <tr> - <td>font-otr.lua</td> - <td>font-cff.lua</td> - <td>font-ttf.lua</td> - </tr> - <tr> - <td>font-dsp.lua</td> - <td>font-oup.lua</td> - <td>font-otl.lua</td> - </tr> - <tr> - <td>font-oto.lua</td> - <td>font-otj.lua</td> - <td>font-ota.lua</td> - </tr> - <tr> - <td>font-ots.lua</td> - <td>font-osd.lua</td> - <td>font-lua.lua</td> - </tr> - <tr> - <td>font-def.lua</td> - <td>font-xtx.lua</td> - <td>font-gbn.lua</td> - </tr> - <tr> - <td>font-ocl.lua</td> - </tr> - </table> - >, - ] -} - -// vim:ft=dot:sw=4:ts=4:expandtab diff --git a/Master/texmf-dist/source/luatex/luaotfload/fontloader-reference-load-order.lua b/Master/texmf-dist/source/luatex/luaotfload/fontloader-reference-load-order.lua new file mode 100644 index 00000000000..16c85ddc26a --- /dev/null +++ b/Master/texmf-dist/source/luatex/luaotfload/fontloader-reference-load-order.lua @@ -0,0 +1,350 @@ +if not modules then modules = { } end modules ['luatex-fonts'] = { + version = 1.001, + comment = "companion to luatex-fonts.tex", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +-- A merged file is generated with: +-- +-- mtxrun --script package --merge --stripcontext luatex-fonts.lua +-- +-- A needed resource file is made by: +-- +-- mtxrun --script context luatex-basics-prepare.tex +-- +-- A font (generic) database is created with: +-- +-- mtxrun --script font --reload --simple + +-- The following code isolates the generic context code from already defined or to be defined +-- namespaces. This is the reference loader for plain tex. This generic code is also used in +-- luaotfload which is a low level lualatex opentype font loader but somehow has gotten a bit +-- too generic name / prefix, originally set up and maintained by Khaled Hosny. Currently that +-- set of derived files is maintained by a larger team lead by Philipp Gesang so when there are +-- issues with this code in latex, you can best contact him. It might make sense then to first +-- check if context has the same issue. We do our best to keep the interface as clean as possible. +-- +-- The code base is rather stable now, especially if you stay away from the non generic code. All +-- relevant data is organized in tables within the main table of a font instance. There are a few +-- places where in context other code is plugged in, but this does not affect the core code. Users +-- can (given that their macro package provides this option) access the font data (characters, +-- descriptions, properties, parameters, etc) of this main table. The documentation is part of +-- context. There is also a manual for the helper libraries (maintained as part of the cld manuals). +-- +-- Future versions will probably have some more specific context code removed, like tracing and +-- obscure hooks, so that we have a more efficient version (and less files too). So, don't depend +-- too much on low level code that is meant for context as it can change without notice. We might +-- also add more helper code here, but that depends to what extend metatex (sidetrack of context) +-- evolves into a low level layer (depends on time, as usual). + +-- The code here is the same as in context version 2015.09.11 but the rendering in context can be +-- different from generic. This can be a side effect of additional callbacks, additional features +-- and interferences between mechanisms between macro packages. We use the rendering in context +-- and luatex-plain as reference for issues. + +utf = utf or unicode.utf8 + +-- We have some (global) hooks (for latex): + +if not non_generic_context then + non_generic_context = { } +end + +if not non_generic_context.luatex_fonts then + non_generic_context.luatex_fonts = { + -- load_before = nil, + -- load_after = nil, + -- skip_loading = nil, + } +end + +if not generic_context then + generic_context = { } +end + +if not generic_context.push_namespaces then + + function generic_context.push_namespaces() + -- logs.report("system","push namespace") + local normalglobal = { } + for k, v in next, _G do + normalglobal[k] = v + end + return normalglobal + end + + function generic_context.pop_namespaces(normalglobal,isolate) + if normalglobal then + -- logs.report("system","pop namespace") + for k, v in next, _G do + if not normalglobal[k] then + generic_context[k] = v + if isolate then + _G[k] = nil + end + end + end + for k, v in next, normalglobal do + _G[k] = v + end + -- just to be sure: + setmetatable(generic_context,_G) + else + logs.report("system","fatal error: invalid pop of generic_context") + os.exit() + end + end + +end + +local whatever = generic_context.push_namespaces() + +-- We keep track of load time by storing the current time. That way we cannot be accused +-- of slowing down loading too much. Anyhow, there is no reason for this library to perform +-- slower in any other package as it does in context. +-- +-- Please don't update to this version without proper testing. It might be that this version +-- lags behind stock context and the only formal release takes place around tex live code +-- freeze. + +local starttime = os.gettimeofday() + +-- As we don't use the context file searching, we need to initialize the kpse library. As the +-- progname can be anything we will temporary switch to the context namespace if needed. Just +-- adding the context paths to the path specification is somewhat faster. +-- +-- Now, with lua 5.2 being used we might create a special ENV for this. + +-- kpse.set_program_name("luatex") + +-- One can define texio.reporter as alternative terminal/log writer. That's as far +-- as I want to go with this. + +local ctxkpse = nil +local verbose = true + +if not logs or not logs.report then + if not logs then + logs = { } + end + function logs.report(c,f,...) + local r = texio.reporter or texio.write_nl + if f then + r(c .. " : " .. string.format(f,...)) + else + r("") + end + end +end + +local function loadmodule(name,continue) + local foundname = kpse.find_file(name,"tex") or "" + if not foundname then + if not ctxkpse then + ctxkpse = kpse.new("luatex","context") + end + foundname = ctxkpse:find_file(name,"tex") or "" + end + if foundname == "" then + if not continue then + logs.report("system","unable to locate file '%s'",name) + os.exit() + end + else + if verbose then + logs.report("system","loading '%s'",foundname) -- no file.basename yet + end + dofile(foundname) + end +end + +if non_generic_context.luatex_fonts.load_before then + loadmodule(non_generic_context.luatex_fonts.load_before,true) +end + +if non_generic_context.luatex_fonts.skip_loading ~= true then + + loadmodule('luatex-fonts-merged.lua',true) + + if fonts then + + if not fonts._merge_loaded_message_done_ then + texio.write_nl("log", "!") + texio.write_nl("log", "! I am using the merged version of 'luatex-fonts.lua' here. If") + texio.write_nl("log", "! you run into problems or experience unexpected behaviour, and") + texio.write_nl("log", "! if you have ConTeXt installed you can try to delete the file") + texio.write_nl("log", "! 'luatex-font-merged.lua' as I might then use the possibly") + texio.write_nl("log", "! updated libraries. The merged version is not supported as it") + texio.write_nl("log", "! is a frozen instance. Problems can be reported to the ConTeXt") + texio.write_nl("log", "! mailing list.") + texio.write_nl("log", "!") + end + + fonts._merge_loaded_message_done_ = true + + else + + -- The following helpers are a bit overkill but I don't want to mess up + -- context code for the sake of general generality. Around version 1.0 + -- there will be an official api defined. + -- + -- So, I will strip these libraries and see what is really needed so that + -- we don't have this overhead in the generic modules. The next section + -- is only there for the packager, so stick to using luatex-fonts with + -- luatex-fonts-merged.lua and forget about the rest. The following list + -- might change without prior notice (for instance because we shuffled + -- code around). + + loadmodule("l-lua.lua") + loadmodule("l-lpeg.lua") + loadmodule("l-function.lua") + loadmodule("l-string.lua") + loadmodule("l-table.lua") + loadmodule("l-io.lua") + loadmodule("l-file.lua") + loadmodule("l-boolean.lua") + loadmodule("l-math.lua") + loadmodule("l-unicode.lua") + + -- A few slightly higher level support modules: + + loadmodule("util-str.lua") + loadmodule("util-fil.lua") + + -- The following modules contain code that is either not used at all + -- outside context or will fail when enabled due to lack of other + -- modules. + + -- First we load a few helper modules. This is about the miminum needed + -- to let the font modules do their work. Don't depend on their functions + -- as we might strip them in future versions of this generic variant. + + loadmodule('luatex-basics-gen.lua') + loadmodule('data-con.lua') + + -- We do need some basic node support. The code in there is not for + -- general use as it might change. + + loadmodule('luatex-basics-nod.lua') + + -- We ship a resources needed for font handling (more might end up here). + + loadmodule('luatex-basics-chr.lua') + + -- Now come the font modules that deal with traditional tex fonts as well + -- as open type fonts. + -- + -- The font database file (if used at all) must be put someplace visible + -- for kpse and is not shared with context. The mtx-fonts script can be + -- used to generate this file (using the --reload --force --simple option). + + loadmodule('font-ini.lua') + loadmodule('luatex-fonts-mis.lua') + loadmodule('font-con.lua') + loadmodule('luatex-fonts-enc.lua') + loadmodule('font-cid.lua') + loadmodule('font-map.lua') + + -- We use a bit simpler database because using the context one demands + -- loading more helper code and although it is more flexible (more ways + -- to resolve and so) it will never be uses in plain/latex anyway, so + -- let's stick to a simple approach. + + loadmodule('luatex-fonts-syn.lua') + + -- We need some helpers. + + loadmodule('font-vfc.lua') + + -- This is the bulk of opentype code. + + loadmodule('font-otr.lua') + loadmodule('font-oti.lua') + loadmodule('font-ott.lua') + loadmodule('font-cff.lua') + loadmodule('font-ttf.lua') + loadmodule('font-dsp.lua') + loadmodule('font-oup.lua') + loadmodule('font-otl.lua') + loadmodule('font-oto.lua') + loadmodule('font-otj.lua') + loadmodule('font-ota.lua') + loadmodule('font-ots.lua') + loadmodule('font-osd.lua') + loadmodule('font-ocl.lua') + loadmodule('font-otc.lua') + + -- The code for type one fonts. + + loadmodule('font-onr.lua') + loadmodule('font-one.lua') + loadmodule('font-afk.lua') + + -- And for traditional TeX fonts. + + loadmodule('font-tfm.lua') + + -- Some common code. + + loadmodule('font-lua.lua') + loadmodule('font-def.lua') + + -- We support xetex compatible specifiers (plain/latex only). + + loadmodule('luatex-fonts-def.lua') -- was font-xtx.lua + + -- Here come some additional features. + + loadmodule('luatex-fonts-ext.lua') + loadmodule('font-imp-tex.lua') + loadmodule('font-imp-ligatures.lua') + loadmodule('font-imp-italics.lua') + loadmodule('font-imp-effects.lua') + loadmodule('luatex-fonts-lig.lua') + + -- We need to plug into a callback and the following module implements the + -- handlers. Actual plugging in happens later. + + loadmodule('luatex-fonts-gbn.lua') + + end + +end + +if non_generic_context.luatex_fonts.load_after then + loadmodule(non_generic_context.luatex_fonts.load_after,true) +end + +resolvers.loadmodule = loadmodule + +-- In order to deal with the fonts we need to initialize some callbacks. One can overload them later +-- on if needed. First a bit of abstraction. + +generic_context.callback_ligaturing = false +generic_context.callback_kerning = false +generic_context.callback_pre_linebreak_filter = nodes.simple_font_handler +generic_context.callback_hpack_filter = nodes.simple_font_handler +generic_context.callback_define_font = fonts.definers.read + +-- The next ones can be done at a different moment if needed. You can create a generic_context namespace +-- and set no_callbacks_yet to true, load this module, and enable the callbacks later. So, there is really +-- *no* need to create a alternative for luatex-fonts.lua and luatex-fonts-merged.lua: just load this one +-- and overload if needed. + +if not generic_context.no_callbacks_yet then + + callback.register('ligaturing', generic_context.callback_ligaturing) + callback.register('kerning', generic_context.callback_kerning) + callback.register('pre_linebreak_filter', generic_context.callback_pre_linebreak_filter) + callback.register('hpack_filter', generic_context.callback_hpack_filter) + callback.register('define_font' , generic_context.callback_define_font) + +end + +-- We're done. + +logs.report("system","luatex-fonts.lua loaded in %0.3f seconds", os.gettimeofday()-starttime) + +generic_context.pop_namespaces(whatever) diff --git a/Master/texmf-dist/source/luatex/luaotfload/fontloader-reference-load-order.tex b/Master/texmf-dist/source/luatex/luaotfload/fontloader-reference-load-order.tex new file mode 100644 index 00000000000..7b457e9b4fc --- /dev/null +++ b/Master/texmf-dist/source/luatex/luaotfload/fontloader-reference-load-order.tex @@ -0,0 +1,140 @@ +%D \module +%D [ file=luatex-fonts, +%D version=2009.12.01, +%D title=\LUATEX\ Support Macros, +%D subtitle=Generic \OPENTYPE\ Font Handler, +%D author=Hans Hagen, +%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] + +%D \subject{Welcome} +%D +%D This file is one of a set of basic functionality enhancements +%D for \LUATEX\ derived from the \CONTEXT\ \MKIV\ code base. Please +%D don't polute the \type {luatex-*} namespace with code not coming +%D from the \CONTEXT\ development team as we may add more files. +%D +%D As this is an experimental setup, it might not always work out as +%D expected. Around \LUATEX\ version 0.50 we expect the code to be +%D more or less okay. +%D +%D This file implements a basic font system for a bare \LUATEX\ +%D system. By default \LUATEX\ only knows about the classic \TFM\ +%D fonts but it can read other font formats and pass them to \LUA. +%D With some glue code one can then construct a suitable \TFM\ +%D representation that \LUATEX\ can work with. For more advanced font +%D support a bit more code is needed that needs to be hooked +%D into the callback mechanism. +%D +%D This file is currently rather simple: it just loads the \LUA\ file +%D with the same name. An example of a \type {luatex.tex} file that is +%D just plain \TEX: +%D +%D \starttyping +%D \catcode`\{=1 % left brace is begin-group character +%D \catcode`\}=2 % right brace is end-group character +%D +%D \input plain +%D +%D \everyjob\expandafter{\the\everyjob\input luatex-fonts\relax} +%D +%D \dump +%D \stoptyping +%D +%D We could load the \LUA\ file in \type {\everyjob} but maybe some +%D day we need more here. +%D +%D When defining a font you can use two prefixes. A \type {file:} +%D prefix forced a file search, while a \type {name:} prefix will +%D result in consulting the names database. Such a database can be +%D generated with: +%D +%D \starttyping +%D mtxrun --usekpse --script fonts --names +%D \stoptyping +%D +%D This will generate a file \type {luatex-fonts-names.lua} that has +%D to be placed in a location where it can be found by \KPSE. Beware: +%D the \type {--kpseonly} flag is only used outside \CONTEXT\ and +%D provides very limited functionality, just enough for this task. +%D +%D The code loaded here does not come out of thin air, but is mostly +%D shared with \CONTEXT, however, in that macropackage we go beyond +%D what is provided here. When you use the code packaged here you +%D need to keep a few things in mind: +%D +%D \startitemize +%D +%D \item This subsystem will be extended, improved etc. in about the +%D same pace as \CONTEXT\ \MKIV. However, because \CONTEXT\ provides a +%D rather high level of integration not all features will be supported +%D in the same quality. Use \CONTEXT\ if you want more goodies. +%D +%D \item There is no official \API\ yet, which means that using +%D functions implemented here is at your own risk, in the sense that +%D names and namespaces might change. There will be a minimal \API\ +%D defined once \LUATEX\ version 1.0 is out. Instead of patching the +%D files it's better to overload functions if needed. +%D +%D \item The modules are not stripped too much, which makes it +%D possible to benefit from improvements in the code that take place +%D in the perspective of \CONTEXT\ development. They might be split a +%D bit more in due time so the baseline might become smaller. +%D +%D \item The code is maintained and tested by the \CONTEXT\ +%D development team. As such it might be better suited for this macro +%D package and integration in other systems might demand some +%D additional wrapping. Problems can be reported to the team but as we +%D use \CONTEXT\ \MKIV\ as baseline, you'd better check if the problem +%D is a general \CONTEXT\ problem too. +%D +%D \item The more high level support for features that is provided in +%D \CONTEXT\ is not part of the code loaded here as it makes no sense +%D elsewhere. Some experimental features are not part of this code +%D either but some might show up later. +%D +%D \item Math font support will be added but only in its basic form +%D once that the Latin Modern and \TEX\ Gyre math fonts are +%D available. +%D +%D \item At this moment the more nifty speed-ups are not enabled +%D because they work in tandem with the alternative file handling +%D that \CONTEXT\ uses. Maybe around \LUATEX\ 1.0 we will bring some +%D speedup into this code too (if it pays off at all). +%D +%D \item The code defines a few global tables. If this code is used +%D in a larger perspective then you can best make sure that no +%D conflicts occur. The \CONTEXT\ package expects users to work in +%D their own namespace (\type {userdata}, \type {thirddata}, \type +%D {moduledata} or \type {document}. The team takes all freedom to +%D use any table at the global level but will not use tables that are +%D named after macro packages. Later the \CONTEXT\ might operate in +%D a more controlled namespace but it has a low priority. +%D +%D \item There is some tracing code present but this is not enabled +%D and not supported outside \CONTEXT\ either as it integrates quite +%D tightly into \CONTEXT. In case of problems you can use \CONTEXT\ +%D for tracking down problems. +%D +%D \item Patching the code in distributions is dangerous as it might +%D fix your problem but introduce new ones for \CONTEXT. So, best keep +%D the original code as it is. +%D +%D \item Attributes are (automatically) taken from the range 127-255 so +%D you'd best not use these yourself. +%D +%D \stopitemize +%D +%D If this all sounds a bit tricky, keep in mind that it makes no sense +%D for us to maintain multiple code bases and we happen to use \CONTEXT. +%D +%D For more details about how the font subsystem works we refer to +%D publications in \TEX\ related journals, the \CONTEXT\ documentation, +%D and the \CONTEXT\ wiki. + +\directlua { + if not fonts then + dofile(kpse.find_file("luatex-fonts.lua","tex")) + end +} + +\endinput diff --git a/Master/texmf-dist/source/luatex/luaotfload/luaotfload-latex.tex b/Master/texmf-dist/source/luatex/luaotfload/luaotfload-latex.tex deleted file mode 100644 index b4cd3c34342..00000000000 --- a/Master/texmf-dist/source/luatex/luaotfload/luaotfload-latex.tex +++ /dev/null @@ -1,486 +0,0 @@ -\suppresslongerror1%% sigh ... -%% Copyright (C) 2009-2015 -%% -%% by Elie Roux <elie.roux@telecom-bretagne.eu> -%% and Khaled Hosny <khaledhosny@eglug.org> -%% and Philipp Gesang <phg@phi-gamma.net> -%% -%% This file is part of Luaotfload. -%% -%% Home: https://github.com/lualatex/luaotfload -%% Support: <lualatex-dev@tug.org>. -%% -%% Luaotfload is under the GPL v2.0 (exactly) license. -%% -%% ---------------------------------------------------------------------------- -%% -%% Luaotfload is free software; you can redistribute it and/or -%% modify it under the terms of the GNU General Public License -%% as published by the Free Software Foundation; version 2 -%% of the License. -%% -%% Luaotfload is distributed in the hope that it will be useful, -%% but WITHOUT ANY WARRANTY; without even the implied warranty of -%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -%% GNU General Public License for more details. -%% -%% You should have received a copy of the GNU General Public License -%% along with Luaotfload; if not, see <http://www.gnu.org/licenses/>. -%% -%% ---------------------------------------------------------------------------- -%% - -\documentclass{ltxdoc} - -\makeatletter - -\usepackage {metalogo,multicol,fancyvrb,xspace} -\usepackage [x11names] {xcolor} - -\def \primarycolor {DodgerBlue4} %%-> rgb 16 78 139 | #104e8b -\def \secondarycolor {Goldenrod4} %%-> rgb 139 105 200 | #8b6914 - -\usepackage[ - bookmarks=true, - colorlinks=true, - linkcolor=\primarycolor, - urlcolor=\secondarycolor, - citecolor=\primarycolor, - pdftitle={The Luaotfload package}, - pdfsubject={OpenType layout system for Plain TeX and LaTeX}, - pdfauthor={Elie Roux & Khaled Hosny & Philipp Gesang}, - pdfkeywords={luatex, lualatex, unicode, opentype} -]{hyperref} - -\usepackage {fontspec} -\usepackage {unicode-math} - -\setmainfont[ -% Numbers = OldStyle, %% buggy with font cache - Ligatures = TeX, - BoldFont = {Linux Libertine O Bold}, - ItalicFont = {Linux Libertine O Italic}, - SlantedFont = {Linux Libertine O Italic}, -]{Linux Libertine O} -\setmonofont[Ligatures=TeX,Scale=MatchLowercase]{Liberation Mono} -%setsansfont[Ligatures=TeX]{Linux Biolinum O} -\setsansfont[Ligatures=TeX,Scale=MatchLowercase]{Iwona Medium} -%setmathfont{XITS Math} - -\usepackage{hologo} - -\newcommand\TEX {\TeX\xspace} -\newcommand\LUA {Lua\xspace} -\newcommand\PDFTEX {pdf\TeX\xspace} -\newcommand\LUATEX {Lua\TeX\xspace} -\newcommand\XETEX {\XeTeX\xspace} -\newcommand\LATEX {\LaTeX\xspace} -\newcommand\LUALATEX {Lua\LaTeX\xspace} -\newcommand\CONTEXT {Con\TeX t\xspace} -\newcommand\OpenType {\identifier{Open\kern-.25ex Type}\xspace} - -%% \groupedcommand, with some omissions taken from syst-aux.mkiv -\let \handlegroupnormalbefore \relax -\let \handlegroupnormalafter \relax - -\protected \def \handlegroupnormal #1#2{% - \bgroup % 1 - \def \handlegroupbefore {#1}% - \def \handlegroupafter {#2}% - \afterassignment \handlegroupnormalbefore - \let \next = -} - -\def \handlegroupnormalbefore {% - \bgroup % 2 - \handlegroupbefore - \bgroup % 3 - \aftergroup \handlegroupnormalafter% -} - -\def \handlegroupnormalafter {% - \handlegroupafter - \egroup % 3 - \egroup % 2 -} - -\let \groupedcommand \handlegroupnormal %% only the two arg version - -\def \definehighlight [#1][#2]{% - \ifcsname #1\endcsname\else - \expandafter\def\csname #1\endcsname{% - \leavevmode - \groupedcommand {#2}\empty% - } - \fi% -} - -%% old, simplistic definition: obsolete now that we have -%% \groupedcommand -%\def\definehighlight[#1][#2]% - %{\ifcsname #1\endcsname\else - %\expandafter\def\csname #1\endcsname% - %{\bgroup#2\csname #1_indeed\endcsname} - %\expandafter\def\csname #1_indeed\endcsname##1% - %{##1\egroup}% - %\fi} - -\def\restoreunderscore{\catcode`\_=12\relax} - -\definehighlight [fileent][\ttfamily\restoreunderscore] %% files, dirs -\definehighlight [texmacro][\sffamily\itshape\textbackslash] %% cs -\definehighlight [luaident][\sffamily\itshape\restoreunderscore] %% lua identifiers -\definehighlight [identifier][\sffamily] %% names -\definehighlight [abbrev][\rmfamily\scshape] %% acronyms -\definehighlight [emphasis][\rmfamily\slshape] %% level 1 emph - -\definehighlight [Largefont][\Large] %% font size -\definehighlight [smallcaps][\sc] %% font feature -\definehighlight [nonproportional][\tt] %% font switch - -\newcommand*\email[1]{\href{mailto:#1}{#1}} - -\renewcommand\partname{Part}%% gets rid of the stupid “file” heading - -\usepackage{syntax}%% bnf for font request syntax - -\usepackage{titlesec} - -\def\movecountertomargin#1{\llap{\rmfamily\upshape#1\hskip2em}} -\def\zeropoint{0pt} -\titleformat \part - {\normalsize\rmfamily\bfseries} - {\movecountertomargin\thepart} \zeropoint {} -\titleformat \section - {\normalsize\rmfamily\scshape} - {\movecountertomargin\thesection} \zeropoint {} -\titleformat \subsection - {\small\rmfamily\itshape} - {\movecountertomargin\thesubsection} \zeropoint {} -\titleformat \subsubsection - {\normalsize\rmfamily\upshape} - {\movecountertomargin\thesubsubsection} \zeropoint {} - -\usepackage{tocloft} -\renewcommand \cftpartfont {\rmfamily\upshape} -\renewcommand \cftsecfont {\rmfamily\upshape} -\renewcommand \cftsubsecfont {\rmfamily\upshape} -\setlength \cftbeforepartskip {1ex} -\setlength \cftbeforesecskip {1ex} - -\VerbatimFootnotes - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% structurals -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\def \definestructural #1{% - \expandafter \let \csname end#1\endcsname \relax - - \expandafter \def \csname begin#1\endcsname {% - \@ifnextchar[{\csname begin#1indeed\endcsname} - {\csname begin#1indeed\endcsname[]}% - } - - \expandafter \def \csname begin#1indeed\endcsname [##1]##2{% - \edef \first {##1}% - \ifx \first \empty - \csname #1\endcsname [##2]{##2}% - \else - \csname #1\endcsname [\first]{##2}% - \fi - } -} - -\definestructural {section} -\definestructural {subsection} -\definestructural {subsubsection} - -\def \fakesection #1{\section*{#1}} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% inline verbatim -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%% Context offers both \type{…} and \type<<…>>, but not an unbalanced -%% one that we could map directly onto Latex’s \verb|…|. - -\usepackage {listings} -\usepackage {luatexbase} -\lstset { - basicstyle=\ttfamily, -} - -%\let \inlinecode \lstinline -\protected \def \inlinecode {\lstinline} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% codelistings; this sucks hard since we lack access to buffers -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\newcount \othercatcode \othercatcode 12 -\newcount \activecatcode \othercatcode 13 - -\newcatcodetable \vrbcatcodes -\setcatcodetable \vrbcatcodes {% - \catcodetable \CatcodeTableIniTeX - \catcode 9 \othercatcode %% \tabasciicode - \catcode 13 \othercatcode %% \endoflineasciicode - \catcode 12 \othercatcode %% \formfeedasciicode - \catcode 26 \othercatcode %% \endoffileasciicode - \catcode 32 \othercatcode %% \spaceasciicode -} - -\directlua { - document = document or { } - document.vrbcatcodesidx = tonumber (\the \vrbcatcodes) -} - -\newcatcodetable \literalcatcodes -\setcatcodetable \literalcatcodes {% - \catcodetable \CatcodeTableString - \catcode 32 \activecatcode %% \spaceasciicode -} - -\def \listingsurroundskip {\vskip \baselineskip} - -\def \beginlisting {% - \noindent - \begingroup - \catcodetable \vrbcatcodes - \beginlistingindeed% -} - -\directlua { - local texsprint = tex.sprint - local stringis_empty = string.is_empty - local stringsub = string.sub - local stringgsub = string.gsub - %local backslash = unicode.utf8.char (0x200c) - local backslash = unicode.utf8.char (0x5c) - local escaped = [[\string\string\string\]] - document.printlines = function (buffer) - local lines = string.explode (buffer, "\noexpand\n") - print "" - for i, line in next, lines do - local line = stringgsub (line, backslash, escaped) - if stringis_empty (line) then - print (i, "listing: <empty line />") - texsprint [[\string\listingpar]] - else - local line = [[\string\beginlistingline]] - .. line - .. [[\string\endlistingline]] - .. [[\string\listingpar]] - print (i, "listing: «" .. line .. "»") - texsprint (document.vrbcatcodesidx, line) - end - end - end -} - -\def \listingpar {\endgraf} - -\let \endlistingline \relax -\let \endlisting \relax - -\protected \def \beginlistingline{% - \leavevmode - \begingroup - \beginlistinglineindeed% -} - -\def \beginlistinglineindeed #1\endlistingline{% - \endgroup - \hbox{% - \addfontfeature {RawFeature=-tlig;-liga}%% So one can’t just turn them all off at once using the ``Ligatures`` key? - \obeyspaces - #1}% -} - -\def \beginlistingindeed#1\endlisting{% - \endgroup - \begingroup - \endgraf - \listingsurroundskip - \ttfamily - \small - \parindent = 0em - \leftskip = 2em - \hangindent = 2em - \directlua{document.printlines ([==[\detokenize {#1}]==])}% - \listingsurroundskip - \endgroup -} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% enumerations and lists -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\def \definelist [#1]#2{% name, itemcode - \expandafter \def \csname begin#1\endcsname {% - \begin {itemize} - \let \normalitem = \item - \def \altitem ####1{% - \def \first {####1}% - #2 - } - \let \beginnormalitem \item - \let \endnormalitem \relax - \let \beginaltitem \altitem - \let \endaltitem \relax - } - - \expandafter \def \csname end#1\endcsname {% - \end {itemize} - } -} - -\definelist [descriptions]{\normalitem {\textbf \first}\hfill\break} -\definelist [definitions]{\normalitem {\fileent {\first}}} -\definelist [filelist]{\normalitem {\fileent {\first}}\space--\hskip 1em} -\definelist [functionlist]{\normalitem {\luaident {\first}}\hfill\break} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% columns -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\def \begindoublecolumns {\begin {multicols} {2}} -\def \enddoublecolumns {\end {multicols}} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% alignment -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\def \begincentered {\begin {center}} -\def \endcentered {\end {center}} - -\def \beginnarrower {\begin {quote}} -\def \endnarrower {\end {quote}} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% special elements -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\let \beginfrontmatter \relax -\let \endfrontmatter \relax - -\def \beginabstractcontent {\begin {abstract}} -\def \endabstractcontent {\end {abstract}} - -\let \setdocumenttitle \title -\let \setdocumentdate \date -\let \setdocumentauthor \author -\let \typesetdocumenttitle \maketitle - -\AtBeginDocument {%% seriously? - \let \typesetcontent \tableofcontents% -} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% floats -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%% syntax definition -\def \beginsyntaxfloat #1#2{%% #1:label #2:caption - \begin {figure} [b] - \edef \syntaxlabel {#1}% - \def \syntaxcaption {#2}% - \setlength\grammarparsep{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 \figurefloat #1#2#3{%% #1:label #2:caption #3:file - \begin {figure} [b] - \caption {#2}% - \includegraphics[width=\textwidth]{#3}% - \label {#1} - \end {figure} -} - -%% tables -\def \tablefloat #1#2{%% #1:label #2:caption - \begin {table} [t] - \hrule - \caption {#2}% - \label {#1} - \hrule - \end {table} -} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% hyperlinks -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\protected \def \hyperlink{% - \@ifnextchar[{\hyperlinkindeed}% - {\hyperlinkindeed[]}% -} - -\def \hyperlinkindeed [#1]#2{% - \def \first {#1}% - \ifx \first \empty - \url {#2}% - \else - \href {#2}{#1}% - \fi% -} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% tables -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Our tables aren’t anything special so we stick with “tabular” on the -%% Latex end. -%% -%% This is going to be largely incompatible with Context since format -%% specifications work quite differently (even between different -%% Context table variants). - -\def \begintabulate [#1]#2\endtabulate{% - \begingroup - \let \beginrow = \relax %% -> \NC in Context - \let \newcell = & %% -> \NC - \let \endrow = \cr %% -> \NC \NR - \begin {tabular}{#1}% - #2 - \end {tabular} - \endgroup -} - -\let \endtabulate \relax - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% escaped characters -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\let \charpercent \textpercent -\let \charbackslash \textbackslash -\let \chartilde \textasciitilde - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% main -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\makeatother - -\newif \ifcontextmkiv \contextmkivfalse - -\begin {document} - \input {luaotfload-main.tex} -\end {document} - - diff --git a/Master/texmf-dist/source/luatex/luaotfload/luaotfload-main.tex b/Master/texmf-dist/source/luatex/luaotfload/luaotfload-main.tex deleted file mode 100644 index 21e001b2e29..00000000000 --- a/Master/texmf-dist/source/luatex/luaotfload/luaotfload-main.tex +++ /dev/null @@ -1,1908 +0,0 @@ -%% Copyright (C) 2009-2017 -%% -%% by Elie Roux <elie.roux@telecom-bretagne.eu> -%% and Khaled Hosny <khaledhosny@eglug.org> -%% and Philipp Gesang <phg@phi-gamma.net> -%% -%% This file is part of Luaotfload. -%% -%% Home: https://github.com/lualatex/luaotfload -%% Support: <lualatex-dev@tug.org>. -%% -%% Luaotfload is under the GPL v2.0 (exactly) license. -%% -%% ---------------------------------------------------------------------------- -%% -%% Luaotfload is free software; you can redistribute it and/or -%% modify it under the terms of the GNU General Public License -%% as published by the Free Software Foundation; version 2 -%% of the License. -%% -%% Luaotfload is distributed in the hope that it will be useful, -%% but WITHOUT ANY WARRANTY; without even the implied warranty of -%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -%% GNU General Public License for more details. -%% -%% You should have received a copy of the GNU General Public License -%% along with Luaotfload; if not, see <http://www.gnu.org/licenses/>. -%% -%% ---------------------------------------------------------------------------- -%% - -\beginfrontmatter - - \setdocumenttitle {The \identifier{luaotfload} package} - \setdocumentdate {2017/01/29 v2.8} - \setdocumentauthor {Elie Roux · Khaled Hosny · Philipp Gesang\\ - Home: \hyperlink {https://github.com/lualatex/luaotfload}\\ - Support: \email {lualatex-dev@tug.org}} - - \typesetdocumenttitle - - \beginabstractcontent - This package is an adaptation of the \CONTEXT font loading system. - It allows for loading \OpenType fonts with an extended syntax and adds - support for a variety of font features. - - After discussion of the font loading API, this manual gives an - overview of the core components of \identifier{Luaotfload}: The - packaged font loader code, the names database, configuration, and - helper functions on the \LUA\ end. - \endabstractcontent - -\endfrontmatter - -\typesetcontent - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\beginsection {Introduction} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -Font management and installation has always been painful with \TEX. A -lot of files are needed for one font (\abbrev{tfm}, \abbrev{pfb}, -\abbrev{map}, \abbrev{fd}, \abbrev{vf}), and due to the 8-Bit encoding -each font is limited to 256 characters. - -But the font world has evolved since the original \TEX, and new -typographic systems have appeared, most notably the so called -\emphasis{smart font} technologies like \OpenType fonts (\abbrev{otf}). - -These fonts can contain many more characters than \TEX fonts, as well -as additional functionality like ligatures, old-style numbers, small -capitals, etc., and support more complex writing systems like Arabic -and Indic\footnote{% - Unfortunately, \identifier{luaotfload} doesn‘t support many Indic - scripts right now. - Assistance in implementing the prerequisites is greatly - appreciated. -} -scripts. - -\OpenType fonts are widely deployed and available for all modern -operating systems. - -As of 2013 they have become the de facto standard for advanced text -layout. - -However, until recently the only way to use them directly in the \TEX -world was with the \XETEX engine. - -Unlike \XETEX, \LUATEX has no built-in support for \OpenType or -technologies other than the original \TEX fonts. - -Instead, it provides hooks for executing \LUA code during the \TEX run -that allow implementing extensions for loading fonts and manipulating -how input text is processed without modifying the underlying engine. - -This is where \identifier{luaotfload} comes into play: -Based on code from \CONTEXT, it extends \LUATEX with functionality necessary -for handling \OpenType fonts. - -Additionally, it provides means for accessing fonts known to the operating -system conveniently by indexing the metadata. - -\endsection - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\beginsection {Thanks} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\identifier{Luaotfload} is part of \LUALATEX, the community-driven -project to provide a foundation for using the \LATEX format with the -full capabilites of the \LUATEX engine. -% -As such, the distinction between end users, contributors, and project -maintainers is intentionally kept less strict, lest we unduly -personalize the common effort. - -Nevertheless, the current maintainers would like to express their -gratitude to Khaled Hosny, Akira Kakuto, Hironori Kitagawa and Dohyun -Kim. -% -Their contributions -- be it patches, advice, or systematic -testing -- made the switch from version 1.x to 2.2 possible. -% -Also, Hans Hagen, the author of the font loader, made porting the -code to \LATEX a breeze due to the extra effort he invested into -isolating it from the rest of \CONTEXT, not to mention his assistance -in the task and willingness to respond to our suggestions. - -\endsection - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\beginsection {Loading Fonts} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\identifier{luaotfload} supports an extended font request syntax: - -\beginnarrower - \nonproportional{\string\font\string\foo\space= \string{}% - \meta{prefix}\nonproportional{:}% - \meta{font name}\nonproportional{:}% - \meta{font features}\nonproportional{\string}}% - \meta{\TEX font features} -\endnarrower - -\noindent -The curly brackets are optional and escape the spaces in the enclosed -font name. -% -Alternatively, double quotes serve the same purpose. -% -A selection of individual parts of the syntax are discussed below; -for a more formal description see figure \ref{font-syntax}. - -\beginsyntaxfloat - {font-syntax} - {Font request syntax. - Braces or double quotes around the - \emphasis{specification} rule will - preserve whitespace in file names. - In addition to the font style modifiers - (\emphasis{slash-notation}) given above, there - are others that are recognized but will be silently - ignored: \nonproportional{aat}, - \nonproportional{icu}, and - \nonproportional{gr}. - The special terminals are: - \smallcaps {feature\textunderscore id} for a valid font - feature name and - \smallcaps {feature\textunderscore value} for the corresponding - value. - \smallcaps {tfmname} is the name of a \abbrev{tfm} file. - \smallcaps {digit} again refers to bytes 48--57, and - \smallcaps {all\textunderscore characters} to all byte values. - \smallcaps {csname} and \smallcaps {dimension} are the \TEX concepts.} -% - <definition> ::= `\\font', {\sc csname}, `=', <font request>, [ <size> ] ; - - <size> ::= `at', {\sc dimension} ; - - <font request> ::= `"', <unquoted font request> `"' - \alt `{', <unquoted font request> `}' - \alt <unquoted font request> ; - - <unquoted font request> ::= <specification>, [`:', <feature list> ] - \alt <path lookup>, [ [`:'], <feature list> ] ; - - <specification> ::= <prefixed spec>, [ <subfont no> ], \{ <modifier> \} - \alt <anon lookup>, \{ <modifier> \} ; - - <prefixed spec> ::= `combo:', <combo list> - \alt `file:', <file lookup> - \alt `name:', <name lookup> ; - - <combo list> ::= <combo def 1>, \{ `;', <combo def> \} ; - - <combo def 1> ::= <combo id>, `->', <combo id> ; - - <combo def> ::= <combo id>, `->', <combo id chars> ; - - <combo id> ::= (`(', \{ {\sc digit} \}, `)' | \{ {\sc digit} \} ) ; - - <combo id chars> ::= (`(', \{ {\sc digit} \}, `,', <combo chars>, `)' - \alt \{ {\sc digit} \} ) ; - - <combo chars> ::= `fallback' - \alt \{ <combo range>, \{ `*', <combo range> \} \} ; - - <combo range> ::= <combo num>, [ `-', <combo num> ] ; - - <combo num> ::= `0x', \{ {\sc hexdigit} \} - \alt `U+', \{ {\sc digit} \} - \alt \{ {\sc digit} \} ; - - <file lookup> ::= \{ <name character> \} ; - - <name lookup> ::= \{ <name character> \} ; - - <anon lookup> ::= {\sc tfmname} | <name lookup> ; - - <path lookup> ::= `[', \{ <path content> \}, `]', [ <subfont no> ] ; - - <path content> ::= <path balanced> - \alt `\\', {\sc all_characters} - \alt {\sc all_characters} - `]' - - <path balanced> ::= `[', [ <path content> ], `]' - - <modifier> ::= `/', (`I' | `B' | `BI' | `IB' | `S=', \{ {\sc digit} \} ) ; - - <subfont no> ::= `(', \{ {\sc digit} \}, `)' ; - - <feature list> ::= <feature expr>, \{ `;', <feature expr> \} ; - - <feature expr> ::= {\sc feature_id}, `=', {\sc feature_value} - \alt <feature switch>, {\sc feature_id} ; - - <feature switch> ::= `+' | `-' ; - - <name character> ::= {\sc all_characters} - ( `(' | `/' | `:' ) ; -\endsyntaxfloat - -%% Below guarded space gets borked in index; why‽ -\beginsubsection{Prefix -- the \identifier{luaotfload}{ }Way} - -In \identifier{luaotfload}, the canonical syntax for font requests -requires a \emphasis{prefix}: -% -\beginnarrower - \nonproportional{\string\font\string\fontname\space= }% - \meta{prefix}% - \nonproportional{:}% - \meta{fontname}% - \dots -\endnarrower -% -where \meta{prefix} is either \inlinecode{file:} or \inlinecode {name:}.\footnote{% - \identifier{Luaotfload} also knows two further prefixes, \inlinecode {kpse:} - and \inlinecode {my:}. - % - A \inlinecode {kpse} lookup is restricted to files that can be found by - \identifier{kpathsea} and will not attempt to locate system fonts. - % - This behavior can be of value when an extra degree of encapsulation is - needed, for instance when supplying a customized tex distribution. - - The \inlinecode {my} lookup takes this a step further: it lets you define - a custom resolver function and hook it into the \luaident{resolve_font} - callback. - % - This ensures full control over how a file is located. - % - For a working example see the - \hyperlink [test repo]{https://bitbucket.org/phg/lua-la-tex-tests/src/5f6a535d/pln-lookup-callback-1.tex}. -} -% -It determines whether the font loader should interpret the request as -a \emphasis{file name} or - \emphasis{font name}, respectively, -which again influences how it will attempt to locate the font. -% -Examples for font names are - “Latin Modern Italic”, - “GFS Bodoni Rg”, and - “PT Serif Caption” --- they are the human readable identifiers -usually listed in drop-down menus and the like.\footnote{% - Font names may appear like a great choice at first because they - offer seemingly more intuitive identifiers in comparison to arguably - cryptic file names: - % - “PT Sans Bold” is a lot more descriptive than \fileent{PTS75F.ttf}. - On the other hand, font names are quite arbitrary and there is no - universal method to determine their meaning. - % - While \identifier{luaotfload} provides fairly sophisticated heuristic - to figure out a matching font style, weight, and optical size, it - cannot be relied upon to work satisfactorily for all font files. - % - For an in-depth analysis of the situation and how broken font names - are, please refer to - \hyperlink [this post]{http://www.ntg.nl/pipermail/ntg-context/2013/073889.html} - by Hans Hagen, the author of the font loader. - % - If in doubt, use filenames. - % - \fileent{luaotfload-tool} can perform the matching for you with the - option \inlinecode {--find=<name>}, and you can use the file name it returns - in your font definition. -} -% -In order for fonts installed both in system locations and in your -\fileent{texmf} to be accessible by font name, \identifier{luaotfload} must -first collect the metadata included in the files. -% -Please refer to section~\ref{sec:fontdb} below for instructions on how to -create the database. - -File names are whatever your file system allows them to be, except -that that they may not contain the characters - \inlinecode {(}, - \inlinecode {:}, and - \inlinecode {/}. -% -As is obvious from the last exception, the \inlinecode {file:} lookup will -not process paths to the font location -- only those -files found when generating the database are addressable this way. -% -Continue below in the \XETEX section if you need to load your fonts -by path. -% -The file names corresponding to the example font names above are - \fileent{lmroman12-italic.otf}, - \fileent{GFSBodoni.otf}, and - \fileent{PTZ56F.ttf}. - -\endsubsection - -\beginsubsection {Bracketed Lookups} -\label{sec:conf} -Bracketed lookups allow for arbitrary character content to be used in a -definition. -% -A simple bracketed request looks follows the scheme - -\beginnarrower - \nonproportional{\string\font\string\fontname\space = [}% - \meta{/path/to/file}% - \nonproportional{]} -\endnarrower - -\noindent -Inside the square brackets, every character except for a closing bracket is -permitted, allowing for arbitrary paths to a font file -- including Windows -style paths with UNC or drive letter prepended -- to be specified. -% -The \identifier{Luaotfload} syntax differs from \XETEX in that the subfont -selector goes \emphasis{after} the closing bracket: - -\beginnarrower - \nonproportional{\string\font\string\fontname\space = [}% - \meta{/path/to/file}% - \nonproportional{]} - \nonproportional{(}n\nonproportional{)} -\endnarrower - -Naturally, path-less file names are equally valid and processed the -same way as an ordinary \inlinecode {file:} lookup. - -\beginsubsection {Compatibility} - -In addition to the regular prefixed requests, \identifier{luaotfload} -accepts loading fonts the \XETEX way. -% -There are again two modes: bracketed and unbracketed. -For the bracketed variety, see above, \ref{sec:conf}. - -Unbracketed (or, for lack of a better word: \emphasis{anonymous}) -font requests resemble the conventional \TEX syntax. - -\beginnarrower - \nonproportional{\string\font\string\fontname\space= }% - \meta{font name} - \dots -\endnarrower -\endsubsection - -However, they have a broader spectrum of possible interpretations: -before anything else, \identifier{luaotfload} attempts to load a -traditional \TEX Font Metric (\abbrev{tfm} or \abbrev{ofm}). -% -If this fails, it performs a \inlinecode {path:} lookup, which itself will -fall back to a \inlinecode {file:} lookup. -% -Lastly, if none of the above succeeded, attempt to resolve the request as a -\inlinecode {name:} lookup by searching the font index for \meta{font name}. -% -The behavior of this “anonymous” lookup is configurable, see the configuation -manpage for details. - -Furthermore, \identifier{luaotfload} supports the slashed (shorthand) -font style notation from \XETEX. - -\beginnarrower - \nonproportional{\string\font\string\fontname\space= }% - \meta{font name}% - \nonproportional{/}% - \meta{modifier} - \dots -\endnarrower - -\noindent -Currently, four style modifiers are supported: - \inlinecode {I} for italic shape, - \inlinecode {B} for bold weight, - \inlinecode {BI} or \inlinecode {IB} for the combination of both. -% -Other “slashed” modifiers are too specific to the \XETEX engine and -have no meaning in \LUATEX. - -\endsubsection - -\beginsubsection{Examples} - -\beginsubsubsection{Loading by File Name} - -For example, conventional \TeX\ font can be loaded with a -\inlinecode {file:} request like so: - -\beginlisting - \font \lmromanten = {file:ec-lmr10} at 10pt -\endlisting - -The \OpenType version of Janusz Nowacki’s font \emphasis{Antykwa -Półtawskiego}\footnote{% - \hyperlink {http://jmn.pl/antykwa-poltawskiego/}, also available in - in \TEX Live. -} -in its condensed variant can be loaded as follows: - -\beginlisting - \font \apcregular = file:antpoltltcond-regular.otf at 42pt -\endlisting - -The next example shows how to load the \emphasis{Porson} font digitized by -the Greek Font Society using \XETEX-style syntax and an absolute path from a -non-standard directory: - -\beginlisting - \font \gfsporson = "[/tmp/GFSPorson.otf]" at 12pt -\endlisting - -\identifier{TrueType} collection files (the extension is usually -\inlinecode{.ttc}) contain more than a single font. In order to refer to these -subfonts, the respective index may be added in parentheses after the file -name.\footnote{% - Incidentally, this syntactical detail also prevents one from loading files - that end in balanced parentheses. -} - -\beginlisting - \font \cambriamain = "file:cambria.ttc(0)" at 10pt - \font \cambriamath = "file:cambria.ttc(1)" at 10pt -\endlisting - -and likewise, requesting subfont inside a TTC container by path: - -\beginlisting - \font \asanamain = "[/home/typesetter/.fonts/math/asana.ttc](0):mode=node;+tlig" at 10pt - \font \asanamath = "[/home/typesetter/.fonts/math/asana.ttc](1):mode=base" at 10pt -\endlisting - -\endsubsubsection - -\beginsubsubsection{Loading by Font Name} - -The \inlinecode {name:} lookup does not depend on cryptic filenames: - -\beginlisting - \font \pagellaregular = {name:TeX Gyre Pagella} at 9pt -\endlisting - -A bit more specific but essentially the same lookup would be: - -\beginlisting - \font \pagellaregular = {name:TeX Gyre Pagella Regular} at 9pt -\endlisting - -\noindent -Which fits nicely with the whole set: - -\beginlisting - \font\pagellaregular = {name:TeX Gyre Pagella Regular} at 9pt - \font\pagellaitalic = {name:TeX Gyre Pagella Italic} at 9pt - \font\pagellabold = {name:TeX Gyre Pagella Bold} at 9pt - \font\pagellabolditalic = {name:TeX Gyre Pagella Bolditalic} at 9pt - - {\pagellaregular foo bar baz\endgraf} - {\pagellaitalic foo bar baz\endgraf} - {\pagellabold foo bar baz\endgraf} - {\pagellabolditalic foo bar baz\endgraf} - - ... -\endlisting - -\endsubsubsection - -\beginsubsubsection{Modifiers} - -If the entire \emphasis{Iwona} family\footnote{% - \hyperlink {http://jmn.pl/kurier-i-iwona/}, - also in \TEX Live. -} -is installed in some location accessible by \identifier{luaotfload}, -the regular shape can be loaded as follows: - -\beginlisting - \font \iwona = Iwona at 20pt -\endlisting - -\noindent -To load the most common of the other styles, the slash notation can -be employed as shorthand: - -\beginlisting - \font \iwonaitalic = Iwona/I at 20pt - \font \iwonabold = Iwona/B at 20pt - \font \iwonabolditalic = Iwona/BI at 20pt -\endlisting - -\noindent -which is equivalent to these full names: - -\beginlisting - \font \iwonaitalic = "Iwona Italic" at 20pt - \font \iwonabold = "Iwona Bold" at 20pt - \font \iwonabolditalic = "Iwona BoldItalic" at 20pt -\endlisting - -\endsubsubsection -\endsubsection -\endsection - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\beginsection {Font features} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\emphasis{Font features} are the second to last component in the -general scheme for font requests: - -\beginnarrower - \nonproportional{\string\font\string\foo\space= "}% - \meta{prefix}% - \nonproportional{:}% - \meta{font name}% - \nonproportional{:}% - \meta{font features}% - \meta{\TEX font features}% - \nonproportional{"} -\endnarrower - -\noindent -If style modifiers are present (\XETEX style), they must precede -\meta{font features}. - -The element \meta{font features} is a semicolon-separated list of feature -tags\footnote{% - Cf. \hyperlink {http://www.microsoft.com/typography/otspec/featurelist.htm}. -} -and font options. -% -Prepending a font feature with a \inlinecode{+} (plus sign) enables it, -whereas a \inlinecode{-} (minus) disables it. For instance, the request - -\beginlisting - \font \test = LatinModernRoman:+clig;-kern -\endlisting - -\noindent activates contextual ligatures (\inlinecode{clig}) and -disables kerning (\inlinecode{kern}). -% -Alternatively the options \inlinecode{true} or \inlinecode{false} can -be passed to the feature in a key/value expression. -% -The following request has the same meaning as the last one: - -\beginlisting - \font \test = LatinModernRoman:clig=true;kern=false -\endlisting - -\noindent -Furthermore, this second syntax is required should a font feature -accept other options besides a true/false switch. -% -For example, \emphasis{stylistic alternates} (\inlinecode{salt}) are -variants of given glyphs. -% -They can be selected either explicitly by supplying the variant -index (starting from one), or randomly by setting the value to, -obviously, \inlinecode{random}. - -%% TODO verify that this actually works with a font that supports -%% the salt/random feature!\fi -\beginlisting - \font \librmsaltfirst = LatinModernRoman:salt=1 -\endlisting - -\beginsubsection {Basic font features} - -\begindescriptions - - \beginaltitem {mode} - \identifier{luaotfload} has two \OpenType processing - \emphasis{modes}: - \identifier{base} and \identifier{node}. - - \identifier{base} mode works by mapping \OpenType - features to traditional \TEX ligature and kerning mechanisms. - % - Supporting only non-contextual substitutions and kerning - pairs, it is the slightly faster, albeit somewhat limited, variant. - % - \identifier{node} mode works by processing \TeX’s internal - node list directly at the \LUA end and supports - a wider range of \OpenType features. - % - The downside is that the intricate operations required for - \identifier{node} mode may slow down typesetting especially - with complex fonts and it does not work in math mode. - - By default \identifier{luaotfload} is in \identifier{node} - mode, and \identifier{base} mode has to be requested where needed, - e.~g. for math fonts. - \endaltitem - - \beginaltitem {script} \label{script-tag} - An \OpenType script tag;\footnote{% - See \hyperlink {http://www.microsoft.com/typography/otspec/scripttags.htm} - for a list of valid values. - % - For scripts derived from the Latin alphabet the value - \inlinecode{latn} is good choice. - } - the default value is \inlinecode{dflt}. - % - Some fonts, including very popular ones by foundries like Adobe, - do not assign features to the \inlinecode{dflt} script, in - which case the script needs to be set explicitly. - \endaltitem - - \beginaltitem {language} - An \OpenType language system identifier,\footnote{% - Cf. \hyperlink {http://www.microsoft.com/typography/otspec/languagetags.htm}. - } - defaulting to \inlinecode{dflt}. - \endaltitem - - \beginaltitem {color} - A font color, defined as a triplet of two-digit hexadecimal - \abbrev{rgb} values, with an optional fourth value for - transparency - (where \inlinecode{00} is completely transparent and - \inlinecode{FF} is opaque). - - For example, in order to set text in semitransparent red: - - \beginlisting - \font \test = "Latin Modern Roman:color=FF0000BB" - \endlisting - \endaltitem - - \beginaltitem {kernfactor \& letterspace} - Define a font with letterspacing (tracking) enabled. - % - In \identifier{luaotfload}, letterspacing is implemented by - inserting additional kerning between glyphs. - - This approach is derived from and still quite similar to the - \emphasis{character kerning} (\texmacro{setcharacterkerning} / - \texmacro{definecharacterkerning} \& al.) functionality of - Context, see the file \fileent{typo-krn.lua} there. - % - The main difference is that \identifier{luaotfload} does not - use \LUATEX attributes to assign letterspacing to regions, - but defines virtual letterspaced versions of a font. - - The option \identifier{kernfactor} accepts a numeric value that - determines the letterspacing factor to be applied to the font - size. - % - E.~g. a kern factor of $0.42$ applied to a $10$ pt font - results in $4.2$ pt of additional kerning applied to each - pair of glyphs. - % - Ligatures are split into their component glyphs unless - explicitly ignored (see below). - - For compatibility with \XETEX an alternative - \identifier{letterspace} option is supplied that interprets the - supplied value as a \emphasis{percentage} of the font size but - is otherwise identical to \identifier{kernfactor}. - % - Consequently, both definitions in below snippet yield the same - letterspacing width: - - \beginlisting - \font \iwonakernedA = "file:Iwona-Regular.otf:kernfactor=0.125" - \font \iwonakernedB = "file:Iwona-Regular.otf:letterspace=12.5" - \endlisting - - Specific pairs of letters and ligatures may be exempt from - letterspacing by defining the \LUA functions - \luaident{keeptogether} and \luaident{keepligature}, - respectively, inside the namespace \inlinecode {luaotfload.letterspace}. - % - Both functions are called whenever the letterspacing callback - encounters an appropriate node or set of nodes. - % - If they return a true-ish value, no extra kern is inserted at - the current position. - % - \luaident{keeptogether} receives a pair of consecutive - glyph nodes in order of their appearance in the node list. - % - \luaident{keepligature} receives a single node which can be - analyzed into components. - % - (For details refer to the \emphasis{glyph nodes} section in the - \LUATEX reference manual.) - % - The implementation of both functions is left entirely to the - user. - \endaltitem - -\iffalse - \startbuffer [printvectors] - \directlua{inspect(fonts.protrusions.setups.default) - inspect(fonts.expansions.setups.default)} - \stopbuffer -\fi - - \beginaltitem {protrusion \& expansion} - These keys control microtypographic features of the font, - namely \emphasis{character protrusion} and \emphasis{font - expansion}. - % - Their arguments are names of \LUA tables that contain - values for the respective features.\footnote{% - For examples of the table layout please refer to the - section of the file \fileent{luaotfload-fonts-ext.lua} where the - default values are defined. - % - Alternatively and with loss of information, you can dump - those tables into your terminal by issuing - \unless \iffalse - \beginlisting - \directlua{inspect(fonts.protrusions.setups.default) - inspect(fonts.expansions.setups.default)} - \endlisting - \else - \typebuffer [printvectors] - \fi - at some point after loading \fileent{luaotfload.sty}. - } - % - For both, only the set \identifier{default} is predefined. - - For example, to define a font with the default - protrusion vector applied\footnote{% - You also need to set - \inlinecode {pdfprotrudechars=2} and - \inlinecode {pdfadjustspacing=2} - to activate protrusion and expansion, respectively. - See the - \hyperlink [\PDFTEX manual]{http://mirrors.ctan.org/systems/pdftex/manual/pdftex-a.pdf}% - for details. - }: - - \beginlisting - \font \test = LatinModernRoman:protrusion=default - \endlisting - \endaltitem -\enddescriptions - -\endsubsection - -\beginsubsection {Non-standard font features} -\identifier{luaotfload} adds a number of features that are not defined -in the original \OpenType specification, most of them -aiming at emulating the behavior familiar from other \TEX engines. -% -Currently (2014) there are three of them: - -\begindescriptions - - \beginaltitem {anum} - Substitutes the glyphs in the \abbrev{ascii} number range - with their counterparts from eastern Arabic or Persian, - depending on the value of \identifier{language}. - \endaltitem - - \beginaltitem {tlig} - Applies legacy \TEX ligatures\footnote{% - These contain the feature set \inlinecode {trep} of earlier - versions of \identifier{luaotfload}. - - Note to \XETEX users: this is the equivalent of the - assignment \inlinecode {mapping=text-tex} using \XETEX's input - remapping feature. - }: - - \unless \iffalse - %% Using braced arg syntax with inline code appears to be - %% impossible within Latex tables -- just ignore the weird - %% exclamation points below. - \begintabulate [rlrl] - \beginrow `` \newcell {\inlinecode !``! } \newcell '' \newcell {\inlinecode !''!} \endrow - \beginrow ` \newcell {\inlinecode !`! } \newcell ' \newcell {\inlinecode !'! } \endrow - \beginrow " \newcell {\inlinecode !"! } \newcell -- \newcell {\inlinecode !--!} \endrow - \beginrow --- \newcell {\inlinecode !---!} \newcell !` \newcell {\inlinecode ?!`?} \endrow - \beginrow ?` \newcell {\inlinecode !?`! } \newcell \newcell \endrow - \endtabulate - \else - %% XXX find a way to wrap these in the tabulate environment - \startframed [frame=off,width=broad,align=middle] - \startframed [frame=off,width=\dimexpr(\textwidth/2)] - \startxtable [align=middle] - \startxrow \startxcell `` \stopxcell \startxcell \inlinecode {``} \stopxcell \startxcell '' \stopxcell \startxcell \inlinecode {''} \stopxcell \stopxrow - \startxrow \startxcell ` \stopxcell \startxcell \inlinecode {`} \stopxcell \startxcell ' \stopxcell \startxcell \inlinecode {'} \stopxcell \stopxrow - \startxrow \startxcell " \stopxcell \startxcell \inlinecode {"} \stopxcell \startxcell -- \stopxcell \startxcell \inlinecode {--} \stopxcell \stopxrow - \startxrow \startxcell --- \stopxcell \startxcell \inlinecode {---} \stopxcell \startxcell !` \stopxcell \startxcell \inlinecode {!`} \stopxcell \stopxrow - \startxrow \startxcell ?` \stopxcell \startxcell \inlinecode {?`} \stopxcell \startxcell \stopxcell \startxcell \stopxcell \stopxrow - \stopxtable - \stopframed - \stopframed - \fi - \endaltitem - - \beginaltitem {itlc} - Computes italic correction values (active by default). - \endaltitem - -\enddescriptions - -\endsubsection -\endsection - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\beginsection {Combining fonts} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -Version 2.7 and later support combining characters from multiple fonts into a -single virtualized one. This requires that the affected fonts be loaded in -advance as well as a special \emphasis{request syntax}. Furthermore, this -allows to define \emphasis{fallback fonts} to supplement fonts that may lack -certain required glyphs. - -Combinations are created by defining a font using the \luaident{combo:} prefix. - -\beginsubsection {Fallbacks} - -For example, the \identifier{Latin Modern} family of fonts does, as indicated -in the name, not provide Cyrillic glyphs. If Latin script dominates in the copy -with interspersed Cyrillic, a fallback can be created from a similiar looking -font like \identifier{Computer Modern Unicode}, taking advantage of the fact -that it too derives from Knuth’s original \identifier{Computer Modern} series: - -\beginlisting - \input luaotfload.sty - \font \lm = file:lmroman10-regular.otf:mode=base - \font \cmu = file:cmunrm.otf:mode=base - \font \lmu = "combo: 1->\fontid\lm; 2->\fontid\cmu,fallback" - \lmu Eh bien, mon prince. Gênes et Lueques ne sont plus que des - apanages, des поместья, de la famille Buonaparte. - \bye -\endlisting - -As simple as this may look on the first glance, this approach is entirely -inappropriate if more than a couple letters are required from a different font. -Because the combination pulls nothing except the glyph data, all of the -important other information that constitute a proper font -- kerning, styles, -features, and suchlike -- will be missing. - -\endsubsection %% Fallbacks - -\beginsubsection {Combinations} - -Generalizing the idea of a \emphasis{fallback font}, it is also possible to -pick definite sets of glyphs from multiple fonts. On a bad day, for instance, -it may be the sanest choice to start out with \identifier{EB Garamond} italics, -typeset all decimal digits in the bold italics of \identifier{GNU Freefont}, -and tone down the punctuation with extra thin glyphs from \identifier{Source -Sans}: - -\beginlisting - \def \feats {-tlig;-liga;mode=base;-kern} - \def \fileone {EBGaramond12-Italic.otf} - \def \filetwo {FreeMonoBoldOblique.otf} - \def \filethree {SourceSansPro-ExtraLight.otf} - - \input luaotfload.sty - - \font \one = file:\fileone :\feats - \font \two = file:\filetwo :\feats - \font \three = file:\filethree:\feats - - \font \onetwothree = "combo: 1 -> \fontid\one; - 2 -> \fontid\two, 0x30-0x39; - 3 -> \fontid\three, 0x21*0x3f; " - - {\onetwothree \TeX—0123456789—?!} - \bye -\endlisting - -\noindent Despite the atrocious result, the example demonstrates well the -syntax that is used to specify ranges and fonts. Fonts are being referred to by -their internal index which can be obtained by passing the font command into the -\texmacro{fontid} macro, e. g. \inlinecode{\fontid\one}, after a font has been -defined. The first component of the combination is the base font which will be -extended by the others. It is specified by the index alone. - -All further fonts require either the literal \inlinecode{fallback} or a list of -codepoint definitions to be appended after a comma. The elements of this list -again denote either single codepoints like \inlinecode{0x21} (referring to the -exclamation point character) or ranges of codepoints (\inlinecode{0x30-0x39}). -Elements are separated by the \identifier{ASCII} asterisk character -(\inlinecode{*}). The characters referenced in the list will be imported from -the respective font, if available. - -\endsubsection %% Combinations - -\endsection - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\beginsection {Font names database} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\label{sec:fontdb} - -As mentioned above, \identifier{luaotfload} keeps track of which -fonts are available to \LUATEX by means of a \emphasis{database}. -% -This allows referring to fonts not only by explicit filenames but -also by the proper names contained in the metadata which is often -more accessible to humans.\footnote{% - The tool \hyperlink[\fileent{otfinfo}]{http://www.lcdf.org/type/} - (comes with \TEX Live), when invoked on a font file with the - \inlinecode {-i} option, lists the variety of name fields defined for - it. -} - -When \identifier{luaotfload} is asked to load a font by a font name, -it will check if the database exists and load it, or else generate a -fresh one. -% -Should it then fail to locate the font, an update to the database is -performed in case the font has been added to the system only -recently. -% -As soon as the database is updated, the resolver will try -and look up the font again, all without user intervention. -% -The goal is for \identifier{luaotfload} to act in the background and -behave as unobtrusively as possible, while providing a convenient -interface to the fonts installed on the system. - -Generating the database for the first time may take a while since it -inspects every font file on your computer. -% -This is particularly noticeable if it occurs during a typesetting run. -In any case, subsequent updates to the database will be quite fast. - -\beginsubsection[luaotfload-tool] - {\fileent{luaotfload-tool}} - -It can still be desirable at times to do some of these steps -manually, and without having to compile a document. -% -To this end, \identifier{luaotfload} comes with the utility -\fileent{luaotfload-tool} that offers an interface to the database -functionality. -% -Being a \LUA script, there are two ways to run it: -either make it executable (\inlinecode {chmod +x} on unixoid systems) or -pass it as an argument to \fileent{texlua}.\footnote{% - Tests by the maintainer show only marginal performance gain by - running with Luigi Scarso’s - \hyperlink [\identifier{Luajit\kern-.25ex\TEX}]{https://foundry.supelec.fr/projects/luajittex/}, - which is probably due to the fact that most of the time is spent - on file system operations. - - \emphasis{Note}: - On \abbrev{MS} \identifier{Windows} systems, the script can be run - either by calling the wrapper application - \fileent{luaotfload-tool.exe} or as - \inlinecode {texlua.exe luaotfload-tool.lua}. -} -% -Invoked with the argument \inlinecode {--update} it will perform a database -update, scanning for fonts not indexed. - -\beginlisting - luaotfload-tool --update -\endlisting - -Adding the \inlinecode {--force} switch will initiate a complete -rebuild of the database. - -\beginlisting - luaotfload-tool --update --force -\endlisting - -\endsubsection - -\beginsubsection{Search Paths} - -\identifier{luaotfload} scans those directories where fonts are -expected to be located on a given system. -% -On a Linux machine it follows the paths listed in the -\identifier{Fontconfig} configuration files; -consult \inlinecode {man 5 fonts.conf} for further information. -% -On \identifier{Windows} systems, the standard location is -\inlinecode {Windows\\Fonts}, -% -while \identifier{Mac OS~X} requires a multitude of paths to -be examined. -% -The complete list is is given in table \ref{table-searchpaths}. -Other paths can be specified by setting the environment variable -\inlinecode {OSFONTDIR}. -% -If it is non-empty, then search will be extended to the included -directories. - -\tablefloat {table-searchpaths} - {List of paths searched for each supported operating system.} - {% - \unless \iffalse - \begincentered - \begintabulate [lp{.5\textwidth}] - \beginrow - Windows \newcell \inlinecode !\% WINDIR\%\\ Fonts! - \endrow - \beginrow - Linux \newcell \fileent{/usr/local/etc/fonts/fonts.conf} and\hfill\break - \fileent{/etc/fonts/fonts.conf} - \endrow - \beginrow - Mac \newcell \fileent{\textasciitilde/Library/Fonts},\break - \fileent{/Library/Fonts},\break - \fileent{/System/Library/Fonts}, and\hfill\break - \fileent{/Network/Library/Fonts} - \endrow - \endtabulate - \endcentered - \else - \setuplocalinterlinespace [14pt] - \starttabulate [|l|p(.5\textwidth)|] - \NC Windows \NC \inlinecode {\% WINDIR\%\\ Fonts} \NC \NR - \NC Linux \NC \fileent{/usr/local/etc/fonts/fonts.conf} and\crlf - \fileent{/etc/fonts/fonts.conf} \NC \NR - \NC - Mac \NC \fileent{\textasciitilde/Library/Fonts},\crlf - \fileent{/Library/Fonts},\break - \fileent{/System/Library/Fonts}, and\crlf - \fileent{/Network/Library/Fonts} \NC \NR - \stoptabulate - \fi% - } - -\endsubsection - -\beginsubsection{Querying from Outside} - -\fileent{luaotfload-tool} also provides rudimentary means of -accessing the information collected in the font database. -% -If the option \inlinecode {--find=}\emphasis{name} is given, the script will -try and search the fonts indexed by \identifier{luaotfload} for a -matching name. -% -For instance, the invocation - -\beginlisting - luaotfload-tool --find="Iwona Regular" -\endlisting - -\noindent -will verify if “Iwona Regular” is found in the database and can be -readily requested in a document. - -If you are unsure about the actual font name, then add the -\inlinecode {-F} (or \inlinecode {--fuzzy}) switch to the command line to enable -approximate matching. -% -Suppose you cannot precisely remember if the variant of -\identifier{Iwona} you are looking for was “Bright” or “Light”. -The query - -\beginlisting - luaotfload-tool -F --find="Iwona Bright" -\endlisting - -\noindent -will tell you that indeed the latter name is correct. - -Basic information about fonts in the database can be displayed -using the \inlinecode {-i} option (\inlinecode {--info}). -% -\beginlisting - luaotfload-tool -i --find="Iwona Light Italic" -\endlisting -% -\noindent -The meaning of the printed values is described in section 4.4 of the -\LUATEX reference manual.\footnote{% - In \TEX Live: \fileent{texmf-dist/doc/luatex/base/luatexref-t.pdf}. -} - -For a much more detailed report about a given font try the -\inlinecode {-I} option instead (\inlinecode {--inspect}). -\beginlisting - luaotfload-tool -I --find="Iwona Light Italic" -\endlisting - -\inlinecode {luaotfload-tool --help} will list the available command line -switches, including some not discussed in detail here. -% -For a full documentation of \identifier{luaotfload-tool} and its -capabilities refer to the manpage -(\inlinecode {man 1 luaotfload-tool}).\footnote{% - Or see \inlinecode {luaotfload-tool.rst} in the source directory. -} - -\endsubsection - -\beginsubsection {Blacklisting Fonts} -\label{font-blacklist} - -Some fonts are problematic in general, or just in \LUATEX. -% -If you find that compiling your document takes far too long or eats -away all your system’s memory, you can track down the culprit by -running \inlinecode {luaotfload-tool -v} to increase verbosity. -% -Take a note of the \emphasis{filename} of the font that database -creation fails with and append it to the file -\fileent{luaotfload-blacklist.cnf}. - -A blacklist file is a list of font filenames, one per line. -Specifying the full path to where the file is located is optional, the -plain filename should suffice. -% -File extensions (\fileent{.otf}, \fileent{.ttf}, etc.) may be omitted. -% -Anything after a percent (\inlinecode {\%}) character until the end of the line -is ignored, so use this to add comments. -% -Place this file to some location where the \identifier{kpse} -library can find it, e.~g. -\fileent{texmf-local/tex/luatex/luaotfload} if you are running -\identifier{\TEX Live},\footnote{% - You may have to run \inlinecode {mktexlsr} if you created a new file in - your \fileent{texmf} tree. -} -or just leave it in the working directory of your document. -% -\identifier{luaotfload} reads all files named -\fileent{luaotfload-blacklist.cnf} it finds, so the fonts in -\fileent{./luaotfload-blacklist.cnf} extend the global blacklist. - -Furthermore, a filename prepended with a dash character (\inlinecode{-}) is -removed from the blacklist, causing it to be temporarily whitelisted -without modifying the global file. -% -An example with explicit paths: - -\beginlisting -% example otf-blacklist.cnf -/Library/Fonts/GillSans.ttc % Luaotfload ignores this font. --/Library/Fonts/Optima.ttc % This one is usable again, even if - % blacklisted somewhere else. -\endlisting - -\endsubsection -\endsection - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\beginsection {The Fontloader} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\beginsubsection {Overview} - -To a large extent, \identifier{luaotfload} relies on code originally -written by Hans Hagen for the -\hyperlink[\identifier{\CONTEXT}]{http://wiki.contextgarden.net} -format. -% -It integrates the font loader, written entirely in \LUA, as distributed -in the \identifier{\LUATEX-Fonts} package. -% -The original \LUA source files have been combined using the \CONTEXT -packaging library into a single, self-contained blob. In -this form the font loader depends only on the \identifier{lualibs} -package and requires only minor adaptions to integrate into -\identifier{luaotfload}. - -The guiding principle is to let \CONTEXT/\LUATEX-Fonts take care of the -implementation, and update the imported code as frequently as -necessary. -% -As maintainers, we aim at importing files from upstream essentially -\emphasis{unmodified}, except for renaming them to prevent name -clashes. -% -This job has been greatly alleviated since the advent of -\LUATEX-Fonts, prior to which the individual dependencies had to be -manually spotted and extracted from the \CONTEXT source code in a -complicated and error-prone fashion. - -\endsubsection - -\beginsubsection {Contents and Dependencies} - -Below is a commented list of the files distributed with -\identifier{luaotfload} in one way or the other. -% -See figure \ref{file-graph} on page \pageref{file-graph} for a -graphical representation of the dependencies. -% -\label{package}% -Through the script \fileent{mkimport} a \CONTEXT library -is invoked to create the \identifier{luaotfload} fontloader as a merged -(amalgamated) source file.\footnote{% - In \CONTEXT, this facility can be accessed by means of a - \hyperlink[script]{https://bitbucket.org/phg/context-mirror/src/beta/scripts/context/lua/mtx-package.lua?at=beta} - which is integrated into \fileent{mtxrun} as a subcommand. - Run \inlinecode {mtxrun --script package --help} to display further - information. - For the actual merging code see the file - \fileent{util-mrg.lua} that is part of \CONTEXT. -} -% -This file constitutes the “default fontloader” and is part of the -\identifier{luaotfload} package as \fileent{fontloader-YY-MM-DD.lua}, -where the uppercase letters are placeholders for the build date. -% -A companion to it, \fileent{luatex-basics-gen.lua} must be loaded -beforehand to set up parts of the environment required by the \CONTEXT -libraries. -% -During a \TEX\ run, the fontloader initialization and injection happens -in the module \fileent{luaotfload-init.lua}. -% -Additionally, the “reference fontloader” as imported from \LUATEX-Fonts -is provided as the file \fileent{fontloader-reference.lua}. -% -This file is self-contained in that it packages all the auxiliary \LUA -libraries too, as Luaotfload did up to the 2.5 series; since that job -has been offloaded to the \identifier{Lualibs} package, loading this -fontloader introduces a certain code duplication. - -A number of \emphasis{\LUA utility libraries} are not part of the -\identifier{luaotfload} fontloader, contrary to its equivalent in -\LUATEX-Fonts. These are already provided by the \identifier{lualibs} -and have thus been omitted from the merge.\footnote{% - Faithful listeners will remember the pre-2.6 era when the fontloader - used to be integrated as-is which caused all kinds of code - duplication with the pervasive \identifier{lualibs} package. - This conceptual glitch has since been amended by tightening the - coupling with the excellent \CONTEXT\ toolchain. -} - -\begindoublecolumns - \begindefinitions - \beginaltitem {l-lua.lua} \endaltitem - \beginaltitem {l-lpeg.lua} \endaltitem - \beginaltitem {l-function.lua} \endaltitem - \beginaltitem {l-string.lua} \endaltitem - \beginaltitem {l-table.lua} \endaltitem - \beginaltitem {l-io.lua} \endaltitem - \beginaltitem {l-file.lua} \endaltitem - \beginaltitem {l-boolean.lua} \endaltitem - \beginaltitem {l-math.lua} \endaltitem - \beginaltitem {util-str.lua} \endaltitem - \beginaltitem {util-fil.lua} \endaltitem - \enddefinitions -\enddoublecolumns - -The reference fontloader is home to several \LUA files that can be -grouped twofold as below: - -\begindefinitions - \beginnormalitem - The \emphasis{font loader} itself. - These files have been written for \LUATEX-Fonts and they are - distributed along with \identifier{luaotfload} so as to resemble - the state of the code when it was imported. Their purpose is either - to give a slightly aged version of a file if upstream considers - latest developments for not yet ready for use outside Context; or, - to install placeholders or minimalist versions of APIs relied upon - but usually provided by parts of Context not included in the - fontloader. - \begindoublecolumns - \begindefinitions - \beginaltitem{luatex-basics-nod.lua} \endaltitem - \beginaltitem{luatex-basics-chr.lua} \endaltitem - \beginaltitem{luatex-fonts-enc.lua} \endaltitem - \beginaltitem{luatex-fonts-syn.lua} \endaltitem - \beginaltitem{luatex-fonts-ext.lua} \endaltitem - \enddefinitions - \enddoublecolumns - \endnormalitem - - \beginnormalitem - Code related to \emphasis{font handling and node processing}, taken - directly from \CONTEXT. - \begindoublecolumns - \begindefinitions - \beginaltitem{data-con.lua} \endaltitem - \beginaltitem{font-ini.lua} \endaltitem - \beginaltitem{font-con.lua} \endaltitem - \beginaltitem{font-cid.lua} \endaltitem - \beginaltitem{font-map.lua} \endaltitem - \beginaltitem{font-tfm.lua} \endaltitem - \beginaltitem{font-one.lua} \endaltitem - \beginaltitem{font-afk.lua} \endaltitem - \beginaltitem{font-oti.lua} \endaltitem - \beginaltitem{font-otr.lua} \endaltitem - \beginaltitem{font-cff.lua} \endaltitem - \beginaltitem{font-ttf.lua} \endaltitem - \beginaltitem{font-dsp.lua} \endaltitem - \beginaltitem{font-oup.lua} \endaltitem - \beginaltitem{font-otl.lua} \endaltitem - \beginaltitem{font-oto.lua} \endaltitem - \beginaltitem{font-otj.lua} \endaltitem - \beginaltitem{font-ota.lua} \endaltitem - \beginaltitem{font-ots.lua} \endaltitem - \beginaltitem{font-osd.lua} \endaltitem - \beginaltitem{font-ocl.lua} \endaltitem - \beginaltitem{font-lua.lua} \endaltitem - \beginaltitem{font-def.lua} \endaltitem - \beginaltitem{font-xtx.lua} \endaltitem - \beginaltitem{font-gbn.lua} \endaltitem - \enddefinitions - \enddoublecolumns - \endnormalitem -\enddefinitions - -As an alternative to the merged file, \identifier {Luaotfload} may load -individual unpackaged \LUA libraries that come with the source, or even -use the files from Context directly. -% -Thus if you prefer running bleeding edge code from the \CONTEXT beta, -choose the \inlinecode {context} fontloader via the configuration file -(see sections \ref{sec:conf} and \ref{sec:pkg} below). - -Also, the merged file at some point loads the Adobe Glyph List from a -\LUA table that is contained in \fileent{luaotfload-glyphlist.lua}, -which is automatically generated by the script -\fileent{mkglyphlist}.\footnote{% - See \fileent{luaotfload-font-enc.lua}. - The hard-coded file name is why we have to replace the procedure - that loads the file in \fileent{luaotfload-init.lua}. -} -% -There is a make target \identifier{glyphs} that will create a fresh -glyph list so we don’t need to import it from \CONTEXT any longer. - -In addition to these, \identifier{luaotfload} requires a number of -files not contained in the merge. Some of these have no equivalent in -\LUATEX-Fonts or \CONTEXT, some were taken unmodified from the latter. - - -\beginfilelist - \beginaltitem {luaotfload-features.lua} - font feature handling; incorporates some of the code from - \fileent{font-otc} from \CONTEXT; - \endaltitem - \beginaltitem {luaotfload-configuration.lua} - handling of \fileent{luaotfload.conf(5)}. - \endaltitem - \beginaltitem {luaotfload-log.lua} - overrides the \CONTEXT logging functionality. - \endaltitem - \beginaltitem {luaotfload-loaders.lua} - registers readers in the fontloader for various kinds of - font formats - \endaltitem - \beginaltitem {luaotfload-parsers.lua} - various \abbrev{lpeg}-based parsers. - \endaltitem - \beginaltitem {luaotfload-database.lua} - font names database. - \endaltitem - \beginaltitem {luaotfload-resolvers.lua} - file name resolvers. - \endaltitem - \beginaltitem {luaotfload-colors.lua} - color handling. - \endaltitem - \beginaltitem {luaotfload-auxiliary.lua} - access to internal functionality for package authors (proposals - for additions welcome). - \endaltitem - \beginaltitem {luaotfload-letterspace.lua} - font-based letterspacing. - \endaltitem -\endfilelist - -\figurefloat - {file-graph} - {Schematic of the files in \identifier{Luaotfload}} - {filegraph.pdf} - -\endsubsection - -\beginsubsection {Packaging} - -\label{sec:pkg}% -The fontloader code is integrated as an isolated component that can be -switched out on demand. -% -To specify the fontloader you wish to use, the configuration file -(described in section \ref{sec:conf}) provides the option -\inlinecode{fontloader}. -% -Its value can be one of the identifiers \inlinecode{default} or -\inlinecode{reference} (see above, section \ref{package}) or the name -of a file somewhere in the search path of \LUATEX. -% -This will make \identifier {Luaotfload} locate the \CONTEXT source by -means of \identifier{kpathsea} lookups and use those instead of the -merged package. -% -The parameter may be extended with a path to the \CONTEXT -\fileent{texmf}, separated with a colon: - -\beginlisting -[run] - fontloader = context:~/context/tex/texmf-context -\endlisting - -\noindent This setting allows accessing an installation -- e. g. the -standalone distribution or a source repository -- outside the current -\TEX distribution. - -Like the \identifier{Lualibs} package, the fontloader is deployed as a -\emphasis{merged package} containing a series of \LUA files joined -together in their expected order and stripped of non-significant parts. -% -The \fileent{mkimport} utility assists in pulling the files from a -\CONTEXT tree and packaging them for use with \identifier{Luaotfload}.% -% -The state of the files currently in \identifier{Luaotfload}’s -repository can be queried: -\beginlisting -./scripts/mkimport news -\endlisting -% -The subcommand for importing takes the prefix of the desired \CONTEXT -\identifier{texmf} as an optional argument: -\beginlisting -./scripts/mkimport import ~/context/tex/texmf-context -\endlisting -% -Whereas the command for packaging requires a path to the -\emphasis{package description file} and the output name to be passed. -\beginlisting -./scripts/mkimport package fontloader-custom.lua -\endlisting - -From the toplevel makefile, the targets \inlinecode{import} and -\inlinecode{package} provide easy access to the commands as invoked during -the \identifier{Luaotfload} build process.\footnote{% - \emphasis{Hint for those interested in the packaging process}: issue - \inlinecode{make show} for a list of available build routines. -} -These will call \inlinecode{mkimport} script with the correct -parameters to generate a datestamped package. -% -Whether files have been updated in the upstream distribution can be -queried by \inlinecode{./scripts/mkimport news}. -% -This will compare the imported files with their counterparts in the -\CONTEXT distribution and report changes. - -\endsubsection - -\endsection - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\beginsection {Configuration Files} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\beginnarrower - \emphasis{Caution}: For the authoritative documentation, consult the - manpage for \fileent{luaotfload.conf(5)}. -\endnarrower - -\label{sec:conf} -The runtime behavior of \identifier{Luaotfload} can be customized by -means of a configuration file. -% location -At startup, it attempts to locate a file called \fileent -{luaotfload.conf} or \fileent {luaotfloadrc} at a number of candidate -locations: - -\begincentered - \begindefinitions - \beginnormalitem \fileent{./luaotfload.conf} \endnormalitem - \beginnormalitem \fileent{./luaotfloadrc} \endnormalitem - \beginnormalitem \fileent{\$XDG_CONFIG_HOME/luaotfload/luaotfload.conf} \endnormalitem - \beginnormalitem \fileent{\$XDG_CONFIG_HOME/luaotfload/luaotfload.rc} \endnormalitem - \beginnormalitem \fileent{~/.luaotfloadrc} \endnormalitem - \enddefinitions -\endcentered - -\beginnarrower - \emphasis{Caution}: The configuration potentially modifies the final - document. A project-local file belongs under version control along - with the rest of the document. This is to ensure that everybody who - builds the project also receives the same customizations as the - author. -\endnarrower - -% syntax -The syntax is fairly close to the format used by -\fileent{git-config(1)} which in turn was derived from the popular -\identifier{.INI} format: Lines of key-value pairs are grouped under -different configuration “sections”.\footnote{% - The configuration parser in \fileent {luoatfload-parsers.lua} might - be employed by other packages for similar purposes. -} -% example settings -An example for customization via \fileent {luaotfload.conf} might look -as below: - -\beginlisting -; Example luaotfload.conf containing a rudimentary configuration -[db] - update-live = false -[run] - color-callback = pre_linebreak_filter - definer = info_patch - log-level = 5 -[default-features] - global = mode=base -\endlisting - -This specifies that for the given project, \identifier{Luaotfload} -shall not attempt to automatically scan for fonts if it can’t resolve a -request. The font-based colorization will happen during \LUATEX’s -pre-linebreak filter. The fontloader will output verbose information -about the fonts at definition time along with globally increased -verbosity. Lastly, the fontloader defaults to the less expensive -\luaident{base} mode like it does in \CONTEXT. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\beginsection {Auxiliary Functions} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -With release version 2.2, \identifier{Luaotfload} received -additional functions for package authors to call from outside -(see the file \fileent{luaotfload-auxiliary.lua} for details). -% -The purpose of this addition twofold. -% -Firstly, \identifier{luaotfload} failed to provide a stable interface -to internals in the past which resulted in an unmanageable situation -of different packages abusing the raw access to font objects by means -of the \luaident{patch_font} callback. -% -When the structure of the font object changed due to an update, all -of these imploded and several packages had to be fixed while -simultaneously providing fallbacks for earlier versions. -% -Now the patching is done on the \identifier{luaotfload} side and can -be adapted with future modifications to font objects without touching -the packages that depend on it. -% -Second, some the capabilities of the font loader and the names -database are not immediately relevant in \identifier{luaotfload} -itself but might nevertheless be of great value to package authors or -end users. - -Note that the current interface is not yet set in stone and the -development team is open to suggestions for improvements or -additions. - -\beginsubsection {Callback Functions} - -The \luaident{patch_font} callback is inserted in the wrapper -\identifier{luaotfload} provides for the font definition callback. -% -At this place it allows manipulating the font object immediately after -the font loader is done creating it. -% -For a short demonstration of its usefulness, here is a snippet that -writes an entire font object to the file \fileent{fontdump.lua}: - -\beginlisting - \input luaotfload.sty - \directlua{ - local dumpfile = "fontdump.lua" - local dump_font = function (tfmdata) - local data = table.serialize(tfmdata) - io.savedata(dumpfile, data) - end - - luatexbase.add_to_callback( - "luaotfload.patch_font", - dump_font, - "my_private_callbacks.dump_font" - ) - } - \font \dumpme = name:Iwona - \bye -\endlisting - -\emphasis{Beware}: this creates a Lua file of around 150,000 lines of -code, taking up 3~\abbrev{mb} of disk space. -% -By inspecting the output you can get a first impression of how a font -is structured in \LUATEX’s memory, what elements it is composed of, -and in what ways it can be rearranged. - -\beginsubsubsection {Compatibility with Earlier Versions} - -As has been touched on in the preface to this section, the structure -of the object as returned by the fontloader underwent rather drastic -changes during different stages of its development, and not all -packages that made use of font patching have kept up with every one -of it. -% -To ensure compatibility with these as well as older versions of -some packages, \identifier{luaotfload} sets up copies of or references -to data in the font table where it used to be located. -% -For instance, important parameters like the requested point size, the -units factor, and the font name have again been made accessible from -the toplevel of the table even though they were migrated to different -subtables in the meantime. - -\endsubsubsection - -\beginsubsubsection{Patches} - -These are mostly concerned with establishing compatibility with \XETEX. - -\beginfunctionlist - - \beginaltitem {set_sscale_dimens} - Calculate \texmacro{fontdimen}s 10 and 11 to emulate \XETEX. - \endaltitem - - \beginaltitem {set_capheight} - Calculates \texmacro{fontdimen} 8 like \XETEX. - \endaltitem - - \beginaltitem {patch_cambria_domh} - Correct some values of the font \emphasis{Cambria Math}. - \endaltitem - -\endfunctionlist - -\endsubsection - -\beginsubsection {Package Author’s Interface} - -As \LUATEX release 1.0 is nearing, the demand for a reliable interface -for package authors increases. - -\endsubsubsection - -\beginsubsubsection{Font Properties} - -Below functions mostly concern querying the different components of a -font like for instance the glyphs it contains, or what font features -are defined for which scripts. - -\beginfunctionlist - - \beginaltitem {aux.font_has_glyph (id : int, index : int)} - Predicate that returns true if the font \luaident{id} - has glyph \luaident{index}. - \endaltitem - - \beginaltitem {aux.slot_of_name(name : string)} - Translates an Adobe Glyph name to the corresponding glyph - slot. - \endaltitem - - \beginaltitem {aux.name_of_slot(slot : int)} - The inverse of \luaident{slot_of_name}; note that this - might be incomplete as multiple glyph names may map to the - same codepoint, only one of which is returned by - \luaident{name_of_slot}. - \endaltitem - - \beginaltitem {aux.provides_script(id : int, script : string)} - Test if a font supports \luaident{script}. - \endaltitem - - \beginaltitem {aux.provides_language(id : int, script : string, language : string)} - Test if a font defines \luaident{language} for a given - \luaident{script}. - \endaltitem - - \beginaltitem {aux.provides_feature(id : int, script : string, - language : string, feature : string)} - Test if a font defines \luaident{feature} for - \luaident{language} for a given \luaident{script}. - \endaltitem - - \beginaltitem {aux.get_math_dimension(id : int, dimension : string)} - Get the dimension \luaident{dimension} of font \luaident{id}. - \endaltitem - - \beginaltitem {aux.sprint_math_dimension(id : int, dimension : string)} - Same as \luaident{get_math_dimension()}, but output the value - in scaled points at the \TEX end. - \endaltitem - -\endfunctionlist - -\endsubsubsection - -\beginsubsubsection{Database} - -%% not implemented, may come back later -\beginfunctionlist -% \beginaltitem {aux.scan_external_dir(dir : string)} -% Include fonts in directory \luaident{dir} in font lookups without -% adding them to the database. -% - \beginaltitem {aux.read_font_index (void)} - Read the index file from the appropriate location (usually - the bytecode file \fileent{luaotfload-names.luc} somewhere - in the \fileent{texmf-var} tree) and return the result as a - table. The file is processed with each call so it is up to - the user to store the result for later access. - \endaltitem - - \beginaltitem {aux.font_index (void)} - Return a reference of the font names table used internally - by \identifier{luaotfload}. The index will be read if it - has not been loaded up to this point. Also a font scan that - overwrites the current index file might be triggered. Since - the return value points to the actual index, any - modifications to the table might influence runtime behavior - of \identifier{luaotfload}. - \endaltitem - -\endfunctionlist - -\endsubsubsection - -\endsubsection -\endsection - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\beginsection {Troubleshooting} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\beginsubsection {Database Generation} - -If you encounter problems with some fonts, please first update to the -latest version of this package before reporting a bug, as -\identifier{luaotfload} is under active development and still a moving -target. -% -The development takes place on \identifier{github} at -\hyperlink {https://github.com/lualatex/luaotfload} where there is an issue -tracker for submitting bug reports, feature requests and the likes. - -Bug reports are more likely to be addressed if they contain the output -of - -\beginlisting - luaotfload-tool --diagnose=environment,files,permissions -\endlisting - -\noindent Consult the man page for a description of these options. - -Errors during database generation can be traced by increasing the -verbosity level and redirecting log output to \fileent{stdout}: - -\beginlisting - luaotfload-tool -fuvvv --log=stdout -\endlisting - -\noindent or to a file in \fileent{/tmp}: - -\beginlisting - luaotfload-tool -fuvvv --log=file -\endlisting - -\noindent In the latter case, invoke the \inlinecode {tail(1)} utility on the -file for live monitoring of the progress. - -If database generation fails, the font last printed to the terminal or -log file is likely to be the culprit. -% -Please specify it when reporting a bug, and blacklist it for the time -being (see above, page \pageref{font-blacklist}). - -\endsubsection - -\beginsubsection {Font Features} - -A common problem is the lack of features for some -\OpenType fonts even when specified. -% -This can be related to the fact that some fonts do not provide features -for the \inlinecode {dflt} script (see above on page \pageref{script-tag}), -which is the default one in this package. -% -If this happens, assigning a noth script when the font is defined should -fix it. -% -For example with \inlinecode {latn}: - -\beginlisting - \font \test = file:MyFont.otf:script=latn;+liga; -\endlisting - -You can get a list of features that a font defines for scripts and -languages by querying it in \fileent{luaotfload-tool}: - -\beginlisting - luaotfload-tool --find="Iwona" --inspect -\endlisting - -\endsubsection - -\beginsubsection {\LUATEX Programming} - -Another strategy that helps avoiding problems is to not access raw -\LUATEX internals directly. -% -Some of them, even though they are dangerous to access, have not been -overridden or disabled. -% -Thus, whenever possible prefer the functions in the \luaident{aux} -namespace over direct manipulation of font objects. For example, raw -access to the \luaident{font.fonts} table like: - -\beginlisting - local somefont = font.fonts[2] -\endlisting - -\noindent can render already defined fonts unusable. -% -Instead, the function \luaident{font.getfont()} should be used -because it has been replaced by a safe variant. - -However, \luaident{font.getfont()} only covers fonts handled by the -font loader, e.~g. \identifier{OpenType} and \identifier{TrueType} -fonts, but not \abbrev{tfm} or \abbrev{ofm}. -% -Should you absolutely require access to all fonts known to \LUATEX, -including the virtual and autogenerated ones, then you need to query -both \luaident{font.getfont()} and \luaident{font.fonts}. -% -In this case, best define you own accessor: - -\beginlisting - local unsafe_getfont = function (id) - local tfmdata = font.getfont (id) - if not tfmdata then - tfmdata = font.fonts[id] - end - return tfmdata - end - - --- use like getfont() - local somefont = unsafe_getfont (2) -\endlisting - -\endsubsection -\endsection - -\beginsection {License} - -\identifier {luaotfload} is licensed under the terms of the -\hyperlink [GNU General Public License version 2.0]% - {https://www.gnu.org/licenses/old-licenses/gpl-2.0.html}. -Following the underlying fontloader code \identifier {luaotfload} -recognizes only that exact version as its license. -The „any later version” clause of the original license text as -copyrighted by the \hyperlink [Free Software Foundation]{http://www.fsf.org/} -\emphasis {does not apply} to either \identifier {luaotfload} or the -code imported from \CONTEXT. - -The complete text of the license is given as a separate file \fileent -{COPYING} in the toplevel directory of the -\hyperlink [\fileent {Luaotfload} Git repository]{https://github.com/lualatex/luaotfload/blob/master/COPYING}. -Distributions probably package it as \fileent -{doc/luatex/luaotfload/COPYING} in the relevant \fileent {texmf} tree. - -\endsection - -\endinput - -% vim:ft=tex:tw=79:et:sw=2 diff --git a/Master/texmf-dist/source/luatex/luaotfload/luaotfload-tool.rst b/Master/texmf-dist/source/luatex/luaotfload/luaotfload-tool.rst deleted file mode 100644 index 1eeba11aaed..00000000000 --- a/Master/texmf-dist/source/luatex/luaotfload/luaotfload-tool.rst +++ /dev/null @@ -1,327 +0,0 @@ -======================================================================= - luaotfload-tool -======================================================================= - ------------------------------------------------------------------------ - generate and query the Luaotfload font names database ------------------------------------------------------------------------ - -:Date: 2017-01-28 -:Copyright: GPL v2.0 -:Version: 2.8 -:Manual section: 1 -:Manual group: text processing - -SYNOPSIS -======================================================================= - -**luaotfload-tool** [ -bcDfFiIlLnpqRSuvVhw ] - -**luaotfload-tool** --update [ --force ] [ --quiet ] [ --verbose ] - [ --prefer-texmf ] [ --dry-run ] - [ --formats=[+|-]EXTENSIONS ] - [ --no-compress ] [ --no-strip ] - [ --local ] [ --max-fonts=N ] - -**luaotfload-tool** --find=FONTNAME [ --fuzzy ] [ --info ] [ --inspect ] - [ --no-reload ] - -**luaotfload-tool** --flush-lookups - -**luaotfload-tool** --cache=DIRECTIVE - -**luaotfload-tool** --list=CRITERION[:VALUE] [ --fields=F1,F2,...,Fn ] - -**luaotfload-tool** --bisect=DIRECTIVE - -**luaotfload-tool** --help - -**luaotfload-tool** --version - -**luaotfload-tool** --show-blacklist - -**luaotfload-tool** --diagnose=CHECK - -**luaotfload-tool** --conf=FILE --dumpconf - -DESCRIPTION -======================================================================= - -luaotfload-tool accesses the font names database that is required by -the *Luaotfload* package. There are two general modes: **update** and -**query**. - -+ **update**: update the database or rebuild it entirely; -+ **query**: resolve a font name or display close matches. - -OPTIONS -======================================================================= - -update mode ------------------------------------------------------------------------ ---update, -u Update the database; indexes new fonts. ---force, -f Force rebuilding of the database; re-indexes - all fonts. ---local, -L Include font files in ``$PWD``. This option - will cause large parts of the database to be - rebuilt. Thus it is quite inefficient. - Additionally, if local font files are found, - the database is prevented from being saved - to disk, so the local fonts need to be parsed - with every invocation of ``luaotfload-tool``. ---no-reload, -n Suppress auto-updates to the database (e.g. - when ``--find`` is passed an unknown name). ---no-compress, -c Do not filter the plain text version of the - font index through gzip. Useful for debugging - if your editor is built without zlib. - ---prefer-texmf, -p Organize the file name database in a way so - that it prefer fonts in the *TEXMF* tree over - system fonts if they are installed in both. ---formats=EXTENSIONS Extensions of the font files to index. - Where *EXTENSIONS* is a comma-separated list of - supported file extensions (otf, ttf, ttc). - If the list is prefixed - with a ``+`` sign, the given list is added to - the currently active one; ``-`` subtracts. - Default: *otf,ttf,ttc*. - Examples: - - 1) ``--formats=-ttc,ttf`` would skip - TrueType fonts and font collections; - 2) ``--formats=otf`` would scan only OpenType - files; - 3) ``--formats=+afm`` includes binary - Postscript files accompanied by an AFM file. - -query mode ------------------------------------------------------------------------ ---find=NAME Resolve a font name; this looks up <name> in - the database and prints the file name it is - mapped to. - ``--find`` also understands request syntax, - i.e. ``--find=file:foo.otf`` checks whether - ``foo.otf`` is indexed. ---fuzzy, -F Show approximate matches to the file name if - the lookup was unsuccessful (requires - ``--find``). - ---info, -i Display basic information to a resolved font - file (requires ``--find``). ---inspect, -I Display detailed information by loading the - font and analyzing the font table; very slow! - For the meaning of the returned fields see - the LuaTeX documentation. - (requires ``--find``). - ---list=CRITERION Show entries, where *CRITERION* is one of the - following: - - 1) the character ``*``, selecting all entries; - 2) a field of a database entry, for instance - *version* or *format**, according to which - the output will be sorted. - Information in an unstripped database (see - the option ``--no-strip`` above) is nested: - Subfields of a record can be addressed using - the ``->`` separator, e. g. - ``file->location``, ``style->units_per_em``, - or - ``names->sanitized->english->prefmodifiers``. - NB: shell syntax requires that arguments - containing ``->`` be properly quoted! - 3) an expression of the form ``field:value`` to - limit the output to entries whose ``field`` - matches ``value``. - - For example, in order to output file names and - corresponding versions, sorted by the font - format:: - - ./luaotfload-tool.lua --list="format" --fields="file->base,version" - - This prints:: - - otf latinmodern-math.otf Version 1.958 - otf lmromancaps10-oblique.otf 2.004 - otf lmmono8-regular.otf 2.004 - otf lmmonoproplt10-bold.otf 2.004 - otf lmsans10-oblique.otf 2.004 - otf lmromanslant8-regular.otf 2.004 - otf lmroman12-italic.otf 2.004 - otf lmsansdemicond10-oblique.otf 2.004 - ... - ---fields=FIELDS Comma-separated list of fields that should be - printed. - Information in an unstripped database (see the - option ``--no-strip`` above) is nested: - Subfields of a record can be addressed using - the ``->`` separator, e. g. - ``file->location``, ``style->units_per_em``, - or ``names->sanitized->english->subfamily``. - The default is plainname,version*. - (Only meaningful with ``--list``.) - -font and lookup caches ------------------------------------------------------------------------ ---flush-lookups Clear font name lookup cache (experimental). - ---cache=DIRECTIVE Cache control, where *DIRECTIVE* is one of the - following: - - 1) ``purge`` -> delete Lua files from cache; - 2) ``erase`` -> delete Lua and Luc files from - cache; - 3) ``show`` -> print stats. - -debugging methods ------------------------------------------------------------------------ ---show-blacklist, -b Show blacklisted files (not directories). ---dry-run, -D Don’t load fonts when updating the database; - scan directories only. - (For debugging file system related issues.) ---no-strip Do not strip redundant information after - building the database. Warning: this will - inflate the index to about two to three times - the normal size. ---max-fonts=N Process at most *N* font files, including fonts - already indexed in the count. ---bisect=DIRECTIVE Bisection of the font database. - This mode is intended as assistance in - debugging the Luatex engine, especially when - tracking memleaks or buggy fonts. - - *DIRECTIVE* can be one of the following: - - 1) ``run`` -> Make ``luaotfload-tool`` respect - the bisection progress when running. - Combined with ``--update`` and possibly - ``--force`` this will only process the files - from the start up until the pivot and ignore - the rest. - 2) ``start`` -> Start bisection: create a - bisection state file and initialize the low, - high, and pivot indices. - 3) ``stop`` -> Terminate the current bisection - session by deleting the state file. - 4) ``good`` | ``bad`` -> Mark the section - processed last as “good” or “bad”, - respectively. The next bisection step will - continue with the bad section. - 5) ``status`` -> Print status information about - the current bisection session. Hint: Use - with higher verbosity settings for more - output. - - A bisection session is initiated by issuing the - ``start`` directive. This sets the pivot to the - middle of the list of available font files. - Now run *luaotfload-tool* with the ``--update`` - flag set as well as ``--bisect=run``: only the - fonts up to the pivot will be considered. If - that task exhibited the issue you are tracking, - then tell Luaotfload using ``--bisect=bad``. - The next step of ``--bisect=run`` will continue - bisection with the part of the files below the - pivot. - Likewise, issue ``--bisect=good`` in order to - continue with the fonts above the pivot, - assuming the tested part of the list did not - trigger the bug. - - Once the culprit font is tracked down, ``good`` - or ``bad`` will have no effect anymore. ``run`` - will always end up processing the single font - file that was left. - Use ``--bisect=stop`` to clear the bisection - state. - -miscellaneous ------------------------------------------------------------------------ ---verbose=N, -v Set verbosity level to *n* or the number of - repetitions of ``-v``. ---quiet No verbose output (log level set to zero). ---log=CHANNEL Redirect log output (for database - troubleshooting), where *CHANNEL* can be - - 1) ``stdout`` -> all output will be - dumped to the terminal (default); or - 2) ``file`` -> write to a file to the temporary - directory (the name will be chosen - automatically. - ---version, -V Show version numbers of components as well as - some basic information and exit. ---help, -h Show help message and exit. - ---diagnose=CHECK Run the diagnostic procedure *CHECK*. Available - procedures are: - - 1) ``files`` -> check *Luaotfload* files for - modifications; - 2) ``permissions`` -> check permissions of - cache directories and files; - 3) ``environment`` -> print relevant - environment and kpse variables; - 4) ``repository`` -> check the git repository - for new releases, - 5) ``index`` -> check database, display - information about it. - - Procedures can be chained by concatenating with - commas, e.g. ``--diagnose=files,permissions``. - Specify ``thorough`` to run all checks. - ---conf=FILE Read the configuration from *FILE*. See - **luaotfload.conf**\(%) for documentation - concerning the format and available options. ---dumpconf Print the currently active configuration; the - output can be saved to a file and used for - bootstrapping a custom configuration files. - -FILES -======================================================================= - -The font name database is usually located in the directory -``texmf-var/luatex-cache/generic/names/`` (``$TEXMFCACHE`` as set in -``texmf.cnf``) of your *TeX Live* distribution as a zlib-compressed -file ``luaotfload-names.lua.gz``. -The experimental lookup cache will be created as -``luaotfload-lookup-cache.lua`` in the same directory. -These Lua tables are not used directly by Luaotfload, though. -Instead, they are compiled to Lua bytecode which is written to -corresponding files with the extension ``.luc`` in the same directory. -When modifying the files by hand keep in mind that only if the bytecode -files are missing will Luaotfload use the plain version instead. -Both kinds of files are safe to delete, at the cost of regenerating -them with the next run of *LuaTeX*. - -SEE ALSO -======================================================================= - -**luaotfload.conf**\(5), **luatex**\(1), **lua**\(1) - -* ``texdoc luaotfload`` to display the manual for the *Luaotfload* - package -* Luaotfload development `<https://github.com/lualatex/luaotfload>`_ -* LuaLaTeX mailing list `<http://tug.org/pipermail/lualatex-dev/>`_ -* LuaTeX `<http://luatex.org/>`_ -* ConTeXt `<http://wiki.contextgarden.net>`_ -* Luaotfload on CTAN `<http://ctan.org/pkg/luaotfload>`_ - -BUGS -======================================================================= - -Tons, probably. - -AUTHORS -======================================================================= - -*Luaotfload* is maintained by the LuaLaTeX dev team -(`<https://github.com/lualatex/>`__). -The fontloader code is provided by Hans Hagen of Pragma ADE, Hasselt -NL (`<http://pragma-ade.com/>`__). - -This manual page was written by Philipp Gesang <phg@phi-gamma.net>. - diff --git a/Master/texmf-dist/source/luatex/luaotfload/luaotfload.conf.rst b/Master/texmf-dist/source/luatex/luaotfload/luaotfload.conf.rst deleted file mode 100644 index 63472cff23b..00000000000 --- a/Master/texmf-dist/source/luatex/luaotfload/luaotfload.conf.rst +++ /dev/null @@ -1,408 +0,0 @@ -======================================================================= - luaotfload.conf -======================================================================= - ------------------------------------------------------------------------ - Luaotfload configuration file ------------------------------------------------------------------------ - -:Date: 2017-01-29 -:Copyright: GPL v2.0 -:Version: 2.8 -:Manual section: 5 -:Manual group: text processing - -SYNOPSIS -======================================================================= - -- **./luaotfload{.conf,rc}** -- **XDG_CONFIG_HOME/luaotfload/luaotfload{.conf,rc}** -- **~/.luaotfloadrc** - -DESCRIPTION -======================================================================= - -The file ``luaotfload.conf`` contains configuration options for -*Luaotfload*, a font loading and font management component for LuaTeX. - - -EXAMPLE -======================================================================= - -A small Luaotfload configuration file with few customizations could -look as follows: :: - - [db] - formats = afm,ttf - compress = false - - [misc] - termwidth = 60 - - [run] - log-level = 6 - -This will make Luaotfload ignore all font files except for PostScript -binary fonts with a matching AFM file, and Truetype fonts. Also, an -uncompressed index file will be dumped which is going to be much larger -than the default gzip’ed index. The terminal width -is truncated to 60 characters which influences the verbose output -during indexing. Finally, the verbosity is increased greatly: each font -file being processed will be printed to the stdout on a separate line, -along with lots of other information. - -To observe the difference in behavior, save above snippet to -``./luaotfload.conf`` and update the font index: :: - - luaotfload-tool --update --force - -The current configuration can be written to disk using -**luaotfload-tool**: :: - - luaotfload-tool --dumpconf > luaotfload.conf - -The result can itself be used as a configuration file. - - -SYNTAX -======================================================================= - -The configuration file syntax follows the common INI format. For a more -detailed description please refer to the section “CONFIGURATION FILE” -of **git-config**\(1). A brief list of rules is given below: - - * Blank lines and lines starting with a semicolon (``;``) are ignored. - - * A configuration file is partitioned into sections that are declared - by specifying the section title in brackets on a separate line: :: - - [some-section] - ... section content ... - - * Sections consist of one or more variable assignments of the form - ``variable-name = value`` E. g.:: - - [foo] - bar = baz - quux = xyzzy - ... - - * Section and variable names may contain only uppercase and lowercase - letters as well as dashes (``-``). - - -VARIABLES -======================================================================= - -Variables in belong into a configuration section and their values must -be of a certain type. Some of them have further constraints. For -example, the “color callback” must be a string of one of the values -``post_linebreak_filter``, ``pre_linebreak_filter``, or -``pre_output_filter``, defined in the section *run* of the -configuration file. - -Currently, the configuration is organized into four sections: - -db - Options relating to the font index. - -misc - Options without a clearly defined category. - -paths - Path and file name settings. - -run - Options controlling runtime behavior of Luaotfload. - -The list of valid variables, the sections they are part of and their -type is given below. Types represent Lua types that the values must be -convertible to; they are abbreviated as follows: ``s`` for the *string* -type, ``n`` for *number*, ``b`` for *boolean*. A value of ``nil`` means -the variable is unset. - - -Section ``db`` ------------------------------------------------------------------------ - -+--------------------+--------+---------------------------+ -| variable | type | default | -+--------------------+--------+---------------------------+ -| compress | b | ``true`` | -+--------------------+--------+---------------------------+ -| designsize-dimen | b | ``bp`` | -+--------------------+--------+---------------------------+ -| formats | s | ``"otf,ttf,ttc"`` | -+--------------------+--------+---------------------------+ -| max-fonts | n | ``2^51`` | -+--------------------+--------+---------------------------+ -| scan-local | b | ``false`` | -+--------------------+--------+---------------------------+ -| skip-read | b | ``false`` | -+--------------------+--------+---------------------------+ -| strip | b | ``true`` | -+--------------------+--------+---------------------------+ -| update-live | b | ``true`` | -+--------------------+--------+---------------------------+ - -The flag ``compress`` determines whether the font index (usually -``luaotfload-names.lua[.gz]`` will be stored in compressed forms. -If unset it is equivalent of passing ``--no-compress`` to -**luaotfload-tool**. Since the file is only created for convenience -and has no effect on the runtime behavior of Luaotfload, the flag -should remain set. Most editors come with zlib support anyways. - -The setting ``designsize-dimen`` applies when looking up fonts from -families with design sizes. In Opentype, these are specified as -“decipoints” where one decipoint equals ten DTP style “big points”. -When indexing fonts these values are converted to ``sp``. In order to -treat the values as though they were specified in TeX points or Didot -points, set ``designsize-dimen`` to ``pt`` or ``dd``. - -The list of ``formats`` must be a comma separated sequence of strings -containing one or more of these elements: - -* ``otf`` (OpenType format), -* ``ttf`` and ``ttc`` (TrueType format), -* ``afm`` (Adobe Font Metrics), - -It corresponds loosely to the ``--formats`` option to -**luaotfload-tool**. Invalid or duplicate members are ignored; if the -list does not contain any useful identifiers, the default list -``"otf,ttf,ttc"`` will be used. - -The variable ``max-fonts`` determines after processing how many font -files the font scanner will terminate the search. This is useful for -debugging issues with the font index and has the same effect as the -option ``--max-fonts`` to **luaotfload-tools**. - -The ``scan-local`` flag, if set, will incorporate the current working -directory as a font search location. NB: This will potentially slow -down document processing because a font index with local fonts will not -be saved to disk, so these fonts will have to be re-indexed whenever -the document is built. - -The ``skip-read`` flag is only useful for debugging: It makes -Luaotfload skip reading fonts. The font information for rebuilding the -index is taken from the presently existing one. - -Unsetting the ``strip`` flag prevents Luaotfload from removing data -from the index that is only useful when processing font files. NB: this -can increase the size of the index files significantly and has no -effect on the runtime behavior. - -If ``update-live`` is set, Luaotfload will reload the database if it -cannot find a requested font. Those who prefer to update manually using -**luaotfload-tool** should unset this flag. This option does not affect -rebuilds due to version mismatch. - -Section ``default-features`` ------------------------------------------------------------------------ - -By default Luaotfload enables ``node`` mode and picks the default font -features that are prescribed in the OpenType standard. This behavior -may be overridden in the ``default-features`` section. Global defaults -that will be applied for all scripts can be set via the ``global`` -option, others by the script they are to be applied to. For example, -a setting of :: - - [default-features] - global = mode=base,color=0000FF - dflt = smcp,onum - -would force *base* mode, tint all fonts blue and activate small -capitals and text figures globally. Features are specified as a comma -separated list of variables or variable-value pairs. Variables without -an explicit value are set to ``true``. - - -Section ``misc`` ------------------------------------------------------------------------ - -+---------------+--------+-------------------------+ -| variable | type | default | -+---------------+--------+-------------------------+ -| statistics | b | ``false`` | -+---------------+--------+-------------------------+ -| termwidth | n | ``nil`` | -+---------------+--------+-------------------------+ -| version | s | <Luaotfload version> | -+---------------+--------+-------------------------+ - -With ``statistics`` enabled, extra statistics will be collected during -index creation and appended to the index file. It may then be queried -at the Lua end or inspected by reading the file itself. - -The value of ``termwidth``, if set, overrides the value retrieved by -querying the properties of the terminal in which Luatex runs. This is -useful if the engine runs with ``shell_escape`` disabled and the actual -terminal dimensions cannot be retrieved. - -The value of ``version`` is derived from the version string hard-coded -in the Luaotfload source. Override at your own risk. - - -Section ``paths`` ------------------------------------------------------------------------ - -+------------------+--------+------------------------------------+ -| variable | type | default | -+------------------+--------+------------------------------------+ -| cache-dir | s | ``"fonts"`` | -+------------------+--------+------------------------------------+ -| names-dir | s | ``"names"`` | -+------------------+--------+------------------------------------+ -| index-file | s | ``"luaotfload-names.lua"`` | -+------------------+--------+------------------------------------+ -| lookups-file | s | ``"luaotfload-lookup-cache.lua"`` | -+------------------+--------+------------------------------------+ - -The paths ``cache-dir`` and ``names-dir`` determine the subdirectory -inside the Luaotfload subtree of the ``luatex-cache`` directory where -the font cache and the font index will be stored, respectively. - -Inside the index directory, the names of the index file and the font -lookup cache will be derived from the respective values of -``index-file`` and ``lookups-file``. This is the filename base for the -bytecode compiled version as well as -- for the index -- the gzipped -version. - - -Section ``run`` ------------------------------------------------------------------------ - -+------------------+--------+------------------------------+ -| variable | type | default | -+------------------+--------+------------------------------+ -| anon-sequence | s | ``"tex,path,name"`` | -+------------------+--------+------------------------------+ -| color-callback | s | ``"post_linebreak_filter"`` | -+------------------+--------+------------------------------+ -| definer | s | ``"patch"`` | -+------------------+--------+------------------------------+ -| log-level | n | ``0`` | -+------------------+--------+------------------------------+ -| resolver | s | ``"cached"`` | -+------------------+--------+------------------------------+ -| fontloader | s | ``"default"`` | -+------------------+--------+------------------------------+ - -Unqualified font lookups are treated with the flexible “anonymous” -mechanism. This involves a chain of lookups applied successively until -the first one yields a match. By default, the lookup will first search -for TFM fonts using the Kpathsea library. If this wasn’t successful, an -attempt is made at interpreting the request as an absolute path (like -the ``[/path/to/font/foo.ttf]`` syntax) or a file name -(``file:foo.ttf``). Finally, the request is interpreted as a font name -and retrieved from the index (``name:Foo Regular``). This behavior can -be configured by specifying a list as the value to ``anon-sequence``. -Available items are ``tex``, ``path``, ``name`` -- representing the -lookups described above, respectively --, and ``file`` for searching a -filename but not an absolute path. Also, ``my`` lookups are valid -values but they should only be used from within TeX documents, because -there is no means of customizing a ``my`` lookups on the command line. - -The ``color-callback`` option determines the stage at which fonts that -defined with a ``color=xxyyzz`` feature will be colorized. By default -this happens in a ``post_linebreak_filter`` but alternatively the -``pre_linebreak_filter`` or ``pre_output_filter`` may be chosen, which -is faster but might produce inconsistent output. The -``pre_output_filter`` used to be the default in the 1.x series of -Luaotfload, whilst later versions up to and including 2.5 hooked into -the ``pre_linebreak_filter`` which naturally didn’t affect any glyphs -inserting during hyphenation. Both are kept around as options to -restore the previous behavior if necessary. - -The ``definer`` allows for switching the ``define_font`` callback. -Apart from the default ``patch`` one may also choose the ``generic`` -one that comes with the vanilla fontloader. Beware that this might -break tools like Fontspec that rely on the ``patch_font`` callback -provided by Luaotfload to perform important corrections on font data. - -The fontloader backend can be selected by setting the value of -``fontloader``. The most important choices are ``default``, which will -load the dedicated Luaotfload fontloader, and ``reference``, the -upstream package as shipped with Luaotfload. Other than those, a file -name accessible via kpathsea can be specified. - -Alternatively, the individual files that constitute the fontloader can -be loaded directly. While less efficient, this greatly aids debugging -since error messages will reference the actual line numbers of the -source files and explanatory comments are not stripped. Currently, -three distinct loading strategies are available: ``unpackaged`` will -load the batch that is part of Luaotfload. These contain the identical -source code that the reference fontloader has been compiled from. -Another option, ``context`` will attempt to load the same files by -their names in the Context format from the search path. Consequently -this option allows to use the version of Context that comes with the -TeX distribution. Distros tend to prefer the stable version (“current” -in Context jargon) of those files so certain bugs encountered in the -more bleeding edge Luaotfload can be avoided this way. A third option -is to use ``context`` with a colon to specify a directory prefix where -the *TEXMF* is located that the files should be loaded from, e. g. -``context:~/context/tex/texmf-context``. This can be used when -referencing another distribution like the Context minimals that is -installed under a different path not indexed by kpathsea. - -The value of ``log-level`` sets the default verbosity of messages -printed by Luaotfload. Only messages defined with a verbosity of less -than or equal to the supplied value will be output on the terminal. -At a log level of five Luaotfload can be very noisy. Also, printing too -many messages will slow down the interpreter due to line buffering -being disabled (see **setbuf**\(3)). - -The ``resolver`` setting allows choosing the font name resolution -function: With the default value ``cached`` Luaotfload saves the result -of a successful font name request to a cache file to speed up -subsequent lookups. The alternative, ``normal`` circumvents the cache -and resolves every request individually. (Since to the restructuring of -the font name index in Luaotfload 2.4 the performance difference -between the cached and uncached lookups should be marginal.) - - -FILES -======================================================================= - -Luaotfload only processes the first configuration file it encounters at -one of the search locations. The file name may be either -``luaotfload.conf`` or ``luaotfloadrc``, except for the dotfile in the -user’s home directory which is expected at ``~/.luaotfloadrc``. - -Configuration files are located following a series of steps. The search -terminates as soon as a suitable file is encountered. The sequence of -locations that Luaotfload looks at is - -i. The current working directory of the LuaTeX process. -ii. The subdirectory ``luaotfload/`` inside the XDG configuration - tree, e. g. ``/home/oenothea/config/luaotfload/``. -iii. The dotfile. -iv. The *TEXMF* (using kpathsea). - - -SEE ALSO -======================================================================= - -**luaotfload-tool**\(1), **luatex**\(1), **lua**\(1) - -* ``texdoc luaotfload`` to display the PDF manual for the *Luaotfload* - package -* Luaotfload development `<https://github.com/lualatex/luaotfload>`_ -* LuaLaTeX mailing list `<http://tug.org/pipermail/lualatex-dev/>`_ -* LuaTeX `<http://luatex.org/>`_ -* Luaotfload on CTAN `<http://ctan.org/pkg/luaotfload>`_ - - -REFERENCES -======================================================================= - -* The XDG base specification - `<http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html>`_. - -AUTHORS -======================================================================= - -*Luaotfload* is maintained by the LuaLaTeX dev team -(`<https://github.com/lualatex/>`_). - -This manual page was written by Philipp Gesang <phg@phi-gamma.net>. - |