summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/luatex/luaotfload
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2014-07-15 22:56:45 +0000
committerKarl Berry <karl@freefriends.org>2014-07-15 22:56:45 +0000
commit6caf348b43edcfc1dce127bf0895a5fb9bd77f2d (patch)
tree7b4b79f90596e69716ad87e3293743756b2a1954 /Master/texmf-dist/source/luatex/luaotfload
parentd71cd04a4c07d1cdaf85a7b7c2398022cc39beab (diff)
luaotfload (15jul14)
git-svn-id: svn://tug.org/texlive/trunk@34622 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/luatex/luaotfload')
-rw-r--r--Master/texmf-dist/source/luatex/luaotfload/Makefile254
-rw-r--r--Master/texmf-dist/source/luatex/luaotfload/filegraph.dot287
-rw-r--r--Master/texmf-dist/source/luatex/luaotfload/luaotfload-latex.tex448
-rw-r--r--Master/texmf-dist/source/luatex/luaotfload/luaotfload-main.tex1590
-rw-r--r--Master/texmf-dist/source/luatex/luaotfload/luaotfload-tool.rst325
-rw-r--r--Master/texmf-dist/source/luatex/luaotfload/luaotfload.conf.rst347
-rw-r--r--Master/texmf-dist/source/luatex/luaotfload/luaotfload.dtx2685
7 files changed, 3137 insertions, 2799 deletions
diff --git a/Master/texmf-dist/source/luatex/luaotfload/Makefile b/Master/texmf-dist/source/luatex/luaotfload/Makefile
index 2d618e7f525..c27ffd41850 100644
--- a/Master/texmf-dist/source/luatex/luaotfload/Makefile
+++ b/Master/texmf-dist/source/luatex/luaotfload/Makefile
@@ -1,177 +1,203 @@
# Makefile for luaotfload
-NAME = luaotfload
-DOC = $(NAME).pdf
-DTX = $(NAME).dtx
-OTFL = $(wildcard luaotfload-*.lua) luaotfload-blacklist.cnf
+NAME = luaotfload
-GLYPHSCRIPT = mkglyphlist
-GLYPHSOURCE = glyphlist.txt
-CHARSCRIPT = mkcharacters
-STATUSSCRIPT = mkstatus
+DOCSRCDIR = ./doc
+SCRIPTSRCDIR = ./scripts
+SRCSRCDIR = ./src
+BUILDDIR = ./build
+MISCDIR = ./misc
+
+SRC = $(wildcard $(SRCSRCDIR)/luaotfload-*.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
+
+GLYPHSOURCE = $(BUILDDIR)/glyphlist.txt
RESOURCESCRIPTS = $(GLYPHSCRIPT) $(CHARSCRIPT) $(STATUSSCRIPT)
-SCRIPTNAME = luaotfload-tool
-SCRIPT = $(SCRIPTNAME).lua
-MANSOURCE = $(SCRIPTNAME).rst
-MANPAGE = $(SCRIPTNAME).1
-OLDSCRIPT = luaotfload-legacy-tool.lua
+TOOLNAME = luaotfload-tool
+TOOL = $(SRCSRCDIR)/$(TOOLNAME).lua
+
+CONFNAME = luaotfload.conf
+
+GRAPH = filegraph
+DOCSRC = $(addprefix $(DOCSRCDIR)/$(NAME), -main.tex -latex.tex)
+GRAPHSRC = $(DOCSRCDIR)/$(GRAPH).dot
+MANSRC = $(DOCSRCDIR)/$(TOOLNAME).rst $(DOCSRCDIR)/$(CONFNAME).rst
-GRAPH = filegraph
-DOTPDF = $(GRAPH).pdf
-DOT = $(GRAPH).dot
+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 = luaotfload-glyphlist.lua
-CHARS = luaotfload-characters.lua
-STATUS = luaotfload-status.lua
+GLYPHS = $(BUILDDIR)/$(NAME)-glyphlist.lua
+CHARS = $(BUILDDIR)/$(NAME)-characters.lua
+STATUS = $(BUILDDIR)/$(NAME)-status.lua
RESOURCES = $(GLYPHS) $(CHARS) $(STATUS)
-GRAPHED = $(DOTPDF)
-MAN = $(MANPAGE)
-COMPILED = $(DOC)
-UNPACKED = luaotfload.sty luaotfload.lua
-GENERATED = $(GRAPHED) $(UNPACKED) $(COMPILED) $(RESOURCES) $(MAN)
-SOURCE = $(DTX) $(MANSOURCE) $(OTFL) README Makefile NEWS $(RESOURCESCRIPTS)
-
-# test files
-TESTDIR = tests
-TESTSTATUS = $(wildcard $(TESTDIR)/*.tex $(TESTDIR)/*.ltx)
-TESTSTATUS_SYS = $(TESTDIR)/systemfonts.tex $(TESTDIR)/fontconfig_conf_reading.tex
-TESTSTATUS_TL = $(filter-out $(TESTSTATUS_SYS), $(TESTSTATUS))
+SOURCE = $(DOCSRC) $(MANSRC) $(SRC) README COPYING Makefile NEWS $(RESOURCESCRIPTS)
# Files grouped by installation location
-SCRIPTSTATUS = $(SCRIPT) $(OLDSCRIPT) $(RESOURCESCRIPTS)
-RUNSTATUS = $(UNPACKED) $(filter-out $(SCRIPTSTATUS),$(OTFL))
-DOCSTATUS = $(DOC) $(DOTPDF) README NEWS
-MANSTATUS = $(MANPAGE)
-SRCSTATUS = $(DTX) Makefile
+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 = $(GENERATED) $(SOURCE)
+ALL_STATUS = $(RESOURCES) $(SOURCE)
# Installation locations
-FORMAT = luatex
-SCRIPTDIR = $(TEXMFROOT)/scripts/$(NAME)
-RUNDIR = $(TEXMFROOT)/tex/$(FORMAT)/$(NAME)
-DOCDIR = $(TEXMFROOT)/doc/$(FORMAT)/$(NAME)
-MANDIR = $(TEXMFROOT)/doc/man/man1/
-SRCDIR = $(TEXMFROOT)/source/$(FORMAT)/$(NAME)
-TEXMFROOT = $(shell kpsewhich --var-value TEXMFHOME)
+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 = ./luaotfload
-
-CTAN_ZIP = $(NAME).zip
-TDS_ZIP = $(NAME).tds.zip
-ZIPS = $(CTAN_ZIP) $(TDS_ZIP)
-
-LUA = texlua
-
-DO_TEX = luatex --interaction=batchmode $< >/dev/null
-DO_LATEXMK = latexmk -e '$$max_repeat = 5' -pdf -lualatex -silent $< >/dev/null
-# latexmk does only one run on my machine, so we’re not going to rely on it
-DO_LATEX = lualatex -interaction=batchmode $< >/dev/null
-DO_GRAPHVIZ = dot -Tpdf -o $@ $< > /dev/null
-DO_GLYPHS = $(LUA) $(GLYPHSCRIPT) > /dev/null
-DO_CHARS = $(LUA) $(CHARSCRIPT) > /dev/null
-DO_STATUS = $(LUA) $(STATUSSCRIPT) > /dev/null
-DO_DOCUTILS = rst2man $< >$@ 2>/dev/null
-
-all: $(GENERATED)
-graph: $(GRAPHED)
-doc: $(GRAPHED) $(COMPILED) $(MAN)
-manual: $(MAN)
-unpack: $(UNPACKED)
+DISTDIR = $(BUILDDIR)/$(NAME)
+
+CTAN_ZIPFILE = $(NAME).zip
+TDS_ZIPFILE = $(NAME).tds.zip
+CTAN_ZIP = $(BUILDDIR)/$(CTAN_ZIPFILE)
+TDS_ZIP = $(BUILDDIR)/$(TDS_ZIPFILE)
+ZIPS = $(CTAN_ZIP) $(TDS_ZIP)
+
+LUA = texlua
+
+## 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) > /dev/null
+
+show: showtargets
+
+all: ctan
+builddir: $(BUILDDIR)
resources: $(RESOURCES)
chars: $(CHARS)
status: $(STATUS)
ctan: $(CTAN_ZIP)
tds: $(TDS_ZIP)
-world: all ctan
-$(GLYPHS): /dev/null
- $(DO_GLYPHS)
+graph: $(DOTPDF)
+doc: $(DOCS)
+pdf: $(DOCPDF)
+manual: $(MANPAGES)
-$(CHARS): /dev/null
- $(DO_CHARS)
+$(DOTPDF):
+ @$(MAKE) -C $(DOCSRCDIR) graph
-$(STATUS): /dev/null
- $(DO_STATUS)
+$(DOCPDF):
+ @$(MAKE) -C $(DOCSRCDIR) doc
-$(GRAPHED): $(DOT)
- $(DO_GRAPHVIZ)
+$(MANPAGES):
+ @$(MAKE) -C $(DOCSRCDIR) manuals
-$(COMPILED): $(DTX)
- $(DO_LATEX)
- $(DO_LATEX)
+$(GLYPHS): builddir
+ $(DO_GLYPHS)
-$(UNPACKED): $(DTX)
- $(DO_TEX)
+$(CHARS): builddir
+ $(DO_CHARS)
-$(MAN): $(MANSOURCE)
- $(DO_DOCUTILS)
+$(STATUS): builddir
+ $(DO_STATUS)
+
+$(BUILDDIR): /dev/null
+ mkdir -p $(BUILDDIR)
define make-ctandir
@$(RM) -rf $(DISTDIR)
-@mkdir -p $(DISTDIR) && cp $(SOURCE) $(COMPILED) $(DISTDIR)
+@mkdir -p $(DISTDIR) && cp $(RESOURCES) $(DOCPDF) $(VGND) $(CONFDEMO) $(SOURCE) $(DISTDIR)
endef
-$(CTAN_ZIP): $(SOURCE) $(COMPILED) $(TDS_ZIP)
+$(CTAN_ZIP): $(DOCS) $(SOURCE) $(TDS_ZIP)
@echo "Making $@ for CTAN upload."
@$(RM) -- $@
$(make-ctandir)
- @zip -r -9 $@ $(TDS_ZIP) $(DISTDIR) >/dev/null
+ cd $(BUILDDIR) && zip -r -9 $(CTAN_ZIPFILE) $(TDS_ZIPFILE) $(NAME) >/dev/null
+
+define run-install-doc
+@mkdir -p $(DOCDIR) && cp -- $(DOCSTATUS) $(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 $(RUNSTATUS) $(RUNDIR)
-@mkdir -p $(DOCDIR) && cp $(DOCSTATUS) $(DOCDIR)
-@mkdir -p $(SRCDIR) && cp $(SRCSTATUS) $(SRCDIR)
-@mkdir -p $(MANDIR) && cp $(MANSTATUS) $(MANDIR)
+@mkdir -p $(SCRIPTDIR) && cp -- $(SCRIPTSTATUS) $(SCRIPTDIR)
+@mkdir -p $(RUNDIR) && cp -- $(RESOURCES) $(RUNSTATUS) $(RUNDIR)
endef
$(TDS_ZIP): TEXMFROOT=./tmp-texmf
-$(TDS_ZIP): $(ALL_STATUS)
+$(TDS_ZIP): $(DOCS) $(ALL_STATUS)
@echo "Making TDS-ready archive $@."
@$(RM) -- $@
+ $(run-install-doc)
$(run-install)
@cd $(TEXMFROOT) && zip -9 ../$@ -r . >/dev/null
@$(RM) -r -- $(TEXMFROOT)
-.PHONY: install manifest clean mrproper
+.PHONY: install manifest clean mrproper show showtargets
install: $(ALL_STATUS)
@echo "Installing in '$(TEXMFROOT)'."
+ $(run-install-docs)
$(run-install)
-check: $(RUNSTATUS) $(TESTSTATUS_TL)
- @rm -rf var
- @for f in $(TESTSTATUS_TL); do \
- echo "check: luatex $$f"; \
- luatex --interaction=batchmode $$f \
- > /dev/null || exit $$?; \
- done
-
-check-all: $(TESTSTATUS_SYS) check
- @cd $(TESTDIR); for f in $(TESTSTATUS_SYS); do \
- echo "check: luatex $$f"; \
- $(TESTENV) luatex --interaction=batchmode ../$$f \
- > /dev/null || exit $$?; \
- done
-
-manifest:
+manifest:
@echo "Source files:"
@for f in $(SOURCE); do echo $$f; done
@echo ""
@echo "Derived files:"
@for f in $(GENERATED); do echo $$f; done
-clean:
- @$(RM) -- *.log *.aux *.toc *.idx *.ind *.ilg *.out $(TESTDIR)/*.log
+CLEANEXTS = log aux toc idx ind ilg out
+CLEANME = $(foreach ext,$(CLEANEXTS),$(wildcard *.$(ext)))
+CLEANME += $(foreach ext,$(CLEANEXTS),$(wildcard $(BUILDDIR)/*$(ext)))
-mrproper: clean
- @$(RM) -- $(GENERATED) $(ZIPS) $(GLYPHSOURCE) $(TESTDIR)/*.pdf
- @$(RM) -r -- $(DISTDIR)
+clean:
+ $(MAKE) -C $(DOCSRCDIR) $@
+ @$(RM) -- $(CLEANME)
+mrproper: clean
+ $(MAKE) -C $(DOCSRCDIR) $@
+ @$(RM) -- $(GENERATED) $(ZIPS) $(GLYPHSOURCE)
+ @$(RM) -r -- $(BUILDDIR)
+
+###############################################################################
+showtargets:
+ @echo "Available targets:"
+ @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 " chars import char-def.lua as luaotfload-characters.lua"
+ @echo " status create repository info (luaotfload-status.lua)"
+ @echo
+ @echo " tds package a zipball according to the TDS"
+ @echo " ctan package a zipball for uploading to CTAN"
+ @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
new file mode 100644
index 00000000000..47db9ea3fcc
--- /dev/null
+++ b/Master/texmf-dist/source/luatex/luaotfload/filegraph.dot
@@ -0,0 +1,287 @@
+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 -> otfl_fonts_merged [label="merged"]
+ luaotfload -> merged_lua_libs [label="unmerged", style=solid]
+ luaotfload -> merged_luatex_fonts [label="unmerged", style=solid]
+ luaotfload -> merged_context_libs [label="unmerged", style=solid]
+
+ luaotfload -> luaotfload_libs
+ luaotfload -> otfl_blacklist_cnf
+
+ otfl_fonts_merged -> merged_lua_libs [label="merged",
+ style=dotted,
+ lhead=cluster_merged]
+ otfl_fonts_merged -> merged_luatex_fonts [label="merged",
+ style=dotted,
+ lhead=cluster_merged]
+ otfl_fonts_merged -> merged_context_libs [label="merged",
+ style=dotted,
+ lhead=cluster_merged]
+
+ merged_luatex_fonts -> font_age [label="luatex-fonts-enc.lua",
+ ltail=cluster_merged]
+
+ fontdbutil -> fontdbutil_diagnostics [label="--diagnose"]
+
+ fontdbutil -> status [label="version information"]
+
+ fontdbutil_diagnostics -> status [constraint=no, label="hash files"]
+
+ merged_luatex_fonts -> characters [label="luaotfload-auxiliary.lua",
+ ltail=cluster_merged]
+
+ luaotfload_libs -> font_names [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]
+
+ subgraph { rank = same;
+ mkcharacters;
+ mkglyphlist;
+ mkstatus;
+ fontdbutil;
+ luaotfload }
+
+/* ····································································
+ * 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]
+
+ mkstatus [label = "mkstatus",
+ shape = rect,
+ width = "3.2cm",
+ height = "1.2cm",
+ color = "#01012222",
+ style = "filled,rounded",
+ penwidth=2]
+
+ mkglyphlist [label = "mkglyphlist",
+ shape = rect,
+ width = "3.2cm",
+ height = "1.2cm",
+ color = "#01012222",
+ style = "filled,rounded",
+ penwidth=2]
+
+ mkcharacters [label = "mkcharacters",
+ shape = rect,
+ width = "3.2cm",
+ height = "1.2cm",
+ color = "#01012222",
+ 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]
+ */
+ otfl_fonts_merged [label = "luaotfload-fontloader.lua",
+ shape = rect,
+ width = "3.2cm",
+ height = "1.2cm",
+ color = "#01012222",
+ 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:goldenrod4",
+ 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-override.lua</td> <td>luaotfload-loaders.lua</td> </tr>
+ <tr> <td>luaotfload-log.lua</td> <td>luaotfload-letterspace.lua</td> </tr>
+ <tr> <td>luaotfload-parsers.lua</td> <td>luaotfload-database.lua</td> </tr>
+ <tr> <td>luaotfload-color.lua</td> </tr>
+ </table>
+ >,
+ ]
+
+/* ····································································
+ * merged files
+ * ································································· */
+
+ subgraph cluster_merged {
+ node [style=filled, color=white];
+ style = "filled,rounded";
+ color = "grey90:dodgerblue4";
+ //nodesep = "3.0";
+ rank = same;
+ label = "Merged Libraries";
+ gradientangle=0;
+ merged_lua_libs;
+ merged_luatex_fonts;
+ merged_context_libs;
+ }
+
+ otfl_fonts_merged -> merged_lua_libs
+ otfl_fonts_merged -> merged_luatex_fonts
+ otfl_fonts_merged -> merged_context_libs
+
+ merged_lua_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">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> </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-gen.lua</td> <td>luatex-basics-nod.lua</td> </tr>
+ <tr> <td>luatex-fonts-enc.lua</td> <td>luatex-fonts-syn.lua</td> </tr>
+ <tr> <td>luatex-font-tfm.lua</td> <td>luatex-font-afm.lua</td> </tr>
+ <tr> <td>luatex-font-afk.lua</td> <td>luatex-fonts-tfm.lua</td> </tr>
+ <tr> <td>luatex-fonts-chr.lua</td> <td>luatex-fonts-lua.lua</td> </tr>
+ <tr> <td>luatex-fonts-inj.lua</td> <td>luatex-fonts-otn.lua</td> </tr>
+ <tr> <td>luatex-fonts-def.lua</td> <td>luatex-fonts-ext.lua</td> </tr>
+ <tr> <td>luatex-fonts-cbk.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-oti.lua</td> </tr>
+ <tr> <td>font-otf.lua</td> <td>font-otb.lua</td> <td>font-ota.lua</td> </tr>
+ <tr> <td>font-def.lua</td> </tr>
+ </table>
+ >,
+ ]
+}
+
+// vim:ft=dot:sw=4:ts=4:expandtab
diff --git a/Master/texmf-dist/source/luatex/luaotfload/luaotfload-latex.tex b/Master/texmf-dist/source/luatex/luaotfload/luaotfload-latex.tex
new file mode 100644
index 00000000000..34c494d58f7
--- /dev/null
+++ b/Master/texmf-dist/source/luatex/luaotfload/luaotfload-latex.tex
@@ -0,0 +1,448 @@
+\luatexsuppresslongerror1%% sigh ...
+%% Copyright (C) 2009-2014
+%%
+%% by Elie Roux <elie.roux@telecom-bretagne.eu>
+%% and Khaled Hosny <khaledhosny@eglug.org>
+%% and Philipp Gesang <philipp.gesang@alumni.uni-heidelberg.de>
+%%
+%% 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 [luafunction][\sffamily\itshape\restoreunderscore] %% lua identifiers
+\definehighlight [identifier][\sffamily] %% names
+\definehighlight [abbrev][\rmfamily\scshape] %% acronyms
+\definehighlight [emphasis][\rmfamily\slshape] %% level 1 emph
+
+\definehighlight [Largefont][\Large] %% font size
+\definehighlight [smallcaps][\sc] %% font feature
+\definehighlight [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}
+\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
+
+\newluatexcatcodetable \vrbcatcodes
+\setluatexcatcodetable \vrbcatcodes {%
+ \luatexcatcodetable \CatcodeTableIniTeX
+ \catcode 9 \othercatcode %% \tabasciicode
+ \catcode 13 \othercatcode %% \endoflineasciicode
+ \catcode 12 \othercatcode %% \formfeedasciicode
+ \catcode 26 \othercatcode %% \endoffileasciicode
+ \catcode 32 \othercatcode %% \spaceasciicode
+}
+
+\newluatexcatcodetable \literalcatcodes
+\setluatexcatcodetable \literalcatcodes {%
+ \luatexcatcodetable \CatcodeTableString
+ \catcode 32 \activecatcode %% \spaceasciicode
+}
+
+\def \beginlisting {%
+ \begingroup
+ \luatexcatcodetable \vrbcatcodes
+ \beginlistingindeed%
+}
+
+\directlua {
+ local texprint = tex.print
+ local stringsub = string.sub
+ local backslash = string.byte (0x5c)
+ document = document or { }
+ document.printlines = function (buffer)
+ for _, line in next, string.explode (buffer, "\noexpand\n") do
+ if stringsub (line, 1, 1) == " " then
+ line = backslash .. line
+ end
+ texprint (-1, line)
+ texprint (-1, "")
+ end
+ end
+}
+
+\def \beginlistingindeed#1\endlisting{%
+ \endgroup
+ \begingroup
+ \ttfamily
+ \small
+ \begin {quote}
+ \bgroup
+ \addfontfeature {RawFeature=-tlig;-liga}%% So one can’t just turn them all off at once using the ``Ligatures`` key?
+ \luatexcatcodetable \literalcatcodes
+ \obeyspaces
+ \obeylines
+ \directlua{document.printlines ([==[\detokenize {#1}]==])}
+ \egroup
+ \end {quote}
+ \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 {\luafunction {\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
new file mode 100644
index 00000000000..2e89ff000e8
--- /dev/null
+++ b/Master/texmf-dist/source/luatex/luaotfload/luaotfload-main.tex
@@ -0,0 +1,1590 @@
+%% Copyright (C) 2009-2014
+%%
+%% by Elie Roux <elie.roux@telecom-bretagne.eu>
+%% and Khaled Hosny <khaledhosny@eglug.org>
+%% and Philipp Gesang <philipp.gesang@alumni.uni-heidelberg.de>
+%%
+%% 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 {2014/07/13 v2.5}
+ \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.
+ \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> ::= `file:', <file lookup>
+ \alt `name:', <name lookup> ;
+
+ <file lookup> ::= \{ <name character> \} ;
+
+ <name lookup> ::= \{ <name character> \} ;
+
+ <anon lookup> ::= {\sc tfmname} | <name lookup> ;
+
+ <path lookup> ::= \{ {\sc all_characters} - `]' \} ;
+
+ <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
+
+\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{%
+ The development version 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 \luafunction{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 {Compatibility Layer}
+
+In addition to the regular prefixed requests, \identifier{luaotfload}
+accepts loading fonts the \XETEX way.
+%
+There are again two modes: bracketed and unbracketed.
+A bracketed request looks as follows.
+
+\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 specifying paths to a font file.
+%
+Naturally, path-less file names are equally valid and processed the
+same way as an ordinary \inlinecode {file:} lookup.
+
+\beginnarrower
+ \nonproportional{\string\font\string\fontname\space= }%
+ \meta{font name}
+ \dots
+\endnarrower
+
+Unbracketed (or, for lack of a better word: \emphasis{anonymous})
+font requests resemble the conventional \TEX syntax.
+%
+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 {name:} lookup, which itself will
+fall back to a \inlinecode {file:} lookup if no database entry matches
+\meta{font name}.
+
+Furthermore, \identifier{luaotfload} supports the slashed (shorthand)
+font style notation from \XETEX.
+
+\beginnarrower
+ \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 \abbrev{type1} 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
+
+\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{dlft}.
+ %
+ Some fonts, including very popular ones by foundries like Adobe,
+ do not assign features to the \inlinecode{dflt} script, in
+ which case the script needs to be set explicitly.
+ \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 {featurefile}
+ A comma-separated list of feature files to be applied to the
+ font.
+ %
+ Feature files contain a textual representation of
+ \OpenType tables and extend the features of a font
+ on fly.
+ %
+ After they are applied to a font, features defined in a
+ feature file can be enabled or disabled just like any
+ other font feature.
+ %
+ The syntax is documented in \identifier{Adobe}’s
+ \OpenType Feature File Specification.\footnote{%
+ Cf. \hyperlink {http://www.adobe.com/devnet/opentype/afdko/topic_feature_file_syntax.html}.
+ Feature file support is part of the engine which at the
+ time of this writing (2014) implements the spec only
+ partially.
+ See the
+ \hyperlink [\LUATEX tracker]{http://tracker.luatex.org/view.php?id=231}
+ for details.
+ }
+
+ For a demonstration of how to set a \inlinecode{tkrn} feature consult
+ the file \inlinecode{tkrn.fea} that is part of \identifier{luaotfload}.
+ It can be read and applied as follows:
+
+ \inlinecode{\\font \\test = Latin Modern Roman:featurefile=tkrn.fea;+tkrn}
+ \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
+ \luafunction{keeptogether} and \luafunction{keepligature},
+ respectively, inside the namespace \inlinecode {luaotfload.letterspace}.
+ %
+ Both functions are called whenever the letterspacing callback
+ encounters an appropriate node or set of nodes.
+ %
+ If they return a true-ish value, no extra kern is inserted at
+ the current position.
+ %
+ \luafunction{keeptogether} receives a pair of consecutive
+ glyph nodes in order of their appearance in the node list.
+ %
+ \luafunction{keepligature} receives a single node which can be
+ analyzed into components.
+ %
+ (For details refer to the \emphasis{glyph nodes} section in the
+ \LUATEX reference manual.)
+ %
+ The implementation of both functions is left entirely to the
+ user.
+ \endaltitem
+
+\ifcontextmkiv
+ \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 \ifcontextmkiv
+ \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 \ifcontextmkiv
+ %% 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 {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 \ifcontextmkiv
+ \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 {Files from \CONTEXT and \LUATEX-Fonts}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\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 as distributed in
+the \identifier{\LUATEX-Fonts} package.
+%
+The original \LUA source files have been combined using the
+\fileent{mtx-package} script into a single, self-contained blob.
+In this form the font loader has no further dependencies\footnote{%
+ It covers, however, to some extent the functionality of 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 from time to time.
+%
+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.
+
+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.
+%
+From \LUATEX-Fonts, only the file \fileent{luatex-fonts-merged.lua}
+has been imported as \fileent{luaotfload-fontloader.lua}.
+%
+It is generated by \fileent{mtx-package}, a \LUA source code merging
+too developed by Hans Hagen.\footnote{%
+ \fileent{mtx-package} is
+ \hyperlink [part of \CONTEXT]{http://repo.or.cz/w/context.git/blob_plain/refs/heads/origin:/scripts/context/lua/mtx-package.lua}
+ and requires \fileent{mtxrun}.
+ Run
+ \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.
+}
+It houses several \LUA files that can be classed in three
+categories.
+
+\begindefinitions
+ \beginnormalitem
+ \emphasis{\LUA utility libraries}, a subset
+ of what is provided by the \identifier{lualibs}
+ package.
+
+ \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
+ \enddefinitions
+ \enddoublecolumns
+ \endnormalitem
+
+ \beginnormalitem
+ The \emphasis{font loader} itself.
+ These files have been written for
+ \LUATEX-Fonts and they are distributed along
+ with \identifier{luaotfload}.
+ \begindoublecolumns
+ \begindefinitions
+ \beginaltitem{luatex-basics-gen.lua} \endaltitem
+ \beginaltitem{luatex-basics-nod.lua} \endaltitem
+ \beginaltitem{luatex-fonts-enc.lua} \endaltitem
+ \beginaltitem{luatex-fonts-syn.lua} \endaltitem
+ \beginaltitem{luatex-fonts-tfm.lua} \endaltitem
+ \beginaltitem{luatex-fonts-chr.lua} \endaltitem
+ \beginaltitem{luatex-fonts-lua.lua} \endaltitem
+ \beginaltitem{luatex-fonts-inj.lua} \endaltitem
+ \beginaltitem{luatex-fonts-otn.lua} \endaltitem
+ \beginaltitem{luatex-fonts-def.lua} \endaltitem
+ \beginaltitem{luatex-fonts-ext.lua} \endaltitem
+ \beginaltitem{luatex-fonts-cbk.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-oti.lua} \endaltitem
+ \beginaltitem{font-otf.lua} \endaltitem
+ \beginaltitem{font-otb.lua} \endaltitem
+ \beginaltitem{font-ota.lua} \endaltitem
+ \beginaltitem{font-def.lua} \endaltitem
+ \beginaltitem{font-otp.lua} \endaltitem
+ \enddefinitions
+ \enddoublecolumns
+ \endnormalitem
+\enddefinitions
+
+Note that if \identifier{luaotfload} cannot locate the
+merged file, it will load the individual \LUA libraries
+instead.
+%
+Their names remain the same as in \CONTEXT (without the
+\inlinecode {otfl}-prefix) since we imported the relevant section of
+\fileent{luatex-fonts.lua} unmodified into \fileent{luaotfload-main.lua}.
+Thus if you prefer running bleeding edge code from the
+\CONTEXT beta, all you have to do is remove
+\fileent{luaotfload-merged.lua} from the search path.
+
+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-override.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-override.lua}
+ overrides the \CONTEXT logging functionality.
+ \endaltitem
+ \beginaltitem {luaotfload-loaders.lua}
+ registers the \OpenType font reader as handler for Postscript
+ fonts (\abbrev{pfa}, \abbrev{pfb}).
+ \endaltitem
+ \beginaltitem {luaotfload-parsers.lua}
+ various \abbrev{lpeg}-based parsers.
+ \endaltitem
+ \beginaltitem {luaotfload-database.lua}
+ font names database.
+ \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}
+
+\endsection
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\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 \luafunction{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 \luafunction{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 \luafunction{id}
+ has glyph \luafunction{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 \luafunction{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
+ \luafunction{name_of_slot}.
+ \endaltitem
+
+ \beginaltitem {aux.provides_script(id : int, script : string)}
+ Test if a font supports \luafunction{script}.
+ \endaltitem
+
+ \beginaltitem {aux.provides_language(id : int, script : string, language : string)}
+ Test if a font defines \luafunction{language} for a given
+ \luafunction{script}.
+ \endaltitem
+
+ \beginaltitem {aux.provides_feature(id : int, script : string,
+ language : string, feature : string)}
+ Test if a font defines \luafunction{feature} for
+ \luafunction{language} for a given \luafunction{script}.
+ \endaltitem
+
+ \beginaltitem {aux.get_math_dimension(id : int, dimension : string)}
+ Get the dimension \luafunction{dimension} of font \luafunction{id}.
+ \endaltitem
+
+ \beginaltitem {aux.sprint_math_dimension(id : int, dimension : string)}
+ Same as \luafunction{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 \luafunction{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 \luafunction{aux}
+namespace over direct manipulation of font objects. For example, raw
+access to the \luafunction{font.fonts} table like:
+
+\beginlisting
+ local somefont = font.fonts[2]
+\endlisting
+
+\noindent can render already defined fonts unusable.
+%
+Instead, the function \luafunction{font.getfont()} should be used
+because it has been replaced by a safe variant.
+
+However, \luafunction{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 \luafunction{font.getfont()} and \luafunction{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
+
diff --git a/Master/texmf-dist/source/luatex/luaotfload/luaotfload-tool.rst b/Master/texmf-dist/source/luatex/luaotfload/luaotfload-tool.rst
new file mode 100644
index 00000000000..4b1a93456f3
--- /dev/null
+++ b/Master/texmf-dist/source/luatex/luaotfload/luaotfload-tool.rst
@@ -0,0 +1,325 @@
+=======================================================================
+ luaotfload-tool
+=======================================================================
+
+-----------------------------------------------------------------------
+ generate and query the Luaotfload font names database
+-----------------------------------------------------------------------
+
+:Date: 2014-03-30
+:Copyright: GPL v2.0
+:Version: 2.5
+: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
+
+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,
+ dfont, pfa, and pfb). If the list is prefixed
+ with a ``+`` sign, the given list is added to
+ the currently active one; ``-`` subtracts.
+ Default: *otf,ttf,ttc,dfont*.
+ Examples:
+
+ 1) ``--formats=-ttc,ttf`` would skip
+ TrueType fonts and font collections;
+ 2) ``--formats=otf`` would scan only OpenType
+ files;
+ 3) ``--formats=+pfb`` includes binary
+ Postscript files. **Warning**: with a
+ standard TeX Live installation this will
+ grow the database considerably and slow down
+ font indexing.
+
+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``).
+--warnings, -w Print the warnings generated by the fontloader
+ library (assumes ``-I``). Automatically enabled
+ if the verbosity level exceeds 2.
+
+--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.
+
+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
+=======================================================================
+
+**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
+<philipp.gesang@alumni.uni-heidelberg.de>.
+
diff --git a/Master/texmf-dist/source/luatex/luaotfload/luaotfload.conf.rst b/Master/texmf-dist/source/luatex/luaotfload/luaotfload.conf.rst
new file mode 100644
index 00000000000..774095b5dec
--- /dev/null
+++ b/Master/texmf-dist/source/luatex/luaotfload/luaotfload.conf.rst
@@ -0,0 +1,347 @@
+=======================================================================
+ luaotfload.conf
+=======================================================================
+
+-----------------------------------------------------------------------
+ Luaotfload configuration file
+-----------------------------------------------------------------------
+
+:Date: 2014-06-09
+:Copyright: GPL v2.0
+:Version: 2.5
+: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, pfa, pfb
+ compress = false
+
+ [misc]
+ termwidth = 60
+
+ [run]
+ log-level = 6
+
+This will make Luaotfload ignore all font files except for PostScript
+formats. NB: With a default Tex Live install the PS fonts will take
+much longer to index than OpenType or TrueType ones. Also, an
+uncompressed index file will be dumped which is going to be much larger
+due to the huge amount of PostScript fonts indexed. 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 --update --force
+
+
+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
+``pre_linebreak_filter`` or ``pre_output_filter``, defined in the
+section *run*.
+
+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`` |
++---------------+--------+---------------------------+
+| formats | s | ``"otf,ttf,ttc,dfont"`` |
++---------------+--------+---------------------------+
+| 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 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),
+* ``dfont`` (Macintosh TrueType format),
+* ``afm`` (Adobe Font Metrics),
+* ``pfb`` and ``pfa`` (PostScript format).
+
+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,dfont"`` 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.
+
+
+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 |
++------------------+--------+------------------------------+
+| color-callback | s | ``"pre_linebreak_filter"`` |
++------------------+--------+------------------------------+
+| definer | s | ``"patch"`` |
++------------------+--------+------------------------------+
+| log-level | n | ``0`` |
++------------------+--------+------------------------------+
+| resolver | s | ``"cached"`` |
++------------------+--------+------------------------------+
+
+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 ``pre_linebreak_filter`` but alternatively the
+``pre_output_filter`` may be chosen, which is faster but might produce
+inconsistent output. The latter also was the default in the 1.x series
+of Luaotfload.
+
+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 Fontspect that rely on the ``patch_font`` callback
+provided by Luaotfload to perform important corrections on font data.
+
+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
+<philipp.gesang@alumni.uni-heidelberg.de>.
+
diff --git a/Master/texmf-dist/source/luatex/luaotfload/luaotfload.dtx b/Master/texmf-dist/source/luatex/luaotfload/luaotfload.dtx
deleted file mode 100644
index 3615fa8328b..00000000000
--- a/Master/texmf-dist/source/luatex/luaotfload/luaotfload.dtx
+++ /dev/null
@@ -1,2685 +0,0 @@
-% \iffalse meta-comment
-%
-% Copyright (C) 2009-2014
-% by Elie Roux <elie.roux@telecom-bretagne.eu>
-% and Khaled Hosny <khaledhosny@eglug.org>
-% and Philipp Gesang <philipp.gesang@alumni.uni-heidelberg.de>
-%
-% Home: https://github.com/lualatex/luaotfload
-% Support: <lualatex-dev@tug.org>.
-%
-% This work is under the GPL v2.0 license.
-%
-% This work consists of the main source file luaotfload.dtx
-% and the derived files
-% luaotfload.sty, luaotfload.lua
-%
-% Unpacking:
-% tex luaotfload.dtx
-%
-% Documentation:
-% lualatex luaotfload.dtx
-%
-% The class ltxdoc loads the configuration file ltxdoc.cfg
-% if available. Here you can specify further options, e.g.
-% use A4 as paper format:
-% \PassOptionsToClass{a4paper}{article}
-%
-%
-%
-%<*ignore>
-\begingroup
- \def\x{LaTeX2e}%
-\expandafter\endgroup
-\ifcase 0\ifx\install y1\fi\expandafter
- \ifx\csname processbatchFile\endcsname\relax\else1\fi
- \ifx\fmtname\x\else 1\fi\relax
-\else\csname fi\endcsname
-%</ignore>
-%<*install>
-\input docstrip.tex
-\Msg{************************************************************************}
-\Msg{* Installation}
-\Msg{* Package: luaotfload v2.4-4 OpenType layout system}
-\Msg{************************************************************************}
-
-\keepsilent
-\askforoverwritefalse
-
-\let\MetaPrefix\relax
-
-\preamble
-This is a generated file.
-
-Copyright (C) 2009-2014
- by Elie Roux <elie.roux@telecom-bretagne.eu>
- and Khaled Hosny <khaledhosny@eglug.org>
- and Philipp Gesang <philipp.gesang@alumni.uni-heidelberg.de>
-
- Home: https://github.com/lualatex/luaotfload
- Support: <lualatex-dev@tug.org>.
-
-This work is under the GPL v2.0 license.
-
-This work consists of the main source file luaotfload.dtx
-and the derived files
- luaotfload.sty, luaotfload.lua
-
-\endpreamble
-
-\let\MetaPrefix\DoubleperCent
-
-\generate{%
- \usedir{tex/luatex/luaotfload}%
- \file{luaotfload.sty}{\from{luaotfload.dtx}{package}}%
-}
-
-% The following hacks are to generate a lua file with lua comments starting with
-% -- instead of %%
-
-\def\MetaPrefix{-- }
-
-\def\luapostamble{%
- \MetaPrefix^^J%
- \MetaPrefix\space End of File `\outFileName'.%
-}
-
-\def\currentpostamble{\luapostamble}%
-
-\generate{%
- \usedir{tex/luatex/luaotfload}%
- \file{luaotfload.lua}{\from{luaotfload.dtx}{lua}}%%
-}
-
-\obeyspaces
-\Msg{************************************************************************}
-\Msg{*}
-\Msg{* To finish the installation you have to move the following}
-\Msg{* files into a directory searched by TeX:}
-\Msg{*}
-\Msg{* luaotfload.sty, luaotfload.lua}
-\Msg{*}
-\Msg{* Happy TeXing!}
-\Msg{*}
-\Msg{************************************************************************}
-
-\endbatchfile
-%</install>
-%<*ignore>
-\fi
-%</ignore>
-%<*driver>
-\NeedsTeXFormat{LaTeX2e}
-\ProvidesFile{luaotfload.drv}%
- [2014/05/18 v2.4-4 OpenType layout system]%
-\documentclass{ltxdoc}
-\usepackage{metalogo,multicol,mdwlist,fancyvrb,xspace}
-\usepackage[x11names]{xcolor}
-%
-\def\primarycolor{DodgerBlue4} %%-> rgb 16 78 139 | #104e8b
-\def\secondarycolor{Goldenrod4} %%-> rgb 139 105 200 | #8b6914
-%
-\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}
-
-\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[luafunction][\sffamily\itshape\restoreunderscore] %% lua identifiers
-\definehighlight [identifier][\sffamily] %% names
-\definehighlight [abbrev][\rmfamily\scshape] %% acronyms
-\definehighlight [emphasis][\rmfamily\slshape] %% level 1 emph
-
-\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
-\begin{document}
- \DocInput{luaotfload.dtx}%
-\end{document}
-%</driver>
-% \fi
-%
-% \CheckSum{0}
-%
-% \CharacterTable
-% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
-% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
-% Digits \0\1\2\3\4\5\6\7\8\9
-% Exclamation \! Double quote \" Hash (number) \#
-% Dollar \$ Percent \% Ampersand \&
-% Acute accent \' Left paren \( Right paren \)
-% Asterisk \* Plus \+ Comma \,
-% Minus \- Point \. Solidus \/
-% Colon \: Semicolon \; Less than \<
-% Equals \= Greater than \> Question mark \?
-% Commercial at \@ Left bracket \[ Backslash \\
-% Right bracket \] Circumflex \^ Underscore \_
-% Grave accent \` Left brace \{ Vertical bar \|
-% Right brace \} Tilde \~}
-%
-% \GetFileInfo{luaotfload.drv}
-%
-% \title{The \identifier{luaotfload} package}
-% \date{2014/05/18 v2.4-4}
-% \author{Elie Roux · Khaled Hosny · Philipp Gesang\\
-% Home: \url{https://github.com/lualatex/luaotfload}\\
-% Support: \email{lualatex-dev@tug.org}}
-%
-% \maketitle
-%
-% \begin{abstract}
-% 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.
-% \end{abstract}
-%
-% \tableofcontents
-%
-% \part{Package Description}
-%
-% \section{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.
-%
-%
-% \section{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.
-%
-%
-% \section{Loading Fonts}
-%
-% \identifier{luaotfload} supports an extended font request syntax:
-%
-% \begin{quote}
-% |\font\foo={|%
-% \meta{prefix}|:|%
-% \meta{font name}|:|%
-% \meta{font features}|}|%
-% \meta{\TEX font features}
-% \end{quote}
-%
-% \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}.
-%
-% \begin{figure}[b]
-% \setlength\grammarparsep{12pt plus 2pt minus 2pt}
-% \setlength\grammarindent{5cm}
-% \begingroup
-% \small
-% \begin{grammar}
-% <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> ::= `file:', <file lookup>
-% \alt `name:', <name lookup> ;
-%
-% <file lookup> ::= \{ <name character> \} ;
-%
-% <name lookup> ::= \{ <name character> \} ;
-%
-% <anon lookup> ::= {\sc tfmname} | <name lookup> ;
-%
-% <path lookup> ::= \{ {\sc all_characters} - `]' \} ;
-%
-% <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} - ( `(' | `/' | `:' ) ;
-% \end{grammar}
-% \endgroup
-% \caption{Font request syntax.
-% Braces or double quotes around the
-% \emphasis{specification} rule will
-% preserve whitespace in file names.
-% In addition to the font style modifiers
-% (\emphasis{slash-notation}) given above, there
-% are others that are recognized but will be silently
-% ignored: {\ttfamily aat},
-% {\ttfamily icu}, and
-% {\ttfamily gr}.
-% The special terminals are:
-% {\sc feature\textunderscore id} for a valid font
-% feature name and
-% {\sc feature\textunderscore value} for the corresponding
-% value.
-% {\sc tfmname} is the name of a \abbrev{tfm} file.
-% {\sc digit} again refers to bytes 48--57, and
-% {\sc all\textunderscore characters} to all byte values.
-% {\sc csname} and {\sc dimension} are the \TEX concepts.}
-% \label{font-syntax}
-% \end{figure}
-%
-% \subsection{Prefix -- the \identifier{luaotfload}{ }Way}
-%
-% In \identifier{luaotfload}, the canonical syntax for font requests
-% requires a \emphasis{prefix}:
-% \begin{quote}
-% |\font\fontname=|\meta{prefix}|:|\meta{fontname}\dots
-% \end{quote}
-% where \meta{prefix} is either \verb|file:| or \verb|name:|.\footnote{%
-% The development version also knows two further prefixes,
-% \verb|kpse:| and \verb|my:|.
-% A \verb|kpse| lookup is restricted to files that can be found by
-% \identifier{kpathsea} and
-% will not attempt to locate system fonts.
-% This behavior can be of value when an extra degree of encapsulation is
-% needed, for instance when supplying a customized tex distribution.
-%
-% The \verb|my| lookup takes this a step further: it lets you define
-% a custom resolver function and hook it into the \luafunction{resolve_font}
-% callback.
-% This ensures full control over how a file is located.
-% For a working example see the
-% \href{https://bitbucket.org/phg/lua-la-tex-tests/src/5f6a535d/pln-lookup-callback-1.tex}
-% {test repo}.
-% }
-% 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
-% \href{http://www.ntg.nl/pipermail/ntg-context/2013/073889.html}
-% {this post}
-% by Hans Hagen, the author of the font loader.
-% If in doubt, use filenames.
-% \fileent{luaotfload-tool} can perform the matching for you with the
-% option \verb|--find=<name>|, and you can use the file name it returns
-% 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
-% \verb|(|,
-% \verb|:|, and
-% \verb|/|.
-% As is obvious from the last exception, the \verb|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}.
-%
-% \subsection{Compatibility Layer}
-%
-% In addition to the regular prefixed requests, \identifier{luaotfload}
-% accepts loading fonts the \XETEX way.
-% There are again two modes: bracketed and unbracketed.
-% A bracketed request looks as follows.
-%
-% \begin{quote}
-% |\font\fontname=[|\meta{path to file}|]|
-% \end{quote}
-%
-% \noindent
-% Inside the square brackets, every character except for a closing
-% bracket is permitted, allowing for specifying paths to a font file.
-% Naturally, path-less file names are equally valid and processed the
-% same way as an ordinary \verb|file:| lookup.
-%
-% \begin{quote}
-% |\font\fontname=|\meta{font name} \dots
-% \end{quote}
-%
-% Unbracketed (or, for lack of a better word: \emphasis{anonymous})
-% font requests resemble the conventional \TEX syntax.
-% However, they have a broader spectrum of possible interpretations:
-% before anything else, \identifier{luaotfload} attempts to load a
-% traditional \TEX Font Metric (\abbrev{tfm} or \abbrev{ofm}).
-% If this fails, it performs a \verb|name:| lookup, which itself will
-% fall back to a \verb|file:| lookup if no database entry matches
-% \meta{font name}.
-%
-% Furthermore, \identifier{luaotfload} supports the slashed (shorthand)
-% font style notation from \XETEX.
-%
-% \begin{quote}
-% |\font\fontname=|\meta{font name}|/|\meta{modifier}\dots
-% \end{quote}
-%
-% \noindent
-% Currently, four style modifiers are supported:
-% \verb|I| for italic shape,
-% \verb|B| for bold weight,
-% \verb|BI| or \verb|IB| for the combination of both.
-% Other “slashed” modifiers are too specific to the \XETEX engine and
-% have no meaning in \LUATEX.
-%
-% \subsection{Examples}
-%
-% \subsubsection{Loading by File Name}
-%
-% For example, conventional \abbrev{type1} font can be loaded with a \verb|file:|
-% request like so:
-%
-% \begin{quote}
-% \begin{verbatim}
-% \font\lmromanten={file:ec-lmr10} at 10pt
-% \end{verbatim}
-% \end{quote}
-%
-% The \OpenType version of Janusz Nowacki’s font \emphasis{Antykwa
-% Półtawskiego}\footnote{%
-% \url{http://jmn.pl/antykwa-poltawskiego/}, also available in
-% in \TEX Live.
-% }
-% in its condensed variant can be loaded as follows:
-%
-% \begin{quote}
-% \begin{verbatim}
-% \font\apcregular=file:antpoltltcond-regular.otf at 42pt
-% \end{verbatim}
-% \end{quote}
-%
-% 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:
-%
-% \begin{quote}
-% \begin{verbatim}
-% \font\gfsporson="[/tmp/GFSPorson.otf]" at 12pt
-% \end{verbatim}
-% \end{quote}
-%
-% \subsubsection{Loading by Font Name}
-%
-% The \verb|name:| lookup does not depend on cryptic filenames:
-%
-% \begin{quote}
-% \begin{verbatim}
-% \font\pagellaregular={name:TeX Gyre Pagella} at 9pt
-% \end{verbatim}
-% \end{quote}
-%
-% A bit more specific but essentially the same lookup would be:
-%
-% \begin{quote}
-% \begin{verbatim}
-% \font\pagellaregular={name:TeX Gyre Pagella Regular} at 9pt
-% \end{verbatim}
-% \end{quote}
-%
-% \noindent
-% Which fits nicely with the whole set:
-%
-% \begin{quote}
-% \begin{verbatim}
-% \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}
-%
-% ...
-% \end{verbatim}
-% \end{quote}
-%
-% \subsubsection{Modifiers}
-%
-% If the entire \emphasis{Iwona} family\footnote{%
-% \url{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:
-%
-% \begin{quote}
-% \begin{verbatim}
-% \font\iwona=Iwona at 20pt
-% \end{verbatim}
-% \end{quote}
-%
-% \noindent
-% To load the most common of the other styles, the slash notation can
-% be employed as shorthand:
-%
-% \begin{quote}
-% \begin{verbatim}
-% \font\iwonaitalic =Iwona/I at 20pt
-% \font\iwonabold =Iwona/B at 20pt
-% \font\iwonabolditalic=Iwona/BI at 20pt
-% \end{verbatim}
-% \end{quote}
-%
-% \noindent
-% which is equivalent to these full names:
-%
-% \begin{quote}
-% \begin{verbatim}
-% \font\iwonaitalic ="Iwona Italic" at 20pt
-% \font\iwonabold ="Iwona Bold" at 20pt
-% \font\iwonabolditalic="Iwona BoldItalic" at 20pt
-% \end{verbatim}
-% \end{quote}
-%
-% \section{Font features}
-%
-% \emphasis{Font features} are the second to last component in the
-% general scheme for font requests:
-%
-% \begin{quote}
-% |\font\foo={|%
-% \meta{prefix}|:|%
-% \meta{font name}|:|%
-% \meta{font features}|}|%
-% \meta{\TEX font features}
-% \end{quote}
-%
-% \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. \url{http://www.microsoft.com/typography/otspec/featurelist.htm}.
-% }
-% and font options.
-% Prepending a font feature with a |+| (plus sign) enables it, whereas
-% a |-| (minus) disables it. For instance, the request
-%
-% \begin{quote}
-% \begin{verbatim}
-% \font\test=LatinModernRoman:+clig;-kern
-% \end{verbatim}
-% \end{quote}
-%
-% \noindent activates contextual ligatures (|clig|) and disables
-% kerning (|kern|).
-% Alternatively the options |true| or |false| can be passed to
-% the feature in a key/value expression.
-% The following request has the same meaning as the last one:
-%
-% \begin{quote}
-% \begin{verbatim}
-% \font\test=LatinModernRoman:clig=true;kern=false
-% \end{verbatim}
-% \end{quote}
-%
-% \noindent
-% Furthermore, this second syntax is required should a font feature
-% accept other options besides a true/false switch.
-% For example, \emphasis{stylistic alternates} (|salt|) are variants of given
-% glyphs.
-% They can be selected either explicitly by supplying the variant
-% index (starting from one), or randomly by setting the value to,
-% obviously, |random|.
-%
-% \iffalse TODO verify that this actually works with a font that supports
-% the salt/random feature!\fi
-% \begin{quote}
-% \begin{verbatim}
-% \font\librmsaltfirst=LatinModernRoman:salt=1
-% \end{verbatim}
-% \end{quote}
-%
-% \noindent Other font options include:
-%
-% \begin{description}
-%
-% \item [mode] \hfill \\
-% \identifier{luaotfload} has two \OpenType processing
-% \emphasis{modes}:
-% \identifier{base} and \identifier{node}.
-%
-% \identifier{base} mode works by mapping \OpenType
-% features to traditional \TEX ligature and kerning mechanisms.
-% Supporting only non-contextual substitutions and kerning
-% pairs, it is the slightly faster, albeit somewhat limited, variant.
-% \identifier{node} mode works by processing \TeX’s internal
-% node list directly at the \LUA end and supports
-% a wider range of \OpenType features.
-% The downside is that the intricate operations required for
-% \identifier{node} mode may slow down typesetting especially
-% with complex fonts and it does not work in math mode.
-%
-% By default \identifier{luaotfload} is in \identifier{node}
-% mode, and \identifier{base} mode has to be requested where needed,
-% e.~g. for math fonts.
-%
-% \item [script] \label{script-tag} \hfill \\
-% An \OpenType script tag;\footnote{%
-% See \url{http://www.microsoft.com/typography/otspec/scripttags.htm}
-% for a list of valid values.
-% For scripts derived from the Latin alphabet the value
-% |latn| is good choice.
-% }
-% the default value is |dlft|.
-% Some fonts, including very popular ones by foundries like Adobe,
-% do not assign features to the |dflt| script, in
-% which case the script needs to be set explicitly.
-%
-% \item [language] \hfill \\
-% An \OpenType language system identifier,\footnote{%
-% Cf. \url{http://www.microsoft.com/typography/otspec/languagetags.htm}.
-% }
-% defaulting to |dflt|.
-%
-% \item [featurefile] \hfill \\
-% A comma-separated list of feature files to be applied to the
-% font.
-% Feature files contain a textual representation of
-% \OpenType tables and extend the features of a font
-% on fly.
-% After they are applied to a font, features defined in a
-% feature file can be enabled or disabled just like any
-% other font feature.
-% The syntax is documented in \identifier{Adobe}’s
-% \OpenType Feature File Specification.\footnote{%
-% Cf. \url{http://www.adobe.com/devnet/opentype/afdko/topic_feature_file_syntax.html}.
-% }
-%
-% For a demonstration of how to set a |tkrn| feature consult
-% the file |tkrn.fea| that is part of \identifier{luaotfload}.
-% It can be read and applied as follows:
-%
-% |\font\test=Latin Modern Roman:featurefile=tkrn.fea;+tkrn|
-%
-% \item [color] \hfill \\
-% A font color, defined as a triplet of two-digit hexadecimal
-% \abbrev{rgb} values, with an optional fourth value for
-% transparency
-% (where |00| is completely transparent and |FF| is opaque).
-%
-% For example, in order to set text in semitransparent red:
-%
-% \begin{quote}
-% \begin{verbatim}
-% \font\test={Latin Modern Roman}:color=FF0000BB
-% \end{verbatim}
-% \end{quote}
-%
-% \item [kernfactor \& letterspace] \hfill \\
-% Define a font with letterspacing (tracking) enabled.
-% In \identifier{luaotfload}, letterspacing is implemented by
-% inserting additional kerning between glyphs.
-%
-% This approach is derived from and still quite similar to the
-% \emphasis{character kerning} (\texmacro{setcharacterkerning} /
-% \texmacro{definecharacterkerning} \& al.) functionality of
-% Context, see the file \fileent{typo-krn.lua} there.
-% The main difference is that \identifier{luaotfload} does not
-% use \LUATEX attributes to assign letterspacing to regions,
-% but defines virtual letterspaced versions of a font.
-%
-% The option \identifier{kernfactor} accepts a numeric value that
-% determines the letterspacing factor to be applied to the font
-% size.
-% E.~g. a kern factor of $0.42$ applied to a $10$ pt font
-% results in $4.2$ pt of additional kerning applied to each
-% pair of glyphs.
-% Ligatures are split into their component glyphs unless
-% explicitly ignored (see below).
-%
-% For compatibility with \XETEX an alternative
-% \identifier{letterspace} option is supplied that interprets the
-% supplied value as a \emphasis{percentage} of the font size but
-% is otherwise identical to \identifier{kernfactor}.
-% Consequently, both definitions in below snippet yield the same
-% letterspacing width:
-%
-% \begin{quote}
-% \begin{verbatim}
-% \font\iwonakernedA="file:Iwona-Regular.otf:kernfactor=0.125"
-% \font\iwonakernedB="file:Iwona-Regular.otf:letterspace=12.5"
-% \end{verbatim}
-% \end{quote}
-%
-% Specific pairs of letters and ligatures may be exempt from
-% letterspacing by defining the \LUA functions
-% \luafunction{keeptogether} and \luafunction{keepligature},
-% respectively, inside the namespace \verb|luaotfload.letterspace|.
-% Both functions are called whenever the letterspacing callback
-% encounters an appropriate node or set of nodes.
-% If they return a true-ish value, no extra kern is inserted at
-% the current position.
-% \luafunction{keeptogether} receives a pair of consecutive
-% glyph nodes in order of their appearance in the node list.
-% \luafunction{keepligature} receives a single node which can be
-% analyzed into components.
-% (For details refer to the \emphasis{glyph nodes} section in the
-% \LUATEX reference manual.)
-% The implementation of both functions is left entirely to the
-% user.
-%
-%
-% \item [protrusion \& expansion] \hfill \\
-% These keys control microtypographic features of the font,
-% namely \emphasis{character protrusion} and \emphasis{font
-% expansion}.
-% Their arguments are names of \LUA tables that contain
-% values for the respective features.\footnote{%
-% For examples of the table layout please refer to the
-% section of the file \fileent{luaotfload-fonts-ext.lua} where the
-% default values are defined.
-% Alternatively and with loss of information, you can dump
-% those tables into your terminal by issuing
-% \begin{verbatim}
-% \directlua{inspect(fonts.protrusions.setups.default)
-% inspect(fonts.expansions.setups.default)}
-% \end{verbatim}
-% at some point after loading \fileent{luaotfload.sty}.
-% }
-% For both, only the set \identifier{default} is predefined.
-%
-% For example, to define a font with the default
-% protrusion vector applied\footnote{%
-% You also need to set
-% \verb|pdfprotrudechars=2| and
-% \verb|pdfadjustspacing=2|
-% to activate protrusion and expansion, respectively.
-% See the
-% \href{http://mirrors.ctan.org/systems/pdftex/manual/pdftex-a.pdf}%
-% {\PDFTEX manual}
-% for details.
-% }:
-%
-% \begin{quote}
-% \begin{verbatim}
-% \font\test=LatinModernRoman:protrusion=default
-% \end{verbatim}
-% \end{quote}
-% \end{description}
-%
-% \paragraph{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 (2013) there are three of them:
-%
-% \begin{description}
-%
-% \item [anum]
-% Substitutes the glyphs in the \abbrev{ascii} number range
-% with their counterparts from eastern Arabic or Persian,
-% depending on the value of \identifier{language}.
-%
-% \item [tlig]
-% Applies legacy \TEX ligatures:
-%
-% \begin{tabular}{rlrl}
-% `` & \verb|``| & '' & \verb|''| \\
-% ` & \verb|`| & ' & \verb|'| \\
-% " & \verb|"| & -- & \verb|--| \\
-% --- & \verb|---| & !` & \verb|!`| \\
-% ?` & \verb|?`| & & \\
-% \end{tabular}
-%
-% \footnote{%
-% These contain the feature set \verb|trep| of earlier
-% versions of \identifier{luaotfload}.
-%
-% Note to \XETEX users: this is the equivalent of the
-% assignment \verb|mapping=text-tex| using \XETEX's input
-% remapping feature.
-% }
-%
-% \item [itlc]
-% Computes italic correction values (active by default).
-%
-% \end{description}
-%
-%
-%
-% \section{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 \href{http://www.lcdf.org/type/}{\fileent{otfinfo}} (comes
-% with \TEX Live), when invoked on a font file with the \verb|-i|
-% option, lists the variety of name fields defined for it.
-% }
-%
-% 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.
-%
-% \subsection[luaotfload-tool / mkluatexfontdb.lua]%
-% {\fileent{luaotfload-tool} /
-% \fileent{mkluatexfontdb.lua}\footnote{%
-% The script may be named just \fileent{mkluatexfontdb} in your
-% distribution.
-% }}
-%
-% 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 (\verb|chmod +x| on unixoid systems) or
-% pass it as an argument to \fileent{texlua}.\footnote{%
-% Tests by the maintainer show only marginal performance gain by
-% running with Luigi Scarso’s
-% \href{https://foundry.supelec.fr/projects/luajittex/}%
-% {\identifier{Luajit\kern-.25ex\TEX}},
-% 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
-% \verb|texlua.exe luaotfload-tool.lua|.
-% }
-% Invoked with the argument \verb|--update| it will perform a database
-% update, scanning for fonts not indexed.
-%
-% \begin{quote}
-% \begin{verbatim}
-% luaotfload-tool --update
-% \end{verbatim}
-% \end{quote}
-%
-% Adding the \verb|--force| switch will initiate a complete
-% rebuild of the database.
-%
-% \begin{quote}
-% \begin{verbatim}
-% luaotfload-tool --update --force
-% \end{verbatim}
-% \end{quote}
-%
-% For sake of backwards compatibility, \fileent{luaotfload-tool} may be
-% renamed or symlinked to \fileent{mkluatexfontdb}.
-% Whenever it is run under this name, it will update the database
-% first, mimicking the behavior of earlier versions of
-% \identifier{luaotfload}.
-%
-% \subsection{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 \verb|man 5 fonts.conf| for further information.
-% On \identifier{Windows} systems, the standard location is
-% \verb|Windows\Fonts|,
-% while \identifier{Mac OS~X} requires a multitude of paths to
-% be examined.
-% The complete list is is given in table \ref{table-searchpaths}.
-% Other paths can be specified by setting the environment variable
-% \verb+OSFONTDIR+.
-% If it is non-empty, then search will be extended to the included
-% directories.
-%
-% \begin{table}[t]
-% \hrule
-% \caption{List of paths searched for each supported operating
-% system.}
-% \renewcommand{\arraystretch}{1.2}
-% \begin{center}
-% \begin{tabular}{lp{.5\textwidth}}
-% Windows & \verb|%WINDIR%\Fonts|
-% \\
-% Linux & \fileent{/usr/local/etc/fonts/fonts.conf} and\hfill\break
-% \fileent{/etc/fonts/fonts.conf}
-% \\
-% Mac & \fileent{\textasciitilde/Library/Fonts},\break
-% \fileent{/Library/Fonts},\break
-% \fileent{/System/Library/Fonts}, and\hfill\break
-% \fileent{/Network/Library/Fonts}
-% \\
-% \end{tabular}
-% \end{center}
-% \label{table-searchpaths}
-% \hrule
-% \end{table}
-%
-% \subsection{Querying from Outside}
-%
-% \fileent{luaotfload-tool} also provides rudimentary means of
-% accessing the information collected in the font database.
-% If the option \verb|--find=|\emphasis{name} is given, the script will
-% try and search the fonts indexed by \identifier{luaotfload} for a
-% matching name.
-% For instance, the invocation
-%
-% \begin{quote}
-% \begin{verbatim}
-% luaotfload-tool --find="Iwona Regular"
-% \end{verbatim}
-% \end{quote}
-%
-% \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
-% \verb|-F| (or \verb|--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
-%
-% \begin{quote}
-% \begin{verbatim}
-% luaotfload-tool -F --find="Iwona Bright"
-% \end{verbatim}
-% \end{quote}
-%
-% \noindent
-% will tell you that indeed the latter name is correct.
-%
-% Basic information about fonts in the database can be displayed
-% using the \verb|-i| option (\verb|--info|).
-% \begin{quote}
-% \begin{verbatim}
-% luaotfload-tool -i --find="Iwona Light Italic"
-% \end{verbatim}
-% \end{quote}
-% \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 \verb|-I| option
-% instead (\verb|--inspect|).
-% \begin{quote}
-% \begin{verbatim}
-% luaotfload-tool -I --find="Iwona Light Italic"
-% \end{verbatim}
-% \end{quote}
-%
-% \verb|luaotfload-tool --help| will list the available command line
-% switches, including some not discussed in detail here.
-% For a full documentation of \identifier{luaotfload-tool} and its
-% capabilities refer to the manpage
-% (\verb|man 1 luaotfload-tool|).\footnote{%
-% Or see \verb|luaotfload-tool.rst| in the source directory.
-% }
-%
-% \subsection{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 \verb|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 (|%|) character until the end of the line
-% is ignored, so use this to add comments.
-% Place this file to some location where the \identifier{kpse}
-% library can find it, e.~g.
-% \fileent{texmf-local/tex/luatex/luaotfload} if you are running
-% \identifier{\TEX Live},\footnote{%
-% You may have to run \verb|mktexlsr| if you created a new file in
-% 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 (|-|) is
-% removed from the blacklist, causing it to be temporarily whitelisted
-% without modifying the global file.
-% An example with explicit paths:
-%
-% \begin{verbatim}
-% % 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.
-% \end{verbatim}
-%
-% \section{Files from \CONTEXT and \LUATEX-Fonts}
-%
-% \identifier{luaotfload} relies on code originally written by Hans
-% Hagen\footnote{%
-% The creator of the \href{http://wiki.contextgarden.net}{\CONTEXT}
-% format.
-% }
-% for and tested with \CONTEXT.
-% It integrates the font loader as distributed in
-% the \identifier{\LUATEX-Fonts} package.
-% The original \LUA source files have been combined using the
-% \fileent{mtx-package} script into a single, self-contained blob.
-% In this form the font loader has no further dependencies\footnote{%
-% It covers, however, to some extent the functionality of 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 from time to time.
-% 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.
-%
-% 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.
-% From \LUATEX-Fonts, only the file \fileent{luatex-fonts-merged.lua}
-% has been imported as \fileent{luaotfload-fontloader.lua}.
-% It is generated by \fileent{mtx-package}, a \LUA source code merging
-% too developed by Hans Hagen.\footnote{%
-% \fileent{mtx-package} is
-% \href
-% {http://repo.or.cz/w/context.git/blob_plain/refs/heads/origin:/scripts/context/lua/mtx-package.lua}
-% {part of \CONTEXT}
-% and requires \fileent{mtxrun}.
-% Run
-% \verb|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.
-% }
-% It houses several \LUA files that can be classed in three
-% categories.
-%
-% \begin{itemize}
-% \let\normalitem=\item
-% \def\incitem#1{%
-% \normalitem{\fileent{#1}}
-% }
-% \normalitem \emphasis{\LUA utility libraries}, a subset
-% of what is provided by the \identifier{lualibs}
-% package.
-%
-% \begin{multicols}{2}
-% \begin{itemize}
-% \incitem{l-lua.lua} \incitem{l-lpeg.lua}
-% \incitem{l-function.lua} \incitem{l-string.lua}
-% \incitem{l-table.lua} \incitem{l-io.lua}
-% \incitem{l-file.lua} \incitem{l-boolean.lua}
-% \incitem{l-math.lua} \incitem{util-str.lua}
-% \end{itemize}
-% \end{multicols}
-%
-% \normalitem The \emphasis{font loader} itself.
-% These files have been written for
-% \LUATEX-Fonts and they are distributed along
-% with \identifier{luaotfload}.
-% \begin{multicols}{2}
-% \begin{itemize}
-% \incitem{luatex-basics-gen.lua}
-% \incitem{luatex-basics-nod.lua}
-% \incitem{luatex-fonts-enc.lua}
-% \incitem{luatex-fonts-syn.lua}
-% \incitem{luatex-fonts-tfm.lua}
-% \incitem{luatex-fonts-chr.lua}
-% \incitem{luatex-fonts-lua.lua}
-% \incitem{luatex-fonts-def.lua}
-% \incitem{luatex-fonts-ext.lua}
-% \incitem{luatex-fonts-cbk.lua}
-% \end{itemize}
-% \end{multicols}
-%
-% \normalitem Code related to \emphasis{font handling and
-% node processing}, taken directly from
-% \CONTEXT.
-% \begin{multicols}{2}
-% \begin{itemize}
-% \incitem{data-con.lua} \incitem{font-ini.lua}
-% \incitem{font-con.lua} \incitem{font-cid.lua}
-% \incitem{font-map.lua} \incitem{font-oti.lua}
-% \incitem{font-otf.lua} \incitem{font-otb.lua}
-% \incitem{node-inj.lua} \incitem{font-ota.lua}
-% \incitem{font-otn.lua} \incitem{font-def.lua}
-% \incitem{font-otp.lua}
-% \end{itemize}
-% \end{multicols}
-% \end{itemize}
-%
-% Note that if \identifier{luaotfload} cannot locate the
-% merged file, it will load the individual \LUA libraries
-% instead.
-% Their names remain the same as in \CONTEXT (without the
-% \verb|otfl|-prefix) since we imported the relevant section of
-% \fileent{luatex-fonts.lua} unmodified into \fileent{luaotfload.lua}.
-% Thus if you prefer running bleeding edge code from the
-% \CONTEXT beta, all you have to do is remove
-% \fileent{luaotfload-merged.lua} from the search path.
-%
-% 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-override.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.
-%
-% \begin{itemize}
-% \let\normalitem=\item
-% \def\ouritem#1{%
-% \normalitem{\fileent{#1}}%
-% \space--\hskip1em
-% }
-% \ouritem {luaotfload-features.lua} font feature handling;
-% incorporates some of the code from
-% \fileent{font-otc} from \CONTEXT;
-% \ouritem {luaotfload-override.lua} overrides the \CONTEXT logging
-% functionality.
-% \ouritem {luaotfload-loaders.lua} registers the \OpenType
-% font reader as handler for
-% Postscript fonts
-% (\abbrev{pfa}, \abbrev{pfb}).
-% \ouritem {luaotfload-database.lua} font names database.
-% \ouritem {luaotfload-colors.lua} color handling.
-% \ouritem {luaotfload-auxiliary.lua} access to internal functionality
-% for package authors
-% (proposals for additions welcome).
-% \ouritem {luaotfload-letterspace.lua} font-based letterspacing.
-% \end{itemize}
-%
-% \begin{figure}[b]
-% \caption{Schematic of the files in \identifier{Luaotfload}}
-% \includegraphics[width=\textwidth]{filegraph.pdf}
-% \label{file-graph}
-% \end{figure}
-%
-% \section{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 \luafunction{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.
-%
-% \subsection{Callback Functions}
-%
-% The \luafunction{patch_font} callback is inserted in the wrapper
-% \identifier{luaotfload} provides for the font definition callback
-% (see below, page \pageref{define-font}).
-% 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}:
-%
-% \begin{quote}
-% \begin{verbatim}
-% \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
-% \end{verbatim}
-% \end{quote}
-%
-% \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.
-%
-% \subsubsection{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.
-%
-% \subsubsection{Patches}
-%
-% These are mostly concerned with establishing compatibility with
-% \XETEX.
-%
-% \begin{itemize}
-% \let\normalitem=\item
-% \def\ouritem#1{%
-% \normalitem{\luafunction{#1}}%
-% \hfill\break
-% }
-%
-% \ouritem {set_sscale_dimens}
-% Calculate \texmacro{fontdimen}s 10 and 11 to emulate \XETEX.
-%
-% \ouritem {set_capheight}
-% Calculates \texmacro{fontdimen} 8 like \XETEX.
-%
-% \ouritem {patch_cambria_domh}
-% Correct some values of the font \emphasis{Cambria Math}.
-%
-% \end{itemize}
-%
-% \subsection{Package Author’s Interface}
-%
-% As \LUATEX release 1.0 is nearing, the demand for a reliable interface
-% for package authors increases.
-%
-% \subsubsection{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.
-%
-% \begin{itemize}
-% \let\normalitem=\item
-% \def\ouritem#1{%
-% \normalitem{\luafunction{#1}}%
-% \hfill\break
-% }
-%
-% \ouritem {aux.font_has_glyph (id : int, index : int)}
-% Predicate that returns true if the font \luafunction{id}
-% has glyph \luafunction{index}.
-%
-% \ouritem {aux.slot_of_name(name : string)}
-% Translates an Adobe Glyph name to the corresponding glyph
-% slot.
-%
-% \ouritem {aux.name_of_slot(slot : int)}
-% The inverse of \luafunction{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
-% \luafunction{name_of_slot}.
-%
-% \ouritem {aux.provides_script(id : int, script : string)}
-% Test if a font supports \luafunction{script}.
-%
-% \ouritem {aux.provides_language(id : int, script : string, language : string)}
-% Test if a font defines \luafunction{language} for a given
-% \luafunction{script}.
-%
-% \ouritem {aux.provides_feature(id : int, script : string,
-% language : string, feature : string)}
-% Test if a font defines \luafunction{feature} for
-% \luafunction{language} for a given \luafunction{script}.
-%
-% \ouritem {aux.get_math_dimension(id : int, dimension : string)}
-% Get the dimension \luafunction{dimension} of font \luafunction{id}.
-%
-% \ouritem {aux.sprint_math_dimension(id : int, dimension : string)}
-% Same as \luafunction{get_math_dimension()}, but output the value
-% in scaled points at the \TEX end.
-%
-% \end{itemize}
-%
-% \subsubsection{Database}
-%
-% \begin{itemize}
-% \let\normalitem=\item
-% \def\ouritem#1{%
-% \normalitem{\luafunction{#1}}%
-% \hfill\break
-% }
-%
-% \ouritem {aux.scan_external_dir(dir : string)}
-% Include fonts in directory \luafunction{dir} in font lookups without
-% adding them to the database.
-%
-% \end{itemize}
-%
-% \section{Troubleshooting}
-%
-% \subsection {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
-% \url{https://github.com/lualatex/luaotfload} where there is an issue
-% tracker for submitting bug reports, feature requests and the likes
-% requests and the likes.
-%
-% Bug reports are more likely to be addressed if they contain the output of
-%
-% \begin{quote}
-% \begin{verbatim}
-% luaotfload-tool --diagnose=environment,files,permissions
-% \end{verbatim}
-% \end{quote}
-%
-% \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}:
-%
-% \begin{quote}
-% \begin{verbatim}
-% luaotfload-tool -fuvvv --log=stdout
-% \end{verbatim}
-% \end{quote}
-%
-% \noindent or to a file in \fileent{/tmp}:
-%
-% \begin{quote}
-% \begin{verbatim}
-% luaotfload-tool -fuvvv --log=file
-% \end{verbatim}
-% \end{quote}
-%
-% \noindent In the latter case, invoke the \verb|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}).
-%
-% \subsection {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 \verb|dflt| script (see above on page
-% \pageref{script-tag}),
-% which is the default one in this package.
-% If this happens, assigning a noth script when the font is defined should
-% fix it.
-% For example with \verb|latn|:
-%
-% \begin{quote}
-% \begin{verbatim}
-% \font\test=file:MyFont.otf:script=latn;+liga;
-% \end{verbatim}
-% \end{quote}
-%
-% You can get a list of features that a font defines for scripts and languages
-% by querying it in \fileent{luaotfload-tool}:
-%
-% \begin{quote}
-% \begin{verbatim}
-% luaotfload-tool --find="Iwona" --inspect
-% \end{verbatim}
-% \end{quote}
-%
-% \subsection {\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
-% \luafunction{aux} namespace over direct manipulation of font objects.
-% For example, raw access to the \luafunction{font.fonts} table like:
-%
-% \begin{quote}
-% \begin{verbatim}
-% local somefont = font.fonts[2]
-% \end{verbatim}
-% \end{quote}
-%
-% \noindent can render already defined fonts unusable.
-% Instead, the function \luafunction{font.getfont()} should be used because
-% it has been replaced by a safe variant.
-%
-% However, \luafunction{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
-% \luafunction{font.getfont()} and \luafunction{font.fonts}.
-% In this case, best define you own accessor:
-%
-% \begin{quote}
-% \begin{verbatim}
-% 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)
-% \end{verbatim}
-% \end{quote}
-%
-% \part{Implementation}
-%
-% \section{\fileent{luaotfload.lua}}
-%
-% This file initializes the system and loads the font loader.
-% To minimize potential conflicts between other packages and the
-% code imported from \CONTEXT, several precautions are in order.
-% Some of the functionality that the font loader expects to be present,
-% like raw access to callbacks, are assumed to have been disabled by
-% \identifier{luatexbase} when this file is processed.
-% In some cases it is possible to trick it by putting dummies into
-% place and restoring the behavior from \identifier{luatexbase} after
-% initilization.
-% Other cases such as attribute allocation require that we hook the
-% functionality from \identifier{luatexbase} into locations where they
-% normally wouldn’t be.
-%
-% Anyways we can import the code base without modifications, which is
-% due mostly to the extra effort by
-% Hans Hagen to make \LUATEX-Fonts self-contained and encapsulate it,
-% and especially due to his willingness to incorporate our suggestions.
-%
-% \iffalse
-%<*lua>
-% \fi
-% \begin{macrocode}
-luaotfload = luaotfload or {}
-local luaotfload = luaotfload
-
-config = config or { }
-config.luaotfload = config.luaotfload or { }
-------.luaotfload.resolver = config.luaotfload.resolver or "normal"
-config.luaotfload.resolver = config.luaotfload.resolver or "cached"
-config.luaotfload.definer = config.luaotfload.definer or "patch"
-config.luaotfload.compatibility = config.luaotfload.compatibility or false
-config.luaotfload.loglevel = config.luaotfload.loglevel or 2
-config.luaotfload.color_callback = config.luaotfload.color_callback or "pre_linebreak_filter"
-config.luaotfload.prioritize = config.luaotfload.prioritize or "sys"
-config.luaotfload.names_dir = config.luaotfload.names_dir or "names"
-config.luaotfload.cache_dir = config.luaotfload.cache_dir or "fonts"
-config.luaotfload.index_file = config.luaotfload.index_file or "luaotfload-names.lua"
-config.luaotfload.formats = config.luaotfload.formats or "otf,ttf,ttc,dfont"
-if not config.luaotfload.strip then
- config.luaotfload.strip = true
-end
-
-luaotfload.module = {
- name = "luaotfload",
- version = 2.40005, --- 2.4-4
- date = "2014/05/18",
- description = "OpenType layout system.",
- author = "Elie Roux & Hans Hagen",
- copyright = "Elie Roux",
- license = "GPL v2.0"
-}
-
-local luatexbase = luatexbase
-
-local setmetatable = setmetatable
-local type, next = type, next
-
-local kpsefind_file = kpse.find_file
-local lfsisfile = lfs.isfile
-
-local add_to_callback, create_callback =
- luatexbase.add_to_callback, luatexbase.create_callback
-local reset_callback, call_callback =
- luatexbase.reset_callback, luatexbase.call_callback
-
-local dummy_function = function () end
-
-local error, warning, info, log =
- luatexbase.provides_module(luaotfload.module)
-
-luaotfload.error = error
-luaotfload.warning = warning
-luaotfload.info = info
-luaotfload.log = log
-
-% \end{macrocode}
-% We set the minimum version requirement for \LUATEX to v0.76,
-% because the font loader requires recent features like direct
-% attribute indexing and \luafunction{node.end_of_math()} that aren’t
-% available in earlier versions.\footnote{%
-% See Taco’s announcement of v0.76:
-% \url{http://comments.gmane.org/gmane.comp.tex.luatex.user/4042}
-% and this commit by Hans that introduced those features.
-% \url{http://repo.or.cz/w/context.git/commitdiff/a51f6cf6ee087046a2ae5927ed4edff0a1acec1b}.
-% }
-%
-% \begin{macrocode}
-
-local luatex_version = 76
-
-if tex.luatexversion < luatex_version then
- warning("LuaTeX v%.2f is old, v%.2f is recommended.",
- tex.luatexversion/100,
- luatex_version /100)
- --- we install a fallback for older versions as a safety
- if not node.end_of_math then
- local math_t = node.id"math"
- local traverse_nodes = node.traverse_id
- node.end_of_math = function (n)
- for n in traverse_nodes(math_t, n.next) do
- return n
- end
- end
- end
-end
-
-% \end{macrocode}
-% \subsection{Module loading}
-% We load the files imported from \CONTEXT with this function.
-% It automatically prepends the prefix \fileent{luaotfload-} to its
-% argument, so we can refer to the files with their actual \CONTEXT name.
-%
-% \begin{macrocode}
-
-local fl_prefix = "luaotfload" -- “luatex” for luatex-plain
-local loadmodule = function (name)
- require(fl_prefix .."-"..name)
-end
-
-% \end{macrocode}
-% Before \TeX Live 2013 version, \LUATEX had a bug that made ofm fonts fail
-% when called with their extension. There was a side-effect making ofm
-% totally unloadable when luaotfload was present. The following lines are
-% a patch for this bug. The utility of these lines is questionable as they
-% are not necessary since \TeX Live 2013. They should be removed in the next
-% version.
-%
-% \begin{macrocode}
-local Cs, P, lpegmatch = lpeg.Cs, lpeg.P, lpeg.match
-
-local p_dot, p_slash = P".", P"/"
-local p_suffix = (p_dot * (1 - p_dot - p_slash)^1 * P(-1)) / ""
-local p_removesuffix = Cs((p_suffix + 1)^1)
-
-local find_vf_file = function (name)
- local fullname = kpsefind_file(name, "ovf")
- if not fullname then
- --fullname = kpsefind_file(file.removesuffix(name), "ovf")
- fullname = kpsefind_file(lpegmatch(p_removesuffix, name), "ovf")
- end
- if fullname then
- log("loading virtual font file %s.", fullname)
- end
- return fullname
-end
-
-% \end{macrocode}
-% \subsection{Preparing the Font Loader}
-% We treat the fontloader as a black box so behavior is consistent
-% between formats.
-% We do no longer run the intermediate wrapper file
-% \fileent{luaotfload-fonts.lua} which we used to import from
-% \href{http://standalone.contextgarden.net/current/context/experimental/tex/generic/context/luatex/}{\LUATEX-Plain}.
-% Rather, we load the fontloader code directly in the same fashion as
-% \identifier{luatex-fonts}.
-% How this is executed depends on the presence on the \emphasis{merged
-% font loader code}.
-% In \identifier{luaotfload} this is contained in the file
-% \fileent{luaotfload-merged.lua}.
-% If this file cannot be found, the original libraries from \CONTEXT of
-% which the merged code was composed are loaded instead.
-% The imported font loader will call \luafunction{callback.register} once
-% while reading \fileent{font-def.lua}.
-% This is unavoidable unless we modify the imported files, but harmless
-% if we make it call a dummy instead.
-% However, this problem might vanish if we decide to do the merging
-% ourselves, like the \identifier{lualibs} package does.
-% With this step we would obtain the freedom to load our own overrides in
-% the process right where they are needed, at the cost of losing
-% encapsulation.
-% The decision on how to progress is currently on indefinite hold.
-%
-% \begin{macrocode}
-
-local starttime = os.gettimeofday()
-
-local trapped_register = callback.register
-callback.register = dummy_function
-
-% \end{macrocode}
-% By default, the fontloader requires a number of \emphasis{private
-% attributes} for internal use.
-% These must be kept consistent with the attribute handling methods as
-% provided by \identifier{luatexbase}.
-% Our strategy is to override the function that allocates new attributes
-% before we initialize the font loader, making it a wrapper around
-% \luafunction{luatexbase.new_attribute}.\footnote{%
-% Many thanks, again, to Hans Hagen for making this part
-% configurable!
-% }
-% The attribute identifiers are prefixed “\fileent{luaotfload@}” to
-% avoid name clashes.
-%
-% \begin{macrocode}
-
-do
- local new_attribute = luatexbase.new_attribute
- local the_attributes = luatexbase.attributes
-
- attributes = attributes or { }
-
- attributes.private = function (name)
- local attr = "luaotfload@" .. name --- used to be: “otfl@”
- local number = the_attributes[attr]
- if not number then
- number = new_attribute(attr)
- end
- return number
- end
-end
-
-% \end{macrocode}
-% These next lines replicate the behavior of \fileent{luatex-fonts.lua}.
-%
-% \begin{macrocode}
-
-local context_environment = { }
-
-local push_namespaces = function ()
- log("push namespace for font loader")
- local normalglobal = { }
- for k, v in next, _G do
- normalglobal[k] = v
- end
- return normalglobal
-end
-
-local pop_namespaces = function (normalglobal, isolate)
- if normalglobal then
- local _G = _G
- local mode = "non-destructive"
- if isolate then mode = "destructive" end
- log("pop namespace from font loader -- " .. mode)
- for k, v in next, _G do
- if not normalglobal[k] then
- context_environment[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(context_environment,_G)
- else
- log("irrecoverable error during pop_namespace: no globals to restore")
- os.exit()
- end
-end
-
-luaotfload.context_environment = context_environment
-luaotfload.push_namespaces = push_namespaces
-luaotfload.pop_namespaces = pop_namespaces
-
-local our_environment = push_namespaces()
-
-% \end{macrocode}
-% The font loader requires that the attribute with index zero be zero.
-% We happily oblige.
-% (Cf. \fileent{luatex-fonts-nod.lua}.)
-%
-% \begin{macrocode}
-
-tex.attribute[0] = 0
-
-% \end{macrocode}
-% Now that things are sorted out we can finally load the fontloader.
-%
-% \begin{macrocode}
-
-loadmodule"fontloader.lua"
----loadmodule"font-odv.lua" --- <= Devanagari support from Context
-
-if fonts then
-
- if not fonts._merge_loaded_message_done_ then
- log [["I am using the merged version of 'luaotfload.lua' here.]]
- log [[ If you run into problems or experience unexpected]]
- log [[ behaviour, and if you have ConTeXt installed you can try]]
- log [[ to delete the file 'luaotfload-merged.lua' as I might]]
- log [[ then use the possibly updated libraries. The merged]]
- log [[ version is not supported as it is a frozen instance.]]
- log [[ Problems can be reported to the ConTeXt mailing list."]]
- end
- fonts._merge_loaded_message_done_ = true
-
-else--- the loading sequence is known to change, so this might have to
- --- be updated with future updates!
- --- do not modify it though unless there is a change to the merged
- --- package!
- 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("util-str.lua")
- loadmodule('luatex-basics-gen.lua')
- loadmodule('data-con.lua')
- loadmodule('luatex-basics-nod.lua')
- loadmodule('font-ini.lua')
- loadmodule('font-con.lua')
- loadmodule('luatex-fonts-enc.lua')
- loadmodule('font-cid.lua')
- loadmodule('font-map.lua')
- loadmodule('luatex-fonts-syn.lua')
- loadmodule('luatex-fonts-tfm.lua')
- loadmodule('font-oti.lua')
- loadmodule('font-otf.lua')
- loadmodule('font-otb.lua')
- loadmodule('node-inj.lua')
- loadmodule('font-ota.lua')
- loadmodule('font-otn.lua')
- loadmodule('font-otp.lua')--- since 2013-04-23
- loadmodule('luatex-fonts-lua.lua')
- loadmodule('font-def.lua')
- loadmodule('luatex-fonts-def.lua')
- loadmodule('luatex-fonts-ext.lua')
- loadmodule('luatex-fonts-cbk.lua')
-end --- non-merge fallback scope
-
-% \end{macrocode}
-% Here we adjust the globals created during font loader initialization.
-% If the second argument to \luafunction{pop_namespaces()} is \verb|true|
-% this will restore the state of \luafunction{_G}, eliminating every
-% global generated since the last call to \luafunction{push_namespaces()}.
-% At the moment we see no reason to do this, and since the font loader is
-% considered an essential part of \identifier{luatex} as well as a very
-% well organized piece of code, we happily concede it the right to add to
-% \luafunction{_G} if needed.
-%
-% \begin{macrocode}
-
-pop_namespaces(our_environment, false)-- true)
-
-log("fontloader loaded in %0.3f seconds", os.gettimeofday()-starttime)
-
-% \end{macrocode}
-% \subsection{Callbacks}
-% After the fontloader is ready we can restore the callback trap from
-% \identifier{luatexbase}.
-%
-% \begin{macrocode}
-
-callback.register = trapped_register
-
-% \end{macrocode}
-% We do our own callback handling with the means provided by luatexbase.
-% Note: \luafunction{pre_linebreak_filter} and \luafunction{hpack_filter}
-% are coupled in \CONTEXT in the concept of \emphasis{node processor}.
-%
-% \begin{macrocode}
-
-add_to_callback("pre_linebreak_filter",
- nodes.simple_font_handler,
- "luaotfload.node_processor",
- 1)
-add_to_callback("hpack_filter",
- nodes.simple_font_handler,
- "luaotfload.node_processor",
- 1)
-add_to_callback("find_vf_file",
- find_vf_file, "luaotfload.find_vf_file")
-
-loadmodule"override.lua" --- “luat-ovr”
-
-logs.set_loglevel(config.luaotfload.loglevel)
-
-% \end{macrocode}
-% Now we load the modules written for \identifier{luaotfload}.
-%
-% \begin{macrocode}
-loadmodule"loaders.lua" --- “font-pfb” new in 2.0, added 2011
-loadmodule"database.lua" --- “font-nms”
-loadmodule"colors.lua" --- “font-clr”
-
-% \end{macrocode}
-% Relying on the \verb|name:| resolver for everything has been the source
-% of permanent trouble with the database.
-% With the introduction of the new syntax parser we now have enough
-% granularity to distinguish between the \XETEX emulation layer and the
-% genuine \verb|name:| and \verb|file:| lookups of \LUATEX-Fonts.
-% Another benefit is that we can now easily plug in or replace new lookup
-% behaviors if necessary.
-% The name resolver remains untouched, but it calls
-% \luafunction{fonts.names.resolve()} internally anyways (see
-% \fileent{luaotfload-database.lua}).
-%
-% \begin{macrocode}
-
-local filesuffix = file.suffix
-local fileremovesuffix = file.removesuffix
-local request_resolvers = fonts.definers.resolvers
-local formats = fonts.formats
-local names = fonts.names
-formats.ofm = "type1"
-
-fonts.encodings.known = fonts.encodings.known or { }
-
-% \end{macrocode}
-% \identifier{luaotfload} promises easy access to system fonts.
-% Without additional precautions, this cannot be achieved by
-% \identifier{kpathsea} alone, because it searches only the
-% \fileent{texmf} directories by default.
-% Although it is possible for \identifier{kpathsea} to include extra
-% paths by adding them to the \verb|OSFONTDIR| environment variable,
-% this is still short of the goal »\emphasis{it just works!}«.
-% When building the font database \identifier{luaotfload} scans
-% system font directories anyways, so we already have all the
-% information for looking sytem fonts.
-% With the release version 2.2 the file names are indexed in the database
-% as well and we are ready to resolve \verb|file:| lookups this way.
-% Thus we no longer need to call the \identifier{kpathsea} library in
-% most cases when looking up font files, only when generating the database,
-% and when verifying the existence of a file in the \fileent{texmf} tree.
-%
-% \begin{macrocode}
-
-local resolve_file = names.crude_file_lookup
---local resolve_file = names.crude_file_lookup_verbose
-local resolve_name = names.resolve_name
-
-local file_resolver = function (specification)
- local name = resolve_file (specification.name)
- local suffix = filesuffix(name)
- if formats[suffix] then
- specification.forced = string.lower (suffix)
- specification.forcedname = file.removesuffix(name)
- else
- specification.name = name
- end
-end
-
-request_resolvers.file = file_resolver
-
-% \end{macrocode}
-% We classify as \verb|anon:| those requests that have neither a
-% prefix nor brackets. According to Khaled\footnote{%
-% \url{https://github.com/phi-gamma/luaotfload/issues/4#issuecomment-17090553}.
-% }
-% they are the \XETEX equivalent of a \verb|name:| request, so we will be
-% treating them as such.
-%
-% \begin{macrocode}
-
---request_resolvers.anon = request_resolvers.name
-
-% \end{macrocode}
-% There is one drawback, though.
-% This syntax is also used for requesting fonts in \identifier{Type1}
-% (\abbrev{tfm}, \abbrev{ofm}) format.
-% These are essentially \verb|file:| lookups and must be caught before
-% the \verb|name:| resolver kicks in, lest they cause the database to
-% update.
-% Even if we were to require the \verb|file:| prefix for all
-% \identifier{Type1} requests, tests have shown that certain fonts still
-% include further fonts (e.~g. \fileent{omlgcb.ofm} will ask for
-% \fileent{omsecob.tfm}) \emphasis{using the old syntax}.
-% For this reason, we introduce an extra check with an early return.
-%
-% \begin{macrocode}
-
-local type1_formats = { "tfm", "ofm", }
-
-request_resolvers.anon = function (specification)
- local name = specification.name
- for i=1, #type1_formats do
- local format = type1_formats[i]
- if resolvers.findfile(name, format) then
- specification.forcedname = file.addsuffix(name, format)
- specification.forced = format
- return
- end
- end
- --- under some weird circumstances absolute paths get
- --- passed to the definer; we have to catch them
- --- before the name: resolver misinterprets them.
- name = specification.specification
- local exists, _ = lfsisfile(name)
- if exists then --- garbage; we do this because we are nice,
- --- not because it is correct
- logs.names_report("log", 1, "load", "file %q exists", name)
- logs.names_report("log", 1, "load",
- "... overriding borked anon: lookup with path: lookup")
- specification.name = name
- request_resolvers.path(specification)
- return
- end
- request_resolvers.name(specification)
-end
-
-% \end{macrocode}
-% Prior to version 2.2, \identifier{luaotfload} did not distinguish
-% \verb|file:| and \verb|path:| lookups, causing complications with the
-% resolver.
-% Now we test if the requested name is an absolute path in the file
-% system, otherwise we fall back to the \verb|file:| lookup.
-%
-% \begin{macrocode}
-
-request_resolvers.path = function (specification)
- local name = specification.name
- local exists, _ = lfsisfile(name)
- if not exists then -- resort to file: lookup
- logs.names_report("log", 1, "load",
- "path lookup of %q unsuccessful, falling back to file:",
- name)
- file_resolver (specification)
- else
- local suffix = filesuffix (name)
- if formats[suffix] then
- specification.forced = string.lower (suffix)
- specification.name = file.removesuffix(name)
- specification.forcedname = name
- else
- specification.name = name
- end
- end
-end
-
-% \end{macrocode}
-% {\bfseries EXPERIMENTAL}:
-% \identifier{kpse}-only resolver, for those who can do without system
-% fonts.
-%
-% \begin{macrocode}
-
-request_resolvers.kpse = function (specification)
- local name = specification.name
- local suffix = filesuffix(name)
- if suffix and formats[suffix] then
- name = file.removesuffix(name)
- if resolvers.findfile(name, suffix) then
- specification.forced = string.lower (suffix)
- specification.forcedname = name
- return
- end
- end
- for t, format in next, formats do --- brute force
- if kpse.find_file (name, format) then
- specification.forced = t
- specification.name = name
- return
- end
- end
-end
-
-% \end{macrocode}
-% The \verb|name:| resolver wraps the database function
-% \luafunction{resolve_name}.
-%
-% \begin{macrocode}
-
---- fonts.names.resolvers.name -- Customized version of the
---- generic name resolver.
-
-request_resolvers.name = function (specification)
- local resolved, subfont = resolve_name (specification)
- if resolved then
- specification.resolved = resolved
- specification.sub = subfont
- specification.forced = string.lower (filesuffix (resolved) or "")
- specification.forcedname = resolved
- specification.name = fileremovesuffix (resolved)
- else
- file_resolver (specification)
- end
-end
-
-% \end{macrocode}
-% Also {\bfseries EXPERIMENTAL}:
-% custom file resolvers via callback.
-%
-% \begin{macrocode}
-create_callback("luaotfload.resolve_font", "simple", dummy_function)
-
-request_resolvers.my = function (specification)
- call_callback("luaotfload.resolve_font", specification)
-end
-
-% \end{macrocode}
-% We create a callback for patching fonts on the fly, to be used by other
-% packages.
-% It initially contains the empty function that we are going to override
-% below.
-%
-% \begin{macrocode}
-
-create_callback("luaotfload.patch_font", "simple", dummy_function)
-
-% \end{macrocode}
-% \subsection{\CONTEXT override}
-% \label{define-font}
-% We provide a simplified version of the original font definition
-% callback.
-%
-% \begin{macrocode}
-
-local read_font_file = fonts.definers.read
-
---- spec -> size -> id -> tmfdata
-local patch_defined_font = function (specification, size, id)
- local tfmdata = read_font_file(specification, size, id)
- if type(tfmdata) == "table" and tfmdata.shared then
- --- We need to test for the “shared” field here
- --- or else the fontspec capheight callback will
- --- operate on tfm fonts.
- call_callback("luaotfload.patch_font", tfmdata, specification)
- end
- return tfmdata
-end
-
-reset_callback "define_font"
-
-% \end{macrocode}
-% Finally we register the callbacks.
-%
-% \begin{macrocode}
-
-local font_definer = config.luaotfload.definer
-
-if font_definer == "generic" then
- add_to_callback("define_font",
- fonts.definers.read,
- "luaotfload.define_font",
- 1)
-elseif font_definer == "patch" then
- add_to_callback("define_font",
- patch_defined_font,
- "luaotfload.define_font",
- 1)
-end
-
-loadmodule"features.lua" --- contains what was “font-ltx” and “font-otc”
-loadmodule"letterspace.lua" --- extra character kerning
-loadmodule"auxiliary.lua" --- additionaly high-level functionality (new)
-
-luaotfload.aux.start_rewrite_fontname () --- to be migrated to fontspec
-
--- vim:tw=71:sw=4:ts=4:expandtab
-
-% \end{macrocode}
-%
-% \iffalse
-%</lua>
-% \fi
-%
-% \section{\fileent{luaotfload.sty}}
-%
-% \iffalse
-%<*package>
-% \fi
-%
-% Classical Plain+\LATEX package initialization.
-%
-% \begin{macrocode}
-\csname ifluaotfloadloaded\endcsname
-\let\ifluaotfloadloaded\endinput
-\bgroup\expandafter\expandafter\expandafter\egroup
-\expandafter\ifx\csname ProvidesPackage\endcsname\relax
- \input luatexbase.sty
-\else
- \NeedsTeXFormat{LaTeX2e}
- \ProvidesPackage{luaotfload}%
- [2014/05/18 v2.4-4 OpenType layout system]
- \RequirePackage{luatexbase}
-\fi
-\ifnum\luatexversion<76
- %% here some deprecation warning would be in order
- \RequireLuaModule{lualibs}
- \RequireLuaModule{luaotfload-legacy}
-\else
- \RequireLuaModule{luaotfload}
-\fi
-\endinput
-% \end{macrocode}
-% \iffalse
-%</package>
-% \fi
-%
-% \clearpage
-% \section{The GNU GPL License v2}
-%
-% The GPL requires the complete license text to be distributed along
-% with the code. I recommend the canonical source, instead:
-% \url{http://www.gnu.org/licenses/old-licenses/gpl-2.0.html}.
-% But if you insist on an included copy, here it is.
-% You might want to zoom in.
-%
-% \newsavebox{\gpl}
-% \begin{lrbox}{\gpl}
-% \begin{minipage}{3\textwidth}
-% \columnsep=3\columnsep
-% \begin{multicols}{3}
-% \begin{center}
-% {\Large GNU GENERAL PUBLIC LICENSE\par}
-% \bigskip
-% {Version 2, June 1991}
-% \end{center}
-%
-% \begin{center}
-% {\parindent 0in
-%
-% Copyright \textcopyright\ 1989, 1991 Free Software Foundation, Inc.
-%
-% \bigskip
-%
-% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
-%
-% \bigskip
-%
-% Everyone is permitted to copy and distribute verbatim copies
-% of this license document, but changing it is not allowed.
-% }
-% \end{center}
-%
-% \begin{center}
-% {\bf\large Preamble}
-% \end{center}
-%
-%
-% The licenses for most software are designed to take away your freedom to
-% share and change it. By contrast, the GNU General Public License is
-% intended to guarantee your freedom to share and change free software---to
-% make sure the software is free for all its users. This General Public
-% License applies to most of the Free Software Foundation's software and to
-% any other program whose authors commit to using it. (Some other Free
-% Software Foundation software is covered by the GNU Library General Public
-% License instead.) You can apply it to your programs, too.
-%
-% When we speak of free software, we are referring to freedom, not price.
-% Our General Public Licenses are designed to make sure that you have the
-% freedom to distribute copies of free software (and charge for this service
-% if you wish), that you receive source code or can get it if you want it,
-% that you can change the software or use pieces of it in new free programs;
-% and that you know you can do these things.
-%
-% To protect your rights, we need to make restrictions that forbid anyone to
-% deny you these rights or to ask you to surrender the rights. These
-% restrictions translate to certain responsibilities for you if you
-% distribute copies of the software, or if you modify it.
-%
-% For example, if you distribute copies of such a program, whether gratis or
-% for a fee, you must give the recipients all the rights that you have. You
-% must make sure that they, too, receive or can get the source code. And
-% you must show them these terms so they know their rights.
-%
-% We protect your rights with two steps: (1) copyright the software, and (2)
-% offer you this license which gives you legal permission to copy,
-% distribute and/or modify the software.
-%
-% Also, for each author's protection and ours, we want to make certain that
-% everyone understands that there is no warranty for this free software. If
-% the software is modified by someone else and passed on, we want its
-% recipients to know that what they have is not the original, so that any
-% problems introduced by others will not reflect on the original authors'
-% reputations.
-%
-% Finally, any free program is threatened constantly by software patents.
-% We wish to avoid the danger that redistributors of a free program will
-% individually obtain patent licenses, in effect making the program
-% proprietary. To prevent this, we have made it clear that any patent must
-% be licensed for everyone's free use or not licensed at all.
-%
-% The precise terms and conditions for copying, distribution and
-% modification follow.
-%
-% \begin{center}
-% {\Large \sc Terms and Conditions For Copying, Distribution and
-% Modification}
-% \end{center}
-%
-% \begin{enumerate}
-% \item
-% This License applies to any program or other work which contains a notice
-% placed by the copyright holder saying it may be distributed under the
-% terms of this General Public License. The ``Program'', below, refers to
-% any such program or work, and a ``work based on the Program'' means either
-% the Program or any derivative work under copyright law: that is to say, a
-% work containing the Program or a portion of it, either verbatim or with
-% modifications and/or translated into another language. (Hereinafter,
-% translation is included without limitation in the term ``modification''.)
-% Each licensee is addressed as ``you''.
-%
-% Activities other than copying, distribution and modification are not
-% covered by this License; they are outside its scope. The act of
-% running the Program is not restricted, and the output from the Program
-% is covered only if its contents constitute a work based on the
-% Program (independent of having been made by running the Program).
-% Whether that is true depends on what the Program does.
-%
-% \item You may copy and distribute verbatim copies of the Program's source
-% code as you receive it, in any medium, provided that you conspicuously
-% and appropriately publish on each copy an appropriate copyright notice
-% and disclaimer of warranty; keep intact all the notices that refer to
-% this License and to the absence of any warranty; and give any other
-% recipients of the Program a copy of this License along with the Program.
-%
-% You may charge a fee for the physical act of transferring a copy, and you
-% may at your option offer warranty protection in exchange for a fee.
-%
-% \item
-% You may modify your copy or copies of the Program or any portion
-% of it, thus forming a work based on the Program, and copy and
-% distribute such modifications or work under the terms of Section 1
-% above, provided that you also meet all of these conditions:
-%
-% \begin{enumerate}
-%
-% \item
-% You must cause the modified files to carry prominent notices stating that
-% you changed the files and the date of any change.
-%
-% \item
-% You must cause any work that you distribute or publish, that in
-% whole or in part contains or is derived from the Program or any
-% part thereof, to be licensed as a whole at no charge to all third
-% parties under the terms of this License.
-%
-% \item
-% If the modified program normally reads commands interactively
-% when run, you must cause it, when started running for such
-% interactive use in the most ordinary way, to print or display an
-% announcement including an appropriate copyright notice and a
-% notice that there is no warranty (or else, saying that you provide
-% a warranty) and that users may redistribute the program under
-% these conditions, and telling the user how to view a copy of this
-% License. (Exception: if the Program itself is interactive but
-% does not normally print such an announcement, your work based on
-% the Program is not required to print an announcement.)
-%
-% \end{enumerate}
-%
-%
-% These requirements apply to the modified work as a whole. If
-% identifiable sections of that work are not derived from the Program,
-% and can be reasonably considered independent and separate works in
-% themselves, then this License, and its terms, do not apply to those
-% sections when you distribute them as separate works. But when you
-% distribute the same sections as part of a whole which is a work based
-% on the Program, the distribution of the whole must be on the terms of
-% this License, whose permissions for other licensees extend to the
-% entire whole, and thus to each and every part regardless of who wrote it.
-%
-% Thus, it is not the intent of this section to claim rights or contest
-% your rights to work written entirely by you; rather, the intent is to
-% exercise the right to control the distribution of derivative or
-% collective works based on the Program.
-%
-% In addition, mere aggregation of another work not based on the Program
-% with the Program (or with a work based on the Program) on a volume of
-% a storage or distribution medium does not bring the other work under
-% the scope of this License.
-%
-% \item
-% You may copy and distribute the Program (or a work based on it,
-% under Section 2) in object code or executable form under the terms of
-% Sections 1 and 2 above provided that you also do one of the following:
-%
-% \begin{enumerate}
-%
-% \item
-%
-% Accompany it with the complete corresponding machine-readable
-% source code, which must be distributed under the terms of Sections
-% 1 and 2 above on a medium customarily used for software interchange; or,
-%
-% \item
-%
-% Accompany it with a written offer, valid for at least three
-% years, to give any third party, for a charge no more than your
-% cost of physically performing source distribution, a complete
-% machine-readable copy of the corresponding source code, to be
-% distributed under the terms of Sections 1 and 2 above on a medium
-% customarily used for software interchange; or,
-%
-% \item
-%
-% Accompany it with the information you received as to the offer
-% to distribute corresponding source code. (This alternative is
-% allowed only for noncommercial distribution and only if you
-% received the program in object code or executable form with such
-% an offer, in accord with Subsection b above.)
-%
-% \end{enumerate}
-%
-%
-% The source code for a work means the preferred form of the work for
-% making modifications to it. For an executable work, complete source
-% code means all the source code for all modules it contains, plus any
-% associated interface definition files, plus the scripts used to
-% control compilation and installation of the executable. However, as a
-% special exception, the source code distributed need not include
-% anything that is normally distributed (in either source or binary
-% form) with the major components (compiler, kernel, and so on) of the
-% operating system on which the executable runs, unless that component
-% itself accompanies the executable.
-%
-% If distribution of executable or object code is made by offering
-% access to copy from a designated place, then offering equivalent
-% access to copy the source code from the same place counts as
-% distribution of the source code, even though third parties are not
-% compelled to copy the source along with the object code.
-%
-% \item
-% You may not copy, modify, sublicense, or distribute the Program
-% except as expressly provided under this License. Any attempt
-% otherwise to copy, modify, sublicense or distribute the Program is
-% void, and will automatically terminate your rights under this License.
-% However, parties who have received copies, or rights, from you under
-% this License will not have their licenses terminated so long as such
-% parties remain in full compliance.
-%
-% \item
-% You are not required to accept this License, since you have not
-% signed it. However, nothing else grants you permission to modify or
-% distribute the Program or its derivative works. These actions are
-% prohibited by law if you do not accept this License. Therefore, by
-% modifying or distributing the Program (or any work based on the
-% Program), you indicate your acceptance of this License to do so, and
-% all its terms and conditions for copying, distributing or modifying
-% the Program or works based on it.
-%
-% \item
-% Each time you redistribute the Program (or any work based on the
-% Program), the recipient automatically receives a license from the
-% original licensor to copy, distribute or modify the Program subject to
-% these terms and conditions. You may not impose any further
-% restrictions on the recipients' exercise of the rights granted herein.
-% You are not responsible for enforcing compliance by third parties to
-% this License.
-%
-% \item
-% If, as a consequence of a court judgment or allegation of patent
-% infringement or for any other reason (not limited to patent issues),
-% conditions are imposed on you (whether by court order, agreement or
-% otherwise) that contradict the conditions of this License, they do not
-% excuse you from the conditions of this License. If you cannot
-% distribute so as to satisfy simultaneously your obligations under this
-% License and any other pertinent obligations, then as a consequence you
-% may not distribute the Program at all. For example, if a patent
-% license would not permit royalty-free redistribution of the Program by
-% all those who receive copies directly or indirectly through you, then
-% the only way you could satisfy both it and this License would be to
-% refrain entirely from distribution of the Program.
-%
-% If any portion of this section is held invalid or unenforceable under
-% any particular circumstance, the balance of the section is intended to
-% apply and the section as a whole is intended to apply in other
-% circumstances.
-%
-% It is not the purpose of this section to induce you to infringe any
-% patents or other property right claims or to contest validity of any
-% such claims; this section has the sole purpose of protecting the
-% integrity of the free software distribution system, which is
-% implemented by public license practices. Many people have made
-% generous contributions to the wide range of software distributed
-% through that system in reliance on consistent application of that
-% system; it is up to the author/donor to decide if he or she is willing
-% to distribute software through any other system and a licensee cannot
-% impose that choice.
-%
-% This section is intended to make thoroughly clear what is believed to
-% be a consequence of the rest of this License.
-%
-% \item
-% If the distribution and/or use of the Program is restricted in
-% certain countries either by patents or by copyrighted interfaces, the
-% original copyright holder who places the Program under this License
-% may add an explicit geographical distribution limitation excluding
-% those countries, so that distribution is permitted only in or among
-% countries not thus excluded. In such case, this License incorporates
-% the limitation as if written in the body of this License.
-%
-% \item
-% The Free Software Foundation may publish revised and/or new versions
-% of the General Public License from time to time. Such new versions will
-% be similar in spirit to the present version, but may differ in detail to
-% address new problems or concerns.
-%
-% Each version is given a distinguishing version number. If the Program
-% specifies a version number of this License which applies to it and ``any
-% later version'', you have the option of following the terms and conditions
-% either of that version or of any later version published by the Free
-% Software Foundation. If the Program does not specify a version number of
-% this License, you may choose any version ever published by the Free Software
-% Foundation.
-%
-% \item
-% If you wish to incorporate parts of the Program into other free
-% programs whose distribution conditions are different, write to the author
-% to ask for permission. For software which is copyrighted by the Free
-% Software Foundation, write to the Free Software Foundation; we sometimes
-% make exceptions for this. Our decision will be guided by the two goals
-% of preserving the free status of all derivatives of our free software and
-% of promoting the sharing and reuse of software generally.
-%
-% \begin{center}
-% {\Large\sc
-% No Warranty
-% }
-% \end{center}
-%
-% \item
-% {\sc Because the program is licensed free of charge, there is no warranty
-% for the program, to the extent permitted by applicable law. Except when
-% otherwise stated in writing the copyright holders and/or other parties
-% provide the program ``as is'' without warranty of any kind, either expressed
-% or implied, including, but not limited to, the implied warranties of
-% merchantability and fitness for a particular purpose. The entire risk as
-% to the quality and performance of the program is with you. Should the
-% program prove defective, you assume the cost of all necessary servicing,
-% repair or correction.}
-%
-% \item
-% {\sc In no event unless required by applicable law or agreed to in writing
-% will any copyright holder, or any other party who may modify and/or
-% redistribute the program as permitted above, be liable to you for damages,
-% including any general, special, incidental or consequential damages arising
-% out of the use or inability to use the program (including but not limited
-% to loss of data or data being rendered inaccurate or losses sustained by
-% you or third parties or a failure of the program to operate with any other
-% programs), even if such holder or other party has been advised of the
-% possibility of such damages.}
-%
-% \end{enumerate}
-%
-%
-% \begin{center}
-% {\Large\sc End of Terms and Conditions}
-% \end{center}
-%
-%
-% \pagebreak[2]
-%
-% \section*{Appendix: How to Apply These Terms to Your New Programs}
-%
-% If you develop a new program, and you want it to be of the greatest
-% possible use to the public, the best way to achieve this is to make it
-% free software which everyone can redistribute and change under these
-% terms.
-%
-% To do so, attach the following notices to the program. It is safest to
-% attach them to the start of each source file to most effectively convey
-% the exclusion of warranty; and each file should have at least the
-% ``copyright'' line and a pointer to where the full notice is found.
-%
-% \begin{quote}
-% one line to give the program's name and a brief idea of what it does. \\
-% Copyright (C) yyyy name of author \\
-%
-% This program is free software; you can redistribute it and/or modify
-% it under the terms of the GNU General Public License as published by
-% the Free Software Foundation; either version 2 of the License, or
-% (at your option) any later version.
-%
-% This program is distributed in the hope that it will be useful,
-% but WITHOUT ANY WARRANTY; without even the implied warranty of
-% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-% GNU General Public License for more details.
-%
-% You should have received a copy of the GNU General Public License
-% along with this program; if not, write to the Free Software
-% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-% \end{quote}
-%
-% Also add information on how to contact you by electronic and paper mail.
-%
-% If the program is interactive, make it output a short notice like this
-% when it starts in an interactive mode:
-%
-% \begin{quote}
-% Gnomovision version 69, Copyright (C) yyyy name of author \\
-% Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. \\
-% This is free software, and you are welcome to redistribute it
-% under certain conditions; type `show c' for details.
-% \end{quote}
-%
-%
-% The hypothetical commands {\tt show w} and {\tt show c} should show the
-% appropriate parts of the General Public License. Of course, the commands
-% you use may be called something other than {\tt show w} and {\tt show c};
-% they could even be mouse-clicks or menu items---whatever suits your
-% program.
-%
-% You should also get your employer (if you work as a programmer) or your
-% school, if any, to sign a ``copyright disclaimer'' for the program, if
-% necessary. Here is a sample; alter the names:
-%
-% \begin{quote}
-% Yoyodyne, Inc., hereby disclaims all copyright interest in the program \\
-% `Gnomovision' (which makes passes at compilers) written by James Hacker. \\
-%
-% signature of Ty Coon, 1 April 1989 \\
-% Ty Coon, President of Vice
-% \end{quote}
-%
-%
-% This General Public License does not permit incorporating your program
-% into proprietary programs. If your program is a subroutine library, you
-% may consider it more useful to permit linking proprietary applications
-% with the library. If this is what you want to do, use the GNU Library
-% General Public License instead of this License.
-%
-% \end{multicols}
-% \end{minipage}
-% \end{lrbox}
-%
-% \begin{center}
-% \scalebox{0.33}{\usebox{\gpl}}
-% \end{center}
-%
-% \Finale
-\endinput