summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/luatex/luaotfload
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2018-09-26 20:50:34 +0000
committerKarl Berry <karl@freefriends.org>2018-09-26 20:50:34 +0000
commit78334b0d4607b242273f9d0cde94f6a6fba51832 (patch)
tree5b604ee30bb611eeeae95ed4218b4e7fd6eb00b8 /Master/texmf-dist/source/luatex/luaotfload
parent3a0140d05a7e481750ec23a30ed5cf3cdef61eb7 (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/luaotfload')
-rw-r--r--Master/texmf-dist/source/luatex/luaotfload/Makefile263
-rw-r--r--Master/texmf-dist/source/luatex/luaotfload/filegraph.dot396
-rw-r--r--Master/texmf-dist/source/luatex/luaotfload/fontloader-reference-load-order.lua350
-rw-r--r--Master/texmf-dist/source/luatex/luaotfload/fontloader-reference-load-order.tex140
-rw-r--r--Master/texmf-dist/source/luatex/luaotfload/luaotfload-latex.tex486
-rw-r--r--Master/texmf-dist/source/luatex/luaotfload/luaotfload-main.tex1908
-rw-r--r--Master/texmf-dist/source/luatex/luaotfload/luaotfload-tool.rst327
-rw-r--r--Master/texmf-dist/source/luatex/luaotfload/luaotfload.conf.rst408
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 &ndash; 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>.
-