pdftex[796] branches/stable/source: sync for final pdftex 1.40.19

commits+karl at tug.org commits+karl at tug.org
Sun Apr 22 17:47:12 CEST 2018


Revision: 796
          http://tug.org/svn/pdftex?view=revision&revision=796
Author:   karl
Date:     2018-04-22 17:47:12 +0200 (Sun, 22 Apr 2018)
Log Message:
-----------
sync for final pdftex 1.40.19 from TL 2018 (r47463)

Revision Links:
--------------
    http://tug.org/svn/pdftex?view=revision&revision=47463

Modified Paths:
--------------
    branches/stable/source/Makefile
    branches/stable/source/src/build-aux/ar-lib
    branches/stable/source/src/build-aux/compile
    branches/stable/source/src/build-aux/config.guess
    branches/stable/source/src/build-aux/config.sub
    branches/stable/source/src/build-aux/depcomp
    branches/stable/source/src/build-aux/install-sh
    branches/stable/source/src/build-aux/texinfo.tex
    branches/stable/source/src/configure
    branches/stable/source/src/doc/ChangeLog
    branches/stable/source/src/doc/Makefile.am
    branches/stable/source/src/doc/Makefile.in
    branches/stable/source/src/doc/README.solaris
    branches/stable/source/src/doc/tlbuild-incl/install-tl.texi
    branches/stable/source/src/doc/tlbuild-incl/tlmgr.texi
    branches/stable/source/src/doc/tlbuild.info
    branches/stable/source/src/doc/tlbuild.texi
    branches/stable/source/src/libs/README
    branches/stable/source/src/libs/poppler/ChangeLog
    branches/stable/source/src/libs/poppler/Makefile.am
    branches/stable/source/src/libs/poppler/Makefile.in
    branches/stable/source/src/libs/poppler/TLpatches/ChangeLog
    branches/stable/source/src/libs/poppler/TLpatches/TL-Changes
    branches/stable/source/src/libs/poppler/config.h.in
    branches/stable/source/src/libs/poppler/configure
    branches/stable/source/src/libs/poppler/configure.ac
    branches/stable/source/src/libs/poppler/poppler-src/CMakeLists.txt
    branches/stable/source/src/libs/poppler/poppler-src/ChangeLog
    branches/stable/source/src/libs/poppler/poppler-src/NEWS
    branches/stable/source/src/libs/poppler/poppler-src/fofi/FoFiBase.cc
    branches/stable/source/src/libs/poppler/poppler-src/fofi/FoFiBase.h
    branches/stable/source/src/libs/poppler/poppler-src/fofi/FoFiEncodings.cc
    branches/stable/source/src/libs/poppler/poppler-src/fofi/FoFiIdentifier.cc
    branches/stable/source/src/libs/poppler/poppler-src/fofi/FoFiTrueType.cc
    branches/stable/source/src/libs/poppler/poppler-src/fofi/FoFiType1.cc
    branches/stable/source/src/libs/poppler/poppler-src/fofi/FoFiType1C.cc
    branches/stable/source/src/libs/poppler/poppler-src/goo/GooHash.cc
    branches/stable/source/src/libs/poppler/poppler-src/goo/GooMutex.h
    branches/stable/source/src/libs/poppler/poppler-src/goo/GooString.cc
    branches/stable/source/src/libs/poppler/poppler-src/goo/GooTimer.cc
    branches/stable/source/src/libs/poppler/poppler-src/goo/ImgWriter.h
    branches/stable/source/src/libs/poppler/poppler-src/goo/PNGWriter.cc
    branches/stable/source/src/libs/poppler/poppler-src/goo/TiffWriter.cc
    branches/stable/source/src/libs/poppler/poppler-src/goo/gfile.cc
    branches/stable/source/src/libs/poppler/poppler-src/goo/gfile.h
    branches/stable/source/src/libs/poppler/poppler-src/goo/glibc.h
    branches/stable/source/src/libs/poppler/poppler-src/goo/glibc_strtok_r.cc
    branches/stable/source/src/libs/poppler/poppler-src/goo/gmem.cc
    branches/stable/source/src/libs/poppler/poppler-src/goo/grandom.cc
    branches/stable/source/src/libs/poppler/poppler-src/goo/gstrtod.cc
    branches/stable/source/src/libs/poppler/poppler-src/gtkdoc.py
    branches/stable/source/src/libs/poppler/poppler-src/poppler/Annot.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/Annot.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/Array.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/Array.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/BuiltinFont.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/BuiltinFont.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/BuiltinFontTables.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/CMap.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/CMap.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/CachedFile.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/CachedFile.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/CairoFontEngine.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/CairoFontEngine.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/CairoOutputDev.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/CairoOutputDev.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/CairoRescaleBox.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/CairoRescaleBox.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/Catalog.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/Catalog.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/CharCodeToUnicode.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/CharCodeToUnicode.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/CurlCachedFile.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/DCTStream.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/DateInfo.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/Decrypt.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/Dict.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/Dict.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/Error.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/ErrorCodes.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/FileSpec.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/FileSpec.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/FontEncodingTables.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/FontInfo.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/FontInfo.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/Form.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/Form.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/Function.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/Function.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/Gfx.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/Gfx.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/GfxFont.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/GfxFont.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/GfxState.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/GfxState.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/GlobalParams.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/GlobalParams.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/GlobalParamsWin.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/Hints.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/Hints.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/JArithmeticDecoder.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/JArithmeticDecoder.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/JBIG2Stream.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/JPEG2000Stream.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/Lexer.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/Lexer.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/Linearization.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/Link.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/Link.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/MarkedContentOutputDev.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/MarkedContentOutputDev.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/Movie.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/Movie.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/NameToCharCode.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/NameToCharCode.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/NameToUnicodeTable.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/Object.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/OptionalContent.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/OptionalContent.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/Outline.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/Outline.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/OutputDev.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/OutputDev.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/PDFDoc.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/PDFDoc.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/PDFDocBuilder.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/PDFDocFactory.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/PSOutputDev.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/PSOutputDev.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/PSTokenizer.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/Page.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/Page.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/PageLabelInfo.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/PageLabelInfo.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/Parser.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/Parser.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/PopplerCache.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/PopplerCache.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/Rendition.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/Rendition.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/SecurityHandler.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/SecurityHandler.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/SignatureHandler.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/Sound.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/Sound.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/SplashOutputDev.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/SplashOutputDev.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/StdinCachedFile.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/StdinPDFDocBuilder.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/Stream.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/Stream.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/StructElement.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/StructElement.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/StructTreeRoot.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/StructTreeRoot.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/TextOutputDev.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/TextOutputDev.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/UTF.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/UnicodeMap.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/UnicodeMap.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/UnicodeMapFuncs.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/UnicodeTypeTable.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/XRef.cc
    branches/stable/source/src/libs/poppler/poppler-src/poppler/XRef.h
    branches/stable/source/src/libs/poppler/poppler-src/poppler/poppler-config.h.cmake
    branches/stable/source/src/libs/poppler/version.ac
    branches/stable/source/src/tardate.ac
    branches/stable/source/src/texk/README
    branches/stable/source/src/texk/kpathsea/ChangeLog
    branches/stable/source/src/texk/kpathsea/NEWS
    branches/stable/source/src/texk/kpathsea/tex-glyph.c
    branches/stable/source/src/texk/kpathsea/tex-glyph.h
    branches/stable/source/src/texk/kpathsea/texmf.cnf
    branches/stable/source/src/texk/tests/TeXLive/TLConfig.pm
    branches/stable/source/src/texk/tests/TeXLive/TLUtils.pm
    branches/stable/source/src/texk/web2c/ChangeLog
    branches/stable/source/src/texk/web2c/Makefile.in
    branches/stable/source/src/texk/web2c/NEWS
    branches/stable/source/src/texk/web2c/etexdir/ChangeLog
    branches/stable/source/src/texk/web2c/etexdir/tex.ech
    branches/stable/source/src/texk/web2c/lib/ChangeLog
    branches/stable/source/src/texk/web2c/lib/texmfmp.c
    branches/stable/source/src/texk/web2c/pdftexdir/ChangeLog
    branches/stable/source/src/texk/web2c/pdftexdir/NEWS
    branches/stable/source/src/texk/web2c/pdftexdir/pdftex.ch
    branches/stable/source/src/texk/web2c/pdftexdir/pdftex.web
    branches/stable/source/src/texk/web2c/pdftexdir/pdftoepdf-newpoppler.cc
    branches/stable/source/src/texk/web2c/web2c/ChangeLog
    branches/stable/source/src/utils/README

Added Paths:
-----------
    branches/stable/source/src/libs/poppler/TLpatches/patch-03-time
    branches/stable/source/src/libs/poppler/TLpatches/patch-05-w32
    branches/stable/source/src/libs/poppler/poppler-src/poppler/UnicodeMapFuncs.cc

Removed Paths:
-------------
    branches/stable/source/src/libs/poppler/TLpatches/patch-04-ctime

Modified: branches/stable/source/Makefile
===================================================================
--- branches/stable/source/Makefile	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/Makefile	2018-04-22 15:47:12 UTC (rev 796)
@@ -27,11 +27,11 @@
 # rerun this.  Repeat until all files are empty.
 svnstatus:
 	svn status >/tmp/sat
-	-grep -v '^[MDA?]' /tmp/sat >/tmp/sun  # unknown
+	-grep -v '^[MDA?!]' /tmp/sat >/tmp/sun # unknown
 	ls -l /tmp/sun
 	@echo
-	sed -n 's/^\?//p' /tmp/sat >/tmp/sad  # add these
+	sed -n 's/^\?//p'   /tmp/sat >/tmp/sad # add these
 	ls -l /tmp/sad
 	@echo
-	sed -n 's/^!//p'  /tmp/sat >/tmp/srm  # remove these
+	sed -n 's/^!//p'    /tmp/sat >/tmp/srm # remove these
 	ls -l /tmp/srm

Modified: branches/stable/source/src/build-aux/ar-lib
===================================================================
--- branches/stable/source/src/build-aux/ar-lib	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/build-aux/ar-lib	2018-04-22 15:47:12 UTC (rev 796)
@@ -4,7 +4,7 @@
 me=ar-lib
 scriptversion=2012-03-01.08; # UTC
 
-# Copyright (C) 2010-2017 Free Software Foundation, Inc.
+# Copyright (C) 2010-2018 Free Software Foundation, Inc.
 # Written by Peter Rosin <peda at lysator.liu.se>.
 #
 # This program is free software; you can redistribute it and/or modify

Modified: branches/stable/source/src/build-aux/compile
===================================================================
--- branches/stable/source/src/build-aux/compile	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/build-aux/compile	2018-04-22 15:47:12 UTC (rev 796)
@@ -1,7 +1,7 @@
 #! /bin/sh
 # Wrapper for compilers which do not understand '-c -o'.
 
-scriptversion=2017-09-16.17; # UTC
+scriptversion=2018-03-07.03; # UTC
 
 # Copyright (C) 1999-2018 Free Software Foundation, Inc.
 # Written by Tom Tromey <tromey at cygnus.com>.
@@ -340,7 +340,7 @@
 # Local Variables:
 # mode: shell-script
 # sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
 # time-stamp-time-zone: "UTC0"

Modified: branches/stable/source/src/build-aux/config.guess
===================================================================
--- branches/stable/source/src/build-aux/config.guess	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/build-aux/config.guess	2018-04-22 15:47:12 UTC (rev 796)
@@ -2,7 +2,7 @@
 # Attempt to guess a canonical system name.
 #   Copyright 1992-2018 Free Software Foundation, Inc.
 
-timestamp='2018-02-24'
+timestamp='2018-03-08'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -1046,11 +1046,7 @@
 	echo "$UNAME_MACHINE"-dec-linux-"$LIBC"
 	exit ;;
     x86_64:Linux:*:*)
-	if objdump -f /bin/sh | grep -q elf32-x86-64; then
-	    echo "$UNAME_MACHINE"-pc-linux-"$LIBC"x32
-	else
-	    echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
-	fi
+	echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
 	exit ;;
     xtensa*:Linux:*:*)
 	echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
@@ -1473,7 +1469,7 @@
 exit 1
 
 # Local variables:
-# eval: (add-hook 'write-file-functions 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
 # time-stamp-start: "timestamp='"
 # time-stamp-format: "%:y-%02m-%02d"
 # time-stamp-end: "'"

Modified: branches/stable/source/src/build-aux/config.sub
===================================================================
--- branches/stable/source/src/build-aux/config.sub	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/build-aux/config.sub	2018-04-22 15:47:12 UTC (rev 796)
@@ -2,7 +2,7 @@
 # Configuration validation subroutine script.
 #   Copyright 1992-2018 Free Software Foundation, Inc.
 
-timestamp='2018-02-22'
+timestamp='2018-03-08'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -1376,7 +1376,7 @@
 	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
 	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
 	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
-	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* | -hcos* \
 	      | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \
 	      | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
 	      | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
@@ -1794,7 +1794,7 @@
 exit
 
 # Local variables:
-# eval: (add-hook 'write-file-functions 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
 # time-stamp-start: "timestamp='"
 # time-stamp-format: "%:y-%02m-%02d"
 # time-stamp-end: "'"

Modified: branches/stable/source/src/build-aux/depcomp
===================================================================
--- branches/stable/source/src/build-aux/depcomp	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/build-aux/depcomp	2018-04-22 15:47:12 UTC (rev 796)
@@ -1,7 +1,7 @@
 #! /bin/sh
 # depcomp - compile a program generating dependencies as side-effects
 
-scriptversion=2017-09-16.17; # UTC
+scriptversion=2018-03-07.03; # UTC
 
 # Copyright (C) 1999-2018 Free Software Foundation, Inc.
 
@@ -783,7 +783,7 @@
 # Local Variables:
 # mode: shell-script
 # sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
 # time-stamp-time-zone: "UTC0"

Modified: branches/stable/source/src/build-aux/install-sh
===================================================================
--- branches/stable/source/src/build-aux/install-sh	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/build-aux/install-sh	2018-04-22 15:47:12 UTC (rev 796)
@@ -1,7 +1,7 @@
 #!/bin/sh
 # install - install a program, script, or datafile
 
-scriptversion=2017-09-23.17; # UTC
+scriptversion=2018-03-11.20; # UTC
 
 # This originates from X11R5 (mit/util/scripts/install.sh), which was
 # later released in X11R6 (xc/config/util/install.sh) with the
@@ -332,11 +332,19 @@
             # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
             ;;
           *)
+            # Note that $RANDOM variable is not portable (e.g. dash);  Use it
+            # here however when possible just to lower collision chance.
             tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
-            trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
 
+            trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+            # Because "mkdir -p" follows existing symlinks and we likely work
+            # directly in world-writeable /tmp, make sure that the '$tmpdir'
+            # directory is successfully created first before we actually test
+            # 'mkdir -p' feature.
             if (umask $mkdir_umask &&
-                exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+                $mkdirprog $mkdir_mode "$tmpdir" &&
+                exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
             then
               if test -z "$dir_arg" || {
                    # Check for POSIX incompatibilities with -m.
@@ -343,23 +351,24 @@
                    # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
                    # other-writable bit of parent directory when it shouldn't.
                    # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
-                   ls_ld_tmpdir=`ls -ld "$tmpdir"`
+                   test_tmpdir="$tmpdir/a"
+                   ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
                    case $ls_ld_tmpdir in
                      d????-?r-*) different_mode=700;;
                      d????-?--*) different_mode=755;;
                      *) false;;
                    esac &&
-                   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
-                     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+                   $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
+                     ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
                      test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
                    }
                  }
               then posix_mkdir=:
               fi
-              rmdir "$tmpdir/d" "$tmpdir"
+              rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
             else
               # Remove any dirs left behind by ancient mkdir implementations.
-              rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+              rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
             fi
             trap '' 0;;
         esac;;
@@ -501,7 +510,7 @@
 done
 
 # Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
 # time-stamp-time-zone: "UTC0"

Modified: branches/stable/source/src/build-aux/texinfo.tex
===================================================================
--- branches/stable/source/src/build-aux/texinfo.tex	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/build-aux/texinfo.tex	2018-04-22 15:47:12 UTC (rev 796)
@@ -3,7 +3,7 @@
 % Load plain if necessary, i.e., if running under initex.
 \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
 %
-\def\texinfoversion{2018-01-09.11}
+\def\texinfoversion{2018-03-10.14}
 %
 % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
 % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
@@ -11715,7 +11715,7 @@
 @markupsetuprqdefault
 
 @c Local variables:
- at c eval: (add-hook 'write-file-hooks 'time-stamp)
+ at c eval: (add-hook 'before-save-hook 'time-stamp)
 @c page-delimiter: "^\\\\message\\|emacs-page"
 @c time-stamp-start: "def\\\\texinfoversion{"
 @c time-stamp-format: "%:y-%02m-%02d.%02H"

Modified: branches/stable/source/src/configure
===================================================================
--- branches/stable/source/src/configure	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/configure	2018-04-22 15:47:12 UTC (rev 796)
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for TeX Live 2017-06-20.
+# Generated by GNU Autoconf 2.69 for TeX Live 2018-04-14.
 #
 # Report bugs to <tex-k at tug.org>.
 #
@@ -590,8 +590,8 @@
 # Identity of this package.
 PACKAGE_NAME='TeX Live'
 PACKAGE_TARNAME='tex-live'
-PACKAGE_VERSION='2017-06-20'
-PACKAGE_STRING='TeX Live 2017-06-20'
+PACKAGE_VERSION='2018-04-14'
+PACKAGE_STRING='TeX Live 2018-04-14'
 PACKAGE_BUGREPORT='tex-k at tug.org'
 PACKAGE_URL=''
 
@@ -1505,7 +1505,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures TeX Live 2017-06-20 to adapt to many kinds of systems.
+\`configure' configures TeX Live 2018-04-14 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1579,7 +1579,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of TeX Live 2017-06-20:";;
+     short | recursive ) echo "Configuration of TeX Live 2018-04-14:";;
    esac
   cat <<\_ACEOF
 
@@ -1893,7 +1893,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-TeX Live configure 2017-06-20
+TeX Live configure 2018-04-14
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2670,7 +2670,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by TeX Live $as_me 2017-06-20, which was
+It was created by TeX Live $as_me 2018-04-14, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -10807,7 +10807,7 @@
 
 # Define the identity of the package.
  PACKAGE='tex-live'
- VERSION='2017-06-20'
+ VERSION='2018-04-14'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -22870,7 +22870,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by TeX Live $as_me 2017-06-20, which was
+This file was extended by TeX Live $as_me 2018-04-14, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -22927,7 +22927,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-TeX Live config.status 2017-06-20
+TeX Live config.status 2018-04-14
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 

Modified: branches/stable/source/src/doc/ChangeLog
===================================================================
--- branches/stable/source/src/doc/ChangeLog	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/doc/ChangeLog	2018-04-22 15:47:12 UTC (rev 796)
@@ -1,3 +1,12 @@
+2018-04-10  Karl Berry  <karl at tug.org>
+
+	* tlbuild.texi (Cross compilation): move to under Building.
+	(Continuous integration): restrucuture.
+	
+	* Makefile.am (*_node_{good,bad}): update for current pod doc.
+	($(mydoc)-incl.texi): hint to symlink scripts for pod2texi.
+	
+
 2018-02-20  Karl Berry  <karl at freefriends.org>
 
 	* tlbuild.texi (Continuous integration): Texinfo syntax, wording.

Modified: branches/stable/source/src/doc/Makefile.am
===================================================================
--- branches/stable/source/src/doc/Makefile.am	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/doc/Makefile.am	2018-04-22 15:47:12 UTC (rev 796)
@@ -1,5 +1,6 @@
 ## Makefile.am for the TeX Live subdirectory ./doc/
 ##
+## Copyright 2015-2018 Karl Berry <tex-live at tug.org>
 ## Copyright 2013-2015 Peter Breitenlohner <tex-live at tug.org>
 ## You may freely use, modify and/or distribute this file.
 ##
@@ -53,27 +54,35 @@
 # The \@... in the replacements are escaping the @ in a Perl
 # double-quote context, i.e., not an array.
 # 
-update_node_bad  = ref{tlmgr update [option]... [pkg]...,
-update_node_bad2  = ref{tlmgr update,
-update_node_good = ref{tlmgr update [\@emph{option}]... [\@emph{pkg}]...,
+update_node_bad  = ref{tlmgr update [option...] [pkg...],
+update_node_good = ref{tlmgr update [\@emph{option}...] [\@emph{pkg}...],
 #
-restore_node_bad = ref{tlmgr restore,
-restore_node_good = ref{tlmgr restore [--backupdir \@emph{dir}] [--all | \@emph{pkg} [\@emph{rev}]],
+update_node_bad2  = [option...] [pkg...], update
+update_node_good2  = [\@emph{option}...] [@emph{pkg}...], update
 #
-install_node_bad = ref{tlmgr install [option]... pkg...,
-install_node_good = ref{tlmgr install [\@emph{option}]... \@emph{pkg}...,
+remove_node_bad = ref{tlmgr remove [option...] pkg...,
+remove_node_good = ref{tlmgr remove [\@emph{option}...] \@emph{pkg}...,
+#
+install_node_bad = ref{tlmgr install [option...] pkg...,
+install_node_good = ref{tlmgr install [\@emph{option}...] \@emph{pkg}...,
 
 # we don't actually use the (autogenerated) -incl.texi file,
-# but it makes for a convenient target. Copy the scripts into the build dir.
+# but it makes for a convenient target.
+# 
+# First make symlinks in build dir:
+# ln -s .../tlmgr.pl .../Build/source/Work/doc
+# ln -s .../install-tl .../Build/source/Work/doc
 $(mydoc)-incl.texi: install-tl tlmgr.pl 
 	$(pod2texi) -o $@ --subdir=$(mydoc)-incl $(pod2texi_args) $^
 	cp $(mydoc)-incl/tlmgr.texi $(mydoc)-incl/tlmgr.texi.orig
 	perl -pi \
           -e 's/\Q$(update_node_bad)\E/$(update_node_good)/' \
-          -e ';s/\Q$(update_node_bad2)\E/$(update_node_good),/' \
+          -e ';s/\Q$(update_node_bad2)\E/$(update_node_good2),/' \
           -e ';' \
-          -e 's/\Q$(restore_node_bad)\E/$(restore_node_good)/' \
+          -e 's/\Q$(remove_node_bad)\E/$(remove_node_good)/' \
           -e ';' \
           -e 's/\Q$(install_node_bad)\E/$(install_node_good)/' \
 	  $(mydoc)-incl/tlmgr.texi
+	cp $(mydoc)-incl/tlmgr.texi $(srcdir)/$(mydoc)-incl/
+	cp $(mydoc)-incl/install-tl.texi $(srcdir)/$(mydoc)-incl/
 .PHONY: $(mydoc)-incl.texi

Modified: branches/stable/source/src/doc/Makefile.in
===================================================================
--- branches/stable/source/src/doc/Makefile.in	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/doc/Makefile.in	2018-04-22 15:47:12 UTC (rev 796)
@@ -485,15 +485,17 @@
 # The \@... in the replacements are escaping the @ in a Perl
 # double-quote context, i.e., not an array.
 # 
-update_node_bad = ref{tlmgr update [option]... [pkg]...,
-update_node_bad2 = ref{tlmgr update,
-update_node_good = ref{tlmgr update [\@emph{option}]... [\@emph{pkg}]...,
+update_node_bad = ref{tlmgr update [option...] [pkg...],
+update_node_good = ref{tlmgr update [\@emph{option}...] [\@emph{pkg}...],
 #
-restore_node_bad = ref{tlmgr restore,
-restore_node_good = ref{tlmgr restore [--backupdir \@emph{dir}] [--all | \@emph{pkg} [\@emph{rev}]],
+update_node_bad2 = [option...] [pkg...], update
+update_node_good2 = [\@emph{option}...] [@emph{pkg}...], update
 #
-install_node_bad = ref{tlmgr install [option]... pkg...,
-install_node_good = ref{tlmgr install [\@emph{option}]... \@emph{pkg}...,
+remove_node_bad = ref{tlmgr remove [option...] pkg...,
+remove_node_good = ref{tlmgr remove [\@emph{option}...] \@emph{pkg}...,
+#
+install_node_bad = ref{tlmgr install [option...] pkg...,
+install_node_good = ref{tlmgr install [\@emph{option}...] \@emph{pkg}...,
 all: all-am
 
 .SUFFIXES:
@@ -947,18 +949,24 @@
 .PHONY: readme-files readme-install
 
 # we don't actually use the (autogenerated) -incl.texi file,
-# but it makes for a convenient target. Copy the scripts into the build dir.
+# but it makes for a convenient target.
+# 
+# First make symlinks in build dir:
+# ln -s .../tlmgr.pl .../Build/source/Work/doc
+# ln -s .../install-tl .../Build/source/Work/doc
 $(mydoc)-incl.texi: install-tl tlmgr.pl 
 	$(pod2texi) -o $@ --subdir=$(mydoc)-incl $(pod2texi_args) $^
 	cp $(mydoc)-incl/tlmgr.texi $(mydoc)-incl/tlmgr.texi.orig
 	perl -pi \
           -e 's/\Q$(update_node_bad)\E/$(update_node_good)/' \
-          -e ';s/\Q$(update_node_bad2)\E/$(update_node_good),/' \
+          -e ';s/\Q$(update_node_bad2)\E/$(update_node_good2),/' \
           -e ';' \
-          -e 's/\Q$(restore_node_bad)\E/$(restore_node_good)/' \
+          -e 's/\Q$(remove_node_bad)\E/$(remove_node_good)/' \
           -e ';' \
           -e 's/\Q$(install_node_bad)\E/$(install_node_good)/' \
 	  $(mydoc)-incl/tlmgr.texi
+	cp $(mydoc)-incl/tlmgr.texi $(srcdir)/$(mydoc)-incl/
+	cp $(mydoc)-incl/install-tl.texi $(srcdir)/$(mydoc)-incl/
 .PHONY: $(mydoc)-incl.texi
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.

Modified: branches/stable/source/src/doc/README.solaris
===================================================================
--- branches/stable/source/src/doc/README.solaris	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/doc/README.solaris	2018-04-22 15:47:12 UTC (rev 796)
@@ -41,10 +41,10 @@
 Building for 64-bit
 ===================
 
-All binaries have been compiled with gcc-5.2.
+All binaries have been compiled with gcc-5.5.
 The only thing that is needed to build for 64-bit is to define
-    export CC="/path/to/gcc-5.2 -m64"
-    export CXX="/path/to/g++-5.2 -m64"
+    export CC="/path/to/gcc-5.5 -m64"
+    export CXX="/path/to/g++-5.5 -m64"
 
 Building wget
 =============
@@ -121,8 +121,8 @@
 
 Asymptote has been built with the following flags:
 
-export CC=/opt/csw/bin/gcc-5.2
-export CXX=/opt/csw/bin/g++-5.2
+export CC=/opt/csw/bin/gcc-5.5
+export CXX=/opt/csw/bin/g++-5.5
 ./configure --prefix=/tmp/asyinst --enable-texlive-build \
     --disable-fftw --disable-offscreen --disable-sigsegv \
     --disable-gl --disable-gsl --disable-readline
@@ -170,7 +170,7 @@
 Building texlive
 ================
 
-Additional settings were needed to compile TeX Live with gcc 5.2:
+Additional settings were needed to compile TeX Live with gcc 5.5:
   * ./Build --without-iconv
 
 The '--without-iconv' makes sure to avoid linking against libiconv

Modified: branches/stable/source/src/doc/tlbuild-incl/install-tl.texi
===================================================================
--- branches/stable/source/src/doc/tlbuild-incl/install-tl.texi	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/doc/tlbuild-incl/install-tl.texi	2018-04-22 15:47:12 UTC (rev 796)
@@ -7,6 +7,7 @@
 * install-tl DESCRIPTION::
 * install-tl REFERENCES::
 * install-tl OPTIONS::
+* install-tl PROFILES::
 * install-tl ENVIRONMENT VARIABLES::
 * install-tl AUTHORS AND COPYRIGHT::
 @end menu
@@ -21,28 +22,31 @@
 
 install-tl [@emph{option}]...
 
-install-tl.bat [@emph{option}]...
+install-tl-windows.bat [@emph{option}]...
 
+install-tl-advanced.bat [@emph{option}]...
+
 @node install-tl DESCRIPTION
 @appendixsec DESCRIPTION
 
 This installer creates a runnable TeX Live installation from various
-media, including over the network.  The installer works across all
-platforms supported by TeX Live.  For information on initially
-downloading the TeX Live, see @url{http://tug.org/texlive/acquire.html}.
+media, including over the network, from local hard disk, a DVD, etc.
+The installer works across all platforms supported by TeX Live.  For
+information on initially downloading the TeX Live, see
+ at url{http://tug.org/texlive/acquire.html}.
 
-The basic idea of TeX Live installation is to choose one of the
+The basic idea of TeX Live installation is for you to choose one of the
 top-level @emph{schemes}, each of which is defined as a different set of
 @emph{collections} and @emph{packages}, where a collection is a set of packages,
 and a package is what contains actual files.
 
 Within the installer, you can choose a scheme, and further customize the
-set of collections to install, but not the set of the packages.  To do
-that, use @code{tlmgr} (reference below) after the initial installation is
-completely.
+set of collections to install, but not the set of the packages.  To work
+at the package level, use @code{tlmgr} (reference just below) after the
+initial installation is complete.
 
-The default is @code{scheme-full}, to install everything, and this is highly
-recommended.
+The default is @code{scheme-full}, which installs everything, and this is
+highly recommended.
 
 @node install-tl REFERENCES
 @appendixsec REFERENCES
@@ -51,8 +55,8 @@
 handled through @strong{tlmgr}(1), the TeX Live Manager
 (@url{http://tug.org/texlive/tlmgr.html}).
 
-The most up-to-date version of this documentation is on the Internet at
- at url{http://tug.org/texlive/doc/install-tl.html}.
+The most up-to-date version of this installer documentation is on the
+Internet at @url{http://tug.org/texlive/doc/install-tl.html}.
 
 For the full documentation of TeX Live, see
 @url{http://tug.org/texlive/doc}.
@@ -68,7 +72,7 @@
 @item @strong{-gui} [[=]@emph{module}]
 @anchor{install-tl @strong{-gui} [[=]@emph{module}]}
 
-If no @emph{module} is given starts the @code{perltk} (see below) GUI installer.
+If no @emph{module} is given, starts the @code{perltk} (see below) GUI installer.
 
 If @emph{module} is given loads the given installer module. Currently the
 following modules are supported:
@@ -94,8 +98,8 @@
 
 @end table
 
-The @code{perltk} and @code{wizard} modules, and thus also when calling with a
-bare @code{-gui} (without @emph{module}), requires the Perl/Tk module
+The @code{perltk} and @code{wizard} modules, and thus also when calling with
+bare @code{-gui} (with no @emph{module}), require the Perl/Tk module
 (@url{http://tug.org/texlive/distro.html#perltk}); if Perl/Tk is not
 available, installation continues in text mode.
 
@@ -122,8 +126,9 @@
 
 Specify the package repository to be used as the source of the
 installation, either a local directory via @code{/path/to/directory} or a
- at code{file:/} url, or a network location via a @code{http://} or @code{ftp://} url.
-(No other protocols are supported.)
+ at code{file:/} url, or a network location via a @code{http://}, @code{https://}, or
+ at code{ftp://} url.  (No other protocols are supported, and @code{https://} may
+not work on all platforms.)
 
 The default is to pick a mirror automatically, using
 @url{http://mirror.ctan.org/systems/texlive/tlnet}; the chosen mirror is
@@ -139,7 +144,7 @@
   -repository http://ctan.example.org/its/ctan/dir/systems/texlive/tlnet
 @end verbatim
 
-Of course a real hostname and its particular top-level CTAN path
+Of course a real hostname and its particular top-level CTAN directory
 have to be specified.  The list of CTAN mirrors is available at
 @url{http://ctan.org/mirrors}.
 
@@ -175,9 +180,9 @@
 @anchor{install-tl @strong{-all-options}}
 
 Normally options not relevant to the current platform are not shown
-(i.e., when running on Unix, Windows-specific options are omitted).
-Giving this command line option allows configuring settings in the
-final @code{texlive.tlpdb} that do not have any immediate effect.
+(e.g., when running on Unix, Windows-specific options are omitted).
+Giving this command line option allows configuring such "foreign"
+settings.
 
 @item @strong{-custom-bin} @emph{path}
 @anchor{install-tl @strong{-custom-bin} @emph{path}}
@@ -189,9 +194,13 @@
 usual, but at the end all files from @emph{path} are copied over to
 @code{bin/custom/} under your installation directory and this @code{bin/custom/}
 directory is what will be added to the path for the post-install
-actions.  (By the way, for information on building TeX Live, see
- at url{http://tug.org/texlive/build.html}).
+actions.  To install multiple custom binary sets, manully rename
+ at code{custom} before doing each.
 
+For more information on custom binaries, see
+ at url{http://tug.org/texlive/custom-bin.html}.  For general information on
+building TeX Live, see @url{http://tug.org/texlive/build.html}.
+
 @item @strong{-debug-translation}
 @anchor{install-tl @strong{-debug-translation}}
 
@@ -209,7 +218,7 @@
 @item @strong{-help}, @strong{--help}, @strong{-?}
 @anchor{install-tl @strong{-help}@comma{} @strong{--help}@comma{} @strong{-?}}
 
-Display this help and exit (on the web via
+Display this help and exit.  (This help is on the web at
 @url{http://tug.org/texlive/doc/install-tl.html}).  Sometimes the
 @code{perldoc} and/or @code{PAGER} programs on the system have problems,
 possibly resulting in control characters being literally output.  This
@@ -227,6 +236,13 @@
 is to redo it from time to time.  This option is not available via the
 installer interfaces.  USE AT YOUR OWN RISK.
 
+ at item @strong{-init-from-profile} @emph{profile_file}
+ at anchor{install-tl @strong{-init-from-profile} @emph{profile_file}}
+
+Similar to @strong{-profile} (see @ref{install-tl PROFILES,, PROFILES} below), but only initializes the
+installation configuration from @emph{profile_file} and then starts the
+interactive session.
+
 @item @strong{-logfile} @emph{file}
 @anchor{install-tl @strong{-logfile} @emph{file}}
 
@@ -241,7 +257,7 @@
 @item @strong{-no-cls}
 @anchor{install-tl @strong{-no-cls}}
 
-(only for text mode installer) do not clear the screen when entering
+For the text mode installer only: do not clear the screen when entering
 a new menu (for debugging purposes).
 
 @item @strong{-non-admin}
@@ -249,11 +265,11 @@
 
 For Windows only: configure for the current user, not for all users.
 
- at item @strong{--persistent-downloads}
- at anchor{install-tl @strong{--persistent-downloads}}
+ at item @strong{-persistent-downloads}
+ at anchor{install-tl @strong{-persistent-downloads}}
 
- at item @strong{--no-persistent-downloads}
- at anchor{install-tl @strong{--no-persistent-downloads}}
+ at item @strong{-no-persistent-downloads}
+ at anchor{install-tl @strong{-no-persistent-downloads}}
 
 For network installs, activating this option makes the installer try to
 set up a persistent connection using the @code{Net::LWP} Perl module.  This
@@ -263,8 +279,17 @@
 
 This option is turned on by default, and the installation program will
 fall back to using @code{wget} if this is not possible.  To disable usage of
-LWP and persistent connections, use @code{--no-persistent-downloads}.
+LWP and persistent connections, use @code{-no-persistent-downloads}.
 
+ at item @strong{-no-verify-downloads}
+ at anchor{install-tl @strong{-no-verify-downloads}}
+
+By default, if a GnuPG @code{gpg} binary is found in PATH, downloads are
+verified against a cryptographic signature. This option disables such
+verification.  The full description is in the Crytographic Verification
+section of the @code{tlmgr} documentation, e.g.,
+ at url{http://tug.org/texlive/doc/tlmgr.html#CRYPTOGRAPHIC-VERIFICATION}
+
 @item @strong{-portable}
 @anchor{install-tl @strong{-portable}}
 
@@ -278,35 +303,12 @@
 (hardware/operating system) combination to standard output, and exit.
 @code{-print-arch} is a synonym.
 
- at item @strong{-profile} @emph{profile}
- at anchor{install-tl @strong{-profile} @emph{profile}}
+ at item @strong{-profile} @emph{profile_file}
+ at anchor{install-tl @strong{-profile} @emph{profile_file}}
 
-Load the file @emph{profile} and do the installation with no user
-interaction, that is, a batch (unattended) install.
+Load @emph{profile_file} and do the installation with no user interaction,
+that is, a batch (unattended) install.  See @ref{install-tl PROFILES,, PROFILES} below.
 
-A @emph{profile} file contains all the values needed to perform an
-installation.  After a normal installation has finished, a profile for
-that exact installation is written to the file
-DEST/tlpkg/texlive.profile.  That file can be given as the argument to
- at code{-profile} to redo the exact same installation on a different system,
-for example.  Alternatively, you can use a custom profile, most easily
-created by starting from a generated one and changing values, or an
-empty file, which will take all the defaults.
-
-Normally a profile has to specify the value @code{1} for each collection to
-be installed, even if the scheme is specified.  This follows from the
-logic of the installer in that you can first select a scheme and then
-change the collections being installed.  But for convenience there is an
-exception to this within profiles: If the profile contains a variable
-for @code{selected_scheme} and @emph{no} collection variables at all are defined
-in the profile, then the collections which the specified scheme requires
-are installed.
-
-Thus, a line @code{selected_scheme scheme-medium} together with the
-definitions of the installation directories (@code{TEXDIR}, @code{TEXMFHOME},
- at code{TEXMFLOCAL}, @code{TEXMFSYSCONFIG}, @code{TEXMFSYSVAR}) suffices to install
-the medium scheme with all default options.
-
 @item @strong{-q}
 @anchor{install-tl @strong{-q}}
 
@@ -326,8 +328,8 @@
 @item @strong{-v}
 @anchor{install-tl @strong{-v}}
 
-Include verbose debugging messages; repeat for maximum debugging, as in
- at code{-v -v}.  (Further repeats are accepted but ignored.)
+Include verbose debugging messages; repeat for maximum debugging: @code{-v
+-v}.  (Further repeats are accepted but ignored.)
 
 @item @strong{-version}, @strong{--version}
 @anchor{install-tl @strong{-version}@comma{} @strong{--version}}
@@ -337,11 +339,154 @@
 
 @end table
 
+ at node install-tl PROFILES
+ at appendixsec PROFILES
+
+A @emph{profile} file contains all the values needed to perform an
+installation.  After a normal installation has finished, a profile for
+that exact installation is written to the file @code{tlpkg/texlive.profile}.
+In addition, from the text menu one can select @code{P} to save the current
+setup as a profile at any time.  Such a profile file can be given as the
+argument to @code{-profile}, for example to redo the exact same installation
+on a different system.  Alternatively, you can use a custom profile,
+most easily created by starting from a generated one and changing
+values, or an empty file, which will take all the defaults.
+
+Within a profile file, each line consists of
+
+ at emph{variable} [@emph{value}]
+
+except for comment lines starting with @code{#}.  The possible variable
+names are listed below.  Values, when present, are either @code{0} or @code{1}
+for booleans, or strings (which must be specified without any quote
+characters).  Leading whitespace is ignored.
+
+If the variable @code{selected_scheme} is defined and @emph{no} collection
+variables at all are defined, then the collections required by the
+specified scheme (which might change over time) are installed, without
+explicitly listing them.  This eases maintenance of profile files.  If
+any collections are specified in a profile, though, then all desired
+collections must be given explicitly.
+
+For example, a line 
+
+ at verbatim
+  selected_scheme scheme-small
+ at end verbatim
+
+along with definitions for the installation directories (given below
+under "path options") suffices to install the "small" scheme with all
+default options.  The schemes are described in the @code{S} menu in the
+text installer, or equivalent.
+
+Besides @code{selected_scheme}, here is the list of variable names supported
+in a profile:
+
+ at strong{collection options} (prefix @code{collection-})
+
+Collections are specified with a variable name with the prefix
+ at code{collection-} followed by a collection name; there is no value.  For
+instance, @code{collection-basic}.  The collections are described in the
+ at code{C} menu.
+
+Schemes and collections (and packages) are ultimately defined by the
+files in the @code{tlpkg/tlpsrc/} source directory.
+
+ at strong{path options}
+
+It is best to define all of these, even though they may not be used in
+the installation, so as to avoid unintentionally getting a default value
+that could cause problems later.
+
+ at verbatim
+  TEXDIR
+  TEXMFCONFIG
+  TEXMFVAR
+  TEXMFHOME
+  TEXMFLOCAL
+  TEXMFSYSCONFIG
+  TEXMFSYSVAR
+ at end verbatim
+
+ at strong{installer options} (prefix @code{instopt_})
+
+ at table @asis
+ at item @code{instopt_adjustpath} (default 0 on Unix, 1 on Windows)
+ at anchor{install-tl @code{instopt_adjustpath} (default 0 on Unix at comma{} 1 on Windows)}
+
+Adjust @code{PATH} environment variable.
+
+ at item @code{instopt_adjustrepo} (default 1)
+ at anchor{install-tl @code{instopt_adjustrepo} (default 1)}
+
+Set remote repository to a multiplexed CTAN mirror after installation;
+see @code{-repository} above.
+
+ at item @code{instopt_letter} (default 0)
+ at anchor{install-tl @code{instopt_letter} (default 0)}
+
+Set letter size paper as the default, instead of a4.
+
+ at item @code{instopt_portable} (default 0)
+ at anchor{install-tl @code{instopt_portable} (default 0)}
+
+Install for portable use, e.g., on a USB stick.
+
+ at item @code{instopt_write18_restricted} (default 1)
+ at anchor{install-tl @code{instopt_write18_restricted} (default 1)}
+
+Enable @code{\write18} for a restricted set of programs.
+
+ at end table
+
+ at strong{tlpdb options} (prefix @code{tlpdbopt_})
+
+The definitive list is given in @code{tlpkg/TeXLive/TLConfig.pm}, in
+ at code{%TeXLive::TLConfig::TLPDBOptions}, together with explanations.  All
+items given there @emph{except} for @code{tlpdbopt_location} can be specified.
+Here is the current list:
+
+ at verbatim
+  tlpdbopt_autobackup
+  tlpdbopt_backupdir
+  tlpdbopt_create_formats
+  tlpdbopt_desktop_integration
+  tlpdbopt_file_assocs
+  tlpdbopt_generate_updmap
+  tlpdbopt_install_docfiles
+  tlpdbopt_install_srcfiles
+  tlpdbopt_post_code
+  tlpdbopt_sys_bin
+  tlpdbopt_sys_info
+  tlpdbopt_sys_man
+  tlpdbopt_w32_multi_user
+ at end verbatim
+
+ at strong{platform options} (prefix @code{binary_})
+
+For each supported platform in TeX Live (directories under @code{bin/}), the
+variable @code{binary_}@emph{PLATFORM} can be set.  For example:
+
+ at verbatim
+  binary_x86_64-linux
+ at end verbatim
+
+If no @code{binary_} variable is specified, the default is whatever the
+current machine is running.
+
+In releases before 2017, many profile variables had different
+names (not documented here; see the @code{install-tl} source).  They are
+accepted and transformed to the names given above.  When a profile is
+written, the names above are always used.
+
+For more details on all of the above options, consult the TeX Live
+installation manual, linked from @url{http://tug.org/texlive/doc}.
+
 @node install-tl ENVIRONMENT VARIABLES
 @appendixsec ENVIRONMENT VARIABLES
 
 For ease in scripting and debugging, @code{install-tl} will look for the
-following environment variables.  They are not of interest in normal
+following environment variables.  They are not of interest for normal
 user installations.
 
 @table @asis
@@ -357,12 +502,24 @@
 
 Omit creating the ConTeXt cache.  This is useful for redistributors.
 
+ at item @code{TEXLIVE_INSTALL_NO_WELCOME}
+ at anchor{install-tl @code{TEXLIVE_INSTALL_NO_WELCOME}}
+
+Omit printing the welcome message after successful installation, e.g.,
+for testing.
+
 @item @code{TEXLIVE_INSTALL_PREFIX}
 @anchor{install-tl @code{TEXLIVE_INSTALL_PREFIX}}
 
+ at item @code{TEXLIVE_INSTALL_TEXDIR}
+ at anchor{install-tl @code{TEXLIVE_INSTALL_TEXDIR}}
+
 @item @code{TEXLIVE_INSTALL_TEXMFCONFIG}
 @anchor{install-tl @code{TEXLIVE_INSTALL_TEXMFCONFIG}}
 
+ at item @code{TEXLIVE_INSTALL_TEXMFVAR}
+ at anchor{install-tl @code{TEXLIVE_INSTALL_TEXMFVAR}}
+
 @item @code{TEXLIVE_INSTALL_TEXMFHOME}
 @anchor{install-tl @code{TEXLIVE_INSTALL_TEXMFHOME}}
 
@@ -375,11 +532,12 @@
 @item @code{TEXLIVE_INSTALL_TEXMFSYSVAR}
 @anchor{install-tl @code{TEXLIVE_INSTALL_TEXMFSYSVAR}}
 
- at item @code{TEXLIVE_INSTALL_TEXMFVAR}
- at anchor{install-tl @code{TEXLIVE_INSTALL_TEXMFVAR}}
+Specify the respective directories.  @code{TEXLIVE_INSTALL_PREFIX} defaults
+to @code{/usr/local/texlive}, while @code{TEXLIVE_INSTALL_TEXDIR} defaults to
+the release directory within that prefix, e.g.,
+ at code{/usr/local/texlive/2016}.  All the defaults can be seen by running the
+installer interactively and then typing @code{D} for the directory menu.
 
-Specify the respective directories.
-
 @item @code{NOPERLDOC}
 @anchor{install-tl @code{NOPERLDOC}}
 
@@ -394,3 +552,5 @@
 distribution (@url{http://tug.org/texlive}) and both are licensed under the
 GNU General Public License Version 2 or later.
 
+$Id: install-tl 46908 2018-03-10 00:46:28Z preining $
+

Modified: branches/stable/source/src/doc/tlbuild-incl/tlmgr.texi
===================================================================
--- branches/stable/source/src/doc/tlbuild-incl/tlmgr.texi	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/doc/tlbuild-incl/tlmgr.texi	2018-04-22 15:47:12 UTC (rev 796)
@@ -8,9 +8,9 @@
 * tlmgr EXAMPLES::
 * tlmgr OPTIONS::
 * tlmgr ACTIONS::
+* tlmgr CONFIGURATION FILE FOR TLMGR::
+* tlmgr CRYPTOGRAPHIC VERIFICATION::
 * tlmgr USER MODE::
-* tlmgr CONFIGURATION FILE FOR TLMGR::
-* tlmgr TAXONOMIES::
 * tlmgr MULTIPLE REPOSITORIES::
 * tlmgr GUI FOR TLMGR::
 * tlmgr MACHINE-READABLE OUTPUT::
@@ -20,12 +20,12 @@
 @node tlmgr NAME
 @appendixsec NAME
 
-tlmgr - the TeX Live Manager
+tlmgr - the native TeX Live Manager
 
 @node tlmgr SYNOPSIS
 @appendixsec SYNOPSIS
 
-tlmgr [@emph{option}]... @emph{action} [@emph{option}]... [@emph{operand}]...
+tlmgr [@emph{option}...] @emph{action} [@emph{option}...] [@emph{operand}...]
 
 @node tlmgr DESCRIPTION
 @appendixsec DESCRIPTION
@@ -56,11 +56,18 @@
 with @code{tlmgr}:
 
 @table @asis
+ at item @code{tlmgr option repository ctan}
+ at anchor{tlmgr @code{tlmgr option repository ctan}}
+
 @item @code{tlmgr option repository http://mirror.ctan.org/systems/texlive/tlnet}
 @anchor{tlmgr @code{tlmgr option repository http://mirror.ctan.org/systems/texlive/tlnet}}
 
 Tell @code{tlmgr} to use a nearby CTAN mirror for future updates; useful if
-you installed TeX Live from the DVD image and want continuing updates.
+you installed TeX Live from the DVD image and want to have continuing
+updates.  The two commands are equivalent; @code{ctan} is just an alias for
+the given url.  Caveat: @code{mirror.ctan.org} resolves to many different
+hosts, and they are not perfectly synchronized; we recommend updating
+only daily (at most), and not more often.
 
 @item @code{tlmgr update --list}
 @anchor{tlmgr @code{tlmgr update --list}}
@@ -73,11 +80,11 @@
 Make your local TeX installation correspond to what is in the package
 repository (typically useful when updating from CTAN).
 
- at item @code{tlmgr info} @emph{pkg}
- at anchor{tlmgr @code{tlmgr info} @emph{pkg}}
+ at item @code{tlmgr info} @emph{what}
+ at anchor{tlmgr @code{tlmgr info} @emph{what}}
 
-Display detailed information about @emph{pkg}, such as the installation
-status and description.
+Display detailed information about a package @emph{what}, such as the installation
+status and description, of searches for @emph{what} in all packages.
 
 @end table
 
@@ -166,7 +173,7 @@
 
 @code{tlmgr} logs all package actions (install, remove, update, failed
 updates, failed restores) to a separate log file, by default
- at code{TEXMFSYSVAR/web2c/tlmgr.log}.  This option allows you to specific a
+ at code{TEXMFSYSVAR/web2c/tlmgr.log}.  This option allows you to specify a
 different file for the log.
 
 @item @strong{--pause}
@@ -207,6 +214,16 @@
 
 Uses @emph{dir} for the tree in user mode; see @ref{tlmgr USER MODE,, USER MODE} below.
 
+ at item @strong{--verify-repo=[none|main|all]}
+ at anchor{tlmgr @strong{--verify-repo=[none|main|all]}}
+
+Defines the level of verification done: If @code{none} is specified, no
+verification whatsoever is done. If @code{main} is given and a working GnuPG
+(@code{gpg}) binary is available, all repositories are checked, but only the
+main repository is required to be signed. If @code{all} is given, then all
+repositories need to be signed.  See @ref{tlmgr CRYPTOGRAPHIC VERIFICATION,, CRYPTOGRAPHIC VERIFICATION} below
+for details.
+
 @end table
 
 The standard options for TeX Live programs are also accepted:
@@ -224,31 +241,34 @@
 @menu
 * tlmgr help::
 * tlmgr version::
-* tlmgr backup [--clean[=@emph{N}]] [--backupdir @emph{dir}] [--all | @emph{pkg}]...::
+* tlmgr backup::
 * tlmgr candidates @emph{pkg}::
-* tlmgr check [@emph{option}]... [files|depends|executes|runfiles|all]::
-* tlmgr conf [texmf|tlmgr|updmap [--conffile @emph{file}] [--delete] [@emph{key} [@emph{value}]]]::
-* tlmgr dump-tlpdb [--local|--remote]::
-* tlmgr generate [@emph{option}]... @emph{what}::
+* tlmgr check [@emph{option}...] [files|depends|executes|runfiles|all]::
+* tlmgr conf::
+* tlmgr dump-tlpdb [@emph{option}...] [--json]::
+* tlmgr generate::
 * tlmgr gui::
-* tlmgr info [@emph{option}...] [collections|schemes|@emph{pkg}...]::
+* tlmgr info::
 * tlmgr init-usertree::
-* tlmgr install [@emph{option}]... @emph{pkg}...::
+* tlmgr install [@emph{option}...] @emph{pkg}...::
+* tlmgr key::
+* tlmgr list::
 * tlmgr option::
 * tlmgr paper::
-* tlmgr path [--w32mode=user|admin] [add|remove]::
+* tlmgr path::
 * tlmgr pinning::
-* tlmgr platform list|add|remove @emph{platform}...::
-* tlmgr platform set @emph{platform}::
-* tlmgr platform set auto::
-* tlmgr postaction [--w32mode=user|admin] [--fileassocmode=1|2] [--all] [install|remove] [shortcut|fileassoc|script] [@emph{pkg}]...::
+* tlmgr platform::
+* tlmgr postaction::
 * tlmgr print-platform::
-* tlmgr restore [--backupdir @emph{dir}] [--all | @emph{pkg} [@emph{rev}]]::
-* tlmgr remove [@emph{option}]... @emph{pkg}...::
+* tlmgr print-platform-info::
+* tlmgr remove [@emph{option}...] @emph{pkg}...::
 * tlmgr repository::
-* tlmgr search [@emph{option}...] @emph{what}::
+* tlmgr restore::
+* tlmgr search::
+* tlmgr shell::
+* tlmgr show::
 * tlmgr uninstall::
-* tlmgr update [@emph{option}]... [@emph{pkg}]...::
+* tlmgr update [@emph{option}...] [@emph{pkg}...]::
 @end menu
 
 @node tlmgr help
@@ -268,9 +288,16 @@
 
 If @code{-v} has been given the revisions of the used modules are reported, too.
 
- at node tlmgr backup [--clean[=@emph{N}]] [--backupdir @emph{dir}] [--all | @emph{pkg}]...
- at appendixsubsec backup [--clean[=@emph{N}]] [--backupdir @emph{dir}] [--all | @emph{pkg}]...
+ at node tlmgr backup
+ at appendixsubsec backup
 
+ at table @asis
+ at item @strong{backup [@emph{option}...] --all}
+ at anchor{tlmgr @strong{backup [@emph{option}...] --all}}
+
+ at item @strong{backup [@emph{option}...] @emph{pkg}...}
+ at anchor{tlmgr @strong{backup [@emph{option}...] @emph{pkg}...}}
+
 If the @code{--clean} option is not specified, this action makes a backup of
 the given packages, or all packages given @code{--all}. These backups are
 saved to the value of the @code{--backupdir} option, if that is an existing and
@@ -318,21 +345,17 @@
 
 @end table
 
+ at end table
+
 @node tlmgr candidates @emph{pkg}
 @appendixsubsec candidates @emph{pkg}
 
- at table @asis
- at item @strong{candidates @emph{pkg}}
- at anchor{tlmgr @strong{candidates @emph{pkg}} 1}
-
 Shows the available candidate repositories for package @emph{pkg}.
 See @ref{tlmgr MULTIPLE REPOSITORIES,, MULTIPLE REPOSITORIES} below.
 
- at end table
+ at node tlmgr check [@emph{option}...] [files|depends|executes|runfiles|all]
+ at appendixsubsec check [@emph{option}...] [files|depends|executes|runfiles|all]
 
- at node tlmgr check [@emph{option}]... [files|depends|executes|runfiles|all]
- at appendixsubsec check [@emph{option}]... [files|depends|executes|runfiles|all]
-
 Executes one (or all) check(s) on the consistency of the installation.
 
 @table @asis
@@ -345,8 +368,8 @@
 @item @strong{depends}
 @anchor{tlmgr @strong{depends}}
 
-Lists those packages which occur as dependencies in an installed collections,
-but are themselves not installed, and those packages that are not
+Lists those packages which occur as dependencies in an installed collection,
+but are themselves not installed, and those packages which are not
 contained in any collection.
 
 If you call @code{tlmgr check collections} this test will be carried out
@@ -361,7 +384,8 @@
 @item @strong{runfiles}
 @anchor{tlmgr @strong{runfiles}}
 
-List those filenames that are occurring more than one time in the runfiles.
+List those filenames that are occurring more than one time in the
+runfiles sections.
 
 @end table
 
@@ -376,52 +400,72 @@
 
 @end table
 
- at node tlmgr conf [texmf|tlmgr|updmap [--conffile @emph{file}] [--delete] [@emph{key} [@emph{value}]]]
- at appendixsubsec conf [texmf|tlmgr|updmap [--conffile @emph{file}] [--delete] [@emph{key} [@emph{value}]]]
+ at node tlmgr conf
+ at appendixsubsec conf
 
+ at table @asis
+ at item @strong{conf [texmf|tlmgr|updmap [--conffile @emph{file}] [--delete] [@emph{key} [@emph{value}]]]}
+ at anchor{tlmgr @strong{conf [texmf|tlmgr|updmap [--conffile @emph{file}] [--delete] [@emph{key} [@emph{value}]]]}}
+
+ at item @strong{conf auxtrees [--conffile @emph{file}] [show|add|delete] [@emph{value}]}
+ at anchor{tlmgr @strong{conf auxtrees [--conffile @emph{file}] [show|add|delete] [@emph{value}]}}
+
 With only @code{conf}, show general configuration information for TeX Live,
 including active configuration files, path settings, and more.  This is
-like the @code{texconfig conf} call, but works on all supported platforms.
+like running @code{texconfig conf}, but works on all supported platforms.
 
-With either @code{conf texmf}, @code{conf tlmgr}, or @code{conf updmap} given in
-addition, shows all key/value pairs (i.e., all settings) as saved in
- at code{ROOT/texmf.cnf}, the tlmgr configuration file (see below), or the
-first found (via kpsewhich) @code{updmap.cfg} file, respectively.
+With one of @code{conf texmf}, @code{conf tlmgr}, or @code{conf updmap}, shows all
+key/value pairs (i.e., all settings) as saved in @code{ROOT/texmf.cnf}, the
+user-specific @code{tlmgr} configuration file (see below), or the first
+found (via @code{kpsewhich}) @code{updmap.cfg} file, respectively.
 
 If @emph{key} is given in addition, shows the value of only that @emph{key} in
-the respective file.  If option @emph{--delete} is also given, the
-configuration file -- it is removed, not just commented out!
+the respective file.  If option @emph{--delete} is also given, the value in
+the given configuration file is entirely removed (not just commented
+out).
 
 If @emph{value} is given in addition, @emph{key} is set to @emph{value} in the 
 respective file.  @emph{No error checking is done!}
 
-In all cases the file used can be explicitly specified via the option
- at code{--conffile @emph{file}}, in case one wants to operate on a different file.
+The @code{PATH} value shown by @code{conf} is as used by @code{tlmgr}.  The
+directory in which the @code{tlmgr} executable is found is automatically
+prepended to the PATH value inherited from the environment.
 
-Practical application: if the execution of (some or all) system commands
-via @code{\write18} was left enabled during installation, you can disable
-it afterwards:
+Here is a practical example of changing configuration values. If the
+execution of (some or all) system commands via @code{\write18} was left
+enabled during installation, you can disable it afterwards:
 
 @verbatim
   tlmgr conf texmf shell_escape 0
 @end verbatim
 
-A more complicated example: the @code{TEXMFHOME} tree (see the main TeX Live
-guide, @url{http://tug.org/texlive/doc.html}) can be set to multiple
-directories, but they must be enclosed in braces and separated by
-commas, so quoting the value to the shell is a good idea.  Thus:
+The subcommand @code{auxtrees} allows adding and removing arbitrary
+additional texmf trees, completely under user control.  @code{auxtrees show}
+shows the list of additional trees, @code{auxtrees add} @emph{tree} adds a tree
+to the list, and @code{auxtrees remove} @emph{tree} removes a tree from the list
+(if present). The trees should not contain an @code{ls-R} file (or files
+might not be found if the @code{ls-R} becomes stale). This works by
+manipulating the Kpathsea variable @code{TEXMFAUXTREES}, in
+ at code{ROOT/texmf.cnf}.  Example:
 
 @verbatim
-  tlmgr conf texmf TEXMFHOME "{~/texmf,~/texmfbis}"
+  tlmgr conf auxtrees add /quick/test/tree
+  tlmgr conf auxtrees remove /quick/test/tree
 @end verbatim
 
-Warning: The general facility is here, but tinkering with settings in
-this way is very strongly discouraged.  Again, no error checking on
-either keys or values is done, so any sort of breakage is possible.
+In all cases the configuration file can be explicitly specified via the
+option @code{--conffile} @emph{file}, if desired.
 
- at node tlmgr dump-tlpdb [--local|--remote]
- at appendixsubsec dump-tlpdb [--local|--remote]
+Warning: The general facility for changing configuration values is here,
+but tinkering with settings in this way is strongly discouraged.  Again,
+no error checking on either keys or values is done, so any sort of
+breakage is possible.
 
+ at end table
+
+ at node tlmgr dump-tlpdb [@emph{option}...] [--json]
+ at appendixsubsec dump-tlpdb [@emph{option}...] [--json]
+
 Dump complete local or remote TLPDB to standard output, as-is.  The
 output is analogous to the @code{--machine-readable} output; see
 @ref{tlmgr MACHINE-READABLE OUTPUT,, MACHINE-READABLE OUTPUT} section.
@@ -432,13 +476,20 @@
 @item @strong{--local}
 @anchor{tlmgr @strong{--local}}
 
-Dump the local tlpdb.
+Dump the local TLPDB.
 
 @item @strong{--remote}
 @anchor{tlmgr @strong{--remote}}
 
-Dump the remote tlpdb.
+Dump the remote TLPDB.
 
+ at item @strong{--json}
+ at anchor{tlmgr @strong{--json}}
+
+Instead of dumping the actual content, the database is dumped as
+JSON. For the format of JSON output see @code{tlpkg/doc/JSON-formats.txt},
+format definition @code{TLPDB}.
+
 @end table
 
 Exactly one of @code{--local} and @code{--remote} must be given.
@@ -455,25 +506,22 @@
 
 Line endings may be either LF or CRLF depending on the current platform.
 
- at node tlmgr generate [@emph{option}]... @emph{what}
- at appendixsubsec generate [@emph{option}]... @emph{what}
+ at node tlmgr generate
+ at appendixsubsec generate
 
 @table @asis
- at item @strong{generate language}
- at anchor{tlmgr @strong{generate language}}
+ at item @strong{generate [@emph{option}...] language}
+ at anchor{tlmgr @strong{generate [@emph{option}...] language}}
 
- at item @strong{generate language.dat}
- at anchor{tlmgr @strong{generate language.dat}}
+ at item @strong{generate [@emph{option}...] language.dat}
+ at anchor{tlmgr @strong{generate [@emph{option}...] language.dat}}
 
- at item @strong{generate language.def}
- at anchor{tlmgr @strong{generate language.def}}
+ at item @strong{generate [@emph{option}...] language.def}
+ at anchor{tlmgr @strong{generate [@emph{option}...] language.def}}
 
- at item @strong{generate language.dat.lua}
- at anchor{tlmgr @strong{generate language.dat.lua}}
+ at item @strong{generate [@emph{option}...] language.dat.lua}
+ at anchor{tlmgr @strong{generate [@emph{option}...] language.dat.lua}}
 
- at item @strong{generate fmtutil}
- at anchor{tlmgr @strong{generate fmtutil}}
-
 @end table
 
 The @code{generate} action overwrites any manual changes made in the
@@ -485,39 +533,42 @@
 For managing your own fonts, please read the @code{updmap --help}
 information and/or @url{http://tug.org/fonts/fontinstall.html}.
 
+For managing your own formats, please read the @code{fmtutil --help}
+information.
+
 In more detail: @code{generate} remakes any of the configuration files
- at code{language.dat}, @code{language.def}, @code{language.dat.lua}, and
- at code{fmtutil.cnf}, from the information present in the local TLPDB, plus
+ at code{language.dat}, @code{language.def}, and @code{language.dat.lua}
+from the information present in the local TLPDB, plus
 locally-maintained files.
 
 The locally-maintained files are @code{language-local.dat},
- at code{language-local.def}, @code{language-local.dat.lua}, or
- at code{fmtutil-local.cnf}, searched for in @code{TEXMFLOCAL} in the respective
+ at code{language-local.def}, or @code{language-local.dat.lua},
+searched for in @code{TEXMFLOCAL} in the respective
 directories.  If local additions are present, the final file is made by
 starting with the main file, omitting any entries that the local file
 specifies to be disabled, and finally appending the local file.
 
-(Historical note: The formerly supported @code{updmap-local.cfg} is no longer
-read, since @code{updmap} now supports multiple @code{updmap.cfg} files.  Thus,
-local additions can and should be put into an @code{updmap.cfg} file in
- at code{TEXMFLOCAL}.  The @code{generate updmap} action no longer exists.)
+(Historical note: The formerly supported @code{updmap-local.cfg} and
+ at code{fmtutil-local.cnf} are no longer read, since @code{updmap} and @code{fmtutil}
+now reads and supports multiple configuration files.  Thus,
+local additions can and should be put into an @code{updmap.cfg} of @code{fmtutil.cnf}
+file in @code{TEXMFLOCAL}.  The @code{generate updmap} and @code{generate fmtutil} actions
+no longer exist.)
 
 Local files specify entries to be disabled with a comment line, namely
 one of these:
 
 @verbatim
-  #!NAME
   %!NAME
   --!NAME
 @end verbatim
 
-where @code{fmtutil.cnf} uses @code{#}, @code{language.dat} and @code{language.def} use
- at code{%}, and @code{language.dat.lua} use @code{--}.  In all cases, the @emph{name} is
+where @code{language.dat} and @code{language.def} use @code{%}, 
+and @code{language.dat.lua} use @code{--}.  In all cases, the @emph{name} is
 the respective format name or hyphenation pattern identifier.
 Examples:
 
 @verbatim
-  #!pdflatex
   %!german
   --!usenglishmax
 @end verbatim
@@ -558,7 +609,7 @@
 @item @strong{--rebuild-sys}
 @anchor{tlmgr @strong{--rebuild-sys}}
 
-tells tlmgr to run necessary programs after config files have been
+tells @code{tlmgr} to run necessary programs after config files have been
 regenerated. These are:
 @code{fmtutil-sys --all} after @code{generate fmtutil},
 @code{fmtutil-sys --byhyphen .../language.dat} after @code{generate language.dat},
@@ -575,10 +626,9 @@
 The respective locations are as follows:
 
 @verbatim
-  tex/generic/config/language.dat (and language-local.dat);
-  tex/generic/config/language.def (and language-local.def);
-  tex/generic/config/language.dat.lua (and language-local.dat.lua);
-  web2c/fmtutil.cnf (and fmtutil-local.cnf);
+  tex/generic/config/language.dat (and language-local.dat)
+  tex/generic/config/language.def (and language-local.def)
+  tex/generic/config/language.dat.lua (and language-local.dat.lua)
 @end verbatim
 
 @node tlmgr gui
@@ -586,9 +636,19 @@
 
 Start the graphical user interface. See @strong{GUI} below.
 
- at node tlmgr info [@emph{option}...] [collections|schemes|@emph{pkg}...]
- at appendixsubsec info [@emph{option}...] [collections|schemes|@emph{pkg}...]
+ at node tlmgr info
+ at appendixsubsec info
 
+ at table @asis
+ at item @strong{info [@emph{option}...] @emph{pkg}...}
+ at anchor{tlmgr @strong{info [@emph{option}...] @emph{pkg}...}}
+
+ at item @strong{info [@emph{option}...] collections}
+ at anchor{tlmgr @strong{info [@emph{option}...] collections}}
+
+ at item @strong{info [@emph{option}...] schemes}
+ at anchor{tlmgr @strong{info [@emph{option}...] schemes}}
+
 With no argument, lists all packages available at the package
 repository, prefixing those already installed with @code{i}.
 
@@ -596,10 +656,20 @@
 the request type instead of all packages.
 
 With any other arguments, display information about @emph{pkg}: the name,
-category, short and long description, installation status, and TeX Live
+category, short and long description, sizes, installation status, and TeX Live
 revision number.  If @emph{pkg} is not locally installed, searches in the
 remote installation source.
 
+For normal packages (not collections or schemes), the sizes of the four
+groups of files (run/src/doc/bin files) are shown separately. For
+collections, the cumulative size is shown, including all
+directly-dependent packages (but not dependent collections). For
+schemes, the cumulative size is also shown, including all
+directly-dependent collections and packages.
+
+If @emph{pkg} is not found locally or remotely, the search action is used
+and lists matching packages and files.
+
 It also displays information taken from the TeX Catalogue, namely the
 package version, date, and license.  Consider these, especially the
 package version, as approximations only, due to timing skew of the
@@ -623,26 +693,30 @@
 @item @strong{--only-installed}
 @anchor{tlmgr @strong{--only-installed}}
 
-If this options is given,  the installation source will
-not be used; only locally installed packages, collections, or schemes
-are listed.
-(Does not work for listing of packages for now)
+If this option is given, the installation source will not be used; only
+locally installed packages, collections, or schemes are listed.
 
- at item @strong{--taxonomy}
- at anchor{tlmgr @strong{--taxonomy}}
+ at item @strong{--data @code{item1,item2,...}}
+ at anchor{tlmgr @strong{--data @code{item1 at comma{}item2 at comma{}...}}}
 
- at item @strong{--keyword}
- at anchor{tlmgr @strong{--keyword}}
+If the option @code{--data} is given, its argument must be a comma separated
+list of field names from: @code{name}, @code{category}, @code{localrev}, @code{remoterev},
+ at code{shortdesc}, @code{longdesc}, @code{installed}, @code{size}, @code{relocatable}, @code{depends},
+ at code{cat-version}, @code{cat-date}, or @code{cat-license}. In this case the requested
+packages' information is listed in CSV format one package per line, and the
+column information is given by the @code{itemN}. The @code{depends} column contains
+the name of all dependencies separated by @code{:}.
 
- at item @strong{--functionality}
- at anchor{tlmgr @strong{--functionality}}
+ at item @strong{--json}
+ at anchor{tlmgr @strong{--json} 1}
 
- at item @strong{--characterization}
- at anchor{tlmgr @strong{--characterization}}
+In case @code{--json} is specified, the output is a
+JSON encoded array where each array element is the JSON representation of
+a single @code{TLPOBJ} but with additional information. For details see
+ at code{tlpkg/doc/JSON-formats.txt}, format definition: @code{TLPOBJINFO}.
+If both @code{--json} and @code{--data} are given, @code{--json} takes precedence.
 
-In addition to the normal data displayed, also display information for
-given packages from the corresponding taxonomy (or all of them).  See
- at ref{tlmgr TAXONOMIES,, TAXONOMIES} below for details.
+ at end table
 
 @end table
 
@@ -653,13 +727,23 @@
 default user tree (@code{TEXMFHOME}), or one specified on the command line
 with @code{--usertree}.  See @ref{tlmgr USER MODE,, USER MODE} below.
 
- at node tlmgr install [@emph{option}]... @emph{pkg}...
- at appendixsubsec install [@emph{option}]... @emph{pkg}...
+ at node tlmgr install [@emph{option}...] @emph{pkg}...
+ at appendixsubsec install [@emph{option}...] @emph{pkg}...
 
-Install each @emph{pkg} given on the command line. By default this installs
-all packages on which the given @emph{pkg}s are dependent, also.  Options:
+Install each @emph{pkg} given on the command line, if it is not already
+installed.  (It does not touch existing packages; see the @code{update}
+action for how to get the latest version of a package.)
 
+By default this also installs all packages on which the given @emph{pkg}s are
+dependent.  Options:
+
 @table @asis
+ at item @strong{--dry-run}
+ at anchor{tlmgr @strong{--dry-run} 1}
+
+Nothing is actually installed; instead, the actions to be performed are
+written to the terminal.
+
 @item @strong{--file}
 @anchor{tlmgr @strong{--file}}
 
@@ -667,16 +751,13 @@
 the package files given on the command line.  These files must
 be standard TeX Live package files (with contained tlpobj file).
 
- at item @strong{--reinstall}
- at anchor{tlmgr @strong{--reinstall}}
+ at item @strong{--force}
+ at anchor{tlmgr @strong{--force}}
 
-Reinstall a package (including dependencies for collections) even if it
-already seems to be installed (i.e, is present in the TLPDB).  This is
-useful to recover from accidental removal of files in the hierarchy.
+If updates to @code{tlmgr} itself (or other parts of the basic
+infrastructure) are present, @code{tlmgr} will bail out and not perform the
+installation unless this option is given.  Not recommended.
 
-When re-installing, only dependencies on normal packages are followed
-(i.e., not those of category Scheme or Collection).
-
 @item @strong{--no-depends}
 @anchor{tlmgr @strong{--no-depends}}
 
@@ -693,30 +774,78 @@
 implies @code{--no-depends}.  Don't use it unless you are sure of what you
 are doing.
 
- at item @strong{--dry-run}
- at anchor{tlmgr @strong{--dry-run} 1}
+ at item @strong{--reinstall}
+ at anchor{tlmgr @strong{--reinstall}}
 
-Nothing is actually installed; instead, the actions to be performed are
-written to the terminal.
+Reinstall a package (including dependencies for collections) even if it
+already seems to be installed (i.e, is present in the TLPDB).  This is
+useful to recover from accidental removal of files in the hierarchy.
 
- at item @strong{--force}
- at anchor{tlmgr @strong{--force}}
+When re-installing, only dependencies on normal packages are followed
+(i.e., not those of category Scheme or Collection).
 
-If updates to @code{tlmgr} itself (or other parts of the basic
-infrastructure) are present, @code{tlmgr} will bail out and not perform the
-installation unless this option is given.  Not recommended.
+ at item @strong{--with-doc}
+ at anchor{tlmgr @strong{--with-doc}}
 
+ at item @strong{--with-src}
+ at anchor{tlmgr @strong{--with-src}}
+
+While not recommended, the @code{install-tl} program provides an option to
+omit installation of all documentation and/or source files.  (By
+default, everything is installed.)  After such an installation, you may
+find that you want the documentation or source files for a given package
+after all.  You can get them by using these options in conjunction with
+ at code{--reinstall}, as in (using the @code{fontspec} package as the example):
+
+ at verbatim
+  tlmgr install --reinstall --with-doc --with-src fontspec
+ at end verbatim
+
 @end table
 
+ at node tlmgr key
+ at appendixsubsec key
+
+ at table @asis
+ at item @strong{key list}
+ at anchor{tlmgr @strong{key list}}
+
+ at item @strong{key add @emph{file}}
+ at anchor{tlmgr @strong{key add @emph{file}}}
+
+ at item @strong{key remove @emph{keyid}}
+ at anchor{tlmgr @strong{key remove @emph{keyid}}}
+
+The action @code{key} allows listing, adding and removing additional GPG
+keys to the set of trusted keys, that is, those that are used to verify
+the TeX Live databases.
+
+With the @code{list} argument, @code{key} lists all keys.
+
+The @code{add} argument requires another argument, either a filename or
+ at code{-} for stdin, from which the key is added. The key is added to the
+local keyring @code{GNUPGHOME/repository-keys.gpg}, which is normally)
+ at code{tlpkg/gpg/repository-keys.gpg}.
+
+The @code{remove} argument requires a key id and removes the requested id
+from the local keyring.
+
+ at end table
+
+ at node tlmgr list
+ at appendixsubsec list
+
+Synonym for @ref{tlmgr info,, info}.
+
 @node tlmgr option
 @appendixsubsec option
 
 @table @asis
- at item @strong{option [show]}
- at anchor{tlmgr @strong{option [show]}}
+ at item @strong{option [--json] [show]}
+ at anchor{tlmgr @strong{option [--json] [show]}}
 
- at item @strong{option showall}
- at anchor{tlmgr @strong{option showall}}
+ at item @strong{option [--json] showall}
+ at anchor{tlmgr @strong{option [--json] showall}}
 
 @item @strong{option @emph{key} [@emph{value}]}
 @anchor{tlmgr @strong{option @emph{key} [@emph{value}]}}
@@ -723,16 +852,22 @@
 
 @end table
 
-The first form shows the global TeX Live settings currently saved in the
-TLPDB with a short description and the @code{key} used for changing it in
-parentheses.
+The first form, @code{show}, shows the global TeX Live settings currently
+saved in the TLPDB with a short description and the @code{key} used for
+changing it in parentheses.
 
-The second form is similar, but also shows options which can be defined
-but are not currently set to any value.
+The second form, @code{showall}, is similar, but also shows options which
+can be defined but are not currently set to any value.
 
-In the third form, if @emph{value} is not given, the setting for @emph{key} is
-displayed.  If @emph{value} is present, @emph{key} is set to @emph{value}.
+Both @code{show...} forms take an option @code{--json}, which dumps the option
+information in JSON format.  In this case, both forms dump the same
+data. For the format of the JSON output see
+ at code{tlpkg/doc/JSON-formats.txt}, format definition @code{TLOPTION}.
 
+In the third form, with @emph{key}, if @emph{value} is not given, the setting
+for @emph{key} is displayed.  If @emph{value} is present, @emph{key} is set to
+ at emph{value}.
+
 Possible values for @emph{key} are (run @code{tlmgr option showall} for
 the definitive list):
 
@@ -762,19 +897,22 @@
 
 The @code{install-tl} documentation has more information about the possible
 values for @code{repository}.  (For backward compatibility, @code{location} can
-be used as alternative name for @code{repository}.)
+be used as a synonym for @code{repository}.)
 
 If @code{formats} is set (this is the default), then formats are regenerated
 when either the engine or the format files have changed.  Disable this
-only when you know what you are doing.
+only when you know how and want to regenerate formats yourself.
 
 The @code{postcode} option controls execution of per-package
 postinstallation action code.  It is set by default, and again disabling
-is not likely to be of interest except perhaps to developers.
+is not likely to be of interest except to developers doing debugging.
 
 The @code{docfiles} and @code{srcfiles} options control the installation of
-their respective files of a package. By default both are enabled (1).
-This can be disabled (set to 0) if disk space is (very) limited.
+their respective file groups (documentation, sources; grouping is
+approximate) per package. By default both are enabled (1).  Either or
+both can be disabled (set to 0) if disk space is limited or for minimal
+testing installations, etc.  When disabled, the respective files are not
+downloaded at all.
 
 The options @code{autobackup} and @code{backupdir} determine the defaults for
 the actions @code{update}, @code{backup} and @code{restore}.  These three actions
@@ -787,7 +925,8 @@
 backups are removed.  If @code{autobackup} is 0 or more, it specifies the
 number of backups to keep.  Thus, backups are disabled if the value is
 0.  In the @code{--clean} mode of the @code{backup} action this option also
-specifies the number to be kept.
+specifies the number to be kept.  The default value is 1, so that
+backups are made, but only one backup is kept.
 
 To setup @code{autobackup} to @code{-1} on the command line, use:
 
@@ -795,15 +934,15 @@
   tlmgr option -- autobackup -1
 @end verbatim
 
-The @code{--} avoids having the @code{-1} treated as an option.  (@code{--} stops
-parsing for options at the point where it appears; this is a general
-feature across most Unix programs.)
+The @code{--} avoids having the @code{-1} treated as an option.  (The @code{--}
+stops parsing for options at the point where it appears; this is a
+general feature across most Unix programs.)
 
-The @code{sys_bin}, @code{sys_man}, and @code{sys_info} options are used on
-Unix-like systems to control the generation of links for executables,
-info files and man pages. See the @code{path} action for details.
+The @code{sys_bin}, @code{sys_man}, and @code{sys_info} options are used on Unix
+systems to control the generation of links for executables, Info files
+and man pages. See the @code{path} action for details.
 
-The last three options control behaviour on Windows installations.  If
+The last three options affect behavior on Windows installations.  If
 @code{desktop_integration} is set, then some packages will install items in
 a sub-folder of the Start menu for @code{tlmgr gui}, documentation, etc.  If
 @code{fileassocs} is set, Windows file associations are made (see also the
@@ -821,6 +960,9 @@
 @item @strong{@w{[xdvi|pdftex|dvips|dvipdfmx|context|psutils] paper [@emph{papersize}|--list]}}
 @anchor{tlmgr @strong{@w{[xdvi|pdftex|dvips|dvipdfmx|context|psutils] paper [@emph{papersize}|--list]}}}
 
+ at item @strong{paper --json}
+ at anchor{tlmgr @strong{paper --json}}
+
 @end table
 
 With no arguments (@code{tlmgr paper}), shows the default paper size setting
@@ -841,6 +983,10 @@
 last argument (e.g., @code{tlmgr dvips paper --list}), shows all valid paper
 sizes for that program.  The first size shown is the default.
 
+If @code{--json} is specified without other options, the paper setup is
+dumped in JSON format. For the format of JSON output see
+ at code{tlpkg/doc/JSON-formats.txt}, format definition @code{TLPAPER}.
+
 Incidentally, this syntax of having a specific program name before the
 @code{paper} keyword is unusual.  It is inherited from the longstanding
 @code{texconfig} script, which supports other configuration settings for
@@ -847,9 +993,16 @@
 some programs, notably @code{dvips}.  @code{tlmgr} does not support those extra
 settings.
 
- at node tlmgr path [--w32mode=user|admin] [add|remove]
- at appendixsubsec path [--w32mode=user|admin] [add|remove]
+ at node tlmgr path
+ at appendixsubsec path
 
+ at table @asis
+ at item @strong{path [--w32mode=user|admin] add}
+ at anchor{tlmgr @strong{path [--w32mode=user|admin] add}}
+
+ at item @strong{path [--w32mode=user|admin] remove}
+ at anchor{tlmgr @strong{path [--w32mode=user|admin] remove}}
+
 On Unix, merely adds or removes symlinks for binaries, man pages, and
 info pages in the system directories specified by the respective options
 (see the @ref{tlmgr option,, option} description above).  Does not change any
@@ -871,10 +1024,12 @@
 issued that the caller does not have enough privileges.
 
 If the user does not have admin rights, and the option @code{--w32mode}
-is given, it must be @strong{user} and the user path will be adjusted. If a
+is given, it must be @code{user} and the user path will be adjusted. If a
 user without admin rights uses the option @code{--w32mode admin} a warning
 is issued that the caller does not have enough privileges.
 
+ at end table
+
 @node tlmgr pinning
 @appendixsubsec pinning
 
@@ -905,15 +1060,19 @@
 
 @end table
 
- at node tlmgr platform list|add|remove @emph{platform}...
- at appendixsubsec platform list|add|remove @emph{platform}...
+ at node tlmgr platform
+ at appendixsubsec platform
 
- at node tlmgr platform set @emph{platform}
- at appendixsubsec platform set @emph{platform}
+ at table @asis
+ at item @strong{platform list|add|remove @emph{platform}...}
+ at anchor{tlmgr @strong{platform list|add|remove @emph{platform}...}}
 
- at node tlmgr platform set auto
- at appendixsubsec platform set auto
+ at item @strong{platform set @emph{platform}}
+ at anchor{tlmgr @strong{platform set @emph{platform}}}
 
+ at item @strong{platform set auto}
+ at anchor{tlmgr @strong{platform set auto}}
+
 @code{platform list} lists the TeX Live names of all the platforms
 (a.k.a. architectures), (@code{i386-linux}, ...) available at the package
 repository.
@@ -946,14 +1105,29 @@
 
 @end table
 
- at node tlmgr postaction [--w32mode=user|admin] [--fileassocmode=1|2] [--all] [install|remove] [shortcut|fileassoc|script] [@emph{pkg}]...
- at appendixsubsec postaction [--w32mode=user|admin] [--fileassocmode=1|2] [--all] [install|remove] [shortcut|fileassoc|script] [@emph{pkg}]...
+ at end table
 
+ at node tlmgr postaction
+ at appendixsubsec postaction
+
+ at table @asis
+ at item @strong{postaction [@emph{option}...] install [shortcut|fileassoc|script] [@emph{pkg}...]}
+ at anchor{tlmgr @strong{postaction [@emph{option}...] install [shortcut|fileassoc|script] [@emph{pkg}...]}}
+
+ at item @strong{postaction [@emph{option}...] remove [shortcut|fileassoc|script] [@emph{pkg}...]}
+ at anchor{tlmgr @strong{postaction [@emph{option}...] remove [shortcut|fileassoc|script] [@emph{pkg}...]}}
+
 Carry out the postaction @code{shortcut}, @code{fileassoc}, or @code{script} given
 as the second required argument in install or remove mode (which is the
 first required argument), for either the packages given on the command
 line, or for all if @code{--all} is given.
 
+Options:
+
+ at table @asis
+ at item @strong{--w32mode=[user|admin]}
+ at anchor{tlmgr @strong{--w32mode=[user|admin]}}
+
 If the option @code{--w32mode} is given the value @code{user}, all actions will
 only be carried out in the user-accessible parts of the
 registry/filesystem, while the value @code{admin} selects the system-wide
@@ -960,11 +1134,23 @@
 parts of the registry for the file associations.  If you do not have
 enough permissions, using @code{--w32mode=admin} will not succeed.
 
+ at item @strong{--fileassocmode=[1|2]}
+ at anchor{tlmgr @strong{--fileassocmode=[1|2]}}
+
 @code{--fileassocmode} specifies the action for file associations.  If it is
 set to 1 (the default), only new associations are added; if it is set to
 2, all associations are set to the TeX Live programs.  (See also
 @code{option fileassocs}.)
 
+ at item @strong{--all}
+ at anchor{tlmgr @strong{--all} 1}
+
+Carry out the postactions for all packages
+
+ at end table
+
+ at end table
+
 @node tlmgr print-platform
 @appendixsubsec print-platform
 
@@ -972,64 +1158,40 @@
 (hardware/operating system) combination to standard output, and exit.
 @code{--print-arch} is a synonym.
 
- at node tlmgr restore [--backupdir @emph{dir}] [--all | @emph{pkg} [@emph{rev}]]
- at appendixsubsec restore [--backupdir @emph{dir}] [--all | @emph{pkg} [@emph{rev}]]
+ at node tlmgr print-platform-info
+ at appendixsubsec print-platform-info
 
-Restore a package from a previously-made backup.
+Print the TeX Live platform identifier, TL platform long name, and
+original output from guess.
 
-If @code{--all} is given, try to restore the latest revision of all 
-package backups found in the backup directory.
+ at node tlmgr remove [@emph{option}...] @emph{pkg}...
+ at appendixsubsec remove [@emph{option}...] @emph{pkg}...
 
-Otherwise, if neither @emph{pkg} nor @emph{rev} are given, list the available backup
-revisions for all packages.
+Remove each @emph{pkg} specified.  Removing a collection removes all package
+dependencies (unless @code{--no-depends} is specified), but not any
+collection dependencies of that collection.  However, when removing a
+package, dependencies are never removed.  Options:
 
-With @emph{pkg} given but no @emph{rev}, list all available backup revisions of
- at emph{pkg}.
-
-When listing available packages tlmgr shows the revision and in 
-parenthesis the creation time if available (in format yyyy-mm-dd hh:mm).
-
-With both @emph{pkg} and @emph{rev}, tries to restore the package from the
-specified backup.
-
-Options:
-
 @table @asis
 @item @strong{--all}
- at anchor{tlmgr @strong{--all} 1}
+ at anchor{tlmgr @strong{--all} 2}
 
-Try to restore the latest revision of all package backups found in the
-backup directory. Additional non-option arguments (like @emph{pkg}) are not
-allowed.
+Uninstalls all of TeX Live, asking for confirmation unless @code{--force} is
+also specified.
 
+ at item @strong{--backup}
+ at anchor{tlmgr @strong{--backup}}
+
 @item @strong{--backupdir} @emph{directory}
 @anchor{tlmgr @strong{--backupdir} @emph{directory} 1}
 
-Specify the directory where the backups are to be found. If not given it
-will be taken from the configuration setting in the TLPDB.
+These options behave just as with the @ref{tlmgr update
+[@emph{option}...] [...], update,, update} action (q.v.), except they apply to making
+backups of packages before they are removed.  The default is to make
+such a backup, that is, to save a copy of packages before removal.
 
- at item @strong{--dry-run}
- at anchor{tlmgr @strong{--dry-run} 3}
+The @ref{tlmgr restore,, restore} action explains how to restore from a backup.
 
-Nothing is actually restored; instead, the actions to be performed are
-written to the terminal.
-
- at item @strong{--force}
- at anchor{tlmgr @strong{--force} 1}
-
-Don't ask questions.
-
- at end table
-
- at node tlmgr remove [@emph{option}]... @emph{pkg}...
- at appendixsubsec remove [@emph{option}]... @emph{pkg}...
-
-Remove each @emph{pkg} specified.  Removing a collection removes all package
-dependencies (unless @code{--no-depends} is specified), but not any
-collection dependencies of that collection.  However, when removing a
-package, dependencies are never removed.  Options:
-
- at table @asis
 @item @strong{--no-depends}
 @anchor{tlmgr @strong{--no-depends} 1}
 
@@ -1038,10 +1200,10 @@
 @item @strong{--no-depends-at-all}
 @anchor{tlmgr @strong{--no-depends-at-all} 1}
 
-See above under @strong{install} (and beware).
+See above under @ref{tlmgr install [@emph{option}...] @emph{pkg}..., install, install} (and beware).
 
 @item @strong{--force}
- at anchor{tlmgr @strong{--force} 2}
+ at anchor{tlmgr @strong{--force} 1}
 
 By default, removal of a package or collection that is a dependency of
 another collection or scheme is not allowed.  With this option, the
@@ -1049,11 +1211,11 @@
 
 A package that has been removed using the @code{--force} option because it
 is still listed in an installed collection or scheme will not be
-updated, and will be mentioned as @strong{forcibly removed} in the output of
- at strong{tlmgr update --list}.
+updated, and will be mentioned as @code{forcibly removed} in the output of
+ at code{tlmgr update --list}.
 
 @item @strong{--dry-run}
- at anchor{tlmgr @strong{--dry-run} 4}
+ at anchor{tlmgr @strong{--dry-run} 3}
 
 Nothing is actually removed; instead, the actions to be performed are
 written to the terminal.
@@ -1079,9 +1241,7 @@
 @item @strong{repository set @emph{path}[#@emph{tag}] [@emph{path}[#@emph{tag}] ...]}
 @anchor{tlmgr @strong{repository set @emph{path}[#@emph{tag}] [@emph{path}[#@emph{tag}] ...]}}
 
-This action manages the list of repositories.  See @ref{tlmgr MULTIPLE
-REPOSITORIES,, MULTIPLE
-REPOSITORIES} below for detailed explanations.
+This action manages the list of repositories.  See @ref{,,, MULTIPLE_REPOSITORIES} below for detailed explanations.
 
 The first form (@code{list}) lists all configured repositories and the
 respective tags if set. If a path, url, or tag is given after the
@@ -1102,43 +1262,100 @@
 
 @end table
 
- at node tlmgr search [@emph{option}...] @emph{what}
- at appendixsubsec search [@emph{option}...] @emph{what}
+ at node tlmgr restore
+ at appendixsubsec restore
 
- at menu
-* tlmgr search [@emph{option}...] --file @emph{what}::
-* tlmgr search [@emph{option}...] --taxonomy @emph{what}::
-* tlmgr search [@emph{option}...] --keyword @emph{what}::
-* tlmgr search [@emph{option}...] --functionality @emph{what}::
-* tlmgr search [@emph{option}...] --characterization @emph{what}::
-* tlmgr search [@emph{option}...] --all @emph{what}::
- at end menu
+ at table @asis
+ at item @strong{restore [@emph{option}...] @emph{pkg} [@emph{rev}]}
+ at anchor{tlmgr @strong{restore [@emph{option}...] @emph{pkg} [@emph{rev}]}}
 
- at node tlmgr search [@emph{option}...] --file @emph{what}
- at appendixsubsubsec search [@emph{option}...] --file @emph{what}
+ at item @strong{restore [@emph{option}...] --all}
+ at anchor{tlmgr @strong{restore [@emph{option}...] --all}}
 
- at node tlmgr search [@emph{option}...] --taxonomy @emph{what}
- at appendixsubsubsec search [@emph{option}...] --taxonomy @emph{what}
+Restore a package from a previously-made backup.
 
- at node tlmgr search [@emph{option}...] --keyword @emph{what}
- at appendixsubsubsec search [@emph{option}...] --keyword @emph{what}
+If @code{--all} is given, try to restore the latest revision of all 
+package backups found in the backup directory.
 
- at node tlmgr search [@emph{option}...] --functionality @emph{what}
- at appendixsubsubsec search [@emph{option}...] --functionality @emph{what}
+Otherwise, if neither @emph{pkg} nor @emph{rev} are given, list the available
+backup revisions for all packages.  With @emph{pkg} given but no @emph{rev},
+list all available backup revisions of @emph{pkg}.
 
- at node tlmgr search [@emph{option}...] --characterization @emph{what}
- at appendixsubsubsec search [@emph{option}...] --characterization @emph{what}
+When listing available packages, @code{tlmgr} shows the revision, and in
+parenthesis the creation time if available (in format yyyy-mm-dd hh:mm).
 
- at node tlmgr search [@emph{option}...] --all @emph{what}
- at appendixsubsubsec search [@emph{option}...] --all @emph{what}
+If (and only if) both @emph{pkg} and a valid revision number @emph{rev} are
+specified, try to restore the package from the specified backup.
 
+Options:
+
+ at table @asis
+ at item @strong{--all}
+ at anchor{tlmgr @strong{--all} 3}
+
+Try to restore the latest revision of all package backups found in the
+backup directory. Additional non-option arguments (like @emph{pkg}) are not
+allowed.
+
+ at item @strong{--backupdir} @emph{directory}
+ at anchor{tlmgr @strong{--backupdir} @emph{directory} 2}
+
+Specify the directory where the backups are to be found. If not given it
+will be taken from the configuration setting in the TLPDB.
+
+ at item @strong{--dry-run}
+ at anchor{tlmgr @strong{--dry-run} 4}
+
+Nothing is actually restored; instead, the actions to be performed are
+written to the terminal.
+
+ at item @strong{--force}
+ at anchor{tlmgr @strong{--force} 2}
+
+Don't ask questions.
+
+ at item @strong{--json}
+ at anchor{tlmgr @strong{--json} 2}
+
+When listing backups, the option @code{--json} turn on JSON output.
+The format is an array of JSON objects (@code{name}, @code{rev}, @code{date}).
+For details see @code{tlpkg/doc/JSON-formats.txt}, format definition: @code{TLBACKUPS}.
+If both @code{--json} and @code{--data} are given, @code{--json} takes precedence.
+
+ at end table
+
+ at end table
+
+ at node tlmgr search
+ at appendixsubsec search
+
+ at table @asis
+ at item @strong{search [@emph{option}...] @emph{what}}
+ at anchor{tlmgr @strong{search [@emph{option}...] @emph{what}}}
+
+ at item @strong{search [@emph{option}...] --file @emph{what}}
+ at anchor{tlmgr @strong{search [@emph{option}...] --file @emph{what}}}
+
+ at item @strong{search [@emph{option}...] --all @emph{what}}
+ at anchor{tlmgr @strong{search [@emph{option}...] --all @emph{what}}}
+
 By default, search the names, short descriptions, and long descriptions
 of all locally installed packages for the argument @emph{what}, interpreted
-as a regular expression.
+as a (Perl) regular expression.
 
 Options:
 
 @table @asis
+ at item @strong{--file}
+ at anchor{tlmgr @strong{--file} 1}
+
+List all filenames containing @emph{what}.
+
+ at item @strong{--all}
+ at anchor{tlmgr @strong{--all} 4}
+
+Search everything: package names, descriptions and filenames.
+
 @item @strong{--global}
 @anchor{tlmgr @strong{--global}}
 
@@ -1148,66 +1365,97 @@
 @item @strong{--word}
 @anchor{tlmgr @strong{--word}}
 
-Restrict the search to match only full words. For example, searching for
- at code{table} with this option will not output packages containing the
-word @code{tables} (unless they also contain the word @code{table} on its own).
+Restrict the search of package names and descriptions (but not
+filenames) to match only full words.  For example, searching for
+ at code{table} with this option will not output packages containing the word
+ at code{tables} (unless they also contain the word @code{table} on its own).
 
- at item @strong{--list}
- at anchor{tlmgr @strong{--list} 1}
+ at end table
 
-If a search for any (or all) taxonomies is done, by specifying one of
-the taxonomy options below, then instead of searching for packages, list
-the entire corresponding taxonomy (or all of them).  See
- at ref{tlmgr TAXONOMIES,, TAXONOMIES} below.
-
 @end table
 
-Other search options are selected by specifying one of the following:
+ at node tlmgr shell
+ at appendixsubsec shell
 
+Starts an interactive mode, where tlmgr prompts for commands. This can
+be used directly, or for scripting. The first line of output is
+ at code{protocol} @emph{n}, where @emph{n} is an unsigned number identifying the
+protocol version (currently 1).
+
+In general, tlmgr actions that can be given on the command line
+translate to commands in this shell mode.  For example, you can say
+ at code{update --list} to see what would be updated. The TLPDB is loaded the
+first time it is needed (not at the beginning), and used for the rest of
+the session.
+
+Besides these actions, a few commands are specific to shell mode:
+
 @table @asis
- at item @strong{--file}
- at anchor{tlmgr @strong{--file} 1}
+ at item protocol
+ at anchor{tlmgr protocol}
 
-List all filenames containing @emph{what}.
+Print @code{protocol @emph{n}}, the current protocol version.
 
- at item @strong{--taxonomy}
- at anchor{tlmgr @strong{--taxonomy} 1}
+ at item help
+ at anchor{tlmgr help 1}
 
- at item @strong{--keyword}
- at anchor{tlmgr @strong{--keyword} 1}
+Print pointers to this documentation.
 
- at item @strong{--functionality}
- at anchor{tlmgr @strong{--functionality} 1}
+ at item version
+ at anchor{tlmgr version 1}
 
- at item @strong{--characterization}
- at anchor{tlmgr @strong{--characterization} 1}
+Print tlmgr version information.
 
-Search in the corresponding taxonomy (or all) instead of the package
-descriptions.  See @ref{tlmgr TAXONOMIES,, TAXONOMIES} below.
+ at item quit, end, bye, byebye, EOF
+ at anchor{tlmgr quit at comma{} end at comma{} bye at comma{} byebye at comma{} EOF}
 
- at item @strong{--all}
- at anchor{tlmgr @strong{--all} 2}
+Exit.
 
-Search for package names, descriptions, and taxonomies, but not files.
+ at item restart
+ at anchor{tlmgr restart}
 
- at end table
+Restart @code{tlmgr shell} with the original command line; most useful when
+developing @code{tlmgr}.
 
- at node tlmgr uninstall
- at appendixsubsec uninstall
+ at item load [local|remote]
+ at anchor{tlmgr load [local|remote]}
 
-Uninstalls the entire TeX Live installation.  Options:
+Explicitly load the local or remote, respectively, TLPDB.
 
- at table @asis
- at item @strong{--force}
- at anchor{tlmgr @strong{--force} 3}
+ at item save
+ at anchor{tlmgr save}
 
-Do not ask for confirmation, remove immediately.
+Save the local TLPDB, presumably after other operations have changed it.
 
+ at item get [@emph{var}] =item set [@emph{var} [@emph{val}]]
+ at anchor{tlmgr get [@emph{var}] =item set [@emph{var} [@emph{val}]]}
+
+Get the value of @emph{var}, or set it to @emph{val}.  Possible @emph{var} names:
+ at code{debug-translation}, @code{machine-readable}, @code{no-execute-actions},
+ at code{require-verification}, @code{verify-downloads}, @code{repository}, and
+ at code{prompt}. All except @code{repository} and @code{prompt} are booleans, taking
+values 0 and 1, and behave like the corresponding command line option.
+The @code{repository} variable takes a string, and sets the remote
+repository location. The @code{prompt} variable takes a string, and sets the
+current default prompt.
+
+If @emph{var} or then @emph{val} is not specified, it is prompted for.
+
 @end table
 
- at node tlmgr update [@emph{option}]... [@emph{pkg}]...
- at appendixsubsec update [@emph{option}]... [@emph{pkg}]...
+ at node tlmgr show
+ at appendixsubsec show
 
+Synonym for @ref{tlmgr info,, info}.
+
+ at node tlmgr uninstall
+ at appendixsubsec uninstall
+
+Synonym for @ref{tlmgr remove [@emph{option}...] @emph{pkg}..., remove, remove}.
+
+ at node tlmgr update [@emph{option}...] [@emph{pkg}...]
+ at appendixsubsec update [@emph{option}...] [@emph{pkg}...]
+
 Updates the packages given as arguments to the latest version available
 at the installation source.  Either @code{--all} or at least one @emph{pkg} name
 must be specified.  Options:
@@ -1214,7 +1462,7 @@
 
 @table @asis
 @item @strong{--all}
- at anchor{tlmgr @strong{--all} 3}
+ at anchor{tlmgr @strong{--all} 5}
 
 Update all installed packages except for @code{tlmgr} itself.  Thus, if
 updates to @code{tlmgr} itself are present, this will simply give an error,
@@ -1309,9 +1557,12 @@
 removed package, @code{tlmgr} quits with an error message.  Excludes are not
 supported in these circumstances.
 
- at item @strong{--no-auto-remove} [@emph{pkg}]...
- at anchor{tlmgr @strong{--no-auto-remove} [@emph{pkg}]...}
+This option can also be set permanently in the tlmgr config file with 
+the key @code{update-exclude}.
 
+ at item @strong{--no-auto-remove} [@emph{pkg}...]
+ at anchor{tlmgr @strong{--no-auto-remove} [@emph{pkg}...]}
+
 By default, @code{tlmgr} tries to remove packages which have disappeared on
 the server, as described above under @code{--all}.  This option prevents
 such removals, either for all packages (with @code{--all}), or for just the
@@ -1319,8 +1570,8 @@
 since packages are not infrequently renamed or replaced by their
 authors.  Therefore this is not recommend.
 
- at item @strong{--no-auto-install} [@emph{pkg}]...
- at anchor{tlmgr @strong{--no-auto-install} [@emph{pkg}]...}
+ at item @strong{--no-auto-install} [@emph{pkg}...]
+ at anchor{tlmgr @strong{--no-auto-install} [@emph{pkg}...]}
 
 Under normal circumstances @code{tlmgr} will install packages which are new
 on the server, as described above under @code{--all}.  This option prevents
@@ -1359,29 +1610,31 @@
   tlmgr update --reinstall-forcibly-removed --all
 @end verbatim
 
- at item @strong{--backup} and @strong{--backupdir} @emph{directory}
- at anchor{tlmgr @strong{--backup} and @strong{--backupdir} @emph{directory}}
+ at item @strong{--backup}
+ at anchor{tlmgr @strong{--backup} 1}
 
+ at item @strong{--backupdir} @emph{directory}
+ at anchor{tlmgr @strong{--backupdir} @emph{directory} 3}
+
 These two options control the creation of backups of packages @emph{before}
 updating; that is, backup of packages as currently installed.  If
-neither of these options are given, no backup package will be saved. If
- at code{--backupdir} is given and specifies a writable directory then a backup
-will be made in that location. If only @code{--backup} is given, then a
-backup will be made to the directory previously set via the @code{option}
-action (see below). If both are given then a backup will be made to the
-specified @emph{directory}.
+neither options is given, no backup will made. If @code{--backupdir} is
+given and specifies a writable directory then a backup will be made in
+that location. If only @code{--backup} is given, then a backup will be made
+to the directory previously set via the @ref{tlmgr option,, option} action (see
+below). If both are given then a backup will be made to the specified
+ at emph{directory}.
 
-You can set options via the @code{option} action to automatically create
-backups for all packages, and/or keep only a certain number of
-backups.  Please see the @code{option} action for details.
+You can also set options via the @ref{tlmgr option,, option} action to automatically make
+backups for all packages, and/or keep only a certain number of backups.
 
 @code{tlmgr} always makes a temporary backup when updating packages, in case
 of download or other failure during an update.  In contrast, the purpose
-of this @code{--backup} option is to allow you to save a persistent backup
-in case the actual @emph{content} of the update causes problems, e.g.,
-introduces an incompatibility.
+of this @code{--backup} option is to save a persistent backup in case the
+actual @emph{content} of the update causes problems, e.g., introduces an TeX
+incompatibility.
 
-The @code{restore} action explains how to restore from a backup.
+The @ref{tlmgr restore,, restore} action explains how to restore from a backup.
 
 @item @strong{--no-depends}
 @anchor{tlmgr @strong{--no-depends} 2}
@@ -1393,10 +1646,10 @@
 @item @strong{--no-depends-at-all}
 @anchor{tlmgr @strong{--no-depends-at-all} 2}
 
-See above under @strong{install} (and beware).
+See above under @ref{tlmgr install [@emph{option}...] @emph{pkg}..., install, install} (and beware).
 
 @item @strong{--force}
- at anchor{tlmgr @strong{--force} 4}
+ at anchor{tlmgr @strong{--force} 3}
 
 Force update of normal packages, without updating @code{tlmgr} itself 
 (unless the @code{--self} option is also given).  Not recommended.
@@ -1409,6 +1662,147 @@
 (e.g., if the selected mirror is out of date), @code{tlmgr} does not
 downgrade.  Also, packages for uninstalled platforms are not installed.
 
+ at code{tlmgr} saves a copy of the @code{texlive.tlpdb} file used for an update
+with a suffix representing the repository url, as in
+ at code{tlpkg/texlive.tlpdb.}@emph{long-hash-string}.  These can be useful for
+fallback information, but if you don't like them accumulating (e.g.,
+ at code{mirror.ctan.org} resolves to many different hosts, each resulting in
+a possibly different hash), it's harmless to delete them.
+
+ at node tlmgr CONFIGURATION FILE FOR TLMGR
+ at appendixsec CONFIGURATION FILE FOR TLMGR
+
+There are two configuration files for @code{tlmgr}: One is system-wide in
+ at code{TEXMFSYSCONFIG/tlmgr/config}, and the other is user-specific in
+ at code{TEXMFCONFIG/tlmgr/config}.  The user-specific one is the default for
+the @code{conf tlmgr} action.  (Run @code{kpsewhich
+-var-value=TEXMFSYSCONFIG} or @code{... TEXMFCONFIG ...} to see the actual
+directory names.)
+
+A few defaults corresponding to command-line options can be set in these
+configuration files.  In addition, the system-wide file can contain a
+directive to restrict the allowed actions.
+
+In these config files, empty lines and lines starting with # are
+ignored.  All other lines must look like:
+
+ at verbatim
+  key = value
+ at end verbatim
+
+where the spaces are optional but the @code{=} is required.
+
+The allowed keys are:
+
+ at table @asis
+ at item @code{auto-remove}, value 0 or 1 (default 1), same as command-line option.
+ at anchor{tlmgr @code{auto-remove}@comma{} value 0 or 1 (default 1)@comma{} same as command-line option.}
+
+ at item @code{gui-expertmode}, value 0 or 1 (default 1). This switches between the full GUI and a simplified GUI with only the most common settings.
+ at anchor{tlmgr @code{gui-expertmode}@comma{} value 0 or 1 (default 1). This switches between the full GUI and a simplified GUI with only the most common settings.}
+
+ at item @code{gui-lang} @emph{llcode}, with a language code value as with the command-line option.
+ at anchor{tlmgr @code{gui-lang} @emph{llcode}@comma{} with a language code value as with the command-line option.}
+
+ at item @code{no-checksums}, value 0 or 1 (default 0, see below).
+ at anchor{tlmgr @code{no-checksums}@comma{} value 0 or 1 (default 0 at comma{} see below).}
+
+ at item @code{persistent-downloads}, value 0 or 1 (default 1), same as command-line option.
+ at anchor{tlmgr @code{persistent-downloads}@comma{} value 0 or 1 (default 1)@comma{} same as command-line option.}
+
+ at item @code{require-verification}, value 0 or 1 (default 0), same as command-line option.
+ at anchor{tlmgr @code{require-verification}@comma{} value 0 or 1 (default 0)@comma{} same as command-line option.}
+
+ at item @code{update-exclude}, value: comma-separated list of packages (no space allowed). Same as the command line option @code{--exclude} for the action @code{update}.
+ at anchor{tlmgr @code{update-exclude}@comma{} value: comma-separated list of packages (no space allowed). Same as the command line option @code{--exclude} for the action @code{update}.}
+
+ at item @code{verify-downloads}, value 0 or 1 (default 1), same as command-line option.
+ at anchor{tlmgr @code{verify-downloads}@comma{} value 0 or 1 (default 1)@comma{} same as command-line option.}
+
+ at end table
+
+The system-wide config file can contain one additional key:
+
+ at table @asis
+ at item @code{allowed-actions} @emph{action1} [, at emph{action},...] The value is a comma-separated list of @code{tlmgr} actions which are allowed to be executed when @code{tlmgr} is invoked in system mode (that is, without @code{--usermode}).
+ at anchor{tlmgr @code{allowed-actions} @emph{action1} [@comma{}@emph{action}@comma{}...] The value is a comma-separated list of @code{tlmgr} actions which are allowed to be executed when @code{tlmgr} is invoked in system mode (that is at comma{} without @code{--usermode}).}
+
+This allows distributors to include the @code{tlmgr} in their packaging, but
+allow only a restricted set of actions that do not interfere with their
+distro package manager.  For native TeX Live installations, it doesn't
+make sense to set this.
+
+ at end table
+
+The @code{no-checksums} key needs more explanation.  By default, package
+checksums computed and stored on the server (in the TLPDB) are compared
+to checksums computed locally after downloading.  @code{no-checksums}
+disables this process.
+
+The checksum algorithm is SHA-512.  Your system must have one of (looked
+for in this order) the Perl @code{Digest::SHA} module, the @code{openssl}
+program (@url{http://openssl.org}), the @code{sha512sum} program (from GNU
+Coreutils, @url{http://www.gnu.org/software/coreutils}), or finally the
+ at code{shasum} program (just to support old Macs).  If none of these are
+available, a warning is issued and @code{tlmgr} proceeds without checking
+checksums.  (Incidentally, other SHA implementations, such as the pure
+Perl and pure Lua modules, are much too slow to be usable in our
+context.)  @code{no-checksums} avoids the warning.
+
+ at node tlmgr CRYPTOGRAPHIC VERIFICATION
+ at appendixsec CRYPTOGRAPHIC VERIFICATION
+
+ at code{tlmgr} and @code{install-tl} perform cryptographic verification if
+possible.  If verification is performed and successful, the programs
+report @code{(verified)} after loading the TLPDB; otherwise, they report
+ at code{(not verified)}.  But either way, by default the installation and/or
+updates proceed normally.
+
+If a program named @code{gpg} is available (that is, found in @code{PATH}), by
+default cryptographic signatures will be checked: we require the main
+repository be signed, but not any additional repositories. If @code{gpg} is
+not available, by default signatures are not checked and no verification
+is carried out, but @code{tlmgr} still proceeds normally.
+
+The behavior of the verification can be controlled by the command line
+and config file option @code{verify-repo} which takes one of the following
+values: @code{none}, @code{main}, or @code{all}. With @code{none}, no verification
+whatsoever is attempted.  With @code{main} (the default) verification is
+required only for the main repository, and only if @code{gpg} is available;
+though attempted for all, missing signatures of subsidiary repositories
+will not result in an error.  Finally, in the case of @code{all}, @code{gpg}
+must be available and all repositories need to be signed.
+
+In all cases, if a signature is checked and fails to verify, an error
+is raised.
+
+Cryptographic verification requires checksum checking (described just
+above) to succeed, and a working GnuPG (@code{gpg}) program (see below for
+search method).  Then, unless cryptographic verification has been
+disabled, a signature file (@code{texlive.tlpdb.*.asc}) of the checksum file
+is downloaded and the signature verified. The signature is created by
+the TeX Live Distribution GPG key 0x06BAB6BC, which in turn is signed by
+Karl Berry's key 0x30D155AD and Norbert Preining's key 0x6CACA448.  All
+of these keys are obtainable from the standard key servers.
+
+Additional trusted keys can be added using the @code{key} action.
+
+ at menu
+* tlmgr Configuration of GnuPG invocation::
+ at end menu
+
+ at node tlmgr Configuration of GnuPG invocation
+ at appendixsubsec Configuration of GnuPG invocation
+
+The executable used for GnuPG is searched as follows: If the environment
+variable @code{TL_GNUPG} is set, it is tested and used; otherwise @code{gpg} is
+checked; finally @code{gpg2} is checked.
+
+Further adaptation of the @code{gpg} invocation can be made using the two
+environment variables @code{TL_GNUPGHOME}, which is passed to @code{gpg} as the
+value for @code{--homedir}, and @code{TL_GNUPGARGS}, which replaces the default
+options @code{--no-secmem-warning --no-permission-warning}.
+
 @node tlmgr USER MODE
 @appendixsec USER MODE
 
@@ -1435,7 +1829,8 @@
 
 Some @code{tlmgr} actions don't need any write permissions and thus work the
 same in user mode and normal mode.  Currently these are: @code{check},
- at code{help}, @code{list}, @code{print-platform}, @code{search}, @code{show}, @code{version}.
+ at code{help}, @code{list}, @code{print-platform}, @code{print-platform-info}, @code{search},
+ at code{show}, @code{version}.
 
 On the other hand, most of the actions dealing with package management
 do need write permissions, and thus behave differently in user mode, as
@@ -1464,13 +1859,13 @@
 Description of changes of actions in user mode:
 
 @menu
-* tlmgr user mode install::
-* tlmgr user mode backup; restore; remove; update::
-* tlmgr user mode generate; option; paper::
+* tlmgr User mode install::
+* tlmgr User mode backup at comma{} restore at comma{} remove at comma{} update::
+* tlmgr User mode generate at comma{} option at comma{} paper::
 @end menu
 
- at node tlmgr user mode install
- at appendixsubsec user mode install
+ at node tlmgr User mode install
+ at appendixsubsec User mode install
 
 In user mode, the @code{install} action checks that the package and all
 dependencies are all either relocated or already installed in the system
@@ -1486,96 +1881,24 @@
 collections, while in user mode, @emph{only} the packages mentioned in
 @code{collection-context} are installed.
 
- at node tlmgr user mode backup; restore; remove; update
- at appendixsubsec user mode backup; restore; remove; update
+If a package shipping map files is installed in user mode, a backup of
+the user's @code{updmap.cfg} in @code{USERTREE/web2c/} is made, and then this file
+regenerated from the list of installed packages.
 
+ at node tlmgr User mode backup at comma{} restore at comma{} remove at comma{} update
+ at appendixsubsec User mode backup, restore, remove, update
+
 In user mode, these actions check that all packages to be acted on are
 installed in the user tree before proceeding; otherwise, they behave
 just as in normal mode.
 
- at node tlmgr user mode generate; option; paper
- at appendixsubsec user mode generate; option; paper
+ at node tlmgr User mode generate at comma{} option at comma{} paper
+ at appendixsubsec User mode generate, option, paper
 
 In user mode, these actions operate only on the user tree's
 configuration files and/or @code{texlive.tlpdb}.
 creates configuration files in user tree
 
- at node tlmgr CONFIGURATION FILE FOR TLMGR
- at appendixsec CONFIGURATION FILE FOR TLMGR
-
-A small subset of the command line options can be set in a config file
-for @code{tlmgr} which resides in @code{TEXMFCONFIG/tlmgr/config}.  By default, the
-config file is in @code{~/.texliveYYYY/texmf-config/tlmgr/config} (replacing
- at code{YYYY} with the year of your TeX Live installation). This is @emph{not}
- at code{TEXMFSYSVAR}, so that the file is specific to a single user.
-
-In this file, empty lines and lines starting with # are ignored.  All
-other lines must look like
-
- at verbatim
-  key = value
- at end verbatim
-
-where the allowed keys are @code{gui-expertmode} (value 0 or 1),
- at code{persistent-downloads} (value 0 or 1), @code{auto-remove} (value 0 or 1),
-and @code{gui-lang} (value like in the command line option).
-
- at code{persistent-downloads}, @code{gui-lang}, and @code{auto-remove} correspond to
-the respective command line options of the same name.  @code{gui-expertmode}
-switches between the full GUI and a simplified GUI with only the
-important and mostly used settings.
-
- at node tlmgr TAXONOMIES
- at appendixsec TAXONOMIES
-
-tlmgr allows searching and listing of various categorizations, which we
-call @emph{taxonomies}, as provided by an enhanced TeX Catalogue (available
-for testing at @url{http://az.ctan.org}).  This is useful when, for
-example, you don't know a specific package name but have an idea of the
-functionality you need; or when you want to see all packages relating to
-a given area.
-
-There are three different taxonomies, specified by the following
-options:
-
- at table @asis
- at item @code{--keyword}
- at anchor{tlmgr @code{--keyword} 2}
-
-The keywords, as specified at @url{http://az.ctan.org/keyword}.
-
- at item @code{--functionality}
- at anchor{tlmgr @code{--functionality} 2}
-
-The ``by-topic'' categorization created by J\"urgen Fenn, as specified
-at @url{http://az.ctan.org/characterization/by-function}.
-
- at item @code{--characterization}
- at anchor{tlmgr @code{--characterization} 2}
-
-Both the primary and secondary functionalities, as specified at
- at url{http://az.ctan.org/characterization/choose_dimen}.
-
- at item @code{--taxonomy}
- at anchor{tlmgr @code{--taxonomy} 2}
-
-Operate on all the taxonomies.
-
- at end table
-
-The taxonomies are updated nightly and stored within TeX Live, so
-Internet access is not required to search them.
-
-Examples:
-
- at verbatim
-  tlmgr search --taxonomy exercise      # check all taxonomies for "exercise"
-  tlmgr search --taxonomy --word table  # check for "table" on its own
-  tlmgr search --list --keyword         # dump entire keyword taxonomy
-  tlmgr show --taxonomy pdftex          # show pdftex package information,
-                                        #   including all taxonomy entries
- at end verbatim
-
 @node tlmgr MULTIPLE REPOSITORIES
 @appendixsec MULTIPLE REPOSITORIES
 
@@ -1589,11 +1912,11 @@
 installation source to any repository (with the @code{-repository} or
 @code{option repository} command line options), and perform your operations.
 
-When you are using multiple repositories over a sustained time, however,
-explicitly switching between them becomes inconvenient.  Thus, it's
-possible to tell @code{tlmgr} about additional repositories you want to use.
-The basic command is @code{tlmgr repository add}.  The rest of this section
-explains further.
+When you are using multiple repositories over a sustained length of
+time, however, explicitly switching between them becomes inconvenient.
+Thus, it's possible to tell @code{tlmgr} about additional repositories you
+want to use.  The basic command is @code{tlmgr repository add}.  The rest of
+this section explains further.
 
 When using multiple repositories, one of them has to be set as the main
 repository, which distributes most of the installed packages.  When you
@@ -1692,15 +2015,17 @@
 @node tlmgr GUI FOR TLMGR
 @appendixsec GUI FOR TLMGR
 
-The graphical user interface for @code{tlmgr} needs Perl/Tk to be installed.
-For Windows the necessary modules are shipped within TeX Live, for all
-other (i.e., Unix-based) systems Perl/Tk (as well as Perl of course) has
-to be installed.  @url{http://tug.org/texlive/distro.html#perltk} has a
-list of invocations for some distros.
+The graphical user interface for @code{tlmgr} requires Perl/Tk
+ at url{http://search.cpan.org/search?query=perl%2Ftk}.  For Windows the
+necessary modules are shipped within TeX Live, for all other (i.e.,
+Unix-based) systems Perl/Tk (as well as Perl of course) has to be
+installed outside of TL.  @url{http://tug.org/texlive/distro.html#perltk}
+has a list of invocations for some distros.
 
-When started with @code{tlmgr gui} the graphical user interface will be
-shown.  The main window contains a menu bar, the main display, and a
-status area where messages normally shown on the console are displayed.
+The GUI is started with the invocation @code{tlmgr gui}; assuming Tk is
+loadable, the graphical user interface will be shown.  The main window
+contains a menu bar, the main display, and a status area where messages
+normally shown on the console are displayed.
 
 Within the main display there are three main parts: the @code{Display
 configuration} area, the list of packages, and the action buttons.
@@ -1715,6 +2040,7 @@
 @menu
 * tlmgr Main display::
 * tlmgr Menu bar::
+* tlmgr GUI options::
 @end menu
 
 @node tlmgr Main display
@@ -1750,10 +2076,9 @@
 @item Match
 @anchor{tlmgr Match}
 
-Select packages matching for a specific pattern.  By default, this uses
-the same algorithm as @code{tlmgr search}, i.e., searches everything:
-descriptions, taxonomies, and/or filenames.  You can also select any
-subset for searching.
+Select packages matching for a specific pattern.  By default, this
+searches both descriptions and filenames.  You can also select a subset
+for searching.
 
 @item Selection
 @anchor{tlmgr Selection}
@@ -1916,6 +2241,47 @@
 
 @end table
 
+ at node tlmgr GUI options
+ at appendixsubsec GUI options
+
+Some generic Perl/Tk options can be specified with @code{tlmgr gui} to
+control the display:
+
+ at table @asis
+ at item @code{-background} @emph{color}
+ at anchor{tlmgr @code{-background} @emph{color}}
+
+Set background color.
+
+ at item @code{-font "} @emph{fontname} @emph{fontsize} @code{"}
+ at anchor{tlmgr @code{-font "} @emph{fontname} @emph{fontsize} @code{"}}
+
+Set font, e.g., @code{tlmgr gui -font "helvetica 18"}.  The argument to
+ at code{-font} must be quoted, i.e., passed as a single string.
+
+ at item @code{-foreground} @emph{color}
+ at anchor{tlmgr @code{-foreground} @emph{color}}
+
+Set foreground color.
+
+ at item @code{-geometry} @emph{geomspec}
+ at anchor{tlmgr @code{-geometry} @emph{geomspec}}
+
+Set the X geometry, e.g., @code{tlmgr gui -geometry 1024x512-0+0} creates
+the window of (approximately) the given size in the upper-right corner
+of the display.
+
+ at item @code{-xrm} @emph{xresource}
+ at anchor{tlmgr @code{-xrm} @emph{xresource}}
+
+Pass the arbitrary X resource string @emph{xresource}.
+
+ at end table
+
+A few other obscure options are recognized but not mentioned here.  See
+the Perl/Tk documentation (@url{http://search.cpan.org/perldoc?Tk}) for the
+complete list, and any X documentation for general information.
+
 @node tlmgr MACHINE-READABLE OUTPUT
 @appendixsec MACHINE-READABLE OUTPUT
 
@@ -1926,9 +2292,9 @@
 information it needs by reading stdout.
 
 Currently this option only applies to the 
- at ref{tlmgr update [@emph{option}]... [@emph{pkg}]..., update, update},
- at ref{tlmgr install [@emph{option}]... @emph{pkg}..., install, install}, and
- at ref{tlmgr option,, option} actions.  
+ at ref{tlmgr update [@emph{option}...] [@emph{pkg}...], update, update},
+ at ref{tlmgr install [@emph{option}...] @emph{pkg}..., install, install}, and
+ at ref{tlmgr option,, option} actions.
 
 @menu
 * tlmgr Machine-readable @code{update} and @code{install} output::
@@ -2094,3 +2460,5 @@
 distribution (@url{http://tug.org/texlive}) and both are licensed under the
 GNU General Public License Version 2 or later.
 
+$Id: tlmgr.pl 47303 2018-04-05 17:52:22Z karl $
+

Modified: branches/stable/source/src/doc/tlbuild.info
===================================================================
--- branches/stable/source/src/doc/tlbuild.info	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/doc/tlbuild.info	2018-04-22 15:47:12 UTC (rev 796)
@@ -47,7 +47,6 @@
 * Installing::                  How and where installation happens (or not).
 * Layout and infrastructure::   Autoconf macros, etc., in detail.
 * Configure options::           List of all configure options.
-* Cross compilation::           Building on host X for target Y.
 * Coding conventions::          Conventions to follow.
 * Continuous integration::      Automated build testing.
 * install-tl::                  The TeX Live installer.
@@ -60,8 +59,7 @@
 1 Introduction
 **************
 
-This manual (dated February 2018) corresponds to the TeX Live 2018
-release.
+This manual (dated April 2018) corresponds to the TeX Live 2018 release.
 
    This manual is aimed at system installers and programmers, and
 focuses on how to configure, build, and develop the TeX Live (TL)
@@ -245,6 +243,7 @@
 * Build in parallel::   Simultaneous 'make' processes.
 * Build distribution::  Making a distribution tarball.
 * Build one package::   Example of working on just one program.
+* Cross compilation::   Building on host X for target Y.
 
 
 File: tlbuild.info,  Node: Build iteration,  Next: Build problems,  Up: Building
@@ -313,7 +312,7 @@
 since all the support files are lacking; *note Installing::.
 
 
-File: tlbuild.info,  Node: Build one package,  Prev: Build distribution,  Up: Building
+File: tlbuild.info,  Node: Build one package,  Next: Cross compilation,  Prev: Build distribution,  Up: Building
 
 4.5 Build one package
 =====================
@@ -391,6 +390,124 @@
 'CXX', and 'OBJCXX'.
 
 
+File: tlbuild.info,  Node: Cross compilation,  Prev: Build one package,  Up: Building
+
+4.6 Cross compilation
+=====================
+
+In a cross compilation a "build" system is used to create binaries to be
+executed on a "host" system with different hardware and/or operating
+system.
+
+   In simple cases, the build system can execute binaries for the host
+system.  This typically occurs for bi-arch systems where, e.g.,
+'i386-linux' binaries can run on 'x86_64-linux' systems and 'win32'
+binaries can run on 'win64' systems.  Although sometimes called "native
+cross", technically this is not cross compilation at all.  In most such
+cases it suffices to specify suitable compiler flags.  It might be
+useful to add the configure option '--build=HOST' to get the correct
+canonical host name, but note that this should _not_ be '--host=HOST'
+(*note (autoconf)Hosts and Cross-Compilation::).
+
+   In order to build, e.g., 32-bit binaries with 'clang' on a 64-bit
+MacOSX system one could use:
+
+     TL_BUILD_ENV="CC='clang -arch i386' \
+       CXX='clang++ -arch i386' \
+       OBJCXX='clang++ -arch i386'" \
+       ./Build --build=i386-apple-darwin
+
+* Menu:
+
+* Cross configuring::           Configuring for cross compilation.
+* Cross problems::              Cross compilation problems.
+
+
+File: tlbuild.info,  Node: Cross configuring,  Next: Cross problems,  Up: Cross compilation
+
+4.6.1 Cross configuring
+-----------------------
+
+In a standard cross compilation, binaries for the host system cannot
+execute on the build system and it is necessary to specify the configure
+options '--host=HOST' and '--build=BUILD' with two different values.
+
+   Building binaries requires suitable "cross" tools, e.g., compiler,
+linker, and archiver, and perhaps a "cross" version of 'pkg-config' and
+similar to locate host system libraries.  Autoconf expects that these
+cross tools are given by their usual variables or found under their
+usual name prefixed with 'HOST-'.  Here a list of such tools and
+corresponding variables:
+
+     ar                AR
+     freetype-config   FT2_CONFIG
+     g++               CXX
+     gcc               CC
+     icu-config        ICU_CONFIG
+     objdump           OBJDUMP
+     pkg-config        PKG_CONFIG
+     ranlib            RANLIB
+     strip             STRIP
+
+In order to, e.g., build 'mingw32' binaries on 'x86_64-linux' with a
+cross compiler found as 'i386-pc-mingw32-gcc' one would specify
+
+     --host=i386-pc-mingw32 --build=x86_64-linux-gnu
+
+or perhaps
+
+     --host=mingw32 --build=x86_64-linux CC=i386-pc-mingw32-gcc
+
+but this latter, especially, might require adding 'CXX' and others.
+
+   Configure arguments such as 'CFLAGS=...' refer to the cross compiler.
+If necessary, you can specify compilers and flags for the few auxiliary
+C and C++ programs required for the build process as configure arguments
+
+     BUILDCC=...
+     BUILDCPPFLAGS=...
+     BUILDCFLAGS=...
+     BUILDCXX=...
+     BUILDCXXFLAGS=...
+     BUILDLDFLAGS=...
+
+
+File: tlbuild.info,  Node: Cross problems,  Prev: Cross configuring,  Up: Cross compilation
+
+4.6.2 Cross problems
+--------------------
+
+The fact that binaries for the host system cannot be executed on the
+build system causes some problems.
+
+   One problem is that configure tests using 'AC_RUN_IFELSE' can compile
+and link the test program but cannot execute it.  Such tests should be
+avoided if possible and otherwise must supply a pessimistic test result.
+
+   Another problem arises if the build process must execute some
+(auxiliary or installable) programs.  Auxiliary programs can be placed
+into a subdirectory that is configured natively as is done for
+'texk/web2c/web2c', 'texk/dvipsk/squeeze', and 'texk/xdvik/squeeze'.
+The module 'libs/freetype2' uses the value of 'CC_BUILD', 'BUILD-gcc',
+'gcc', or 'cc' as the compiler for the auxiliary program.
+
+   The situation for installable programs needed by the build process is
+somewhat different.  A rather expensive possibility, chosen for the ICU
+libraries in module 'libs/icu', is to first compile natively for the
+build system and in a second step to use these (uninstalled) programs
+during the cross compilation.
+
+   This approach would also be possible for the tools such as 'tangle'
+used in the module 'texk/web2c' to build the WEB programs, but that
+would require first building a native 'kpathsea' library.  To avoid this
+complication, cross compilation of the WEB or CWEB programs requires
+sufficiently recent installed versions of 'tangle', 'ctangle',
+'otangle', and 'tie'.
+
+   Building 'xindy' requires running the host system 'clisp' binary,
+thus cross compilation is not possible.
+
+
 File: tlbuild.info,  Node: Installing,  Next: Layout and infrastructure,  Prev: Building,  Up: Top
 
 5 Installing
@@ -1245,7 +1362,7 @@
    * The fragment 'ac/withenable.ac' must use 'KPSE_WITH_TEXLIB'.
 
 
-File: tlbuild.info,  Node: Configure options,  Next: Cross compilation,  Prev: Layout and infrastructure,  Up: Top
+File: tlbuild.info,  Node: Configure options,  Next: Coding conventions,  Prev: Layout and infrastructure,  Up: Top
 
 7 Configure options
 *******************
@@ -1792,127 +1909,9 @@
      commands used, e.g., to build the 'xindy' documentation.
 
 
-File: tlbuild.info,  Node: Cross compilation,  Next: Coding conventions,  Prev: Configure options,  Up: Top
+File: tlbuild.info,  Node: Coding conventions,  Next: Continuous integration,  Prev: Configure options,  Up: Top
 
-8 Cross compilation
-*******************
-
-In a cross compilation a "build" system is used to create binaries to be
-executed on a "host" system with different hardware and/or operating
-system.
-
-   In simple cases, the build system can execute binaries for the host
-system.  This typically occurs for bi-arch systems where, e.g.,
-'i386-linux' binaries can run on 'x86_64-linux' systems and 'win32'
-binaries can run on 'win64' systems.  Although sometimes called "native
-cross", technically this is not cross compilation at all.  In most such
-cases it suffices to specify suitable compiler flags.  It might be
-useful to add the configure option '--build=HOST' to get the correct
-canonical host name, but note that this should _not_ be '--host=HOST'
-(*note (autoconf)Hosts and Cross-Compilation::).
-
-   In order to build, e.g., 32-bit binaries with 'clang' on a 64-bit
-MacOSX system one could use:
-
-     TL_BUILD_ENV="CC='clang -arch i386' \
-       CXX='clang++ -arch i386' \
-       OBJCXX='clang++ -arch i386'" \
-       ./Build --build=i386-apple-darwin
-
-* Menu:
-
-* Cross configuring::           Configuring for cross compilation.
-* Cross problems::              Cross compilation problems.
-
-
-File: tlbuild.info,  Node: Cross configuring,  Next: Cross problems,  Up: Cross compilation
-
-8.1 Cross configuring
-=====================
-
-In a standard cross compilation, binaries for the host system cannot
-execute on the build system and it is necessary to specify the configure
-options '--host=HOST' and '--build=BUILD' with two different values.
-
-   Building binaries requires suitable "cross" tools, e.g., compiler,
-linker, and archiver, and perhaps a "cross" version of 'pkg-config' and
-similar to locate host system libraries.  Autoconf expects that these
-cross tools are given by their usual variables or found under their
-usual name prefixed with 'HOST-'.  Here a list of such tools and
-corresponding variables:
-
-     ar                AR
-     freetype-config   FT2_CONFIG
-     g++               CXX
-     gcc               CC
-     icu-config        ICU_CONFIG
-     objdump           OBJDUMP
-     pkg-config        PKG_CONFIG
-     ranlib            RANLIB
-     strip             STRIP
-
-In order to, e.g., build 'mingw32' binaries on 'x86_64-linux' with a
-cross compiler found as 'i386-pc-mingw32-gcc' one would specify
-
-     --host=i386-pc-mingw32 --build=x86_64-linux-gnu
-
-or perhaps
-
-     --host=mingw32 --build=x86_64-linux CC=i386-pc-mingw32-gcc
-
-but this latter, especially, might require adding 'CXX' and others.
-
-   Configure arguments such as 'CFLAGS=...' refer to the cross compiler.
-If necessary, you can specify compilers and flags for the few auxiliary
-C and C++ programs required for the build process as configure arguments
-
-     BUILDCC=...
-     BUILDCPPFLAGS=...
-     BUILDCFLAGS=...
-     BUILDCXX=...
-     BUILDCXXFLAGS=...
-     BUILDLDFLAGS=...
-
-
-File: tlbuild.info,  Node: Cross problems,  Prev: Cross configuring,  Up: Cross compilation
-
-8.2 Cross problems
-==================
-
-The fact that binaries for the host system cannot be executed on the
-build system causes some problems.
-
-   One problem is that configure tests using 'AC_RUN_IFELSE' can compile
-and link the test program but cannot execute it.  Such tests should be
-avoided if possible and otherwise must supply a pessimistic test result.
-
-   Another problem arises if the build process must execute some
-(auxiliary or installable) programs.  Auxiliary programs can be placed
-into a subdirectory that is configured natively as is done for
-'texk/web2c/web2c', 'texk/dvipsk/squeeze', and 'texk/xdvik/squeeze'.
-The module 'libs/freetype2' uses the value of 'CC_BUILD', 'BUILD-gcc',
-'gcc', or 'cc' as the compiler for the auxiliary program.
-
-   The situation for installable programs needed by the build process is
-somewhat different.  A rather expensive possibility, chosen for the ICU
-libraries in module 'libs/icu', is to first compile natively for the
-build system and in a second step to use these (uninstalled) programs
-during the cross compilation.
-
-   This approach would also be possible for the tools such as 'tangle'
-used in the module 'texk/web2c' to build the WEB programs, but that
-would require first building a native 'kpathsea' library.  To avoid this
-complication, cross compilation of the WEB or CWEB programs requires
-sufficiently recent installed versions of 'tangle', 'ctangle',
-'otangle', and 'tie'.
-
-   Building 'xindy' requires running the host system 'clisp' binary,
-thus cross compilation is not possible.
-
-
-File: tlbuild.info,  Node: Coding conventions,  Next: Continuous integration,  Prev: Cross compilation,  Up: Top
-
-9 Coding conventions
+8 Coding conventions
 ********************
 
 Ideally, building all of TeX Live with '--enable-compiler-warnings=max'
@@ -1932,7 +1931,7 @@
 
 File: tlbuild.info,  Node: Declarations and definitions,  Next: Const,  Up: Coding conventions
 
-9.1 Declarations and definitions
+8.1 Declarations and definitions
 ================================
 
 C standards
@@ -1990,7 +1989,7 @@
 
 File: tlbuild.info,  Node: Const,  Prev: Declarations and definitions,  Up: Coding conventions
 
-9.2 Const
+8.2 Const
 =========
 
 The 'const' feature of C is valuable, but easy to mis-use.
@@ -2034,8 +2033,8 @@
 
 File: tlbuild.info,  Node: Continuous integration,  Next: install-tl,  Prev: Coding conventions,  Up: Top
 
-10 Continuous integration
-*************************
+9 Continuous integration
+************************
 
 Overview: the sources of TeX Live are subjected to continuous
 integration testing on Travis-CI
@@ -2045,9 +2044,18 @@
 updated (currently) at 30 minute intervals, and only the last commit
 pushed is tested on Travis-CI.
 
-Transfer from Subversion to Github
-----------------------------------
+* Menu:
 
+* Transfer from Subversion to Github::
+* Automatic update of the Git mirror::
+* CI testing on Travis-CI::
+
+
+File: tlbuild.info,  Node: Transfer from Subversion to Github,  Next: Automatic update of the Git mirror,  Up: Continuous integration
+
+9.1 Transfer from Subversion to Github
+======================================
+
 git-svn (<https://git-scm.com/docs/git-svn>) is used to check out the
 subtree 'Build/source' of the Subversion repository.  The author index
 file used is not maintained in either Git or Subversion but can be
@@ -2087,9 +2095,12 @@
 from the local 'master' (not the one on Github) to Subversion, back to
 'master' on 'texlive.info', and from there to Github.
 
-Automatic update of the Git mirror
-----------------------------------
+
+File: tlbuild.info,  Node: Automatic update of the Git mirror,  Next: CI testing on Travis-CI,  Prev: Transfer from Subversion to Github,  Up: Continuous integration
 
+9.2 Automatic update of the Git mirror
+======================================
+
 _admin_ has installed a cron job on 'texlive.info' running every 30
 minute which essentially runs 'git svn rebase' and 'git push' in the
 'master' branch of the checkout.  The first command fetches the changes
@@ -2096,9 +2107,12 @@
 from the Subversion repository and updates the 'master' branch with
 them, the second one pushes changes (if available) to Github.
 
-CI testing on Travis-CI
------------------------
+
+File: tlbuild.info,  Node: CI testing on Travis-CI,  Prev: Automatic update of the Git mirror,  Up: Continuous integration
 
+9.3 CI testing on Travis-CI
+===========================
+
 The 'source' tree of TeX Live contains a top-level file '.travis.yml'
 which controls the automatic testing on Travis-CI. _admin_ has
 registered to Travis-CI and allowed access to the Github's 'TeX-Live'
@@ -2122,6 +2136,7 @@
 * install-tl DESCRIPTION::
 * install-tl REFERENCES::
 * install-tl OPTIONS::
+* install-tl PROFILES::
 * install-tl ENVIRONMENT VARIABLES::
 * install-tl AUTHORS AND COPYRIGHT::
 
@@ -2141,8 +2156,10 @@
 
 install-tl [_option_]...
 
-   install-tl.bat [_option_]...
+   install-tl-windows.bat [_option_]...
 
+   install-tl-advanced.bat [_option_]...
+
 
 File: tlbuild.info,  Node: install-tl DESCRIPTION,  Next: install-tl REFERENCES,  Prev: install-tl SYNOPSIS,  Up: install-tl
 
@@ -2150,21 +2167,22 @@
 ===============
 
 This installer creates a runnable TeX Live installation from various
-media, including over the network.  The installer works across all
-platforms supported by TeX Live.  For information on initially
-downloading the TeX Live, see <http://tug.org/texlive/acquire.html>.
+media, including over the network, from local hard disk, a DVD, etc.
+The installer works across all platforms supported by TeX Live.  For
+information on initially downloading the TeX Live, see
+<http://tug.org/texlive/acquire.html>.
 
-   The basic idea of TeX Live installation is to choose one of the
-top-level _schemes_, each of which is defined as a different set of
+   The basic idea of TeX Live installation is for you to choose one of
+the top-level _schemes_, each of which is defined as a different set of
 _collections_ and _packages_, where a collection is a set of packages,
 and a package is what contains actual files.
 
    Within the installer, you can choose a scheme, and further customize
 the set of collections to install, but not the set of the packages.  To
-do that, use 'tlmgr' (reference below) after the initial installation is
-completely.
+work at the package level, use 'tlmgr' (reference just below) after the
+initial installation is complete.
 
-   The default is 'scheme-full', to install everything, and this is
+   The default is 'scheme-full', which installs everything, and this is
 highly recommended.
 
 
@@ -2177,14 +2195,14 @@
 handled through *tlmgr*(1), the TeX Live Manager
 (<http://tug.org/texlive/tlmgr.html>).
 
-   The most up-to-date version of this documentation is on the Internet
-at <http://tug.org/texlive/doc/install-tl.html>.
+   The most up-to-date version of this installer documentation is on the
+Internet at <http://tug.org/texlive/doc/install-tl.html>.
 
    For the full documentation of TeX Live, see
 <http://tug.org/texlive/doc>.
 
 
-File: tlbuild.info,  Node: install-tl OPTIONS,  Next: install-tl ENVIRONMENT VARIABLES,  Prev: install-tl REFERENCES,  Up: install-tl
+File: tlbuild.info,  Node: install-tl OPTIONS,  Next: install-tl PROFILES,  Prev: install-tl REFERENCES,  Up: install-tl
 
 A.5 OPTIONS
 ===========
@@ -2195,7 +2213,7 @@
 
 *-gui* [[=]_module_]
 
-     If no _module_ is given starts the 'perltk' (see below) GUI
+     If no _module_ is given, starts the 'perltk' (see below) GUI
      installer.
 
      If _module_ is given loads the given installer module.  Currently
@@ -2218,7 +2236,7 @@
           'install-tl-advanced.bat'.
 
      The 'perltk' and 'wizard' modules, and thus also when calling with
-     a bare '-gui' (without _module_), requires the Perl/Tk module
+     bare '-gui' (with no _module_), require the Perl/Tk module
      (<http://tug.org/texlive/distro.html#perltk>); if Perl/Tk is not
      available, installation continues in text mode.
 
@@ -2243,8 +2261,9 @@
 
      Specify the package repository to be used as the source of the
      installation, either a local directory via '/path/to/directory' or
-     a 'file:/' url, or a network location via a 'http://' or 'ftp://'
-     url.  (No other protocols are supported.)
+     a 'file:/' url, or a network location via a 'http://', 'https://',
+     or 'ftp://' url.  (No other protocols are supported, and 'https://'
+     may not work on all platforms.)
 
      The default is to pick a mirror automatically, using
      <http://mirror.ctan.org/systems/texlive/tlnet>; the chosen mirror
@@ -2259,9 +2278,9 @@
 
        -repository http://ctan.example.org/its/ctan/dir/systems/texlive/tlnet
 
-     Of course a real hostname and its particular top-level CTAN path
-     have to be specified.  The list of CTAN mirrors is available at
-     <http://ctan.org/mirrors>.
+     Of course a real hostname and its particular top-level CTAN
+     directory have to be specified.  The list of CTAN mirrors is
+     available at <http://ctan.org/mirrors>.
 
      If the repository is local, the installation type (compressed or
      live) is automatically determined, by checking for the presence of
@@ -2292,9 +2311,9 @@
 *-all-options*
 
      Normally options not relevant to the current platform are not shown
-     (i.e., when running on Unix, Windows-specific options are omitted).
-     Giving this command line option allows configuring settings in the
-     final 'texlive.tlpdb' that do not have any immediate effect.
+     (e.g., when running on Unix, Windows-specific options are omitted).
+     Giving this command line option allows configuring such "foreign"
+     settings.
 
 *-custom-bin* _path_
 
@@ -2305,10 +2324,13 @@
      installation will continue as usual, but at the end all files from
      _path_ are copied over to 'bin/custom/' under your installation
      directory and this 'bin/custom/' directory is what will be added to
-     the path for the post-install actions.  (By the way, for
-     information on building TeX Live, see
-     <http://tug.org/texlive/build.html>).
+     the path for the post-install actions.  To install multiple custom
+     binary sets, manully rename 'custom' before doing each.
 
+     For more information on custom binaries, see
+     <http://tug.org/texlive/custom-bin.html>.  For general information
+     on building TeX Live, see <http://tug.org/texlive/build.html>.
+
 *-debug-translation*
 
      In GUI mode, this switch makes 'tlmgr' report any missing, or more
@@ -2324,7 +2346,7 @@
 
 *-help*, *-help*, *-?*
 
-     Display this help and exit (on the web via
+     Display this help and exit.  (This help is on the web at
      <http://tug.org/texlive/doc/install-tl.html>).  Sometimes the
      'perldoc' and/or 'PAGER' programs on the system have problems,
      possibly resulting in control characters being literally output.
@@ -2342,6 +2364,12 @@
      option is not available via the installer interfaces.  USE AT YOUR
      OWN RISK.
 
+*-init-from-profile* _profile_file_
+
+     Similar to *-profile* (see *note PROFILES: install-tl PROFILES.
+     below), but only initializes the installation configuration from
+     _profile_file_ and then starts the interactive session.
+
 *-logfile* _file_
 
      Write both all messages (informational, debugging, warnings) to
@@ -2353,7 +2381,7 @@
 
 *-no-cls*
 
-     (only for text mode installer) do not clear the screen when
+     For the text mode installer only: do not clear the screen when
      entering a new menu (for debugging purposes).
 
 *-non-admin*
@@ -2375,8 +2403,16 @@
      This option is turned on by default, and the installation program
      will fall back to using 'wget' if this is not possible.  To disable
      usage of LWP and persistent connections, use
-     '--no-persistent-downloads'.
+     '-no-persistent-downloads'.
 
+*-no-verify-downloads*
+
+     By default, if a GnuPG 'gpg' binary is found in PATH, downloads are
+     verified against a cryptographic signature.  This option disables
+     such verification.  The full description is in the Crytographic
+     Verification section of the 'tlmgr' documentation, e.g.,
+     <http://tug.org/texlive/doc/tlmgr.html#CRYPTOGRAPHIC-VERIFICATION>
+
 *-portable*
 
      Install for portable use, e.g., on a USB stick.  Also selectable
@@ -2388,34 +2424,12 @@
      (hardware/operating system) combination to standard output, and
      exit.  '-print-arch' is a synonym.
 
-*-profile* _profile_
+*-profile* _profile_file_
 
-     Load the file _profile_ and do the installation with no user
-     interaction, that is, a batch (unattended) install.
+     Load _profile_file_ and do the installation with no user
+     interaction, that is, a batch (unattended) install.  See *note
+     PROFILES: install-tl PROFILES. below.
 
-     A _profile_ file contains all the values needed to perform an
-     installation.  After a normal installation has finished, a profile
-     for that exact installation is written to the file
-     DEST/tlpkg/texlive.profile.  That file can be given as the argument
-     to '-profile' to redo the exact same installation on a different
-     system, for example.  Alternatively, you can use a custom profile,
-     most easily created by starting from a generated one and changing
-     values, or an empty file, which will take all the defaults.
-
-     Normally a profile has to specify the value '1' for each collection
-     to be installed, even if the scheme is specified.  This follows
-     from the logic of the installer in that you can first select a
-     scheme and then change the collections being installed.  But for
-     convenience there is an exception to this within profiles: If the
-     profile contains a variable for 'selected_scheme' and _no_
-     collection variables at all are defined in the profile, then the
-     collections which the specified scheme requires are installed.
-
-     Thus, a line 'selected_scheme scheme-medium' together with the
-     definitions of the installation directories ('TEXDIR', 'TEXMFHOME',
-     'TEXMFLOCAL', 'TEXMFSYSCONFIG', 'TEXMFSYSVAR') suffices to install
-     the medium scheme with all default options.
-
 *-q*
 
      Omit normal informational messages.
@@ -2432,8 +2446,8 @@
 
 *-v*
 
-     Include verbose debugging messages; repeat for maximum debugging,
-     as in '-v -v'.  (Further repeats are accepted but ignored.)
+     Include verbose debugging messages; repeat for maximum debugging:
+     '-v -v'.  (Further repeats are accepted but ignored.)
 
 *-version*, *-version*
 
@@ -2441,13 +2455,143 @@
      the revisions of the used modules are reported, too.
 
 
-File: tlbuild.info,  Node: install-tl ENVIRONMENT VARIABLES,  Next: install-tl AUTHORS AND COPYRIGHT,  Prev: install-tl OPTIONS,  Up: install-tl
+File: tlbuild.info,  Node: install-tl PROFILES,  Next: install-tl ENVIRONMENT VARIABLES,  Prev: install-tl OPTIONS,  Up: install-tl
 
-A.6 ENVIRONMENT VARIABLES
+A.6 PROFILES
+============
+
+A _profile_ file contains all the values needed to perform an
+installation.  After a normal installation has finished, a profile for
+that exact installation is written to the file 'tlpkg/texlive.profile'.
+In addition, from the text menu one can select 'P' to save the current
+setup as a profile at any time.  Such a profile file can be given as the
+argument to '-profile', for example to redo the exact same installation
+on a different system.  Alternatively, you can use a custom profile,
+most easily created by starting from a generated one and changing
+values, or an empty file, which will take all the defaults.
+
+   Within a profile file, each line consists of
+
+   _variable_ [_value_]
+
+   except for comment lines starting with '#'.  The possible variable
+names are listed below.  Values, when present, are either '0' or '1' for
+booleans, or strings (which must be specified without any quote
+characters).  Leading whitespace is ignored.
+
+   If the variable 'selected_scheme' is defined and _no_ collection
+variables at all are defined, then the collections required by the
+specified scheme (which might change over time) are installed, without
+explicitly listing them.  This eases maintenance of profile files.  If
+any collections are specified in a profile, though, then all desired
+collections must be given explicitly.
+
+   For example, a line
+
+  selected_scheme scheme-small
+
+   along with definitions for the installation directories (given below
+under "path options") suffices to install the "small" scheme with all
+default options.  The schemes are described in the 'S' menu in the text
+installer, or equivalent.
+
+   Besides 'selected_scheme', here is the list of variable names
+supported in a profile:
+
+   *collection options* (prefix 'collection-')
+
+   Collections are specified with a variable name with the prefix
+'collection-' followed by a collection name; there is no value.  For
+instance, 'collection-basic'.  The collections are described in the 'C'
+menu.
+
+   Schemes and collections (and packages) are ultimately defined by the
+files in the 'tlpkg/tlpsrc/' source directory.
+
+   *path options*
+
+   It is best to define all of these, even though they may not be used
+in the installation, so as to avoid unintentionally getting a default
+value that could cause problems later.
+
+  TEXDIR
+  TEXMFCONFIG
+  TEXMFVAR
+  TEXMFHOME
+  TEXMFLOCAL
+  TEXMFSYSCONFIG
+  TEXMFSYSVAR
+
+   *installer options* (prefix 'instopt_')
+
+'instopt_adjustpath' (default 0 on Unix, 1 on Windows)
+
+     Adjust 'PATH' environment variable.
+
+'instopt_adjustrepo' (default 1)
+
+     Set remote repository to a multiplexed CTAN mirror after
+     installation; see '-repository' above.
+
+'instopt_letter' (default 0)
+
+     Set letter size paper as the default, instead of a4.
+
+'instopt_portable' (default 0)
+
+     Install for portable use, e.g., on a USB stick.
+
+'instopt_write18_restricted' (default 1)
+
+     Enable '\write18' for a restricted set of programs.
+
+   *tlpdb options* (prefix 'tlpdbopt_')
+
+   The definitive list is given in 'tlpkg/TeXLive/TLConfig.pm', in
+'%TeXLive::TLConfig::TLPDBOptions', together with explanations.  All
+items given there _except_ for 'tlpdbopt_location' can be specified.
+Here is the current list:
+
+  tlpdbopt_autobackup
+  tlpdbopt_backupdir
+  tlpdbopt_create_formats
+  tlpdbopt_desktop_integration
+  tlpdbopt_file_assocs
+  tlpdbopt_generate_updmap
+  tlpdbopt_install_docfiles
+  tlpdbopt_install_srcfiles
+  tlpdbopt_post_code
+  tlpdbopt_sys_bin
+  tlpdbopt_sys_info
+  tlpdbopt_sys_man
+  tlpdbopt_w32_multi_user
+
+   *platform options* (prefix 'binary_')
+
+   For each supported platform in TeX Live (directories under 'bin/'),
+the variable 'binary_'_PLATFORM_ can be set.  For example:
+
+  binary_x86_64-linux
+
+   If no 'binary_' variable is specified, the default is whatever the
+current machine is running.
+
+   In releases before 2017, many profile variables had different names
+(not documented here; see the 'install-tl' source).  They are accepted
+and transformed to the names given above.  When a profile is written,
+the names above are always used.
+
+   For more details on all of the above options, consult the TeX Live
+installation manual, linked from <http://tug.org/texlive/doc>.
+
+
+File: tlbuild.info,  Node: install-tl ENVIRONMENT VARIABLES,  Next: install-tl AUTHORS AND COPYRIGHT,  Prev: install-tl PROFILES,  Up: install-tl
+
+A.7 ENVIRONMENT VARIABLES
 =========================
 
 For ease in scripting and debugging, 'install-tl' will look for the
-following environment variables.  They are not of interest in normal
+following environment variables.  They are not of interest for normal
 user installations.
 
 'TEXLIVE_INSTALL_ENV_NOCHECK'
@@ -2461,10 +2605,19 @@
      Omit creating the ConTeXt cache.  This is useful for
      redistributors.
 
+'TEXLIVE_INSTALL_NO_WELCOME'
+
+     Omit printing the welcome message after successful installation,
+     e.g., for testing.
+
 'TEXLIVE_INSTALL_PREFIX'
 
+'TEXLIVE_INSTALL_TEXDIR'
+
 'TEXLIVE_INSTALL_TEXMFCONFIG'
 
+'TEXLIVE_INSTALL_TEXMFVAR'
+
 'TEXLIVE_INSTALL_TEXMFHOME'
 
 'TEXLIVE_INSTALL_TEXMFLOCAL'
@@ -2473,10 +2626,13 @@
 
 'TEXLIVE_INSTALL_TEXMFSYSVAR'
 
-'TEXLIVE_INSTALL_TEXMFVAR'
+     Specify the respective directories.  'TEXLIVE_INSTALL_PREFIX'
+     defaults to '/usr/local/texlive', while 'TEXLIVE_INSTALL_TEXDIR'
+     defaults to the release directory within that prefix, e.g.,
+     '/usr/local/texlive/2016'.  All the defaults can be seen by running
+     the installer interactively and then typing 'D' for the directory
+     menu.
 
-     Specify the respective directories.
-
 'NOPERLDOC'
 
      Don't try to run the '--help' message through 'perldoc'.
@@ -2484,7 +2640,7 @@
 
 File: tlbuild.info,  Node: install-tl AUTHORS AND COPYRIGHT,  Prev: install-tl ENVIRONMENT VARIABLES,  Up: install-tl
 
-A.7 AUTHORS AND COPYRIGHT
+A.8 AUTHORS AND COPYRIGHT
 =========================
 
 This script and its documentation were written for the TeX Live
@@ -2491,6 +2647,8 @@
 distribution (<http://tug.org/texlive>) and both are licensed under the
 GNU General Public License Version 2 or later.
 
+   $Id: install-tl 46908 2018-03-10 00:46:28Z preining $
+
 
 File: tlbuild.info,  Node: tlmgr,  Next: Index,  Prev: install-tl,  Up: Top
 
@@ -2505,9 +2663,9 @@
 * tlmgr EXAMPLES::
 * tlmgr OPTIONS::
 * tlmgr ACTIONS::
+* tlmgr CONFIGURATION FILE FOR TLMGR::
+* tlmgr CRYPTOGRAPHIC VERIFICATION::
 * tlmgr USER MODE::
-* tlmgr CONFIGURATION FILE FOR TLMGR::
-* tlmgr TAXONOMIES::
 * tlmgr MULTIPLE REPOSITORIES::
 * tlmgr GUI FOR TLMGR::
 * tlmgr MACHINE-READABLE OUTPUT::
@@ -2519,7 +2677,7 @@
 B.1 NAME
 ========
 
-tlmgr - the TeX Live Manager
+tlmgr - the native TeX Live Manager
 
 
 File: tlbuild.info,  Node: tlmgr SYNOPSIS,  Next: tlmgr DESCRIPTION,  Prev: tlmgr NAME,  Up: tlmgr
@@ -2527,7 +2685,7 @@
 B.2 SYNOPSIS
 ============
 
-tlmgr [_option_]...  _action_ [_option_]...  [_operand_]...
+tlmgr [_option_...]  _action_ [_option_...]  [_operand_...]
 
 
 File: tlbuild.info,  Node: tlmgr DESCRIPTION,  Next: tlmgr EXAMPLES,  Prev: tlmgr SYNOPSIS,  Up: tlmgr
@@ -2563,11 +2721,17 @@
 After successfully installing TeX Live, here are a few common operations
 with 'tlmgr':
 
+'tlmgr option repository ctan'
+
 'tlmgr option repository http://mirror.ctan.org/systems/texlive/tlnet'
 
      Tell 'tlmgr' to use a nearby CTAN mirror for future updates; useful
-     if you installed TeX Live from the DVD image and want continuing
-     updates.
+     if you installed TeX Live from the DVD image and want to have
+     continuing updates.  The two commands are equivalent; 'ctan' is
+     just an alias for the given url.  Caveat: 'mirror.ctan.org'
+     resolves to many different hosts, and they are not perfectly
+     synchronized; we recommend updating only daily (at most), and not
+     more often.
 
 'tlmgr update --list'
 
@@ -2578,10 +2742,11 @@
      Make your local TeX installation correspond to what is in the
      package repository (typically useful when updating from CTAN).
 
-'tlmgr info' _pkg_
+'tlmgr info' _what_
 
-     Display detailed information about _pkg_, such as the installation
-     status and description.
+     Display detailed information about a package _what_, such as the
+     installation status and description, of searches for _what_ in all
+     packages.
 
    For all the capabilities and details of 'tlmgr', please read the
 following voluminous information.
@@ -2663,8 +2828,8 @@
 
      'tlmgr' logs all package actions (install, remove, update, failed
      updates, failed restores) to a separate log file, by default
-     'TEXMFSYSVAR/web2c/tlmgr.log'.  This option allows you to specific
-     a different file for the log.
+     'TEXMFSYSVAR/web2c/tlmgr.log'.  This option allows you to specify a
+     different file for the log.
 
 *-pause*
 
@@ -2702,6 +2867,16 @@
      Uses _dir_ for the tree in user mode; see *note USER MODE: tlmgr
      USER MODE. below.
 
+*-verify-repo=[none|main|all]*
+
+     Defines the level of verification done: If 'none' is specified, no
+     verification whatsoever is done.  If 'main' is given and a working
+     GnuPG ('gpg') binary is available, all repositories are checked,
+     but only the main repository is required to be signed.  If 'all' is
+     given, then all repositories need to be signed.  See *note
+     CRYPTOGRAPHIC VERIFICATION: tlmgr CRYPTOGRAPHIC VERIFICATION. below
+     for details.
+
    The standard options for TeX Live programs are also accepted:
 '--help/-h/-?', '--version', '-q' (no informational messages), '-v'
 (debugging messages, can be repeated).  For the details about these, see
@@ -2712,7 +2887,7 @@
 revision number for the loaded TeX Live Perl modules are shown, too.
 
 
-File: tlbuild.info,  Node: tlmgr ACTIONS,  Next: tlmgr USER MODE,  Prev: tlmgr OPTIONS,  Up: tlmgr
+File: tlbuild.info,  Node: tlmgr ACTIONS,  Next: tlmgr CONFIGURATION FILE FOR TLMGR,  Prev: tlmgr OPTIONS,  Up: tlmgr
 
 B.6 ACTIONS
 ===========
@@ -2721,31 +2896,34 @@
 
 * tlmgr help::
 * tlmgr version::
-* tlmgr backup [--clean[=_N_]] [--backupdir _dir_] [--all | _pkg_]...::
+* tlmgr backup::
 * tlmgr candidates _pkg_::
-* tlmgr check [_option_]... [files|depends|executes|runfiles|all]::
-* tlmgr conf [texmf|tlmgr|updmap [--conffile _file_] [--delete] [_key_ [_value_]]]::
-* tlmgr dump-tlpdb [--local|--remote]::
-* tlmgr generate [_option_]... _what_::
+* tlmgr check [_option_...] [files|depends|executes|runfiles|all]::
+* tlmgr conf::
+* tlmgr dump-tlpdb [_option_...] [--json]::
+* tlmgr generate::
 * tlmgr gui::
-* tlmgr info [_option_...] [collections|schemes|_pkg_...]::
+* tlmgr info::
 * tlmgr init-usertree::
-* tlmgr install [_option_]... _pkg_...::
+* tlmgr install [_option_...] _pkg_...::
+* tlmgr key::
+* tlmgr list::
 * tlmgr option::
 * tlmgr paper::
-* tlmgr path [--w32mode=user|admin] [add|remove]::
+* tlmgr path::
 * tlmgr pinning::
-* tlmgr platform list|add|remove _platform_...::
-* tlmgr platform set _platform_::
-* tlmgr platform set auto::
-* tlmgr postaction [--w32mode=user|admin] [--fileassocmode=1|2] [--all] [install|remove] [shortcut|fileassoc|script] [_pkg_]...::
+* tlmgr platform::
+* tlmgr postaction::
 * tlmgr print-platform::
-* tlmgr restore [--backupdir _dir_] [--all | _pkg_ [_rev_]]::
-* tlmgr remove [_option_]... _pkg_...::
+* tlmgr print-platform-info::
+* tlmgr remove [_option_...] _pkg_...::
 * tlmgr repository::
-* tlmgr search [_option_...] _what_::
+* tlmgr restore::
+* tlmgr search::
+* tlmgr shell::
+* tlmgr show::
 * tlmgr uninstall::
-* tlmgr update [_option_]... [_pkg_]...::
+* tlmgr update [_option_...] [_pkg_...]::
 
 
 File: tlbuild.info,  Node: tlmgr help,  Next: tlmgr version,  Up: tlmgr ACTIONS
@@ -2761,7 +2939,7 @@
 'perldoc' will not be used.
 
 
-File: tlbuild.info,  Node: tlmgr version,  Next: tlmgr backup [--clean[=_N_]] [--backupdir _dir_] [--all | _pkg_]...,  Prev: tlmgr help,  Up: tlmgr ACTIONS
+File: tlbuild.info,  Node: tlmgr version,  Next: tlmgr backup,  Prev: tlmgr help,  Up: tlmgr ACTIONS
 
 B.6.2 version
 -------------
@@ -2772,67 +2950,70 @@
 reported, too.
 
 
-File: tlbuild.info,  Node: tlmgr backup [--clean[=_N_]] [--backupdir _dir_] [--all | _pkg_]...,  Next: tlmgr candidates _pkg_,  Prev: tlmgr version,  Up: tlmgr ACTIONS
+File: tlbuild.info,  Node: tlmgr backup,  Next: tlmgr candidates _pkg_,  Prev: tlmgr version,  Up: tlmgr ACTIONS
 
-B.6.3 backup [-clean[=_N_]] [-backupdir _dir_] [-all | _pkg_]...
-----------------------------------------------------------------
+B.6.3 backup
+------------
 
-If the '--clean' option is not specified, this action makes a backup of
-the given packages, or all packages given '--all'.  These backups are
-saved to the value of the '--backupdir' option, if that is an existing
-and writable directory.  If '--backupdir' is not given, the 'backupdir'
-option setting in the TLPDB is used, if present.  If both are missing,
-no backups are made.
+*backup [_option_...] -all*
 
-   If the '--clean' option is specified, backups are pruned (removed)
-instead of saved.  The optional integer value _N_ may be specified to
-set the number of backups that will be retained when cleaning.  If 'N'
-is not given, the value of the 'autobackup' option is used.  If both are
-missing, an error is issued.  For more details of backup pruning, see
-the 'option' action.
+*backup [_option_...] _pkg_...*
 
-   Options:
+     If the '--clean' option is not specified, this action makes a
+     backup of the given packages, or all packages given '--all'.  These
+     backups are saved to the value of the '--backupdir' option, if that
+     is an existing and writable directory.  If '--backupdir' is not
+     given, the 'backupdir' option setting in the TLPDB is used, if
+     present.  If both are missing, no backups are made.
 
-*-backupdir* _directory_
+     If the '--clean' option is specified, backups are pruned (removed)
+     instead of saved.  The optional integer value _N_ may be specified
+     to set the number of backups that will be retained when cleaning.
+     If 'N' is not given, the value of the 'autobackup' option is used.
+     If both are missing, an error is issued.  For more details of
+     backup pruning, see the 'option' action.
 
-     Overrides the 'backupdir' option setting in the TLPDB. The
-     _directory_ argument is required and must specify an existing,
-     writable directory where backups are to be placed.
+     Options:
 
-*-all*
+     *-backupdir* _directory_
 
-     If '--clean' is not specified, make a backup of all packages in the
-     TeX Live installation; this will take quite a lot of space and
-     time.  If '--clean' is specified, all packages are pruned.
+          Overrides the 'backupdir' option setting in the TLPDB. The
+          _directory_ argument is required and must specify an existing,
+          writable directory where backups are to be placed.
 
-*-clean*[=_N_]
+     *-all*
 
-     Instead of making backups, prune the backup directory of old
-     backups, as explained above.  The optional integer argument _N_
-     overrides the 'autobackup' option set in the TLPDB. You must use
-     '--all' or a list of packages together with this option, as
-     desired.
+          If '--clean' is not specified, make a backup of all packages
+          in the TeX Live installation; this will take quite a lot of
+          space and time.  If '--clean' is specified, all packages are
+          pruned.
 
-*-dry-run*
+     *-clean*[=_N_]
 
-     Nothing is actually backed up or removed; instead, the actions to
-     be performed are written to the terminal.
+          Instead of making backups, prune the backup directory of old
+          backups, as explained above.  The optional integer argument
+          _N_ overrides the 'autobackup' option set in the TLPDB. You
+          must use '--all' or a list of packages together with this
+          option, as desired.
 
+     *-dry-run*
+
+          Nothing is actually backed up or removed; instead, the actions
+          to be performed are written to the terminal.
+
 
-File: tlbuild.info,  Node: tlmgr candidates _pkg_,  Next: tlmgr check [_option_]... [files|depends|executes|runfiles|all],  Prev: tlmgr backup [--clean[=_N_]] [--backupdir _dir_] [--all | _pkg_]...,  Up: tlmgr ACTIONS
+File: tlbuild.info,  Node: tlmgr candidates _pkg_,  Next: tlmgr check [_option_...] [files|depends|executes|runfiles|all],  Prev: tlmgr backup,  Up: tlmgr ACTIONS
 
 B.6.4 candidates _pkg_
 ----------------------
 
-*candidates _pkg_*
+Shows the available candidate repositories for package _pkg_.  See *note
+MULTIPLE REPOSITORIES: tlmgr MULTIPLE REPOSITORIES. below.
 
-     Shows the available candidate repositories for package _pkg_.  See
-     *note MULTIPLE REPOSITORIES: tlmgr MULTIPLE REPOSITORIES. below.
-
 
-File: tlbuild.info,  Node: tlmgr check [_option_]... [files|depends|executes|runfiles|all],  Next: tlmgr conf [texmf|tlmgr|updmap [--conffile _file_] [--delete] [_key_ [_value_]]],  Prev: tlmgr candidates _pkg_,  Up: tlmgr ACTIONS
+File: tlbuild.info,  Node: tlmgr check [_option_...] [files|depends|executes|runfiles|all],  Next: tlmgr conf,  Prev: tlmgr candidates _pkg_,  Up: tlmgr ACTIONS
 
-B.6.5 check [_option_]... [files|depends|executes|runfiles|all]
+B.6.5 check [_option_...] [files|depends|executes|runfiles|all]
 ---------------------------------------------------------------
 
 Executes one (or all) check(s) on the consistency of the installation.
@@ -2845,8 +3026,8 @@
 *depends*
 
      Lists those packages which occur as dependencies in an installed
-     collections, but are themselves not installed, and those packages
-     that are not contained in any collection.
+     collection, but are themselves not installed, and those packages
+     which are not contained in any collection.
 
      If you call 'tlmgr check collections' this test will be carried out
      instead since former versions for 'tlmgr' called it that way.
@@ -2859,7 +3040,7 @@
 *runfiles*
 
      List those filenames that are occurring more than one time in the
-     runfiles.
+     runfiles sections.
 
    Options:
 
@@ -2869,52 +3050,68 @@
      checking the TL development repository.
 
 
-File: tlbuild.info,  Node: tlmgr conf [texmf|tlmgr|updmap [--conffile _file_] [--delete] [_key_ [_value_]]],  Next: tlmgr dump-tlpdb [--local|--remote],  Prev: tlmgr check [_option_]... [files|depends|executes|runfiles|all],  Up: tlmgr ACTIONS
+File: tlbuild.info,  Node: tlmgr conf,  Next: tlmgr dump-tlpdb [_option_...] [--json],  Prev: tlmgr check [_option_...] [files|depends|executes|runfiles|all],  Up: tlmgr ACTIONS
 
-B.6.6 conf [texmf|tlmgr|updmap [-conffile _file_] [-delete] [_key_ [_value_]]]
-------------------------------------------------------------------------------
+B.6.6 conf
+----------
 
-With only 'conf', show general configuration information for TeX Live,
-including active configuration files, path settings, and more.  This is
-like the 'texconfig conf' call, but works on all supported platforms.
+*conf [texmf|tlmgr|updmap [-conffile _file_] [-delete] [_key_ [_value_]]]*
 
-   With either 'conf texmf', 'conf tlmgr', or 'conf updmap' given in
-addition, shows all key/value pairs (i.e., all settings) as saved in
-'ROOT/texmf.cnf', the tlmgr configuration file (see below), or the first
-found (via kpsewhich) 'updmap.cfg' file, respectively.
+*conf auxtrees [-conffile _file_] [show|add|delete] [_value_]*
 
-   If _key_ is given in addition, shows the value of only that _key_ in
-the respective file.  If option _-delete_ is also given, the
-configuration file - it is removed, not just commented out!
+     With only 'conf', show general configuration information for TeX
+     Live, including active configuration files, path settings, and
+     more.  This is like running 'texconfig conf', but works on all
+     supported platforms.
 
-   If _value_ is given in addition, _key_ is set to _value_ in the
-respective file.  _No error checking is done!_
+     With one of 'conf texmf', 'conf tlmgr', or 'conf updmap', shows all
+     key/value pairs (i.e., all settings) as saved in 'ROOT/texmf.cnf',
+     the user-specific 'tlmgr' configuration file (see below), or the
+     first found (via 'kpsewhich') 'updmap.cfg' file, respectively.
 
-   In all cases the file used can be explicitly specified via the option
-'--conffile _file_', in case one wants to operate on a different file.
+     If _key_ is given in addition, shows the value of only that _key_
+     in the respective file.  If option _-delete_ is also given, the
+     value in the given configuration file is entirely removed (not just
+     commented out).
 
-   Practical application: if the execution of (some or all) system
-commands via '\write18' was left enabled during installation, you can
-disable it afterwards:
+     If _value_ is given in addition, _key_ is set to _value_ in the
+     respective file.  _No error checking is done!_
 
-  tlmgr conf texmf shell_escape 0
+     The 'PATH' value shown by 'conf' is as used by 'tlmgr'.  The
+     directory in which the 'tlmgr' executable is found is automatically
+     prepended to the PATH value inherited from the environment.
 
-   A more complicated example: the 'TEXMFHOME' tree (see the main TeX
-Live guide, <http://tug.org/texlive/doc.html>) can be set to multiple
-directories, but they must be enclosed in braces and separated by
-commas, so quoting the value to the shell is a good idea.  Thus:
+     Here is a practical example of changing configuration values.  If
+     the execution of (some or all) system commands via '\write18' was
+     left enabled during installation, you can disable it afterwards:
 
-  tlmgr conf texmf TEXMFHOME "{~/texmf,~/texmfbis}"
+       tlmgr conf texmf shell_escape 0
 
-   Warning: The general facility is here, but tinkering with settings in
-this way is very strongly discouraged.  Again, no error checking on
-either keys or values is done, so any sort of breakage is possible.
+     The subcommand 'auxtrees' allows adding and removing arbitrary
+     additional texmf trees, completely under user control.  'auxtrees
+     show' shows the list of additional trees, 'auxtrees add' _tree_
+     adds a tree to the list, and 'auxtrees remove' _tree_ removes a
+     tree from the list (if present).  The trees should not contain an
+     'ls-R' file (or files might not be found if the 'ls-R' becomes
+     stale).  This works by manipulating the Kpathsea variable
+     'TEXMFAUXTREES', in 'ROOT/texmf.cnf'.  Example:
 
+       tlmgr conf auxtrees add /quick/test/tree
+       tlmgr conf auxtrees remove /quick/test/tree
+
+     In all cases the configuration file can be explicitly specified via
+     the option '--conffile' _file_, if desired.
+
+     Warning: The general facility for changing configuration values is
+     here, but tinkering with settings in this way is strongly
+     discouraged.  Again, no error checking on either keys or values is
+     done, so any sort of breakage is possible.
+
 
-File: tlbuild.info,  Node: tlmgr dump-tlpdb [--local|--remote],  Next: tlmgr generate [_option_]... _what_,  Prev: tlmgr conf [texmf|tlmgr|updmap [--conffile _file_] [--delete] [_key_ [_value_]]],  Up: tlmgr ACTIONS
+File: tlbuild.info,  Node: tlmgr dump-tlpdb [_option_...] [--json],  Next: tlmgr generate,  Prev: tlmgr conf,  Up: tlmgr ACTIONS
 
-B.6.7 dump-tlpdb [-local|-remote]
----------------------------------
+B.6.7 dump-tlpdb [_option_...] [-json]
+--------------------------------------
 
 Dump complete local or remote TLPDB to standard output, as-is.  The
 output is analogous to the '--machine-readable' output; see *note
@@ -2924,12 +3121,18 @@
 
 *-local*
 
-     Dump the local tlpdb.
+     Dump the local TLPDB.
 
 *-remote*
 
-     Dump the remote tlpdb.
+     Dump the remote TLPDB.
 
+*-json*
+
+     Instead of dumping the actual content, the database is dumped as
+     JSON. For the format of JSON output see
+     'tlpkg/doc/JSON-formats.txt', format definition 'TLPDB'.
+
    Exactly one of '--local' and '--remote' must be given.
 
    In either case, the first line of the output specifies the repository
@@ -2944,21 +3147,19 @@
 platform.
 
 
-File: tlbuild.info,  Node: tlmgr generate [_option_]... _what_,  Next: tlmgr gui,  Prev: tlmgr dump-tlpdb [--local|--remote],  Up: tlmgr ACTIONS
+File: tlbuild.info,  Node: tlmgr generate,  Next: tlmgr gui,  Prev: tlmgr dump-tlpdb [_option_...] [--json],  Up: tlmgr ACTIONS
 
-B.6.8 generate [_option_]... _what_
------------------------------------
+B.6.8 generate
+--------------
 
-*generate language*
+*generate [_option_...] language*
 
-*generate language.dat*
+*generate [_option_...] language.dat*
 
-*generate language.def*
+*generate [_option_...] language.def*
 
-*generate language.dat.lua*
+*generate [_option_...] language.dat.lua*
 
-*generate fmtutil*
-
    The 'generate' action overwrites any manual changes made in the
 respective files: it recreates them from scratch based on the
 information of the installed packages, plus local adaptions.  The TeX
@@ -2968,35 +3169,37 @@
    For managing your own fonts, please read the 'updmap --help'
 information and/or <http://tug.org/fonts/fontinstall.html>.
 
+   For managing your own formats, please read the 'fmtutil --help'
+information.
+
    In more detail: 'generate' remakes any of the configuration files
-'language.dat', 'language.def', 'language.dat.lua', and 'fmtutil.cnf',
-from the information present in the local TLPDB, plus locally-maintained
-files.
+'language.dat', 'language.def', and 'language.dat.lua' from the
+information present in the local TLPDB, plus locally-maintained files.
 
    The locally-maintained files are 'language-local.dat',
-'language-local.def', 'language-local.dat.lua', or 'fmtutil-local.cnf',
-searched for in 'TEXMFLOCAL' in the respective directories.  If local
-additions are present, the final file is made by starting with the main
-file, omitting any entries that the local file specifies to be disabled,
-and finally appending the local file.
+'language-local.def', or 'language-local.dat.lua', searched for in
+'TEXMFLOCAL' in the respective directories.  If local additions are
+present, the final file is made by starting with the main file, omitting
+any entries that the local file specifies to be disabled, and finally
+appending the local file.
 
-   (Historical note: The formerly supported 'updmap-local.cfg' is no
-longer read, since 'updmap' now supports multiple 'updmap.cfg' files.
-Thus, local additions can and should be put into an 'updmap.cfg' file in
-'TEXMFLOCAL'.  The 'generate updmap' action no longer exists.)
+   (Historical note: The formerly supported 'updmap-local.cfg' and
+'fmtutil-local.cnf' are no longer read, since 'updmap' and 'fmtutil' now
+reads and supports multiple configuration files.  Thus, local additions
+can and should be put into an 'updmap.cfg' of 'fmtutil.cnf' file in
+'TEXMFLOCAL'.  The 'generate updmap' and 'generate fmtutil' actions no
+longer exist.)
 
    Local files specify entries to be disabled with a comment line,
 namely one of these:
 
-  #!NAME
   %!NAME
   --!NAME
 
-   where 'fmtutil.cnf' uses '#', 'language.dat' and 'language.def' use
-'%', and 'language.dat.lua' use '--'.  In all cases, the _name_ is the
-respective format name or hyphenation pattern identifier.  Examples:
+   where 'language.dat' and 'language.def' use '%', and
+'language.dat.lua' use '--'.  In all cases, the _name_ is the respective
+format name or hyphenation pattern identifier.  Examples:
 
-  #!pdflatex
   %!german
   --!usenglishmax
 
@@ -3032,8 +3235,8 @@
 
 *-rebuild-sys*
 
-     tells tlmgr to run necessary programs after config files have been
-     regenerated.  These are: 'fmtutil-sys --all' after 'generate
+     tells 'tlmgr' to run necessary programs after config files have
+     been regenerated.  These are: 'fmtutil-sys --all' after 'generate
      fmtutil', 'fmtutil-sys --byhyphen .../language.dat' after 'generate
      language.dat', and 'fmtutil-sys --byhyphen .../language.def' after
      'generate language.def'.
@@ -3045,13 +3248,12 @@
 
    The respective locations are as follows:
 
-  tex/generic/config/language.dat (and language-local.dat);
-  tex/generic/config/language.def (and language-local.def);
-  tex/generic/config/language.dat.lua (and language-local.dat.lua);
-  web2c/fmtutil.cnf (and fmtutil-local.cnf);
+  tex/generic/config/language.dat (and language-local.dat)
+  tex/generic/config/language.def (and language-local.def)
+  tex/generic/config/language.dat.lua (and language-local.dat.lua)
 
 
-File: tlbuild.info,  Node: tlmgr gui,  Next: tlmgr info [_option_...] [collections|schemes|_pkg_...],  Prev: tlmgr generate [_option_]... _what_,  Up: tlmgr ACTIONS
+File: tlbuild.info,  Node: tlmgr gui,  Next: tlmgr info,  Prev: tlmgr generate,  Up: tlmgr ACTIONS
 
 B.6.9 gui
 ---------
@@ -3059,60 +3261,85 @@
 Start the graphical user interface.  See *GUI* below.
 
 
-File: tlbuild.info,  Node: tlmgr info [_option_...] [collections|schemes|_pkg_...],  Next: tlmgr init-usertree,  Prev: tlmgr gui,  Up: tlmgr ACTIONS
+File: tlbuild.info,  Node: tlmgr info,  Next: tlmgr init-usertree,  Prev: tlmgr gui,  Up: tlmgr ACTIONS
 
-B.6.10 info [_option_...] [collections|schemes|_pkg_...]
---------------------------------------------------------
+B.6.10 info
+-----------
 
-With no argument, lists all packages available at the package
-repository, prefixing those already installed with 'i'.
+*info [_option_...] _pkg_...*
 
-   With the single word 'collections' or 'schemes' as the argument,
-lists the request type instead of all packages.
+*info [_option_...] collections*
 
-   With any other arguments, display information about _pkg_: the name,
-category, short and long description, installation status, and TeX Live
-revision number.  If _pkg_ is not locally installed, searches in the
-remote installation source.
+*info [_option_...] schemes*
 
-   It also displays information taken from the TeX Catalogue, namely the
-package version, date, and license.  Consider these, especially the
-package version, as approximations only, due to timing skew of the
-updates of the different pieces.  By contrast, the 'revision' value
-comes directly from TL and is reliable.
+     With no argument, lists all packages available at the package
+     repository, prefixing those already installed with 'i'.
 
-   The former actions 'show' and 'list' are merged into this action, but
-are still supported for backward compatibility.
+     With the single word 'collections' or 'schemes' as the argument,
+     lists the request type instead of all packages.
 
-   Options:
+     With any other arguments, display information about _pkg_: the
+     name, category, short and long description, sizes, installation
+     status, and TeX Live revision number.  If _pkg_ is not locally
+     installed, searches in the remote installation source.
 
-*-list*
+     For normal packages (not collections or schemes), the sizes of the
+     four groups of files (run/src/doc/bin files) are shown separately.
+     For collections, the cumulative size is shown, including all
+     directly-dependent packages (but not dependent collections).  For
+     schemes, the cumulative size is also shown, including all
+     directly-dependent collections and packages.
 
-     If the option '--list' is given with a package, the list of
-     contained files is also shown, including those for
-     platform-specific dependencies.  When given with schemes and
-     collections, '--list' outputs their dependencies in a similar way.
+     If _pkg_ is not found locally or remotely, the search action is
+     used and lists matching packages and files.
 
-*-only-installed*
+     It also displays information taken from the TeX Catalogue, namely
+     the package version, date, and license.  Consider these, especially
+     the package version, as approximations only, due to timing skew of
+     the updates of the different pieces.  By contrast, the 'revision'
+     value comes directly from TL and is reliable.
 
-     If this options is given, the installation source will not be used;
-     only locally installed packages, collections, or schemes are
-     listed.  (Does not work for listing of packages for now)
+     The former actions 'show' and 'list' are merged into this action,
+     but are still supported for backward compatibility.
 
-*-taxonomy*
+     Options:
 
-*-keyword*
+     *-list*
 
-*-functionality*
+          If the option '--list' is given with a package, the list of
+          contained files is also shown, including those for
+          platform-specific dependencies.  When given with schemes and
+          collections, '--list' outputs their dependencies in a similar
+          way.
 
-*-characterization*
+     *-only-installed*
 
-     In addition to the normal data displayed, also display information
-     for given packages from the corresponding taxonomy (or all of
-     them).  See *note TAXONOMIES: tlmgr TAXONOMIES. below for details.
+          If this option is given, the installation source will not be
+          used; only locally installed packages, collections, or schemes
+          are listed.
 
+     *-data 'item1,item2,...'*
+
+          If the option '--data' is given, its argument must be a comma
+          separated list of field names from: 'name', 'category',
+          'localrev', 'remoterev', 'shortdesc', 'longdesc', 'installed',
+          'size', 'relocatable', 'depends', 'cat-version', 'cat-date',
+          or 'cat-license'.  In this case the requested packages'
+          information is listed in CSV format one package per line, and
+          the column information is given by the 'itemN'.  The 'depends'
+          column contains the name of all dependencies separated by ':'.
+
+     *-json*
+
+          In case '--json' is specified, the output is a JSON encoded
+          array where each array element is the JSON representation of a
+          single 'TLPOBJ' but with additional information.  For details
+          see 'tlpkg/doc/JSON-formats.txt', format definition:
+          'TLPOBJINFO'.  If both '--json' and '--data' are given,
+          '--json' takes precedence.
+
 
-File: tlbuild.info,  Node: tlmgr init-usertree,  Next: tlmgr install [_option_]... _pkg_...,  Prev: tlmgr info [_option_...] [collections|schemes|_pkg_...],  Up: tlmgr ACTIONS
+File: tlbuild.info,  Node: tlmgr init-usertree,  Next: tlmgr install [_option_...] _pkg_...,  Prev: tlmgr info,  Up: tlmgr ACTIONS
 
 B.6.11 init-usertree
 --------------------
@@ -3122,14 +3349,23 @@
 with '--usertree'.  See *note USER MODE: tlmgr USER MODE. below.
 
 
-File: tlbuild.info,  Node: tlmgr install [_option_]... _pkg_...,  Next: tlmgr option,  Prev: tlmgr init-usertree,  Up: tlmgr ACTIONS
+File: tlbuild.info,  Node: tlmgr install [_option_...] _pkg_...,  Next: tlmgr key,  Prev: tlmgr init-usertree,  Up: tlmgr ACTIONS
 
-B.6.12 install [_option_]... _pkg_...
+B.6.12 install [_option_...] _pkg_...
 -------------------------------------
 
-Install each _pkg_ given on the command line.  By default this installs
-all packages on which the given _pkg_s are dependent, also.  Options:
+Install each _pkg_ given on the command line, if it is not already
+installed.  (It does not touch existing packages; see the 'update'
+action for how to get the latest version of a package.)
 
+   By default this also installs all packages on which the given _pkg_s
+are dependent.  Options:
+
+*-dry-run*
+
+     Nothing is actually installed; instead, the actions to be performed
+     are written to the terminal.
+
 *-file*
 
      Instead of fetching a package from the installation repository, use
@@ -3136,16 +3372,12 @@
      the package files given on the command line.  These files must be
      standard TeX Live package files (with contained tlpobj file).
 
-*-reinstall*
+*-force*
 
-     Reinstall a package (including dependencies for collections) even
-     if it already seems to be installed (i.e, is present in the TLPDB).
-     This is useful to recover from accidental removal of files in the
-     hierarchy.
+     If updates to 'tlmgr' itself (or other parts of the basic
+     infrastructure) are present, 'tlmgr' will bail out and not perform
+     the installation unless this option is given.  Not recommended.
 
-     When re-installing, only dependencies on normal packages are
-     followed (i.e., not those of category Scheme or Collection).
-
 *-no-depends*
 
      Do not install dependencies.  (By default, installing a package
@@ -3160,39 +3392,91 @@
      and also implies '--no-depends'.  Don't use it unless you are sure
      of what you are doing.
 
-*-dry-run*
+*-reinstall*
 
-     Nothing is actually installed; instead, the actions to be performed
-     are written to the terminal.
+     Reinstall a package (including dependencies for collections) even
+     if it already seems to be installed (i.e, is present in the TLPDB).
+     This is useful to recover from accidental removal of files in the
+     hierarchy.
 
-*-force*
+     When re-installing, only dependencies on normal packages are
+     followed (i.e., not those of category Scheme or Collection).
 
-     If updates to 'tlmgr' itself (or other parts of the basic
-     infrastructure) are present, 'tlmgr' will bail out and not perform
-     the installation unless this option is given.  Not recommended.
+*-with-doc*
 
+*-with-src*
+
+     While not recommended, the 'install-tl' program provides an option
+     to omit installation of all documentation and/or source files.  (By
+     default, everything is installed.)  After such an installation, you
+     may find that you want the documentation or source files for a
+     given package after all.  You can get them by using these options
+     in conjunction with '--reinstall', as in (using the 'fontspec'
+     package as the example):
+
+       tlmgr install --reinstall --with-doc --with-src fontspec
+
 
-File: tlbuild.info,  Node: tlmgr option,  Next: tlmgr paper,  Prev: tlmgr install [_option_]... _pkg_...,  Up: tlmgr ACTIONS
+File: tlbuild.info,  Node: tlmgr key,  Next: tlmgr list,  Prev: tlmgr install [_option_...] _pkg_...,  Up: tlmgr ACTIONS
 
-B.6.13 option
+B.6.13 key
+----------
+
+*key list*
+
+*key add _file_*
+
+*key remove _keyid_*
+
+     The action 'key' allows listing, adding and removing additional GPG
+     keys to the set of trusted keys, that is, those that are used to
+     verify the TeX Live databases.
+
+     With the 'list' argument, 'key' lists all keys.
+
+     The 'add' argument requires another argument, either a filename or
+     '-' for stdin, from which the key is added.  The key is added to
+     the local keyring 'GNUPGHOME/repository-keys.gpg', which is
+     normally) 'tlpkg/gpg/repository-keys.gpg'.
+
+     The 'remove' argument requires a key id and removes the requested
+     id from the local keyring.
+
+
+File: tlbuild.info,  Node: tlmgr list,  Next: tlmgr option,  Prev: tlmgr key,  Up: tlmgr ACTIONS
+
+B.6.14 list
+-----------
+
+Synonym for *note info: tlmgr info.
+
+
+File: tlbuild.info,  Node: tlmgr option,  Next: tlmgr paper,  Prev: tlmgr list,  Up: tlmgr ACTIONS
+
+B.6.15 option
 -------------
 
-*option [show]*
+*option [-json] [show]*
 
-*option showall*
+*option [-json] showall*
 
 *option _key_ [_value_]*
 
-   The first form shows the global TeX Live settings currently saved in
-the TLPDB with a short description and the 'key' used for changing it in
-parentheses.
+   The first form, 'show', shows the global TeX Live settings currently
+saved in the TLPDB with a short description and the 'key' used for
+changing it in parentheses.
 
-   The second form is similar, but also shows options which can be
-defined but are not currently set to any value.
+   The second form, 'showall', is similar, but also shows options which
+can be defined but are not currently set to any value.
 
-   In the third form, if _value_ is not given, the setting for _key_ is
-displayed.  If _value_ is present, _key_ is set to _value_.
+   Both 'show...' forms take an option '--json', which dumps the option
+information in JSON format.  In this case, both forms dump the same
+data.  For the format of the JSON output see
+'tlpkg/doc/JSON-formats.txt', format definition 'TLOPTION'.
 
+   In the third form, with _key_, if _value_ is not given, the setting
+for _key_ is displayed.  If _value_ is present, _key_ is set to _value_.
+
    Possible values for _key_ are (run 'tlmgr option showall' for the
 definitive list):
 
@@ -3218,19 +3502,23 @@
 
    The 'install-tl' documentation has more information about the
 possible values for 'repository'.  (For backward compatibility,
-'location' can be used as alternative name for 'repository'.)
+'location' can be used as a synonym for 'repository'.)
 
    If 'formats' is set (this is the default), then formats are
 regenerated when either the engine or the format files have changed.
-Disable this only when you know what you are doing.
+Disable this only when you know how and want to regenerate formats
+yourself.
 
    The 'postcode' option controls execution of per-package
 postinstallation action code.  It is set by default, and again disabling
-is not likely to be of interest except perhaps to developers.
+is not likely to be of interest except to developers doing debugging.
 
    The 'docfiles' and 'srcfiles' options control the installation of
-their respective files of a package.  By default both are enabled (1).
-This can be disabled (set to 0) if disk space is (very) limited.
+their respective file groups (documentation, sources; grouping is
+approximate) per package.  By default both are enabled (1).  Either or
+both can be disabled (set to 0) if disk space is limited or for minimal
+testing installations, etc.  When disabled, the respective files are not
+downloaded at all.
 
    The options 'autobackup' and 'backupdir' determine the defaults for
 the actions 'update', 'backup' and 'restore'.  These three actions need
@@ -3243,32 +3531,33 @@
 no backups are removed.  If 'autobackup' is 0 or more, it specifies the
 number of backups to keep.  Thus, backups are disabled if the value is
 0.  In the '--clean' mode of the 'backup' action this option also
-specifies the number to be kept.
+specifies the number to be kept.  The default value is 1, so that
+backups are made, but only one backup is kept.
 
    To setup 'autobackup' to '-1' on the command line, use:
 
   tlmgr option -- autobackup -1
 
-   The '--' avoids having the '-1' treated as an option.  ('--' stops
-parsing for options at the point where it appears; this is a general
-feature across most Unix programs.)
+   The '--' avoids having the '-1' treated as an option.  (The '--'
+stops parsing for options at the point where it appears; this is a
+general feature across most Unix programs.)
 
-   The 'sys_bin', 'sys_man', and 'sys_info' options are used on
-Unix-like systems to control the generation of links for executables,
-info files and man pages.  See the 'path' action for details.
+   The 'sys_bin', 'sys_man', and 'sys_info' options are used on Unix
+systems to control the generation of links for executables, Info files
+and man pages.  See the 'path' action for details.
 
-   The last three options control behaviour on Windows installations.
-If 'desktop_integration' is set, then some packages will install items
-in a sub-folder of the Start menu for 'tlmgr gui', documentation, etc.
-If 'fileassocs' is set, Windows file associations are made (see also the
+   The last three options affect behavior on Windows installations.  If
+'desktop_integration' is set, then some packages will install items in a
+sub-folder of the Start menu for 'tlmgr gui', documentation, etc.  If
+'fileassocs' is set, Windows file associations are made (see also the
 'postaction' action).  Finally, if 'multiuser' is set, then adaptions to
 the registry and the menus are done for all users on the system instead
 of only the current user.  All three options are on by default.
 
 
-File: tlbuild.info,  Node: tlmgr paper,  Next: tlmgr path [--w32mode=user|admin] [add|remove],  Prev: tlmgr option,  Up: tlmgr ACTIONS
+File: tlbuild.info,  Node: tlmgr paper,  Next: tlmgr path,  Prev: tlmgr option,  Up: tlmgr ACTIONS
 
-B.6.14 paper
+B.6.16 paper
 ------------
 
 *paper [a4|letter]*
@@ -3275,6 +3564,8 @@
 
 *[xdvi|pdftex|dvips|dvipdfmx|context|psutils] paper [_papersize_|-list]*
 
+*paper -json*
+
    With no arguments ('tlmgr paper'), shows the default paper size
 setting for all known programs.
 
@@ -3293,6 +3584,10 @@
 last argument (e.g., 'tlmgr dvips paper --list'), shows all valid paper
 sizes for that program.  The first size shown is the default.
 
+   If '--json' is specified without other options, the paper setup is
+dumped in JSON format.  For the format of JSON output see
+'tlpkg/doc/JSON-formats.txt', format definition 'TLPAPER'.
+
    Incidentally, this syntax of having a specific program name before
 the 'paper' keyword is unusual.  It is inherited from the longstanding
 'texconfig' script, which supports other configuration settings for some
@@ -3300,40 +3595,46 @@
 settings.
 
 
-File: tlbuild.info,  Node: tlmgr path [--w32mode=user|admin] [add|remove],  Next: tlmgr pinning,  Prev: tlmgr paper,  Up: tlmgr ACTIONS
+File: tlbuild.info,  Node: tlmgr path,  Next: tlmgr pinning,  Prev: tlmgr paper,  Up: tlmgr ACTIONS
 
-B.6.15 path [-w32mode=user|admin] [add|remove]
-----------------------------------------------
+B.6.17 path
+-----------
 
-On Unix, merely adds or removes symlinks for binaries, man pages, and
-info pages in the system directories specified by the respective options
-(see the *note option: tlmgr option. description above).  Does not
-change any initialization files, either system or personal.
+*path [-w32mode=user|admin] add*
 
-   On Windows, the registry part where the binary directory is added or
-removed is determined in the following way:
+*path [-w32mode=user|admin] remove*
 
-   If the user has admin rights, and the option '--w32mode' is not
-given, the setting _w32_multi_user_ determines the location (i.e., if it
-is on then the system path, otherwise the user path is changed).
+     On Unix, merely adds or removes symlinks for binaries, man pages,
+     and info pages in the system directories specified by the
+     respective options (see the *note option: tlmgr option. description
+     above).  Does not change any initialization files, either system or
+     personal.
 
-   If the user has admin rights, and the option '--w32mode' is given,
-this option determines the path to be adjusted.
+     On Windows, the registry part where the binary directory is added
+     or removed is determined in the following way:
 
-   If the user does not have admin rights, and the option '--w32mode' is
-not given, and the setting _w32_multi_user_ is off, the user path is
-changed, while if the setting _w32_multi_user_ is on, a warning is
-issued that the caller does not have enough privileges.
+     If the user has admin rights, and the option '--w32mode' is not
+     given, the setting _w32_multi_user_ determines the location (i.e.,
+     if it is on then the system path, otherwise the user path is
+     changed).
 
-   If the user does not have admin rights, and the option '--w32mode' is
-given, it must be *user* and the user path will be adjusted.  If a user
-without admin rights uses the option '--w32mode admin' a warning is
-issued that the caller does not have enough privileges.
+     If the user has admin rights, and the option '--w32mode' is given,
+     this option determines the path to be adjusted.
 
+     If the user does not have admin rights, and the option '--w32mode'
+     is not given, and the setting _w32_multi_user_ is off, the user
+     path is changed, while if the setting _w32_multi_user_ is on, a
+     warning is issued that the caller does not have enough privileges.
+
+     If the user does not have admin rights, and the option '--w32mode'
+     is given, it must be 'user' and the user path will be adjusted.  If
+     a user without admin rights uses the option '--w32mode admin' a
+     warning is issued that the caller does not have enough privileges.
+
 
-File: tlbuild.info,  Node: tlmgr pinning,  Next: tlmgr platform list|add|remove _platform_...,  Prev: tlmgr path [--w32mode=user|admin] [add|remove],  Up: tlmgr ACTIONS
+File: tlbuild.info,  Node: tlmgr pinning,  Next: tlmgr platform,  Prev: tlmgr path,  Up: tlmgr ACTIONS
 
-B.6.16 pinning
+B.6.18 pinning
 --------------
 
 The 'pinning' action manages the pinning file, see *note Pinning: tlmgr
@@ -3358,76 +3659,85 @@
      Remove all pinning data for repository _repo_.
 
 
-File: tlbuild.info,  Node: tlmgr platform list|add|remove _platform_...,  Next: tlmgr platform set _platform_,  Prev: tlmgr pinning,  Up: tlmgr ACTIONS
+File: tlbuild.info,  Node: tlmgr platform,  Next: tlmgr postaction,  Prev: tlmgr pinning,  Up: tlmgr ACTIONS
 
-B.6.17 platform list|add|remove _platform_...
----------------------------------------------
+B.6.19 platform
+---------------
 
-
-File: tlbuild.info,  Node: tlmgr platform set _platform_,  Next: tlmgr platform set auto,  Prev: tlmgr platform list|add|remove _platform_...,  Up: tlmgr ACTIONS
+*platform list|add|remove _platform_...*
 
-B.6.18 platform set _platform_
-------------------------------
+*platform set _platform_*
 
-
-File: tlbuild.info,  Node: tlmgr platform set auto,  Next: tlmgr postaction [--w32mode=user|admin] [--fileassocmode=1|2] [--all] [install|remove] [shortcut|fileassoc|script] [_pkg_]...,  Prev: tlmgr platform set _platform_,  Up: tlmgr ACTIONS
+*platform set auto*
 
-B.6.19 platform set auto
-------------------------
+     'platform list' lists the TeX Live names of all the platforms
+     (a.k.a.  architectures), ('i386-linux', ...)  available at the
+     package repository.
 
-'platform list' lists the TeX Live names of all the platforms (a.k.a.
-architectures), ('i386-linux', ...)  available at the package
-repository.
+     'platform add' _platform_...  adds the executables for each given
+     platform _platform_ to the installation from the repository.
 
-   'platform add' _platform_...  adds the executables for each given
-platform _platform_ to the installation from the repository.
+     'platform remove' _platform_...  removes the executables for each
+     given platform _platform_ from the installation, but keeps the
+     currently running platform in any case.
 
-   'platform remove' _platform_...  removes the executables for each
-given platform _platform_ from the installation, but keeps the currently
-running platform in any case.
+     'platform set' _platform_ switches TeX Live to always use the given
+     platform instead of auto detection.
 
-   'platform set' _platform_ switches TeX Live to always use the given
-platform instead of auto detection.
+     'platform set auto' switches TeX Live to auto detection mode for
+     platform.
 
-   'platform set auto' switches TeX Live to auto detection mode for
-platform.
+     Platform detection is needed to select the proper 'xz', 'xzdec' and
+     'wget' binaries that are shipped with TeX Live.
 
-   Platform detection is needed to select the proper 'xz', 'xzdec' and
-'wget' binaries that are shipped with TeX Live.
+     'arch' is a synonym for 'platform'.
 
-   'arch' is a synonym for 'platform'.
+     Options:
 
-   Options:
+     *-dry-run*
 
-*-dry-run*
+          Nothing is actually installed; instead, the actions to be
+          performed are written to the terminal.
 
-     Nothing is actually installed; instead, the actions to be performed
-     are written to the terminal.
-
 
-File: tlbuild.info,  Node: tlmgr postaction [--w32mode=user|admin] [--fileassocmode=1|2] [--all] [install|remove] [shortcut|fileassoc|script] [_pkg_]...,  Next: tlmgr print-platform,  Prev: tlmgr platform set auto,  Up: tlmgr ACTIONS
+File: tlbuild.info,  Node: tlmgr postaction,  Next: tlmgr print-platform,  Prev: tlmgr platform,  Up: tlmgr ACTIONS
 
-B.6.20 postaction [-w32mode=user|admin] [-fileassocmode=1|2] [-all] [install|remove] [shortcut|fileassoc|script] [_pkg_]...
----------------------------------------------------------------------------------------------------------------------------
+B.6.20 postaction
+-----------------
 
-Carry out the postaction 'shortcut', 'fileassoc', or 'script' given as
-the second required argument in install or remove mode (which is the
-first required argument), for either the packages given on the command
-line, or for all if '--all' is given.
+*postaction [_option_...] install [shortcut|fileassoc|script] [_pkg_...]*
 
-   If the option '--w32mode' is given the value 'user', all actions will
-only be carried out in the user-accessible parts of the
-registry/filesystem, while the value 'admin' selects the system-wide
-parts of the registry for the file associations.  If you do not have
-enough permissions, using '--w32mode=admin' will not succeed.
+*postaction [_option_...] remove [shortcut|fileassoc|script] [_pkg_...]*
 
-   '--fileassocmode' specifies the action for file associations.  If it
-is set to 1 (the default), only new associations are added; if it is set
-to 2, all associations are set to the TeX Live programs.  (See also
-'option fileassocs'.)
+     Carry out the postaction 'shortcut', 'fileassoc', or 'script' given
+     as the second required argument in install or remove mode (which is
+     the first required argument), for either the packages given on the
+     command line, or for all if '--all' is given.
 
+     Options:
+
+     *-w32mode=[user|admin]*
+
+          If the option '--w32mode' is given the value 'user', all
+          actions will only be carried out in the user-accessible parts
+          of the registry/filesystem, while the value 'admin' selects
+          the system-wide parts of the registry for the file
+          associations.  If you do not have enough permissions, using
+          '--w32mode=admin' will not succeed.
+
+     *-fileassocmode=[1|2]*
+
+          '--fileassocmode' specifies the action for file associations.
+          If it is set to 1 (the default), only new associations are
+          added; if it is set to 2, all associations are set to the TeX
+          Live programs.  (See also 'option fileassocs'.)
+
+     *-all*
+
+          Carry out the postactions for all packages
+
 
-File: tlbuild.info,  Node: tlmgr print-platform,  Next: tlmgr restore [--backupdir _dir_] [--all | _pkg_ [_rev_]],  Prev: tlmgr postaction [--w32mode=user|admin] [--fileassocmode=1|2] [--all] [install|remove] [shortcut|fileassoc|script] [_pkg_]...,  Up: tlmgr ACTIONS
+File: tlbuild.info,  Node: tlmgr print-platform,  Next: tlmgr print-platform-info,  Prev: tlmgr postaction,  Up: tlmgr ACTIONS
 
 B.6.21 print-platform
 ---------------------
@@ -3437,61 +3747,43 @@
 '--print-arch' is a synonym.
 
 
-File: tlbuild.info,  Node: tlmgr restore [--backupdir _dir_] [--all | _pkg_ [_rev_]],  Next: tlmgr remove [_option_]... _pkg_...,  Prev: tlmgr print-platform,  Up: tlmgr ACTIONS
+File: tlbuild.info,  Node: tlmgr print-platform-info,  Next: tlmgr remove [_option_...] _pkg_...,  Prev: tlmgr print-platform,  Up: tlmgr ACTIONS
 
-B.6.22 restore [-backupdir _dir_] [-all | _pkg_ [_rev_]]
---------------------------------------------------------
+B.6.22 print-platform-info
+--------------------------
 
-Restore a package from a previously-made backup.
+Print the TeX Live platform identifier, TL platform long name, and
+original output from guess.
 
-   If '--all' is given, try to restore the latest revision of all
-package backups found in the backup directory.
+
+File: tlbuild.info,  Node: tlmgr remove [_option_...] _pkg_...,  Next: tlmgr repository,  Prev: tlmgr print-platform-info,  Up: tlmgr ACTIONS
 
-   Otherwise, if neither _pkg_ nor _rev_ are given, list the available
-backup revisions for all packages.
+B.6.23 remove [_option_...] _pkg_...
+------------------------------------
 
-   With _pkg_ given but no _rev_, list all available backup revisions of
-_pkg_.
+Remove each _pkg_ specified.  Removing a collection removes all package
+dependencies (unless '--no-depends' is specified), but not any
+collection dependencies of that collection.  However, when removing a
+package, dependencies are never removed.  Options:
 
-   When listing available packages tlmgr shows the revision and in
-parenthesis the creation time if available (in format yyyy-mm-dd hh:mm).
+*-all*
 
-   With both _pkg_ and _rev_, tries to restore the package from the
-specified backup.
+     Uninstalls all of TeX Live, asking for confirmation unless
+     '--force' is also specified.
 
-   Options:
+*-backup*
 
-*-all*
-
-     Try to restore the latest revision of all package backups found in
-     the backup directory.  Additional non-option arguments (like _pkg_)
-     are not allowed.
-
 *-backupdir* _directory_
 
-     Specify the directory where the backups are to be found.  If not
-     given it will be taken from the configuration setting in the TLPDB.
+     These options behave just as with the *note update: (update)tlmgr
+     update [_option_...] [...]. action (q.v.), except they apply to
+     making backups of packages before they are removed.  The default is
+     to make such a backup, that is, to save a copy of packages before
+     removal.
 
-*-dry-run*
+     The *note restore: tlmgr restore. action explains how to restore
+     from a backup.
 
-     Nothing is actually restored; instead, the actions to be performed
-     are written to the terminal.
-
-*-force*
-
-     Don't ask questions.
-
-
-File: tlbuild.info,  Node: tlmgr remove [_option_]... _pkg_...,  Next: tlmgr repository,  Prev: tlmgr restore [--backupdir _dir_] [--all | _pkg_ [_rev_]],  Up: tlmgr ACTIONS
-
-B.6.23 remove [_option_]... _pkg_...
-------------------------------------
-
-Remove each _pkg_ specified.  Removing a collection removes all package
-dependencies (unless '--no-depends' is specified), but not any
-collection dependencies of that collection.  However, when removing a
-package, dependencies are never removed.  Options:
-
 *-no-depends*
 
      Do not remove dependent packages.
@@ -3498,7 +3790,8 @@
 
 *-no-depends-at-all*
 
-     See above under *install* (and beware).
+     See above under *note install: tlmgr install [_option_...] _pkg_...
+     (and beware).
 
 *-force*
 
@@ -3508,8 +3801,8 @@
 
      A package that has been removed using the '--force' option because
      it is still listed in an installed collection or scheme will not be
-     updated, and will be mentioned as *forcibly removed* in the output
-     of *tlmgr update -list*.
+     updated, and will be mentioned as 'forcibly removed' in the output
+     of 'tlmgr update --list'.
 
 *-dry-run*
 
@@ -3517,7 +3810,7 @@
      are written to the terminal.
 
 
-File: tlbuild.info,  Node: tlmgr repository,  Next: tlmgr search [_option_...] _what_,  Prev: tlmgr remove [_option_]... _pkg_...,  Up: tlmgr ACTIONS
+File: tlbuild.info,  Node: tlmgr repository,  Next: tlmgr restore,  Prev: tlmgr remove [_option_...] _pkg_...,  Up: tlmgr ACTIONS
 
 B.6.24 repository
 -----------------
@@ -3532,9 +3825,8 @@
 
 *repository set _path_[#_tag_] [_path_[#_tag_] ...]*
 
-     This action manages the list of repositories.  See *note MULTIPLE
-     REPOSITORIES: tlmgr MULTIPLE REPOSITORIES. below for detailed
-     explanations.
+     This action manages the list of repositories.  See *note
+     (MULTIPLE_REPOSITORIES):: below for detailed explanations.
 
      The first form ('list') lists all configured repositories and the
      respective tags if set.  If a path, url, or tag is given after the
@@ -3554,120 +3846,183 @@
      otherwise, all operations will fail!
 
 
-File: tlbuild.info,  Node: tlmgr search [_option_...] _what_,  Next: tlmgr uninstall,  Prev: tlmgr repository,  Up: tlmgr ACTIONS
+File: tlbuild.info,  Node: tlmgr restore,  Next: tlmgr search,  Prev: tlmgr repository,  Up: tlmgr ACTIONS
 
-B.6.25 search [_option_...] _what_
-----------------------------------
+B.6.25 restore
+--------------
 
-* Menu:
+*restore [_option_...] _pkg_ [_rev_]*
 
-* tlmgr search [_option_...] --file _what_::
-* tlmgr search [_option_...] --taxonomy _what_::
-* tlmgr search [_option_...] --keyword _what_::
-* tlmgr search [_option_...] --functionality _what_::
-* tlmgr search [_option_...] --characterization _what_::
-* tlmgr search [_option_...] --all _what_::
+*restore [_option_...] -all*
 
-
-File: tlbuild.info,  Node: tlmgr search [_option_...] --file _what_,  Next: tlmgr search [_option_...] --taxonomy _what_,  Up: tlmgr search [_option_...] _what_
+     Restore a package from a previously-made backup.
 
-B.6.25.1 search [_option_...] -file _what_
-..........................................
+     If '--all' is given, try to restore the latest revision of all
+     package backups found in the backup directory.
 
-
-File: tlbuild.info,  Node: tlmgr search [_option_...] --taxonomy _what_,  Next: tlmgr search [_option_...] --keyword _what_,  Prev: tlmgr search [_option_...] --file _what_,  Up: tlmgr search [_option_...] _what_
+     Otherwise, if neither _pkg_ nor _rev_ are given, list the available
+     backup revisions for all packages.  With _pkg_ given but no _rev_,
+     list all available backup revisions of _pkg_.
 
-B.6.25.2 search [_option_...] -taxonomy _what_
-..............................................
+     When listing available packages, 'tlmgr' shows the revision, and in
+     parenthesis the creation time if available (in format yyyy-mm-dd
+     hh:mm).
 
-
-File: tlbuild.info,  Node: tlmgr search [_option_...] --keyword _what_,  Next: tlmgr search [_option_...] --functionality _what_,  Prev: tlmgr search [_option_...] --taxonomy _what_,  Up: tlmgr search [_option_...] _what_
+     If (and only if) both _pkg_ and a valid revision number _rev_ are
+     specified, try to restore the package from the specified backup.
 
-B.6.25.3 search [_option_...] -keyword _what_
-.............................................
+     Options:
 
-
-File: tlbuild.info,  Node: tlmgr search [_option_...] --functionality _what_,  Next: tlmgr search [_option_...] --characterization _what_,  Prev: tlmgr search [_option_...] --keyword _what_,  Up: tlmgr search [_option_...] _what_
+     *-all*
 
-B.6.25.4 search [_option_...] -functionality _what_
-...................................................
+          Try to restore the latest revision of all package backups
+          found in the backup directory.  Additional non-option
+          arguments (like _pkg_) are not allowed.
 
+     *-backupdir* _directory_
+
+          Specify the directory where the backups are to be found.  If
+          not given it will be taken from the configuration setting in
+          the TLPDB.
+
+     *-dry-run*
+
+          Nothing is actually restored; instead, the actions to be
+          performed are written to the terminal.
+
+     *-force*
+
+          Don't ask questions.
+
+     *-json*
+
+          When listing backups, the option '--json' turn on JSON output.
+          The format is an array of JSON objects ('name', 'rev',
+          'date').  For details see 'tlpkg/doc/JSON-formats.txt', format
+          definition: 'TLBACKUPS'.  If both '--json' and '--data' are
+          given, '--json' takes precedence.
+
 
-File: tlbuild.info,  Node: tlmgr search [_option_...] --characterization _what_,  Next: tlmgr search [_option_...] --all _what_,  Prev: tlmgr search [_option_...] --functionality _what_,  Up: tlmgr search [_option_...] _what_
+File: tlbuild.info,  Node: tlmgr search,  Next: tlmgr shell,  Prev: tlmgr restore,  Up: tlmgr ACTIONS
 
-B.6.25.5 search [_option_...] -characterization _what_
-......................................................
+B.6.26 search
+-------------
 
+*search [_option_...] _what_*
+
+*search [_option_...] -file _what_*
+
+*search [_option_...] -all _what_*
+
+     By default, search the names, short descriptions, and long
+     descriptions of all locally installed packages for the argument
+     _what_, interpreted as a (Perl) regular expression.
+
+     Options:
+
+     *-file*
+
+          List all filenames containing _what_.
+
+     *-all*
+
+          Search everything: package names, descriptions and filenames.
+
+     *-global*
+
+          Search the TeX Live Database of the installation medium,
+          instead of the local installation.
+
+     *-word*
+
+          Restrict the search of package names and descriptions (but not
+          filenames) to match only full words.  For example, searching
+          for 'table' with this option will not output packages
+          containing the word 'tables' (unless they also contain the
+          word 'table' on its own).
+
 
-File: tlbuild.info,  Node: tlmgr search [_option_...] --all _what_,  Prev: tlmgr search [_option_...] --characterization _what_,  Up: tlmgr search [_option_...] _what_
+File: tlbuild.info,  Node: tlmgr shell,  Next: tlmgr show,  Prev: tlmgr search,  Up: tlmgr ACTIONS
 
-B.6.25.6 search [_option_...] -all _what_
-.........................................
+B.6.27 shell
+------------
 
-By default, search the names, short descriptions, and long descriptions
-of all locally installed packages for the argument _what_, interpreted
-as a regular expression.
+Starts an interactive mode, where tlmgr prompts for commands.  This can
+be used directly, or for scripting.  The first line of output is
+'protocol' _n_, where _n_ is an unsigned number identifying the protocol
+version (currently 1).
 
-   Options:
+   In general, tlmgr actions that can be given on the command line
+translate to commands in this shell mode.  For example, you can say
+'update --list' to see what would be updated.  The TLPDB is loaded the
+first time it is needed (not at the beginning), and used for the rest of
+the session.
 
-*-global*
+   Besides these actions, a few commands are specific to shell mode:
 
-     Search the TeX Live Database of the installation medium, instead of
-     the local installation.
+protocol
 
-*-word*
+     Print 'protocol _n_', the current protocol version.
 
-     Restrict the search to match only full words.  For example,
-     searching for 'table' with this option will not output packages
-     containing the word 'tables' (unless they also contain the word
-     'table' on its own).
+help
 
-*-list*
+     Print pointers to this documentation.
 
-     If a search for any (or all) taxonomies is done, by specifying one
-     of the taxonomy options below, then instead of searching for
-     packages, list the entire corresponding taxonomy (or all of them).
-     See *note TAXONOMIES: tlmgr TAXONOMIES. below.
+version
 
-   Other search options are selected by specifying one of the following:
+     Print tlmgr version information.
 
-*-file*
+quit, end, bye, byebye, EOF
 
-     List all filenames containing _what_.
+     Exit.
 
-*-taxonomy*
+restart
 
-*-keyword*
+     Restart 'tlmgr shell' with the original command line; most useful
+     when developing 'tlmgr'.
 
-*-functionality*
+load [local|remote]
 
-*-characterization*
+     Explicitly load the local or remote, respectively, TLPDB.
 
-     Search in the corresponding taxonomy (or all) instead of the
-     package descriptions.  See *note TAXONOMIES: tlmgr TAXONOMIES.
-     below.
+save
 
-*-all*
+     Save the local TLPDB, presumably after other operations have
+     changed it.
 
-     Search for package names, descriptions, and taxonomies, but not
-     files.
+get [_var_] =item set [_var_ [_val_]]
 
+     Get the value of _var_, or set it to _val_.  Possible _var_ names:
+     'debug-translation', 'machine-readable', 'no-execute-actions',
+     'require-verification', 'verify-downloads', 'repository', and
+     'prompt'.  All except 'repository' and 'prompt' are booleans,
+     taking values 0 and 1, and behave like the corresponding command
+     line option.  The 'repository' variable takes a string, and sets
+     the remote repository location.  The 'prompt' variable takes a
+     string, and sets the current default prompt.
+
+     If _var_ or then _val_ is not specified, it is prompted for.
+
 
-File: tlbuild.info,  Node: tlmgr uninstall,  Next: tlmgr update [_option_]... [_pkg_]...,  Prev: tlmgr search [_option_...] _what_,  Up: tlmgr ACTIONS
+File: tlbuild.info,  Node: tlmgr show,  Next: tlmgr uninstall,  Prev: tlmgr shell,  Up: tlmgr ACTIONS
 
-B.6.26 uninstall
-----------------
+B.6.28 show
+-----------
 
-Uninstalls the entire TeX Live installation.  Options:
+Synonym for *note info: tlmgr info.
 
-*-force*
+
+File: tlbuild.info,  Node: tlmgr uninstall,  Next: tlmgr update [_option_...] [_pkg_...],  Prev: tlmgr show,  Up: tlmgr ACTIONS
 
-     Do not ask for confirmation, remove immediately.
+B.6.29 uninstall
+----------------
 
+Synonym for *note remove: tlmgr remove [_option_...] _pkg_....
+
 
-File: tlbuild.info,  Node: tlmgr update [_option_]... [_pkg_]...,  Prev: tlmgr uninstall,  Up: tlmgr ACTIONS
+File: tlbuild.info,  Node: tlmgr update [_option_...] [_pkg_...],  Prev: tlmgr uninstall,  Up: tlmgr ACTIONS
 
-B.6.27 update [_option_]... [_pkg_]...
+B.6.30 update [_option_...] [_pkg_...]
 --------------------------------------
 
 Updates the packages given as arguments to the latest version available
@@ -3764,8 +4119,11 @@
      a forcibly removed package, 'tlmgr' quits with an error message.
      Excludes are not supported in these circumstances.
 
-*-no-auto-remove* [_pkg_]...
+     This option can also be set permanently in the tlmgr config file
+     with the key 'update-exclude'.
 
+*-no-auto-remove* [_pkg_...]
+
      By default, 'tlmgr' tries to remove packages which have disappeared
      on the server, as described above under '--all'.  This option
      prevents such removals, either for all packages (with '--all'), or
@@ -3773,7 +4131,7 @@
      TeX installation, since packages are not infrequently renamed or
      replaced by their authors.  Therefore this is not recommend.
 
-*-no-auto-install* [_pkg_]...
+*-no-auto-install* [_pkg_...]
 
      Under normal circumstances 'tlmgr' will install packages which are
      new on the server, as described above under '--all'.  This option
@@ -3806,29 +4164,31 @@
 
        tlmgr update --reinstall-forcibly-removed --all
 
-*-backup* and *-backupdir* _directory_
+*-backup*
 
+*-backupdir* _directory_
+
      These two options control the creation of backups of packages
      _before_ updating; that is, backup of packages as currently
-     installed.  If neither of these options are given, no backup
-     package will be saved.  If '--backupdir' is given and specifies a
-     writable directory then a backup will be made in that location.  If
-     only '--backup' is given, then a backup will be made to the
-     directory previously set via the 'option' action (see below).  If
-     both are given then a backup will be made to the specified
-     _directory_.
+     installed.  If neither options is given, no backup will made.  If
+     '--backupdir' is given and specifies a writable directory then a
+     backup will be made in that location.  If only '--backup' is given,
+     then a backup will be made to the directory previously set via the
+     *note option: tlmgr option. action (see below).  If both are given
+     then a backup will be made to the specified _directory_.
 
-     You can set options via the 'option' action to automatically create
-     backups for all packages, and/or keep only a certain number of
-     backups.  Please see the 'option' action for details.
+     You can also set options via the *note option: tlmgr option. action
+     to automatically make backups for all packages, and/or keep only a
+     certain number of backups.
 
      'tlmgr' always makes a temporary backup when updating packages, in
      case of download or other failure during an update.  In contrast,
-     the purpose of this '--backup' option is to allow you to save a
-     persistent backup in case the actual _content_ of the update causes
-     problems, e.g., introduces an incompatibility.
+     the purpose of this '--backup' option is to save a persistent
+     backup in case the actual _content_ of the update causes problems,
+     e.g., introduces an TeX incompatibility.
 
-     The 'restore' action explains how to restore from a backup.
+     The *note restore: tlmgr restore. action explains how to restore
+     from a backup.
 
 *-no-depends*
 
@@ -3838,7 +4198,8 @@
 
 *-no-depends-at-all*
 
-     See above under *install* (and beware).
+     See above under *note install: tlmgr install [_option_...] _pkg_...
+     (and beware).
 
 *-force*
 
@@ -3852,10 +4213,142 @@
 not downgrade.  Also, packages for uninstalled platforms are not
 installed.
 
+   'tlmgr' saves a copy of the 'texlive.tlpdb' file used for an update
+with a suffix representing the repository url, as in
+'tlpkg/texlive.tlpdb.'_long-hash-string_.  These can be useful for
+fallback information, but if you don't like them accumulating (e.g.,
+'mirror.ctan.org' resolves to many different hosts, each resulting in a
+possibly different hash), it's harmless to delete them.
+
 
-File: tlbuild.info,  Node: tlmgr USER MODE,  Next: tlmgr CONFIGURATION FILE FOR TLMGR,  Prev: tlmgr ACTIONS,  Up: tlmgr
+File: tlbuild.info,  Node: tlmgr CONFIGURATION FILE FOR TLMGR,  Next: tlmgr CRYPTOGRAPHIC VERIFICATION,  Prev: tlmgr ACTIONS,  Up: tlmgr
 
-B.7 USER MODE
+B.7 CONFIGURATION FILE FOR TLMGR
+================================
+
+There are two configuration files for 'tlmgr': One is system-wide in
+'TEXMFSYSCONFIG/tlmgr/config', and the other is user-specific in
+'TEXMFCONFIG/tlmgr/config'.  The user-specific one is the default for
+the 'conf tlmgr' action.  (Run 'kpsewhich -var-value=TEXMFSYSCONFIG' or
+'... TEXMFCONFIG ...' to see the actual directory names.)
+
+   A few defaults corresponding to command-line options can be set in
+these configuration files.  In addition, the system-wide file can
+contain a directive to restrict the allowed actions.
+
+   In these config files, empty lines and lines starting with # are
+ignored.  All other lines must look like:
+
+  key = value
+
+   where the spaces are optional but the '=' is required.
+
+   The allowed keys are:
+
+'auto-remove', value 0 or 1 (default 1), same as command-line option.
+
+'gui-expertmode', value 0 or 1 (default 1). This switches between the full GUI and a simplified GUI with only the most common settings.
+
+'gui-lang' _llcode_, with a language code value as with the command-line option.
+
+'no-checksums', value 0 or 1 (default 0, see below).
+
+'persistent-downloads', value 0 or 1 (default 1), same as command-line option.
+
+'require-verification', value 0 or 1 (default 0), same as command-line option.
+
+'update-exclude', value: comma-separated list of packages (no space allowed). Same as the command line option '--exclude' for the action 'update'.
+
+'verify-downloads', value 0 or 1 (default 1), same as command-line option.
+
+   The system-wide config file can contain one additional key:
+
+'allowed-actions' _action1_ [,_action_,...] The value is a comma-separated list of 'tlmgr' actions which are allowed to be executed when 'tlmgr' is invoked in system mode (that is, without '--usermode').
+
+     This allows distributors to include the 'tlmgr' in their packaging,
+     but allow only a restricted set of actions that do not interfere
+     with their distro package manager.  For native TeX Live
+     installations, it doesn't make sense to set this.
+
+   The 'no-checksums' key needs more explanation.  By default, package
+checksums computed and stored on the server (in the TLPDB) are compared
+to checksums computed locally after downloading.  'no-checksums'
+disables this process.
+
+   The checksum algorithm is SHA-512.  Your system must have one of
+(looked for in this order) the Perl 'Digest::SHA' module, the 'openssl'
+program (<http://openssl.org>), the 'sha512sum' program (from GNU
+Coreutils, <http://www.gnu.org/software/coreutils>), or finally the
+'shasum' program (just to support old Macs).  If none of these are
+available, a warning is issued and 'tlmgr' proceeds without checking
+checksums.  (Incidentally, other SHA implementations, such as the pure
+Perl and pure Lua modules, are much too slow to be usable in our
+context.)  'no-checksums' avoids the warning.
+
+
+File: tlbuild.info,  Node: tlmgr CRYPTOGRAPHIC VERIFICATION,  Next: tlmgr USER MODE,  Prev: tlmgr CONFIGURATION FILE FOR TLMGR,  Up: tlmgr
+
+B.8 CRYPTOGRAPHIC VERIFICATION
+==============================
+
+'tlmgr' and 'install-tl' perform cryptographic verification if possible.
+If verification is performed and successful, the programs report
+'(verified)' after loading the TLPDB; otherwise, they report '(not
+verified)'.  But either way, by default the installation and/or updates
+proceed normally.
+
+   If a program named 'gpg' is available (that is, found in 'PATH'), by
+default cryptographic signatures will be checked: we require the main
+repository be signed, but not any additional repositories.  If 'gpg' is
+not available, by default signatures are not checked and no verification
+is carried out, but 'tlmgr' still proceeds normally.
+
+   The behavior of the verification can be controlled by the command
+line and config file option 'verify-repo' which takes one of the
+following values: 'none', 'main', or 'all'.  With 'none', no
+verification whatsoever is attempted.  With 'main' (the default)
+verification is required only for the main repository, and only if 'gpg'
+is available; though attempted for all, missing signatures of subsidiary
+repositories will not result in an error.  Finally, in the case of
+'all', 'gpg' must be available and all repositories need to be signed.
+
+   In all cases, if a signature is checked and fails to verify, an error
+is raised.
+
+   Cryptographic verification requires checksum checking (described just
+above) to succeed, and a working GnuPG ('gpg') program (see below for
+search method).  Then, unless cryptographic verification has been
+disabled, a signature file ('texlive.tlpdb.*.asc') of the checksum file
+is downloaded and the signature verified.  The signature is created by
+the TeX Live Distribution GPG key 0x06BAB6BC, which in turn is signed by
+Karl Berry's key 0x30D155AD and Norbert Preining's key 0x6CACA448.  All
+of these keys are obtainable from the standard key servers.
+
+   Additional trusted keys can be added using the 'key' action.
+
+* Menu:
+
+* tlmgr Configuration of GnuPG invocation::
+
+
+File: tlbuild.info,  Node: tlmgr Configuration of GnuPG invocation,  Up: tlmgr CRYPTOGRAPHIC VERIFICATION
+
+B.8.1 Configuration of GnuPG invocation
+---------------------------------------
+
+The executable used for GnuPG is searched as follows: If the environment
+variable 'TL_GNUPG' is set, it is tested and used; otherwise 'gpg' is
+checked; finally 'gpg2' is checked.
+
+   Further adaptation of the 'gpg' invocation can be made using the two
+environment variables 'TL_GNUPGHOME', which is passed to 'gpg' as the
+value for '--homedir', and 'TL_GNUPGARGS', which replaces the default
+options '--no-secmem-warning --no-permission-warning'.
+
+
+File: tlbuild.info,  Node: tlmgr USER MODE,  Next: tlmgr MULTIPLE REPOSITORIES,  Prev: tlmgr CRYPTOGRAPHIC VERIFICATION,  Up: tlmgr
+
+B.9 USER MODE
 =============
 
 'tlmgr' provides a restricted way, called "user mode", to manage
@@ -3881,7 +4374,8 @@
 
    Some 'tlmgr' actions don't need any write permissions and thus work
 the same in user mode and normal mode.  Currently these are: 'check',
-'help', 'list', 'print-platform', 'search', 'show', 'version'.
+'help', 'list', 'print-platform', 'print-platform-info', 'search',
+'show', 'version'.
 
    On the other hand, most of the actions dealing with package
 management do need write permissions, and thus behave differently in
@@ -3911,14 +4405,14 @@
 
 * Menu:
 
-* tlmgr user mode install::
-* tlmgr user mode backup; restore; remove; update::
-* tlmgr user mode generate; option; paper::
+* tlmgr User mode install::
+* tlmgr User mode backup, restore, remove, update::
+* tlmgr User mode generate, option, paper::
 
 
-File: tlbuild.info,  Node: tlmgr user mode install,  Next: tlmgr user mode backup; restore; remove; update,  Up: tlmgr USER MODE
+File: tlbuild.info,  Node: tlmgr User mode install,  Next: tlmgr User mode backup, restore, remove, update,  Up: tlmgr USER MODE
 
-B.7.1 user mode install
+B.9.1 User mode install
 -----------------------
 
 In user mode, the 'install' action checks that the package and all
@@ -3935,10 +4429,14 @@
 collections, while in user mode, _only_ the packages mentioned in
 'collection-context' are installed.
 
+   If a package shipping map files is installed in user mode, a backup
+of the user's 'updmap.cfg' in 'USERTREE/web2c/' is made, and then this
+file regenerated from the list of installed packages.
+
 
-File: tlbuild.info,  Node: tlmgr user mode backup; restore; remove; update,  Next: tlmgr user mode generate; option; paper,  Prev: tlmgr user mode install,  Up: tlmgr USER MODE
+File: tlbuild.info,  Node: tlmgr User mode backup, restore, remove, update,  Next: tlmgr User mode generate, option, paper,  Prev: tlmgr User mode install,  Up: tlmgr USER MODE
 
-B.7.2 user mode backup; restore; remove; update
+B.9.2 User mode backup, restore, remove, update
 -----------------------------------------------
 
 In user mode, these actions check that all packages to be acted on are
@@ -3946,9 +4444,9 @@
 just as in normal mode.
 
 
-File: tlbuild.info,  Node: tlmgr user mode generate; option; paper,  Prev: tlmgr user mode backup; restore; remove; update,  Up: tlmgr USER MODE
+File: tlbuild.info,  Node: tlmgr User mode generate, option, paper,  Prev: tlmgr User mode backup, restore, remove, update,  Up: tlmgr USER MODE
 
-B.7.3 user mode generate; option; paper
+B.9.3 User mode generate, option, paper
 ---------------------------------------
 
 In user mode, these actions operate only on the user tree's
@@ -3956,79 +4454,8 @@
 in user tree
 
 
-File: tlbuild.info,  Node: tlmgr CONFIGURATION FILE FOR TLMGR,  Next: tlmgr TAXONOMIES,  Prev: tlmgr USER MODE,  Up: tlmgr
+File: tlbuild.info,  Node: tlmgr MULTIPLE REPOSITORIES,  Next: tlmgr GUI FOR TLMGR,  Prev: tlmgr USER MODE,  Up: tlmgr
 
-B.8 CONFIGURATION FILE FOR TLMGR
-================================
-
-A small subset of the command line options can be set in a config file
-for 'tlmgr' which resides in 'TEXMFCONFIG/tlmgr/config'.  By default,
-the config file is in '~/.texliveYYYY/texmf-config/tlmgr/config'
-(replacing 'YYYY' with the year of your TeX Live installation).  This is
-_not_ 'TEXMFSYSVAR', so that the file is specific to a single user.
-
-   In this file, empty lines and lines starting with # are ignored.  All
-other lines must look like
-
-  key = value
-
-   where the allowed keys are 'gui-expertmode' (value 0 or 1),
-'persistent-downloads' (value 0 or 1), 'auto-remove' (value 0 or 1), and
-'gui-lang' (value like in the command line option).
-
-   'persistent-downloads', 'gui-lang', and 'auto-remove' correspond to
-the respective command line options of the same name.  'gui-expertmode'
-switches between the full GUI and a simplified GUI with only the
-important and mostly used settings.
-
-
-File: tlbuild.info,  Node: tlmgr TAXONOMIES,  Next: tlmgr MULTIPLE REPOSITORIES,  Prev: tlmgr CONFIGURATION FILE FOR TLMGR,  Up: tlmgr
-
-B.9 TAXONOMIES
-==============
-
-tlmgr allows searching and listing of various categorizations, which we
-call _taxonomies_, as provided by an enhanced TeX Catalogue (available
-for testing at <http://az.ctan.org>).  This is useful when, for example,
-you don't know a specific package name but have an idea of the
-functionality you need; or when you want to see all packages relating to
-a given area.
-
-   There are three different taxonomies, specified by the following
-options:
-
-'--keyword'
-
-     The keywords, as specified at <http://az.ctan.org/keyword>.
-
-'--functionality'
-
-     The "by-topic" categorization created by J\"urgen Fenn, as
-     specified at <http://az.ctan.org/characterization/by-function>.
-
-'--characterization'
-
-     Both the primary and secondary functionalities, as specified at
-     <http://az.ctan.org/characterization/choose_dimen>.
-
-'--taxonomy'
-
-     Operate on all the taxonomies.
-
-   The taxonomies are updated nightly and stored within TeX Live, so
-Internet access is not required to search them.
-
-   Examples:
-
-  tlmgr search --taxonomy exercise      # check all taxonomies for "exercise"
-  tlmgr search --taxonomy --word table  # check for "table" on its own
-  tlmgr search --list --keyword         # dump entire keyword taxonomy
-  tlmgr show --taxonomy pdftex          # show pdftex package information,
-                                        #   including all taxonomy entries
-
-
-File: tlbuild.info,  Node: tlmgr MULTIPLE REPOSITORIES,  Next: tlmgr GUI FOR TLMGR,  Prev: tlmgr TAXONOMIES,  Up: tlmgr
-
 B.10 MULTIPLE REPOSITORIES
 ==========================
 
@@ -4042,11 +4469,11 @@
 installation source to any repository (with the '-repository' or 'option
 repository' command line options), and perform your operations.
 
-   When you are using multiple repositories over a sustained time,
-however, explicitly switching between them becomes inconvenient.  Thus,
-it's possible to tell 'tlmgr' about additional repositories you want to
-use.  The basic command is 'tlmgr repository add'.  The rest of this
-section explains further.
+   When you are using multiple repositories over a sustained length of
+time, however, explicitly switching between them becomes inconvenient.
+Thus, it's possible to tell 'tlmgr' about additional repositories you
+want to use.  The basic command is 'tlmgr repository add'.  The rest of
+this section explains further.
 
    When using multiple repositories, one of them has to be set as the
 main repository, which distributes most of the installed packages.  When
@@ -4137,15 +4564,17 @@
 B.11 GUI FOR TLMGR
 ==================
 
-The graphical user interface for 'tlmgr' needs Perl/Tk to be installed.
-For Windows the necessary modules are shipped within TeX Live, for all
-other (i.e., Unix-based) systems Perl/Tk (as well as Perl of course) has
-to be installed.  <http://tug.org/texlive/distro.html#perltk> has a list
-of invocations for some distros.
+The graphical user interface for 'tlmgr' requires Perl/Tk
+<http://search.cpan.org/search?query=perl%2Ftk>.  For Windows the
+necessary modules are shipped within TeX Live, for all other (i.e.,
+Unix-based) systems Perl/Tk (as well as Perl of course) has to be
+installed outside of TL. <http://tug.org/texlive/distro.html#perltk> has
+a list of invocations for some distros.
 
-   When started with 'tlmgr gui' the graphical user interface will be
-shown.  The main window contains a menu bar, the main display, and a
-status area where messages normally shown on the console are displayed.
+   The GUI is started with the invocation 'tlmgr gui'; assuming Tk is
+loadable, the graphical user interface will be shown.  The main window
+contains a menu bar, the main display, and a status area where messages
+normally shown on the console are displayed.
 
    Within the main display there are three main parts: the 'Display
 configuration' area, the list of packages, and the action buttons.
@@ -4161,6 +4590,7 @@
 
 * tlmgr Main display::
 * tlmgr Menu bar::
+* tlmgr GUI options::
 
 
 File: tlbuild.info,  Node: tlmgr Main display,  Next: tlmgr Menu bar,  Up: tlmgr GUI FOR TLMGR
@@ -4199,9 +4629,8 @@
 Match
 
      Select packages matching for a specific pattern.  By default, this
-     uses the same algorithm as 'tlmgr search', i.e., searches
-     everything: descriptions, taxonomies, and/or filenames.  You can
-     also select any subset for searching.
+     searches both descriptions and filenames.  You can also select a
+     subset for searching.
 
 Selection
 
@@ -4300,7 +4729,7 @@
      General>).
 
 
-File: tlbuild.info,  Node: tlmgr Menu bar,  Prev: tlmgr Main display,  Up: tlmgr GUI FOR TLMGR
+File: tlbuild.info,  Node: tlmgr Menu bar,  Next: tlmgr GUI options,  Prev: tlmgr Main display,  Up: tlmgr GUI FOR TLMGR
 
 B.11.2 Menu bar
 ---------------
@@ -4354,6 +4783,42 @@
      <http://tug.org/texlive/doc.html>) and the usual "About" box.
 
 
+File: tlbuild.info,  Node: tlmgr GUI options,  Prev: tlmgr Menu bar,  Up: tlmgr GUI FOR TLMGR
+
+B.11.3 GUI options
+------------------
+
+Some generic Perl/Tk options can be specified with 'tlmgr gui' to
+control the display:
+
+'-background' _color_
+
+     Set background color.
+
+'-font "' _fontname_ _fontsize_ '"'
+
+     Set font, e.g., 'tlmgr gui -font "helvetica 18"'.  The argument to
+     '-font' must be quoted, i.e., passed as a single string.
+
+'-foreground' _color_
+
+     Set foreground color.
+
+'-geometry' _geomspec_
+
+     Set the X geometry, e.g., 'tlmgr gui -geometry 1024x512-0+0'
+     creates the window of (approximately) the given size in the
+     upper-right corner of the display.
+
+'-xrm' _xresource_
+
+     Pass the arbitrary X resource string _xresource_.
+
+   A few other obscure options are recognized but not mentioned here.
+See the Perl/Tk documentation (<http://search.cpan.org/perldoc?Tk>) for
+the complete list, and any X documentation for general information.
+
+
 File: tlbuild.info,  Node: tlmgr MACHINE-READABLE OUTPUT,  Next: tlmgr AUTHORS AND COPYRIGHT,  Prev: tlmgr GUI FOR TLMGR,  Up: tlmgr
 
 B.12 MACHINE-READABLE OUTPUT
@@ -4366,7 +4831,7 @@
 information it needs by reading stdout.
 
    Currently this option only applies to the *note update: tlmgr update
-[_option_]... [_pkg_]..., *note install: tlmgr install [_option_]...
+[_option_...] [_pkg_...], *note install: tlmgr install [_option_...]
 _pkg_..., and *note option: tlmgr option. actions.
 
 * Menu:
@@ -4518,6 +4983,8 @@
 distribution (<http://tug.org/texlive>) and both are licensed under the
 GNU General Public License Version 2 or later.
 
+   $Id: tlmgr.pl 47303 2018-04-05 17:52:22Z karl $
+
 
 File: tlbuild.info,  Node: Index,  Prev: tlmgr,  Up: Top
 
@@ -4639,8 +5106,8 @@
 * --without-x:                           --without-x.          (line  6)
 * -C configure option:                   Build in parallel.    (line 11)
 * -j make option:                        Build in parallel.    (line  6)
-* .travis.yml:                           Continuous integration.
-                                                               (line 68)
+* .travis.yml:                           CI testing on Travis-CI.
+                                                               (line  6)
 * adapting TeX Live for distros:         Distro builds.        (line 54)
 * adding a new generic library:          Adding a new generic library module.
                                                                (line  6)
@@ -5071,313 +5538,369 @@
 
 Tag Table:
 Node: Top1208
-Node: Introduction2183
-Node: Overview of build system3906
-Node: Prerequisites5949
-Node: Building8347
-Node: Build iteration9595
-Node: Build problems10667
-Node: Build in parallel11070
-Node: Build distribution11662
-Node: Build one package12233
-Node: Installing15585
-Node: Installation directories16600
-Node: Linked scripts18416
-Node: Distro builds19897
-Node: Layout and infrastructure22287
-Node: Build system tools23115
-Node: Top-level directories25126
-Node: Autoconf macros27540
-Node: General setup macros28241
-Node: Macros for programs29108
-Node: Macros for compilers29920
-Node: Macros for libraries31354
-Node: Macros for library and header flags31780
-Node: Macros for Windows33660
-Node: Library modules35237
-Node: png library35726
-Node: zlib library38000
-Node: freetype library38515
-Node: kpathsea library39043
-Node: Program modules40442
-Node: t1utils package40870
-Node: xindy package41421
-Node: xdvik package42571
-Node: asymptote43644
-Node: Extending TeX Live44095
-Node: Adding a new program module44872
-Node: Adding a new generic library module48167
-Node: Adding a new TeX-specific library module50380
-Node: Configure options51067
-Node: Global configure options52449
-Node: --disable-native-texlive-build52991
-Node: --prefix --bindir ...53981
-Node: --disable-largefile54521
-Node: --disable-missing55206
-Node: --enable-compiler-warnings=LEVEL55607
-Node: --enable-cxx-runtime-hack56346
-Node: --enable-maintainer-mode56773
-Node: --enable-multiplatform57302
-Node: --enable-shared57840
-Node: --enable-silent-rules58211
-Node: --without-ln-s58667
-Node: --without-x59018
-Node: Program-specific configure options59206
-Node: --enable-PROG --disable-PROG59849
-Node: --disable-all-pkgs60126
-Node: Configure options for texk/web2c61112
-Node: Configure options for texk/bibtex-x63630
-Node: Configure options for texk/dvipdfm-x64173
-Node: Configure options for texk/dvisvgm64946
-Node: Configure options for texk/texlive65832
-Node: Configure options for texk/xdvik66253
-Node: Configure options for utils/xindy66857
-Node: Library-specific configure options67758
-Node: Configure options for kpathsea68769
-Node: Configure options for system poppler69478
-Node: Variables for configure70269
-Node: Cross compilation71697
-Node: Cross configuring72996
-Node: Cross problems74669
-Node: Coding conventions76316
-Node: Declarations and definitions77055
-Node: Const79237
-Node: Continuous integration81100
-Node: install-tl84634
-Node: install-tl NAME84979
-Node: install-tl SYNOPSIS85137
-Node: install-tl DESCRIPTION85345
-Node: install-tl REFERENCES86346
-Node: install-tl OPTIONS86862
-Ref: install-tl *-gui* [[=]_module_]87216
-Ref: install-tl text87425
-Ref: install-tl wizard87548
-Ref: install-tl perltk87702
-Ref: install-tl *-no-gui*88136
-Ref: install-tl *-lang* _llcode_88217
-Ref: install-tl *-repository* _url|path_88904
-Ref: install-tl *-select-repository*90715
-Ref: install-tl *-all-options*91151
-Ref: install-tl *-custom-bin* _path_91458
-Ref: install-tl *-debug-translation*92113
-Ref: install-tl *-force-platform* _platform_92332
-Ref: install-tl *-help*, *--help*, *-?*92576
-Ref: install-tl *-in-place*92969
-Ref: install-tl *-logfile* _file_93496
-Ref: install-tl *-no-cls*93847
-Ref: install-tl *-non-admin*93978
-Ref: install-tl *--persistent-downloads*94083
-Ref: install-tl *--no-persistent-downloads*94111
-Ref: install-tl *-portable*94719
-Ref: install-tl *-print-platform*94858
-Ref: install-tl *-profile* _profile_95051
-Ref: install-tl *-q*96545
-Ref: install-tl *-scheme* _scheme_96607
-Ref: install-tl *-v*97081
-Ref: install-tl *-version*, *--version*97242
-Node: install-tl ENVIRONMENT VARIABLES97373
-Ref: install-tl TEXLIVE_INSTALL_ENV_NOCHECK97762
-Ref: install-tl TEXLIVE_INSTALL_NO_CONTEXT_CACHE97964
-Ref: install-tl TEXLIVE_INSTALL_PREFIX98070
-Ref: install-tl TEXLIVE_INSTALL_TEXMFCONFIG98101
-Ref: install-tl TEXLIVE_INSTALL_TEXMFHOME98130
-Ref: install-tl TEXLIVE_INSTALL_TEXMFLOCAL98160
-Ref: install-tl TEXLIVE_INSTALL_TEXMFSYSCONFIG98194
-Ref: install-tl TEXLIVE_INSTALL_TEXMFSYSVAR98225
-Ref: install-tl TEXLIVE_INSTALL_TEXMFVAR98253
-Ref: install-tl NOPERLDOC98308
-Node: install-tl AUTHORS AND COPYRIGHT98372
-Node: tlmgr98730
-Node: tlmgr NAME99167
-Node: tlmgr SYNOPSIS99292
-Node: tlmgr DESCRIPTION99482
-Node: tlmgr EXAMPLES100578
-Ref: tlmgr tlmgr option repository http://mirror.ctan.org/systems/texlive/tlnet100869
-Ref: tlmgr tlmgr update --list101050
-Ref: tlmgr tlmgr update --all101143
-Ref: tlmgr tlmgr info _pkg_101299
-Node: tlmgr OPTIONS101505
-Ref: tlmgr *--repository* _url|path_102025
-Ref: tlmgr *--gui* [_action_]102750
-Ref: tlmgr *--gui-lang* _llcode_103157
-Ref: tlmgr *--debug-translation*103840
-Ref: tlmgr *--machine-readable*104043
-Ref: tlmgr *--no-execute-actions*104311
-Ref: tlmgr *--package-logfile* _file_104504
-Ref: tlmgr *--pause*104759
-Ref: tlmgr *--persistent-downloads*104914
-Ref: tlmgr *--no-persistent-downloads*104942
-Ref: tlmgr *--pin-file*105436
-Ref: tlmgr *--usermode*105654
-Ref: tlmgr *--usertree* _dir_105774
-Node: tlmgr ACTIONS106324
-Node: tlmgr help107556
-Node: tlmgr version108032
-Node: tlmgr backup [--clean[=_N_]] [--backupdir _dir_] [--all | _pkg_]...108350
-Ref: tlmgr *--backupdir* _directory_109444
-Ref: tlmgr *--all*109641
-Ref: tlmgr *--clean*[=_N_]109863
-Ref: tlmgr *--dry-run*110160
-Node: tlmgr candidates _pkg_110280
-Ref: tlmgr *candidates _pkg_* 1110567
-Node: tlmgr check [_option_]... [files|depends|executes|runfiles|all]110711
-Ref: tlmgr *files*111154
-Ref: tlmgr *depends*111289
-Ref: tlmgr *executes*111631
-Ref: tlmgr *runfiles*111749
-Ref: tlmgr *--use-svn*111861
-Node: tlmgr conf [texmf|tlmgr|updmap [--conffile _file_] [--delete] [_key_ [_value_]]]111978
-Node: tlmgr dump-tlpdb [--local|--remote]114050
-Ref: tlmgr *--local*114560
-Ref: tlmgr *--remote*114599
-Node: tlmgr generate [_option_]... _what_115021
-Ref: tlmgr *generate language*115262
-Ref: tlmgr *generate language.dat*115287
-Ref: tlmgr *generate language.def*115312
-Ref: tlmgr *generate language.dat.lua*115341
-Ref: tlmgr *generate fmtutil*115361
-Ref: tlmgr *--dest* _output_file_117598
-Ref: tlmgr *--localcfg* _local_conf_file_118174
-Ref: tlmgr *--rebuild-sys*118297
-Node: tlmgr gui119158
-Node: tlmgr info [_option_...] [collections|schemes|_pkg_...]119402
-Ref: tlmgr *--list*120607
-Ref: tlmgr *--only-installed*120886
-Ref: tlmgr *--taxonomy*121101
-Ref: tlmgr *--keyword*121113
-Ref: tlmgr *--functionality*121131
-Ref: tlmgr *--characterization*121152
-Node: tlmgr init-usertree121365
-Node: tlmgr install [_option_]... _pkg_...121791
-Ref: tlmgr *--file*122155
-Ref: tlmgr *--reinstall*122381
-Ref: tlmgr *--no-depends*122761
-Ref: tlmgr *--no-depends-at-all*122920
-Ref: tlmgr *--dry-run* 1123318
-Ref: tlmgr *--force*123436
-Node: tlmgr option123642
-Ref: tlmgr *option [show]*123815
-Ref: tlmgr *option showall*123833
-Ref: tlmgr *option _key_ [_value_]*123859
-Node: tlmgr paper127707
-Ref: tlmgr *paper [a4|letter]*127892
-Ref: tlmgr *[xdvi|pdftex|dvips|dvipdfmx|context|psutils] paper [_papersize_|--list]*127966
-Node: tlmgr path [--w32mode=user|admin] [add|remove]128993
-Node: tlmgr pinning130476
-Ref: tlmgr pinning show130783
-Ref: tlmgr pinning add _repo_ _pkgglob_...130856
-Ref: tlmgr pinning remove _repo_ _pkgglob_...130975
-Ref: tlmgr pinning remove _repo_ --all131128
-Node: tlmgr platform list|add|remove _platform_...131182
-Node: tlmgr platform set _platform_131430
-Node: tlmgr platform set auto131658
-Ref: tlmgr *--dry-run* 2132775
-Node: tlmgr postaction [--w32mode=user|admin] [--fileassocmode=1|2] [--all] [install|remove] [shortcut|fileassoc|script] [_pkg_]...132884
-Node: tlmgr print-platform134186
-Node: tlmgr restore [--backupdir _dir_] [--all | _pkg_ [_rev_]]134658
-Ref: tlmgr *--all* 1135554
-Ref: tlmgr *--backupdir* _directory_ 1135748
-Ref: tlmgr *--dry-run* 3135904
-Ref: tlmgr *--force* 1136021
-Node: tlmgr remove [_option_]... _pkg_...136049
-Ref: tlmgr *--no-depends* 1136572
-Ref: tlmgr *--no-depends-at-all* 1136634
-Ref: tlmgr *--force* 2136690
-Ref: tlmgr *--dry-run* 4137162
-Node: tlmgr repository137269
-Ref: tlmgr *repository list*137477
-Ref: tlmgr *repository list _path|tag_*137507
-Ref: tlmgr *repository add _path_ [_tag_]*137540
-Ref: tlmgr *repository remove _path|tag_*137572
-Ref: tlmgr *repository set _path_[#_tag_] [_path_[#_tag_] ...]*137626
-Node: tlmgr search [_option_...] _what_138710
-Node: tlmgr search [_option_...] --file _what_139221
-Node: tlmgr search [_option_...] --taxonomy _what_139472
-Node: tlmgr search [_option_...] --keyword _what_139783
-Node: tlmgr search [_option_...] --functionality _what_140101
-Node: tlmgr search [_option_...] --characterization _what_140439
-Node: tlmgr search [_option_...] --all _what_140779
-Ref: tlmgr *--global*141227
-Ref: tlmgr *--word*141339
-Ref: tlmgr *--list* 1141578
-Ref: tlmgr *--file* 1141924
-Ref: tlmgr *--taxonomy* 1141981
-Ref: tlmgr *--keyword* 1141993
-Ref: tlmgr *--functionality* 1142011
-Ref: tlmgr *--characterization* 1142032
-Ref: tlmgr *--all* 2142187
-Node: tlmgr uninstall142270
-Ref: tlmgr *--force* 3142524
-Node: tlmgr update [_option_]... [_pkg_]...142580
-Ref: tlmgr *--all* 3142951
-Ref: tlmgr *--self*144692
-Ref: tlmgr *--dry-run* 5145456
-Ref: tlmgr *--list* [_pkg_]145633
-Ref: tlmgr *--exclude* _pkg_146322
-Ref: tlmgr *--no-auto-remove* [_pkg_]...147015
-Ref: tlmgr *--no-auto-install* [_pkg_]...147466
-Ref: tlmgr *--reinstall-forcibly-removed*148122
-Ref: tlmgr *--backup* and *--backupdir* _directory_148686
-Ref: tlmgr *--no-depends* 2149867
-Ref: tlmgr *--no-depends-at-all* 2150070
-Ref: tlmgr *--force* 4150126
-Node: tlmgr USER MODE150552
-Node: tlmgr user mode install153363
-Node: tlmgr user mode backup; restore; remove; update154310
-Node: tlmgr user mode generate; option; paper154752
-Node: tlmgr CONFIGURATION FILE FOR TLMGR155128
-Node: tlmgr TAXONOMIES156219
-Ref: tlmgr --keyword 2156845
-Ref: tlmgr --functionality 2156930
-Ref: tlmgr --characterization 2157086
-Ref: tlmgr --taxonomy 2157227
-Node: tlmgr MULTIPLE REPOSITORIES157768
-Node: tlmgr Pinning159489
-Node: tlmgr GUI FOR TLMGR161464
-Node: tlmgr Main display162686
-Node: tlmgr Display configuration area162938
-Ref: tlmgr Status163299
-Ref: tlmgr Category163463
-Ref: tlmgr Match163649
-Ref: tlmgr Selection163909
-Ref: tlmgr Display configuration buttons164113
-Node: tlmgr Package list area164296
-Ref: tlmgr a checkbox164880
-Ref: tlmgr package name165016
-Ref: tlmgr local revision (and version)165115
-Ref: tlmgr remote revision (and version)165490
-Ref: tlmgr short description165787
-Node: tlmgr Main display action buttons165832
-Ref: tlmgr Update all installed166098
-Ref: tlmgr Update166470
-Ref: tlmgr Install166520
-Ref: tlmgr Remove166706
-Ref: tlmgr Backup166884
-Node: tlmgr Menu bar167041
-Ref: tlmgr tlmgr menu167238
-Ref: tlmgr Options menu167546
-Ref: tlmgr Actions menu168629
-Ref: tlmgr Help menu169057
-Node: tlmgr MACHINE-READABLE OUTPUT169190
-Node: tlmgr Machine-readable update and install output170000
-Ref: tlmgr location-url _location_171276
-Ref: tlmgr total-bytes _count_171492
-Ref: tlmgr _pkgname_171902
-Ref: tlmgr _status_172112
-Ref: tlmgr d172190
-Ref: tlmgr f172250
-Ref: tlmgr u172429
-Ref: tlmgr r172475
-Ref: tlmgr a172598
-Ref: tlmgr i172776
-Ref: tlmgr I172895
-Ref: tlmgr _localrev_172997
-Ref: tlmgr _serverrev_173104
-Ref: tlmgr _size_173216
-Ref: tlmgr _runtime_173385
-Ref: tlmgr _esttot_173455
-Node: tlmgr Machine-readable option output173488
-Node: tlmgr AUTHORS AND COPYRIGHT174000
-Node: Index174347
+Node: Introduction2118
+Node: Overview of build system3838
+Node: Prerequisites5881
+Node: Building8279
+Node: Build iteration9584
+Node: Build problems10656
+Node: Build in parallel11059
+Node: Build distribution11651
+Node: Build one package12222
+Node: Cross compilation15600
+Node: Cross configuring16881
+Node: Cross problems18558
+Node: Installing20209
+Node: Installation directories21224
+Node: Linked scripts23040
+Node: Distro builds24521
+Node: Layout and infrastructure26911
+Node: Build system tools27739
+Node: Top-level directories29750
+Node: Autoconf macros32164
+Node: General setup macros32865
+Node: Macros for programs33732
+Node: Macros for compilers34544
+Node: Macros for libraries35978
+Node: Macros for library and header flags36404
+Node: Macros for Windows38284
+Node: Library modules39861
+Node: png library40350
+Node: zlib library42624
+Node: freetype library43139
+Node: kpathsea library43667
+Node: Program modules45066
+Node: t1utils package45494
+Node: xindy package46045
+Node: xdvik package47195
+Node: asymptote48268
+Node: Extending TeX Live48719
+Node: Adding a new program module49496
+Node: Adding a new generic library module52791
+Node: Adding a new TeX-specific library module55004
+Node: Configure options55691
+Node: Global configure options57074
+Node: --disable-native-texlive-build57616
+Node: --prefix --bindir ...58606
+Node: --disable-largefile59146
+Node: --disable-missing59831
+Node: --enable-compiler-warnings=LEVEL60232
+Node: --enable-cxx-runtime-hack60971
+Node: --enable-maintainer-mode61398
+Node: --enable-multiplatform61927
+Node: --enable-shared62465
+Node: --enable-silent-rules62836
+Node: --without-ln-s63292
+Node: --without-x63643
+Node: Program-specific configure options63831
+Node: --enable-PROG --disable-PROG64474
+Node: --disable-all-pkgs64751
+Node: Configure options for texk/web2c65737
+Node: Configure options for texk/bibtex-x68255
+Node: Configure options for texk/dvipdfm-x68798
+Node: Configure options for texk/dvisvgm69571
+Node: Configure options for texk/texlive70457
+Node: Configure options for texk/xdvik70878
+Node: Configure options for utils/xindy71482
+Node: Library-specific configure options72383
+Node: Configure options for kpathsea73394
+Node: Configure options for system poppler74103
+Node: Variables for configure74894
+Node: Coding conventions76322
+Node: Declarations and definitions77061
+Node: Const79243
+Node: Continuous integration81106
+Node: Transfer from Subversion to Github81760
+Node: Automatic update of the Git mirror83942
+Node: CI testing on Travis-CI84530
+Node: install-tl85210
+Node: install-tl NAME85579
+Node: install-tl SYNOPSIS85737
+Node: install-tl DESCRIPTION85995
+Node: install-tl REFERENCES87062
+Node: install-tl OPTIONS87588
+Ref: install-tl *-gui* [[=]_module_]87929
+Ref: install-tl text88139
+Ref: install-tl wizard88262
+Ref: install-tl perltk88416
+Ref: install-tl *-no-gui*88847
+Ref: install-tl *-lang* _llcode_88928
+Ref: install-tl *-repository* _url|path_89615
+Ref: install-tl *-select-repository*91495
+Ref: install-tl *-all-options*91931
+Ref: install-tl *-custom-bin* _path_92186
+Ref: install-tl *-debug-translation*93017
+Ref: install-tl *-force-platform* _platform_93236
+Ref: install-tl *-help*, *--help*, *-?*93480
+Ref: install-tl *-in-place*93887
+Ref: install-tl *-init-from-profile* _profile_file_94432
+Ref: install-tl *-logfile* _file_94652
+Ref: install-tl *-no-cls*95003
+Ref: install-tl *-non-admin*95137
+Ref: install-tl *-persistent-downloads*95242
+Ref: install-tl *-no-persistent-downloads*95270
+Ref: install-tl *-no-verify-downloads*95888
+Ref: install-tl *-portable*96249
+Ref: install-tl *-print-platform*96388
+Ref: install-tl *-profile* _profile_file_96586
+Ref: install-tl *-q*96766
+Ref: install-tl *-scheme* _scheme_96828
+Ref: install-tl *-v*97302
+Ref: install-tl *-version*, *--version*97457
+Node: install-tl PROFILES97588
+Ref: install-tl instopt_adjustpath (default 0 on Unix, 1 on Windows)100238
+Ref: install-tl instopt_adjustrepo (default 1)100314
+Ref: install-tl instopt_letter (default 0)100451
+Ref: install-tl instopt_portable (default 0)100542
+Ref: install-tl instopt_write18_restricted (default 1)100638
+Node: install-tl ENVIRONMENT VARIABLES101957
+Ref: install-tl TEXLIVE_INSTALL_ENV_NOCHECK102348
+Ref: install-tl TEXLIVE_INSTALL_NO_CONTEXT_CACHE102550
+Ref: install-tl TEXLIVE_INSTALL_NO_WELCOME102660
+Ref: install-tl TEXLIVE_INSTALL_PREFIX102781
+Ref: install-tl TEXLIVE_INSTALL_TEXDIR102807
+Ref: install-tl TEXLIVE_INSTALL_TEXMFCONFIG102838
+Ref: install-tl TEXLIVE_INSTALL_TEXMFVAR102866
+Ref: install-tl TEXLIVE_INSTALL_TEXMFHOME102895
+Ref: install-tl TEXLIVE_INSTALL_TEXMFLOCAL102925
+Ref: install-tl TEXLIVE_INSTALL_TEXMFSYSCONFIG102959
+Ref: install-tl TEXLIVE_INSTALL_TEXMFSYSVAR102990
+Ref: install-tl NOPERLDOC103361
+Node: install-tl AUTHORS AND COPYRIGHT103425
+Node: tlmgr103841
+Node: tlmgr NAME104294
+Node: tlmgr SYNOPSIS104426
+Node: tlmgr DESCRIPTION104616
+Node: tlmgr EXAMPLES105712
+Ref: tlmgr tlmgr option repository ctan105963
+Ref: tlmgr tlmgr option repository http://mirror.ctan.org/systems/texlive/tlnet106035
+Ref: tlmgr tlmgr update --list106487
+Ref: tlmgr tlmgr update --all106580
+Ref: tlmgr tlmgr info _what_106737
+Node: tlmgr OPTIONS106999
+Ref: tlmgr *--repository* _url|path_107519
+Ref: tlmgr *--gui* [_action_]108244
+Ref: tlmgr *--gui-lang* _llcode_108651
+Ref: tlmgr *--debug-translation*109334
+Ref: tlmgr *--machine-readable*109537
+Ref: tlmgr *--no-execute-actions*109805
+Ref: tlmgr *--package-logfile* _file_109998
+Ref: tlmgr *--pause*110252
+Ref: tlmgr *--persistent-downloads*110407
+Ref: tlmgr *--no-persistent-downloads*110435
+Ref: tlmgr *--pin-file*110929
+Ref: tlmgr *--usermode*111147
+Ref: tlmgr *--usertree* _dir_111267
+Ref: tlmgr *--verify-repo=[none|main|all]*111393
+Node: tlmgr ACTIONS112292
+Node: tlmgr help113144
+Node: tlmgr version113620
+Node: tlmgr backup113883
+Ref: tlmgr *backup [_option_...] --all*114054
+Ref: tlmgr *backup [_option_...] _pkg_...*114087
+Ref: tlmgr *--backupdir* _directory_114942
+Ref: tlmgr *--all*115159
+Ref: tlmgr *--clean*[=_N_]115411
+Ref: tlmgr *--dry-run*115738
+Node: tlmgr candidates _pkg_115868
+Node: tlmgr check [_option_...] [files|depends|executes|runfiles|all]116214
+Ref: tlmgr *files*116587
+Ref: tlmgr *depends*116722
+Ref: tlmgr *executes*117064
+Ref: tlmgr *runfiles*117182
+Ref: tlmgr *--use-svn*117303
+Node: tlmgr conf117420
+Ref: tlmgr *conf [texmf|tlmgr|updmap [--conffile _file_] [--delete] [_key_ [_value_]]]*117699
+Ref: tlmgr *conf auxtrees [--conffile _file_] [show|add|delete] [_value_]*117763
+Node: tlmgr dump-tlpdb [_option_...] [--json]120108
+Ref: tlmgr *--local*120541
+Ref: tlmgr *--remote*120580
+Ref: tlmgr *--json*120618
+Node: tlmgr generate121189
+Ref: tlmgr *generate [_option_...] language*121385
+Ref: tlmgr *generate [_option_...] language.dat*121424
+Ref: tlmgr *generate [_option_...] language.def*121463
+Ref: tlmgr *generate [_option_...] language.dat.lua*121506
+Ref: tlmgr *--dest* _output_file_123832
+Ref: tlmgr *--localcfg* _local_conf_file_124408
+Ref: tlmgr *--rebuild-sys*124531
+Node: tlmgr gui125346
+Node: tlmgr info125524
+Ref: tlmgr *info [_option_...] _pkg_...*125686
+Ref: tlmgr *info [_option_...] collections*125720
+Ref: tlmgr *info [_option_...] schemes*125750
+Ref: tlmgr *--list*127280
+Ref: tlmgr *--only-installed*127594
+Ref: tlmgr *--data item1,item2,...*127793
+Ref: tlmgr *--json* 1128374
+Node: tlmgr init-usertree128757
+Node: tlmgr install [_option_...] _pkg_...129138
+Ref: tlmgr *--dry-run* 1129648
+Ref: tlmgr *--file*129765
+Ref: tlmgr *--force*129987
+Ref: tlmgr *--no-depends*130207
+Ref: tlmgr *--no-depends-at-all*130366
+Ref: tlmgr *--reinstall*130766
+Ref: tlmgr *--with-doc*131144
+Ref: tlmgr *--with-src*131157
+Node: tlmgr key131679
+Ref: tlmgr *key list*131837
+Ref: tlmgr *key add _file_*131855
+Ref: tlmgr *key remove _keyid_*131877
+Node: tlmgr list132472
+Node: tlmgr option132634
+Ref: tlmgr *option [--json] [show]*132789
+Ref: tlmgr *option [--json] showall*132815
+Ref: tlmgr *option _key_ [_value_]*132841
+Node: tlmgr paper137238
+Ref: tlmgr *paper [a4|letter]*137387
+Ref: tlmgr *[xdvi|pdftex|dvips|dvipdfmx|context|psutils] paper [_papersize_|--list]*137461
+Ref: tlmgr *paper --json*137476
+Node: tlmgr path138691
+Ref: tlmgr *path [--w32mode=user|admin] add*138852
+Ref: tlmgr *path [--w32mode=user|admin] remove*138889
+Node: tlmgr pinning140229
+Ref: tlmgr pinning show140470
+Ref: tlmgr pinning add _repo_ _pkgglob_...140543
+Ref: tlmgr pinning remove _repo_ _pkgglob_...140662
+Ref: tlmgr pinning remove _repo_ --all140815
+Node: tlmgr platform140869
+Ref: tlmgr *platform list|add|remove _platform_...*141055
+Ref: tlmgr *platform set _platform_*141082
+Ref: tlmgr *platform set auto*141103
+Ref: tlmgr *--dry-run* 2141989
+Node: tlmgr postaction142108
+Ref: tlmgr *postaction [_option_...] install [shortcut|fileassoc|script] [_pkg_...]*142338
+Ref: tlmgr *postaction [_option_...] remove [shortcut|fileassoc|script] [_pkg_...]*142412
+Ref: tlmgr *--w32mode=[user|admin]*142727
+Ref: tlmgr *--fileassocmode=[1|2]*143143
+Ref: tlmgr *--all* 1143428
+Node: tlmgr print-platform143483
+Node: tlmgr print-platform-info143814
+Node: tlmgr remove [_option_...] _pkg_...144114
+Ref: tlmgr *--all* 2144598
+Ref: tlmgr *--backup*144708
+Ref: tlmgr *--backupdir* _directory_ 1144734
+Ref: tlmgr *--no-depends* 1145139
+Ref: tlmgr *--no-depends-at-all* 1145201
+Ref: tlmgr *--force* 1145304
+Ref: tlmgr *--dry-run* 3145777
+Node: tlmgr repository145884
+Ref: tlmgr *repository list*146072
+Ref: tlmgr *repository list _path|tag_*146102
+Ref: tlmgr *repository add _path_ [_tag_]*146135
+Ref: tlmgr *repository remove _path|tag_*146167
+Ref: tlmgr *repository set _path_[#_tag_] [_path_[#_tag_] ...]*146221
+Node: tlmgr restore147274
+Ref: tlmgr *restore [_option_...] _pkg_ [_rev_]*147453
+Ref: tlmgr *restore [_option_...] --all*147483
+Ref: tlmgr *--all* 3148183
+Ref: tlmgr *--backupdir* _directory_ 2148397
+Ref: tlmgr *--dry-run* 4148578
+Ref: tlmgr *--force* 2148710
+Ref: tlmgr *--json* 2148756
+Node: tlmgr search149083
+Ref: tlmgr *search [_option_...] _what_*149247
+Ref: tlmgr *search [_option_...] --file _what_*149284
+Ref: tlmgr *search [_option_...] --all _what_*149320
+Ref: tlmgr *--file* 1149540
+Ref: tlmgr *--all* 4149602
+Ref: tlmgr *--global*149691
+Ref: tlmgr *--word*149818
+Node: tlmgr shell150133
+Ref: tlmgr protocol150868
+Ref: tlmgr help 1150932
+Ref: tlmgr version 1150985
+Ref: tlmgr quit, end, bye, byebye, EOF151053
+Ref: tlmgr restart151074
+Ref: tlmgr load [local|remote]151197
+Ref: tlmgr save151267
+Ref: tlmgr get [_var_] =item set [_var_ [_val_]]151390
+Node: tlmgr show151991
+Node: tlmgr uninstall152158
+Node: tlmgr update [_option_...] [_pkg_...]152388
+Ref: tlmgr *--all* 5152759
+Ref: tlmgr *--self*154500
+Ref: tlmgr *--dry-run* 5155264
+Ref: tlmgr *--list* [_pkg_]155441
+Ref: tlmgr *--exclude* _pkg_156130
+Ref: tlmgr *--no-auto-remove* [_pkg_...]156930
+Ref: tlmgr *--no-auto-install* [_pkg_...]157381
+Ref: tlmgr *--reinstall-forcibly-removed*158037
+Ref: tlmgr *--backup* 1158572
+Ref: tlmgr *--backupdir* _directory_ 3158598
+Ref: tlmgr *--no-depends* 2159764
+Ref: tlmgr *--no-depends-at-all* 2159967
+Ref: tlmgr *--force* 3160070
+Node: tlmgr CONFIGURATION FILE FOR TLMGR160885
+Ref: tlmgr auto-remove, value 0 or 1 (default 1), same as command-line option.161898
+Ref: tlmgr gui-expertmode, value 0 or 1 (default 1). This switches between the full GUI and a simplified GUI with only the most common settings.162035
+Ref: tlmgr gui-lang _llcode_, with a language code value as with the command-line option.162117
+Ref: tlmgr no-checksums, value 0 or 1 (default 0, see below).162171
+Ref: tlmgr persistent-downloads, value 0 or 1 (default 1), same as command-line option.162251
+Ref: tlmgr require-verification, value 0 or 1 (default 0), same as command-line option.162331
+Ref: tlmgr update-exclude, value: comma-separated list of packages (no space allowed). Same as the command line option --exclude for the action update.162479
+Ref: tlmgr verify-downloads, value 0 or 1 (default 1), same as command-line option.162555
+Ref: tlmgr allowed-actions _action1_ [,_action_,...] The value is a comma-separated list of tlmgr actions which are allowed to be executed when tlmgr is invoked in system mode (that is, without --usermode).162824
+Node: tlmgr CRYPTOGRAPHIC VERIFICATION163910
+Node: tlmgr Configuration of GnuPG invocation166059
+Node: tlmgr USER MODE166697
+Node: tlmgr User mode install169543
+Node: tlmgr User mode backup, restore, remove, update170687
+Node: tlmgr User mode generate, option, paper171129
+Node: tlmgr MULTIPLE REPOSITORIES171505
+Node: tlmgr Pinning173234
+Node: tlmgr GUI FOR TLMGR175209
+Node: tlmgr Main display176549
+Node: tlmgr Display configuration area176801
+Ref: tlmgr Status177162
+Ref: tlmgr Category177326
+Ref: tlmgr Match177512
+Ref: tlmgr Selection177693
+Ref: tlmgr Display configuration buttons177897
+Node: tlmgr Package list area178080
+Ref: tlmgr a checkbox178664
+Ref: tlmgr package name178800
+Ref: tlmgr local revision (and version)178899
+Ref: tlmgr remote revision (and version)179274
+Ref: tlmgr short description179571
+Node: tlmgr Main display action buttons179616
+Ref: tlmgr Update all installed179882
+Ref: tlmgr Update180254
+Ref: tlmgr Install180304
+Ref: tlmgr Remove180490
+Ref: tlmgr Backup180668
+Node: tlmgr Menu bar180825
+Ref: tlmgr tlmgr menu181048
+Ref: tlmgr Options menu181356
+Ref: tlmgr Actions menu182439
+Ref: tlmgr Help menu182867
+Node: tlmgr GUI options183000
+Ref: tlmgr -background _color_183246
+Ref: tlmgr -font " _fontname_ _fontsize_ "183311
+Ref: tlmgr -foreground _color_183469
+Ref: tlmgr -geometry _geomspec_183521
+Ref: tlmgr -xrm _xresource_183713
+Node: tlmgr MACHINE-READABLE OUTPUT183981
+Node: tlmgr Machine-readable update and install output184791
+Ref: tlmgr location-url _location_186067
+Ref: tlmgr total-bytes _count_186283
+Ref: tlmgr _pkgname_186693
+Ref: tlmgr _status_186903
+Ref: tlmgr d186981
+Ref: tlmgr f187041
+Ref: tlmgr u187220
+Ref: tlmgr r187266
+Ref: tlmgr a187389
+Ref: tlmgr i187567
+Ref: tlmgr I187686
+Ref: tlmgr _localrev_187788
+Ref: tlmgr _serverrev_187895
+Ref: tlmgr _size_188007
+Ref: tlmgr _runtime_188176
+Ref: tlmgr _esttot_188246
+Node: tlmgr Machine-readable option output188279
+Node: tlmgr AUTHORS AND COPYRIGHT188791
+Node: Index189190
 
 End Tag Table

Modified: branches/stable/source/src/doc/tlbuild.texi
===================================================================
--- branches/stable/source/src/doc/tlbuild.texi	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/doc/tlbuild.texi	2018-04-22 15:47:12 UTC (rev 796)
@@ -2,7 +2,7 @@
 @setfilename tlbuild.info
 
 @set version 2018
- at set month-year February 2018
+ at set month-year April 2018
 
 @set mytitle Building @TeX{} Live (@value{version})
 @settitle @value{mytitle}
@@ -88,7 +88,6 @@
 * Installing::                  How and where installation happens (or not).
 * Layout and infrastructure::   Autoconf macros, etc., in detail.
 * Configure options::           List of all configure options.
-* Cross compilation::           Building on host X for target Y.
 * Coding conventions::          Conventions to follow.
 * Continuous integration::      Automated build testing.
 * install-tl::                  The @TL{} installer.
@@ -336,6 +335,7 @@
 * Build in parallel::   Simultaneous @code{make} processes.
 * Build distribution::  Making a distribution tarball.
 * Build one package::   Example of working on just one program.
+* Cross compilation::   Building on host X for target Y.
 @end menu
 
 
@@ -514,7 +514,154 @@
 explicitly specify the compilers to be used with the environment
 variables @code{CC}, @code{CXX}, and @code{OBJCXX}.
 
+ at node Cross compilation
+ at section Cross compilation
 
+ at cindex cross compilation
+In a cross compilation a @dfn{build} system is used to create
+binaries to be executed on a @dfn{host} system with different
+hardware and/or operating system.
+
+ at cindex native cross compilation
+In simple cases, the build system can execute binaries for the host
+system.  This typically occurs for bi-arch systems where, e.g.,
+ at code{i386-linux} binaries can run on @code{x86_64-linux} systems and
+ at code{win32} binaries can run on @code{win64} systems.  Although
+sometimes called ``native cross'', technically this is not cross
+compilation at all.  In most such cases it suffices to specify
+suitable compiler flags.  It might be useful to add the configure
+option @code{--build=@var{host}} to get the correct canonical host
+name, but note that this should @emph{not} be @code{--host=@var{host}}
+(@pxref{Hosts and Cross-Compilation,,, autoconf, GNU Autoconf}).
+
+In order to build, e.g., 32-bit binaries with @command{clang} on a 64-bit
+MacOSX system one could use:
+
+ at example
+TL_BUILD_ENV="CC='clang -arch i386' \
+  CXX='clang++ -arch i386' \
+  OBJCXX='clang++ -arch i386'" \
+  ./Build --build=i386-apple-darwin
+ at end example
+
+ at menu
+* Cross configuring::           Configuring for cross compilation.
+* Cross problems::              Cross compilation problems.
+ at end menu
+
+ at node Cross configuring
+ at subsection Cross configuring
+
+ at cindex cross compilation configuring
+ at cindex configuring, for cross compilation
+
+ at vindex --host=@var{host}
+ at vindex --build=@var{host}
+In a standard cross compilation, binaries for the host system cannot
+execute on the build system and it is necessary to specify the
+configure options @code{--host=@var{host}} and
+ at code{--build=@var{build}} with two different values.
+
+Building binaries requires suitable ``cross'' tools, e.g., compiler,
+linker, and archiver, and perhaps a ``cross'' version of
+ at code{pkg-config} and similar to locate host system libraries.
+Autoconf expects that these cross tools are given by their usual
+variables or found under their usual name prefixed with
+ at code{@var{host}-}.  Here a list of such tools and corresponding
+variables:
+
+ at example
+ at code{ar}                AR
+ at code{freetype-config}   FT2_CONFIG
+ at code{g++}               CXX
+ at code{gcc}               CC
+ at code{icu-config}        ICU_CONFIG
+ at code{objdump}           OBJDUMP
+ at code{pkg-config}        PKG_CONFIG
+ at code{ranlib}            RANLIB
+ at code{strip}             STRIP
+ at end example
+
+ at cindex @code{mingw32}
+ at noindent In order to, e.g., build @code{mingw32} binaries on
+ at code{x86_64-linux} with a cross compiler found as
+ at file{i386-pc-mingw32-gcc} one would specify
+
+ at example
+--host=i386-pc-mingw32 --build=x86_64-linux-gnu
+ at end example
+
+ at noindent or perhaps
+
+ at example
+--host=mingw32 --build=x86_64-linux CC=i386-pc-mingw32-gcc
+ at end example
+
+ at noindent but this latter, especially, might require adding @code{CXX} and others.
+
+Configure arguments such as @code{CFLAGS=@dots{}} refer to the cross
+compiler.  If necessary, you can specify compilers and flags for the
+few auxiliary C and C++ programs required for the build process as
+configure arguments
+
+ at vindex BUILDCC at r{,} BUILDCFLAGS at r{, @dots{}}
+ at example
+BUILDCC=@dots{}
+BUILDCPPFLAGS=@dots{}
+BUILDCFLAGS=@dots{}
+BUILDCXX=@dots{}
+BUILDCXXFLAGS=@dots{}
+BUILDLDFLAGS=@dots{}
+ at end example
+
+ at node Cross problems
+ at subsection Cross problems
+
+ at cindex cross compilation problems
+
+The fact that binaries for the host system cannot be executed on the
+build system causes some problems.
+
+One problem is that configure tests using @code{AC_RUN_IFELSE} can
+compile and link the test program but cannot execute it.  Such tests
+should be avoided if possible and otherwise must supply a pessimistic
+test result.
+
+ at pindex squeeze
+ at pindex web2c @r{program}
+ at cindex @code{freetype} cross compiling
+ at vindex CC_BUILD
+Another problem arises if the build process must execute some
+(auxiliary or installable) programs.  Auxiliary programs can be placed
+into a subdirectory that is configured natively as is done for
+ at file{texk/web2c/web2c}, @file{texk/dvipsk/squeeze}, and
+ at file{texk/xdvik/squeeze}.  The module @file{libs/freetype2} uses the
+value of @code{CC_BUILD}, @file{@var{build}-gcc}, @file{gcc}, or
+ at file{cc} as the compiler for the auxiliary program.
+
+ at cindex ICU cross compiling
+The situation for installable programs needed by the build process is
+somewhat different.  A rather expensive possibility, chosen for the ICU
+libraries in module @file{libs/icu}, is to first compile natively for
+the build system and in a second step to use these (uninstalled)
+programs during the cross compilation.
+
+ at pindex tangle
+ at pindex ctangle
+ at pindex otangle
+ at pindex tie
+This approach would also be possible for the tools such as
+ at file{tangle} used in the module @file{texk/web2c} to build the WEB
+programs, but that would require first building a native
+ at code{kpathsea} library.  To avoid this complication, cross
+compilation of the WEB or CWEB programs requires sufficiently recent
+installed versions of @file{tangle}, @file{ctangle}, @file{otangle},
+and @file{tie}.
+
+ at cindex @code{xindy} cross compiling impossible
+Building @code{xindy} requires running the host system @file{clisp}
+binary, thus cross compilation is not possible.
+
 @node Installing
 @chapter Installing
 
@@ -2196,157 +2343,6 @@
 @end vtable
 
 
- at node Cross compilation
- at chapter Cross compilation
-
- at cindex cross compilation
-In a cross compilation a @dfn{build} system is used to create
-binaries to be executed on a @dfn{host} system with different
-hardware and/or operating system.
-
- at cindex native cross compilation
-In simple cases, the build system can execute binaries for the host
-system.  This typically occurs for bi-arch systems where, e.g.,
- at code{i386-linux} binaries can run on @code{x86_64-linux} systems and
- at code{win32} binaries can run on @code{win64} systems.  Although
-sometimes called ``native cross'', technically this is not cross
-compilation at all.  In most such cases it suffices to specify
-suitable compiler flags.  It might be useful to add the configure
-option @code{--build=@var{host}} to get the correct canonical host
-name, but note that this should @emph{not} be @code{--host=@var{host}}
-(@pxref{Hosts and Cross-Compilation,,, autoconf, GNU Autoconf}).
-
-In order to build, e.g., 32-bit binaries with @command{clang} on a 64-bit
-MacOSX system one could use:
-
- at example
-TL_BUILD_ENV="CC='clang -arch i386' \
-  CXX='clang++ -arch i386' \
-  OBJCXX='clang++ -arch i386'" \
-  ./Build --build=i386-apple-darwin
- at end example
-
- at menu
-* Cross configuring::           Configuring for cross compilation.
-* Cross problems::              Cross compilation problems.
- at end menu
-
-
- at node Cross configuring
- at section Cross configuring
-
- at cindex cross compilation configuring
- at cindex configuring, for cross compilation
-
- at vindex --host=@var{host}
- at vindex --build=@var{host}
-In a standard cross compilation, binaries for the host system cannot
-execute on the build system and it is necessary to specify the
-configure options @code{--host=@var{host}} and
- at code{--build=@var{build}} with two different values.
-
-Building binaries requires suitable ``cross'' tools, e.g., compiler,
-linker, and archiver, and perhaps a ``cross'' version of
- at code{pkg-config} and similar to locate host system libraries.
-Autoconf expects that these cross tools are given by their usual
-variables or found under their usual name prefixed with
- at code{@var{host}-}.  Here a list of such tools and corresponding
-variables:
-
- at example
- at code{ar}                AR
- at code{freetype-config}   FT2_CONFIG
- at code{g++}               CXX
- at code{gcc}               CC
- at code{icu-config}        ICU_CONFIG
- at code{objdump}           OBJDUMP
- at code{pkg-config}        PKG_CONFIG
- at code{ranlib}            RANLIB
- at code{strip}             STRIP
- at end example
-
- at cindex @code{mingw32}
- at noindent In order to, e.g., build @code{mingw32} binaries on
- at code{x86_64-linux} with a cross compiler found as
- at file{i386-pc-mingw32-gcc} one would specify
-
- at example
---host=i386-pc-mingw32 --build=x86_64-linux-gnu
- at end example
-
- at noindent or perhaps
-
- at example
---host=mingw32 --build=x86_64-linux CC=i386-pc-mingw32-gcc
- at end example
-
- at noindent but this latter, especially, might require adding @code{CXX} and others.
-
-Configure arguments such as @code{CFLAGS=@dots{}} refer to the cross
-compiler.  If necessary, you can specify compilers and flags for the
-few auxiliary C and C++ programs required for the build process as
-configure arguments
-
- at vindex BUILDCC at r{,} BUILDCFLAGS at r{, @dots{}}
- at example
-BUILDCC=@dots{}
-BUILDCPPFLAGS=@dots{}
-BUILDCFLAGS=@dots{}
-BUILDCXX=@dots{}
-BUILDCXXFLAGS=@dots{}
-BUILDLDFLAGS=@dots{}
- at end example
-
-
- at node Cross problems
- at section Cross problems
-
- at cindex cross compilation problems
-
-The fact that binaries for the host system cannot be executed on the
-build system causes some problems.
-
-One problem is that configure tests using @code{AC_RUN_IFELSE} can
-compile and link the test program but cannot execute it.  Such tests
-should be avoided if possible and otherwise must supply a pessimistic
-test result.
-
- at pindex squeeze
- at pindex web2c @r{program}
- at cindex @code{freetype} cross compiling
- at vindex CC_BUILD
-Another problem arises if the build process must execute some
-(auxiliary or installable) programs.  Auxiliary programs can be placed
-into a subdirectory that is configured natively as is done for
- at file{texk/web2c/web2c}, @file{texk/dvipsk/squeeze}, and
- at file{texk/xdvik/squeeze}.  The module @file{libs/freetype2} uses the
-value of @code{CC_BUILD}, @file{@var{build}-gcc}, @file{gcc}, or
- at file{cc} as the compiler for the auxiliary program.
-
- at cindex ICU cross compiling
-The situation for installable programs needed by the build process is
-somewhat different.  A rather expensive possibility, chosen for the ICU
-libraries in module @file{libs/icu}, is to first compile natively for
-the build system and in a second step to use these (uninstalled)
-programs during the cross compilation.
-
- at pindex tangle
- at pindex ctangle
- at pindex otangle
- at pindex tie
-This approach would also be possible for the tools such as
- at file{tangle} used in the module @file{texk/web2c} to build the WEB
-programs, but that would require first building a native
- at code{kpathsea} library.  To avoid this complication, cross
-compilation of the WEB or CWEB programs requires sufficiently recent
-installed versions of @file{tangle}, @file{ctangle}, @file{otangle},
-and @file{tie}.
-
- at cindex @code{xindy} cross compiling impossible
-Building @code{xindy} requires running the host system @file{clisp}
-binary, thus cross compilation is not possible.
-
-
 @node Coding conventions
 @chapter Coding conventions
 
@@ -2498,8 +2494,15 @@
 is updated (currently) at 30 minute intervals, and only the last
 commit pushed is tested on Travis-CI.
 
- at subheading Transfer from Subversion to Github
+ at menu
+* Transfer from Subversion to Github::
+* Automatic update of the Git mirror::
+* CI testing on Travis-CI::
+ at end menu
 
+ at node Transfer from Subversion to Github
+ at section Transfer from Subversion to Github
+
 git-svn (@url{https://git-scm.com/docs/git-svn}) is used to check out
 the subtree @code{Build/source} of the Subversion repository. The
 author index file used is not maintained in either Git or Subversion
@@ -2549,7 +2552,8 @@
 Subversion, back to @code{master} on @code{texlive.info}, and from
 there to Github.
 
- at subheading Automatic update of the Git mirror
+ at node Automatic update of the Git mirror
+ at section Automatic update of the Git mirror
 
 @emph{admin} has installed a cron job on @code{texlive.info} running
 every 30 minute which essentially runs @code{git svn rebase} and
@@ -2558,7 +2562,8 @@
 the @code{master} branch with them, the second one pushes changes (if
 available) to Github.
 
- at subheading CI testing on Travis-CI
+ at node CI testing on Travis-CI
+ at section CI testing on Travis-CI
 
 @pindex .travis.yml
 The @code{source} tree of @TL{} contains a top-level file

Modified: branches/stable/source/src/libs/README
===================================================================
--- branches/stable/source/src/libs/README	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/README	2018-04-22 15:47:12 UTC (rev 796)
@@ -1,4 +1,4 @@
-$Id: README 46585 2018-02-10 06:43:26Z kakuto $
+$Id: README 47326 2018-04-06 15:25:15Z karl $
 Public domain.  Originally created by Karl Berry, 2005.
 
 Libraries we compile for TeX Live.
@@ -21,13 +21,13 @@
 gmp 6.1.2 - checked 16dec16
   http://ftp.gnu.org/gnu/gmp/
 
-graphite2 1.3.10 - checked 20jun17
+graphite2 1.3.11 - checked 05mar18
   http://sourceforge.net/projects/silgraphite/files/graphite2/
 
-harfbuzz 1.7.5 - checked 31jan18
+harfbuzz 1.7.6 - checked 07mar18
   http://www.freedesktop.org/software/harfbuzz/release/
 
-icu 60.2 - checked 11jan18
+icu 61.1 - checked 29mar18
   http://download.icu-project.org/files/icu4c/
 
 libpaper 1.1.24+nmu2 - checked 24oct13
@@ -49,7 +49,7 @@
 pixman 0.34.0 - checked 04feb16
   http://cairographics.org/releases/
 
-poppler 0.62.0 - checked 9jan18
+poppler 0.63.0 - checked 18mar18
   http://poppler.freedesktop.org/ - used by luatex and xetex
   (requires C++11)
 
@@ -66,5 +66,5 @@
 zlib 1.2.11 - checked 15jan17
   http://www.zlib.net/ - used by many
 
-zziplib 0.13.68 - checked 06feb18
-  http://zziplib.sourceforge.net/ - used by luatex
+zziplib 0.13.69 - checked 18mar18
+  https://github.com/gdraheim/zziplib/archive/v0.13.69.tar.gz

Modified: branches/stable/source/src/libs/poppler/ChangeLog
===================================================================
--- branches/stable/source/src/libs/poppler/ChangeLog	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/ChangeLog	2018-04-22 15:47:12 UTC (rev 796)
@@ -1,3 +1,15 @@
+2018-03-18  Akira Kakuto  <kakuto at fuk.kindai.ac.jp>
+
+	Import poppler-0.63.0.
+	* Makefile.am, version.ac: Adjust.
+
+2018-03-14  Luigi Scarso  <luigi.scarso at gmail.com>
+
+	* configure.ac (HAVE_DCT_DECODER, HAVE_JPX_DECODER): hardwire to 1,
+	instead of requiring --enable.
+	Original report from Jose Manuel,
+	http://tug.org/pipermail/tex-live/2018-March/041158.html
+
 2018-01-08  Karl Berry  <karl at freefriends.org>
 
 	Import poppler-0.62.0.

Modified: branches/stable/source/src/libs/poppler/Makefile.am
===================================================================
--- branches/stable/source/src/libs/poppler/Makefile.am	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/Makefile.am	2018-04-22 15:47:12 UTC (rev 796)
@@ -1,4 +1,4 @@
-## $Id: Makefile.am 46370 2018-01-18 23:05:30Z lscarso $
+## $Id: Makefile.am 47014 2018-03-18 21:59:37Z kakuto $
 ## Proxy Makefile.am to build poppler for TeX Live.
 ##
 ##   Copyright 2016-2018 Karl Berry <tex-live at tug.org>
@@ -122,6 +122,7 @@
 	@POPPLER_TREE@/poppler/StructTreeRoot.cc \
 	@POPPLER_TREE@/poppler/UTF.cc \
 	@POPPLER_TREE@/poppler/UnicodeMap.cc \
+	@POPPLER_TREE@/poppler/UnicodeMapFuncs.cc \
 	@POPPLER_TREE@/poppler/UnicodeTypeTable.cc \
 	@POPPLER_TREE@/poppler/ViewerPreferences.cc \
 	@POPPLER_TREE@/poppler/XRef.cc \

Modified: branches/stable/source/src/libs/poppler/Makefile.in
===================================================================
--- branches/stable/source/src/libs/poppler/Makefile.in	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/Makefile.in	2018-04-22 15:47:12 UTC (rev 796)
@@ -190,6 +190,7 @@
 	@POPPLER_TREE@/poppler/StructTreeRoot.$(OBJEXT) \
 	@POPPLER_TREE@/poppler/UTF.$(OBJEXT) \
 	@POPPLER_TREE@/poppler/UnicodeMap.$(OBJEXT) \
+	@POPPLER_TREE@/poppler/UnicodeMapFuncs.$(OBJEXT) \
 	@POPPLER_TREE@/poppler/UnicodeTypeTable.$(OBJEXT) \
 	@POPPLER_TREE@/poppler/ViewerPreferences.$(OBJEXT) \
 	@POPPLER_TREE@/poppler/XRef.$(OBJEXT) \
@@ -531,6 +532,7 @@
 	@POPPLER_TREE@/poppler/StructTreeRoot.cc \
 	@POPPLER_TREE@/poppler/UTF.cc \
 	@POPPLER_TREE@/poppler/UnicodeMap.cc \
+	@POPPLER_TREE@/poppler/UnicodeMapFuncs.cc \
 	@POPPLER_TREE@/poppler/UnicodeTypeTable.cc \
 	@POPPLER_TREE@/poppler/ViewerPreferences.cc \
 	@POPPLER_TREE@/poppler/XRef.cc \
@@ -852,6 +854,9 @@
 @POPPLER_TREE@/poppler/UnicodeMap.$(OBJEXT):  \
 	@POPPLER_TREE@/poppler/$(am__dirstamp) \
 	@POPPLER_TREE@/poppler/$(DEPDIR)/$(am__dirstamp)
+ at POPPLER_TREE@/poppler/UnicodeMapFuncs.$(OBJEXT):  \
+	@POPPLER_TREE@/poppler/$(am__dirstamp) \
+	@POPPLER_TREE@/poppler/$(DEPDIR)/$(am__dirstamp)
 @POPPLER_TREE@/poppler/UnicodeTypeTable.$(OBJEXT):  \
 	@POPPLER_TREE@/poppler/$(am__dirstamp) \
 	@POPPLER_TREE@/poppler/$(DEPDIR)/$(am__dirstamp)
@@ -954,6 +959,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@@POPPLER_TREE@/poppler/$(DEPDIR)/StructTreeRoot.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@@POPPLER_TREE@/poppler/$(DEPDIR)/UTF.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@@POPPLER_TREE@/poppler/$(DEPDIR)/UnicodeMap.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote@@POPPLER_TREE@/poppler/$(DEPDIR)/UnicodeMapFuncs.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@@POPPLER_TREE@/poppler/$(DEPDIR)/UnicodeTypeTable.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@@POPPLER_TREE@/poppler/$(DEPDIR)/ViewerPreferences.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@@POPPLER_TREE@/poppler/$(DEPDIR)/XRef.Po at am__quote@

Modified: branches/stable/source/src/libs/poppler/TLpatches/ChangeLog
===================================================================
--- branches/stable/source/src/libs/poppler/TLpatches/ChangeLog	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/TLpatches/ChangeLog	2018-04-22 15:47:12 UTC (rev 796)
@@ -1,3 +1,16 @@
+2018-04-01  Mojca Miklavec <mojca.miklavec.lists at gmail.com>
+
+	* patch-03-time: Adapted.
+	* patch-04-ctime: Removed.
+
+2018-03-20  Akira Kakuto  <kakuto at fuk.kindai.ac.jp>
+
+	* patch-05-w32: Added to compile gfile.cc on Windows.
+
+2018-03-18  Akira Kakuto  <kakuto at fuk.kindai.ac.jp>
+
+	* Import poppler-0.63.0.
+
 2018-01-15  Karl Berry  <karl at tug.org>
 
 	* patch-04-ctime: add.

Modified: branches/stable/source/src/libs/poppler/TLpatches/TL-Changes
===================================================================
--- branches/stable/source/src/libs/poppler/TLpatches/TL-Changes	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/TLpatches/TL-Changes	2018-04-22 15:47:12 UTC (rev 796)
@@ -1,9 +1,12 @@
-Changes applied to the poppler-0.62.0 tree as obtained from:
+Changes applied to the poppler-0.63.0 tree as obtained from:
 	http://poppler.freedesktop.org/
 
 Removed unused dirs:
-	cmake cpp glib m4 qt4 qt5 test utils
+	cmake cpp glib qt5 test utils
 
+Removed unused files in splash:
+	only SplashTypes.h is used
+
 General idea:
 update version.ac
 mv poppler-src poppler-prev

Added: branches/stable/source/src/libs/poppler/TLpatches/patch-03-time
===================================================================
--- branches/stable/source/src/libs/poppler/TLpatches/patch-03-time	                        (rev 0)
+++ branches/stable/source/src/libs/poppler/TLpatches/patch-03-time	2018-04-22 15:47:12 UTC (rev 796)
@@ -0,0 +1,55 @@
+https://bugs.freedesktop.org/show_bug.cgi?id=105766
+
+diff -ur poppler-0.63.0/goo/gfile.cc poppler-src/goo/gfile.cc
+--- poppler-0.63.0/goo/gfile.cc
++++ poppler-src/goo/gfile.cc
+@@ -34,9 +34,7 @@
+ 
+ #include <config.h>
+ 
+-#ifdef _WIN32
+-#  include <time.h>
+-#else
++#ifndef _WIN32
+ #  if defined(MACOS)
+ #    include <sys/stat.h>
+ #  elif !defined(ACORN)
+@@ -44,7 +42,6 @@
+ #    include <sys/stat.h>
+ #    include <fcntl.h>
+ #  endif
+-#  include <time.h>
+ #  include <limits.h>
+ #  include <string.h>
+ #  if !defined(VMS) && !defined(ACORN) && !defined(MACOS)
+diff -ur poppler-0.63.0/goo/gfile.h poppler-src/goo/gfile.h
+--- poppler-0.63.0/goo/gfile.h
++++ poppler-src/goo/gfile.h
+@@ -37,6 +37,7 @@
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <stddef.h>
++#include <time.h>
+ extern "C" {
+ #if defined(_WIN32)
+ #  include <sys/stat.h>
+@@ -49,8 +50,6 @@
+ #    include <windows.h>
+ #  endif
+ #elif defined(ACORN)
+-#elif defined(MACOS)
+-#  include <ctime.h>
+ #else
+ #  include <unistd.h>
+ #  include <sys/types.h>
+diff -ur poppler-0.63.0/poppler/Form.h poppler-src/poppler/Form.h
+--- poppler-0.63.0/poppler/Form.h
++++ poppler-src/poppler/Form.h
+@@ -33,6 +33,7 @@
+ 
+ #include <set>
+ #include <vector>
++#include <ctime>
+ 
+ class GooString;
+ class Array;

Deleted: branches/stable/source/src/libs/poppler/TLpatches/patch-04-ctime
===================================================================
--- branches/stable/source/src/libs/poppler/TLpatches/patch-04-ctime	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/TLpatches/patch-04-ctime	2018-04-22 15:47:12 UTC (rev 796)
@@ -1,13 +0,0 @@
-	To make time_t work on FreeBSD 11.1, per Mojca.
-	http://tug.org/pipermail/tlbuild/2018q1/003931.html
-	
---- Form.h	(revision 46316)
-+++ Form.h	(working copy)
-@@ -31,6 +31,7 @@
- 
- #include <set>
- #include <vector>
-+#include <ctime>
- 
- class GooString;
- class Array;

Added: branches/stable/source/src/libs/poppler/TLpatches/patch-05-w32
===================================================================
--- branches/stable/source/src/libs/poppler/TLpatches/patch-05-w32	                        (rev 0)
+++ branches/stable/source/src/libs/poppler/TLpatches/patch-05-w32	2018-04-22 15:47:12 UTC (rev 796)
@@ -0,0 +1,22 @@
+$ diff -u gfile.cc.orig gfile.cc 
+--- gfile.cc.orig	2018-03-21 13:21:12.635648536 +0100
++++ gfile.cc	2018-03-21 12:16:05.000000000 +0100
+@@ -65,6 +65,8 @@
+ #define PATH_MAX 1024
+ #endif
+ 
++#ifndef _WIN32
++
+ namespace {
+ 
+ template< typename... >
+@@ -99,6 +101,8 @@
+ 
+ }
+ 
++#endif
++
+ //------------------------------------------------------------------------
+ 
+ GooString *getCurrentDir() {
+

Modified: branches/stable/source/src/libs/poppler/config.h.in
===================================================================
--- branches/stable/source/src/libs/poppler/config.h.in	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/config.h.in	2018-04-22 15:47:12 UTC (rev 796)
@@ -6,7 +6,7 @@
 /* define if the compiler supports basic C++11 syntax */
 #undef HAVE_CXX11
 
-/* Do we have any DCT decoder?. */
+/* Do we have any DCT decoder? */
 #undef HAVE_DCT_DECODER
 
 /* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
@@ -28,7 +28,7 @@
 /* Define to 1 if you have the <inttypes.h> header file. */
 #undef HAVE_INTTYPES_H
 
-/* Do we have any JPX decoder?. */
+/* Do we have any JPX decoder? */
 #undef HAVE_JPX_DECODER
 
 /* Define to 1 if you have the `localtime_r' function. */
@@ -64,6 +64,9 @@
 /* Define to 1 if you have the `strtok_r' function. */
 #undef HAVE_STRTOK_R
 
+/* Define to 1 if `st_mtim' is a member of `struct stat'. */
+#undef HAVE_STRUCT_STAT_ST_MTIM
+
 /* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
    */
 #undef HAVE_SYS_DIR_H

Modified: branches/stable/source/src/libs/poppler/configure
===================================================================
--- branches/stable/source/src/libs/poppler/configure	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/configure	2018-04-22 15:47:12 UTC (rev 796)
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for poppler (TeX Live) 0.62.0.
+# Generated by GNU Autoconf 2.69 for poppler (TeX Live) 0.63.0.
 #
 # Report bugs to <tex-k at tug.org>.
 #
@@ -580,8 +580,8 @@
 # Identity of this package.
 PACKAGE_NAME='poppler (TeX Live)'
 PACKAGE_TARNAME='poppler--tex-live-'
-PACKAGE_VERSION='0.62.0'
-PACKAGE_STRING='poppler (TeX Live) 0.62.0'
+PACKAGE_VERSION='0.63.0'
+PACKAGE_STRING='poppler (TeX Live) 0.63.0'
 PACKAGE_BUGREPORT='tex-k at tug.org'
 PACKAGE_URL=''
 
@@ -750,8 +750,6 @@
 enable_multithreaded
 enable_exceptions
 enable_fixedpoint
-enable_dctdecoder
-enable_libopenjpeg
 enable_largefile
 with_system_zlib
 with_zlib_includes
@@ -1309,7 +1307,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures poppler (TeX Live) 0.62.0 to adapt to many kinds of systems.
+\`configure' configures poppler (TeX Live) 0.63.0 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1376,7 +1374,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of poppler (TeX Live) 0.62.0:";;
+     short | recursive ) echo "Configuration of poppler (TeX Live) 0.63.0:";;
    esac
   cat <<\_ACEOF
 
@@ -1401,8 +1399,6 @@
   --enable-exceptions     use C++ exceptions
   --enable-fixedpoint     use fixed point (instead of floating point)
                           arithmetic
-  --enable-dctdecoder     use dctdecoder
-  --enable-libopenjpeg    use openjpeg decoder
   --disable-largefile     omit support for large files
 
 Optional Packages:
@@ -1491,7 +1487,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-poppler (TeX Live) configure 0.62.0
+poppler (TeX Live) configure 0.63.0
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2077,11 +2073,68 @@
   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_func
+
+# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES
+# ----------------------------------------------------
+# Tries to find if the field MEMBER exists in type AGGR, after including
+# INCLUDES, setting cache variable VAR accordingly.
+ac_fn_c_check_member ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5
+$as_echo_n "checking for $2.$3... " >&6; }
+if eval \${$4+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$5
+int
+main ()
+{
+static $2 ac_aggr;
+if (ac_aggr.$3)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$4=yes"
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$5
+int
+main ()
+{
+static $2 ac_aggr;
+if (sizeof ac_aggr.$3)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$4=yes"
+else
+  eval "$4=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$4
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_member
 cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by poppler (TeX Live) $as_me 0.62.0, which was
+It was created by poppler (TeX Live) $as_me 0.63.0, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -4004,7 +4057,7 @@
 
 # Define the identity of the package.
  PACKAGE='poppler--tex-live-'
- VERSION='0.62.0'
+ VERSION='0.63.0'
 
 
 # Some tools Automake needs.
@@ -7024,29 +7077,17 @@
 fi
 
 
-# Check whether --enable-dctdecoder was given.
-if test "${enable_dctdecoder+set}" = set; then :
-  enableval=$enable_dctdecoder; if test "x$enableval" = xlibjpeg; then
 
+# For TL, we just hardware DCT/JPX_DECODER to on.
+
 $as_echo "#define HAVE_DCT_DECODER 1" >>confdefs.h
 
-fi
 
-fi
 
-
-# Check whether --enable-libopenjpeg was given.
-if test "${enable_libopenjpeg+set}" = set; then :
-  enableval=$enable_libopenjpeg; if test "x$enableval" = xopenjpeg2; then
-
 $as_echo "#define HAVE_JPX_DECODER 1" >>confdefs.h
 
-fi
 
-fi
 
-
-
 for ac_header in strings.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "strings.h" "ac_cv_header_strings_h" "$ac_includes_default"
@@ -7231,6 +7272,18 @@
 fi
 done
 
+
+ac_fn_c_check_member "$LINENO" "struct stat" "st_mtim" "ac_cv_member_struct_stat_st_mtim" "$ac_includes_default"
+if test "x$ac_cv_member_struct_stat_st_mtim" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_STAT_ST_MTIM 1
+_ACEOF
+
+
+fi
+
+
 # Check whether --enable-largefile was given.
 if test "${enable_largefile+set}" = set; then :
   enableval=$enable_largefile;
@@ -7594,7 +7647,7 @@
 
 
 cat >>confdefs.h <<_ACEOF
-#define POPPLER_VERSION "0.62.0"
+#define POPPLER_VERSION "0.63.0"
 _ACEOF
 
 
@@ -8288,7 +8341,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by poppler (TeX Live) $as_me 0.62.0, which was
+This file was extended by poppler (TeX Live) $as_me 0.63.0, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -8354,7 +8407,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-poppler (TeX Live) config.status 0.62.0
+poppler (TeX Live) config.status 0.63.0
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 

Modified: branches/stable/source/src/libs/poppler/configure.ac
===================================================================
--- branches/stable/source/src/libs/poppler/configure.ac	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/configure.ac	2018-04-22 15:47:12 UTC (rev 796)
@@ -1,4 +1,4 @@
-dnl $Id: configure.ac 46373 2018-01-18 23:12:02Z karl $
+dnl $Id: configure.ac 47052 2018-03-20 22:41:25Z kakuto $
 dnl Process this file with autoconf to produce a configure script.
 dnl
 dnl   Copyright 2018 Karl Berry <tex-live at tug.org>
@@ -69,22 +69,28 @@
 fi
 ])
 
-AC_ARG_ENABLE([dctdecoder],
-              AS_HELP_STRING([--enable-dctdecoder],
-                             [use dctdecoder]),
-              [if test "x$enableval" = xlibjpeg; then
-  AC_DEFINE([HAVE_DCT_DECODER], 1, [Do we have any DCT decoder?.])
-fi
-])
 
-AC_ARG_ENABLE([libopenjpeg],
-              AS_HELP_STRING([--enable-libopenjpeg],
-                             [use openjpeg decoder]),
-              [if test "x$enableval" = xopenjpeg2; then
-  AC_DEFINE([HAVE_JPX_DECODER], 1, [Do we have any JPX decoder?.])
-fi
-])
+# For TL, we just hardware DCT/JPX_DECODER to on.
+AC_DEFINE([HAVE_DCT_DECODER], 1, [Do we have any DCT decoder?])
+dnl
+dnl AC_ARG_ENABLE([dctdecoder],
+dnl               AS_HELP_STRING([--enable-dctdecoder],
+dnl                             [use dctdecoder]),
+dnl              [if test "x$enableval" = xlibjpeg; then
+dnl  AC_DEFINE([HAVE_DCT_DECODER], 1, [Do we have any DCT decoder?])
+dnl fi
+dnl ])
 
+AC_DEFINE([HAVE_JPX_DECODER], 1, [Do we have any JPX decoder?])
+dnl
+dnl AC_ARG_ENABLE([libopenjpeg],
+dnl              AS_HELP_STRING([--enable-libopenjpeg],
+dnl                              [use openjpeg decoder]),
+dnl               [if test "x$enableval" = xopenjpeg2; then
+dnl   AC_DEFINE([HAVE_JPX_DECODER], 1, [Do we have any JPX decoder?])
+dnl fi
+dnl ])
+
 dnl **** Checks for header files ****
 
 AC_CHECK_HEADERS([strings.h])
@@ -93,6 +99,10 @@
 dnl Checks for library functions (from goo/glibc.h and more).
 AC_CHECK_FUNCS([gettimeofday gmtime_r localtime_r mkstemp popen rand_r \
                 timegm strtok_r])
+
+dnl Check for struct stat needed by goo/gfile.c
+AC_CHECK_MEMBERS([struct stat.st_mtim])
+
 AC_SYS_LARGEFILE
 AC_FUNC_FSEEKO
 AC_CHECK_FUNC([ftell64], [AC_CHECK_FUNCS([fseek64])])

Modified: branches/stable/source/src/libs/poppler/poppler-src/CMakeLists.txt
===================================================================
--- branches/stable/source/src/libs/poppler/poppler-src/CMakeLists.txt	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/poppler-src/CMakeLists.txt	2018-04-22 15:47:12 UTC (rev 796)
@@ -30,7 +30,7 @@
 endif()
 
 set(POPPLER_MAJOR_VERSION "0")
-set(POPPLER_MINOR_VERSION "62")
+set(POPPLER_MINOR_VERSION "63")
 set(POPPLER_MICRO_VERSION "0")
 set(POPPLER_VERSION "${POPPLER_MAJOR_VERSION}.${POPPLER_MINOR_VERSION}.${POPPLER_MICRO_VERSION}")
 
@@ -378,6 +378,7 @@
   poppler/StructTreeRoot.cc
   poppler/StructElement.cc
   poppler/UnicodeMap.cc
+  poppler/UnicodeMapFuncs.cc
   poppler/UnicodeTypeTable.cc
   poppler/UTF.cc
   poppler/XRef.cc
@@ -482,7 +483,7 @@
 else()
 add_library(poppler ${poppler_SRCS})
 endif()
-set_target_properties(poppler PROPERTIES VERSION 73.0.0 SOVERSION 73)
+set_target_properties(poppler PROPERTIES VERSION 74.0.0 SOVERSION 74)
 if(MINGW)
     get_target_property(POPPLER_SOVERSION poppler SOVERSION)
     set_target_properties(poppler PROPERTIES SUFFIX "-${POPPLER_SOVERSION}${CMAKE_SHARED_LIBRARY_SUFFIX}")
@@ -755,7 +756,7 @@
     COMMAND
         COMMAND git log --stat | fmt --split-only > ${CMAKE_BINARY_DIR}/ChangeLog
         COMMAND git archive --prefix=${ARCHIVE_NAME}/ HEAD > ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar
-        COMMAND tar -C ${CMAKE_BINARY_DIR} -rf ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar ChangeLog --transform='s,,${ARCHIVE_NAME}/,'
-        COMMAND tar -C ${CMAKE_BINARY_DIR} -rf ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar glib/reference/html --transform='s,,${ARCHIVE_NAME}/,'
+        COMMAND tar -C ${CMAKE_BINARY_DIR} -rf ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar ChangeLog --transform='s,,${ARCHIVE_NAME}/,' --owner root:0 --group root:0
+        COMMAND tar -C ${CMAKE_BINARY_DIR} -rf ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar glib/reference/html --transform='s,,${ARCHIVE_NAME}/,' --owner root:0 --group root:0
         COMMAND xz -9 ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar
     WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})

Modified: branches/stable/source/src/libs/poppler/poppler-src/ChangeLog
===================================================================
--- branches/stable/source/src/libs/poppler/poppler-src/ChangeLog	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/poppler-src/ChangeLog	2018-04-22 15:47:12 UTC (rev 796)
@@ -1,3 +1,1318 @@
+commit f26285f361478219ea9d3c6de1529ecd5ff96ac9
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Sun Mar 18 19:23:49 2018 +0100
+
+    0.63
+
+ CMakeLists.txt         |  4 ++--
+ NEWS                   | 60
+ ++++++++++++++++++++++++++++++++++++++++++++++++++
+ cpp/CMakeLists.txt     |  2 +-
+ cpp/Doxyfile           |  2 +-
+ qt5/src/CMakeLists.txt |  2 +-
+ qt5/src/Doxyfile       |  2 +-
+ 6 files changed, 66 insertions(+), 6 deletions(-)
+
+commit 8b2079b7250e037599f6640539f8107d93314919
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Sun Mar 18 19:01:40 2018 +0100
+
+    Update copyrights
+
+ poppler/CairoOutputDev.cc | 2 +-
+ poppler/CairoOutputDev.h  | 2 +-
+ poppler/GfxFont.cc        | 2 +-
+ poppler/GfxFont.h         | 2 +-
+ poppler/Object.h          | 2 +-
+ poppler/StructElement.cc  | 1 +
+ poppler/StructTreeRoot.cc | 2 +-
+ poppler/StructTreeRoot.h  | 1 +
+ poppler/TextOutputDev.cc  | 2 +-
+ utils/pdfinfo.cc          | 2 +-
+ 10 files changed, 10 insertions(+), 8 deletions(-)
+
+commit 41321580f0a13309e5de44eb42851e3c82a5ef8f
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Sun Mar 4 09:17:00 2018 +0100
+
+    Use the detection idiom to handle the non-standard struct stat field
+    name for high-resolution mtime on Mac OS X.
+
+ goo/gfile.cc | 40 +++++++++++++++++++++++++++++++++++++---
+ 1 file changed, 37 insertions(+), 3 deletions(-)
+
+commit b14baefb406b8f08f0702edd686ebc7698cb7f15
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Mon Feb 12 08:09:00 2018 +0100
+
+    Explicitly anchor destructor of text_box_data to avoid linker errors
+    using Clang on Mac OS X.
+
+ cpp/poppler-page.cpp  | 3 +++
+ cpp/poppler-private.h | 3 +++
+ 2 files changed, 6 insertions(+)
+
+commit 4afe2fb10ab969bfd9895c0ba9d4990c5881b451
+Author: Carlos Garcia Campos <carlosgc at gnome.org>
+Date:   Sun Mar 4 10:28:57 2018 +0100
+
+    cairo: use GOOD instead of BEST as the default cairo filter for
+    scaling
+
+    The quality is good enough and the performance is much better.
+
+    https://bugs.freedesktop.org/show_bug.cgi?id=103136
+
+ poppler/CairoOutputDev.cc | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+commit 41c61811fdd6efe2bef34d2ce26520fc6b3c4237
+Author: Jason Crain <jason at inspiresomeone.us>
+Date:   Fri Feb 23 23:21:03 2018 -0600
+
+    TextPage: Add horizontal scaling to font matrix
+
+    Drawing the text selection sometimes draws text reversed or expanded.
+    This is because the while the current font transformation matrix is
+    saved, the horizontal scaling is not. Include the effect of the
+    horizontal scaling in the transformation matrix.
+
+    https://bugs.freedesktop.org/show_bug.cgi?id=105259
+
+ poppler/TextOutputDev.cc | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 2740b3aca81a6a8c690540fc141e5923a1fff460
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Tue Feb 27 00:47:04 2018 +0100
+
+    cpp: Add since
+
+ cpp/poppler-page.h | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit 42a6b8651f040f0960802e705b1aea82a956a63b
+Author: suzuki toshiya <mpsuzuki at hiroshima-u.ac.jp>
+Date:   Tue Feb 27 00:46:18 2018 +0100
+
+    cpp: Add page::text_list
+
+ cpp/poppler-page.cpp       | 91
+ ++++++++++++++++++++++++++++++++++++++++++++++
+ cpp/poppler-page.h         | 55 ++++++++++++++++++++++++++++
+ cpp/poppler-private.h      |  9 +++++
+ cpp/tests/poppler-dump.cpp | 34 +++++++++++++++++
+ 4 files changed, 189 insertions(+)
+
+commit e25d4af6ed9b254db3096a2e483798734296376d
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Sun Feb 18 09:43:58 2018 +0100
+
+    Fix warnings due to unhandled link types in XML serialization of
+    annotations code in the Qt5 frontend.
+
+ qt5/src/poppler-annotation.cc | 20 ++++++++++++++------
+ 1 file changed, 14 insertions(+), 6 deletions(-)
+
+commit e015ab97c1ee3a4ea386ccc86385aad458827d96
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Sun Feb 18 09:42:58 2018 +0100
+
+    Fix warnings due to the use of deprecated overloads of
+    Poppler::Page::Search in tests of Qt5 frontend.
+
+ qt5/tests/check_search.cpp       | 38
+ +++++++++++++++++++-------------------
+ qt5/tests/stress-threads-qt5.cpp | 10 +++++-----
+ 2 files changed, 24 insertions(+), 24 deletions(-)
+
+commit 732903ecf1bdb085cac36eb29d330a7970670064
+Author: Adam Reichold <adam.reichold at t-online.de>
+Date:   Sun Feb 18 09:42:04 2018 +0100
+
+    Fix buffer size warning due to missing space for null terminator
+    in pdfseparate.
+
+ utils/pdfseparate.cc | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit 791e024656212c65d798cb69a134cdd3e30cc79e
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Sun Feb 18 23:05:59 2018 +0100
+
+    Make it work with newer gtk-doc
+
+    Hopefully still works with older versions
+
+    Bug #105075
+
+ gtkdoc.py | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 948d392d9acc3d82b86a260c952095a603fe767f
+Author: William Bader <william at newspapersystems.com>
+Date:   Sun Feb 18 22:06:02 2018 +0100
+
+    Add python3 support to gtkdoc.py
+
+ gtkdoc.py | 19 +++++++++++++------
+ 1 file changed, 13 insertions(+), 6 deletions(-)
+
+commit 73130ae1125c86ebd0ee504d0681d9911ff2cfbd
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Wed Feb 14 17:40:23 2018 +0100
+
+    SplashGouraudPattern: Remove mode member variable
+
+    We don't need it anymore, was introduced in the initial overprint
+    implementation and was forgotten to be removed when merging xpdf 3.03
+
+ poppler/SplashOutputDev.cc | 9 ++-------
+ poppler/SplashOutputDev.h  | 5 ++---
+ 2 files changed, 4 insertions(+), 10 deletions(-)
+
+commit 37efb98d77c14c27a22806ec676c13f0a8b99490
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Wed Feb 14 17:43:41 2018 +0100
+
+    SplashOutputDev:: Remove unused maskBitmap member
+
+ poppler/SplashOutputDev.h | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit e3cece1bfc00083637f709f7647b4711b5c6a084
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Fri Feb 2 23:17:11 2018 +0100
+
+    Fix some -Wshadow warnings
+
+    More to come, -Wshadow is interesting but if we enable it we still
+    get too many warnings for it to be useful
+
+ cpp/tests/poppler-dump.cpp     |  6 ++--
+ poppler/CachedFile.cc          |  8 +++---
+ poppler/CairoFontEngine.cc     | 64
+ +++++++++++++++++++++---------------------
+ poppler/CairoOutputDev.cc      |  5 ++--
+ poppler/CairoOutputDev.h       |  4 +--
+ poppler/Decrypt.cc             |  6 ++--
+ poppler/FontInfo.cc            |  5 ++--
+ poppler/Gfx.cc                 |  2 +-
+ poppler/GfxFont.cc             | 12 ++++----
+ poppler/GfxState.cc            | 31 +++++++++-----------
+ poppler/JBIG2Stream.cc         | 11 ++++----
+ poppler/PDFDoc.cc              |  4 +--
+ poppler/StructElement.cc       |  6 ++--
+ poppler/StructTreeRoot.cc      |  8 +++---
+ poppler/TextOutputDev.h        |  4 +--
+ poppler/XRef.cc                |  4 +--
+ qt5/src/ArthurOutputDev.cc     |  4 +--
+ qt5/src/poppler-annotation.cc  | 18 ++++++------
+ qt5/src/poppler-media.cc       |  4 +--
+ qt5/src/poppler-page.cc        | 24 ++++++++--------
+ qt5/tests/test-poppler-qt5.cpp | 10 ++++---
+ splash/SplashFTFontFile.cc     |  5 ++--
+ utils/ImageOutputDev.cc        |  8 +++---
+ utils/pdfinfo.cc               |  7 ++---
+ utils/pdftocairo.cc            | 22 +++++++--------
+ utils/pdftoppm.cc              | 20 ++++++-------
+ 26 files changed, 149 insertions(+), 153 deletions(-)
+
+commit 8cfe91ae51fa50e66217c6bbcb236ec3a267e45e
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Fri Feb 2 23:22:33 2018 +0100
+
+    CairoOutputDev: Remove two unused member variables
+
+ poppler/CairoOutputDev.h | 2 --
+ 1 file changed, 2 deletions(-)
+
+commit b1016f574ac63fa269ca5125827895220e1df883
+Author: Albert Astals Cid <albert.astals.cid at kdab.com>
+Date:   Thu Feb 1 22:46:33 2018 +0100
+
+    Qt5: Add cancellation support to renderToImage and textList
+
+ qt5/src/poppler-page.cc | 148
+ ++++++++++++++++++++++++++++--------------------
+ qt5/src/poppler-qt5.h   |  98 +++++++++++++++++++++++++++++++-
+ 2 files changed, 185 insertions(+), 61 deletions(-)
+
+commit 248aa0f5832ce063a9ae061dfcf54596e0ea5fba
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Sun Jan 28 00:25:38 2018 +0100
+
+    Fix build without libpng
+
+ utils/ImageOutputDev.cc | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit f93fa48839be2937cd7ce38c14884428416bcc4b
+Author: Andreas Gruenbacher <agruenba at redhat.com>
+Date:   Sat Jan 27 20:24:09 2018 +0100
+
+    Fix build without libtiff
+
+    Bug #104813
+
+ utils/ImageOutputDev.cc | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+commit f65f60e5d3f5e4109a79212a9994b5096a2a2a8d
+Author: Jason Crain <jason at inspiresomeone.us>
+Date:   Thu Jan 18 11:57:33 2018 -0600
+
+    GfxFontDict: merge reference generation from xpdf 4.00
+
+    The GfxFontDict constructor generates a fake indirect reference if the
+    font dictionary doesn't have a real indirect reference.  It sometimes
+    assigns the same reference to two different fonts leading to a wrong
+    font being used.  XPDF 4.00 fixes this by using the hash of the font
+    data to create the fake reference.
+
+    https://bugs.freedesktop.org/show_bug.cgi?id=104565
+
+ poppler/GfxFont.cc | 125
+ +++++++++++++++++++++++++++++++++++++++++++++++++----
+ poppler/GfxFont.h  |   4 ++
+ 2 files changed, 120 insertions(+), 9 deletions(-)
+
+commit 7342327039dfc750934f3ce7ff0bdb6bc585151c
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Wed Jan 17 22:33:42 2018 +0100
+
+    Form.h: include time.h for time_t
+
+ poppler/Form.h | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit a89e7474fcd9e7e6dd1330c585130346aa862598
+Author: suzuki toshiya <mpsuzuki at hiroshima-u.ac.jp>
+Date:   Wed Jan 17 00:22:55 2018 +0100
+
+    Enable building all libs as static libs
+
+    if the correct switch is used
+
+ cpp/CMakeLists.txt     | 2 +-
+ glib/CMakeLists.txt    | 4 ++--
+ qt5/src/CMakeLists.txt | 2 +-
+ 3 files changed, 4 insertions(+), 4 deletions(-)
+
+commit 7f550e88d86482adcfab6e054ff14588b32b692a
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Sun Jan 14 20:51:19 2018 +0100
+
+    Remove declare but unused Object instances
+
+ poppler/Annot.cc           | 36 ------------------------------------
+ poppler/CairoFontEngine.cc |  2 --
+ poppler/Catalog.cc         |  1 -
+ poppler/Form.cc            |  2 +-
+ poppler/Lexer.cc           |  1 -
+ poppler/Link.cc            |  2 --
+ poppler/PDFDoc.cc          |  1 -
+ poppler/SplashOutputDev.cc |  2 --
+ poppler/XRef.cc            |  1 -
+ qt5/src/ArthurOutputDev.cc |  1 -
+ utils/JSInfo.cc            |  1 -
+ utils/pdfinfo.cc           |  1 -
+ utils/pdfseparate.cc       |  1 -
+ 13 files changed, 1 insertion(+), 51 deletions(-)
+
+commit 4b237953b187f38c90b9a747f587cbc277db6d45
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Sun Jan 14 20:17:56 2018 +0100
+
+    pdfsig: Remove "int i = 0;" variable that was shadowing pevious i
+
+    And making us access the wrong sig_widgets element
+
+ utils/pdfsig.cc | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit 08f2cddf18b6ccdc13861b52821cbbf2d3e48472
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Thu Jan 11 19:38:29 2018 +0100
+
+    GfxFunctionShading::parse: Fix abort in malformed document
+
+    Bug #104581
+
+ poppler/GfxState.cc | 32 ++++++++++++++++++++++----------
+ 1 file changed, 22 insertions(+), 10 deletions(-)
+
+commit 10831921281f75b4b2c05ab85f4093331788e6a8
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Thu Jan 11 00:27:50 2018 +0100
+
+    GfxGouraudTriangleShading::parse: Don't abort on malformed documents
+
+    Bug #104567
+
+ poppler/GfxState.cc | 18 ++++++++++++------
+ 1 file changed, 12 insertions(+), 6 deletions(-)
+
+commit a59f61641fcb36859b625749afb4561557e419f6
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Wed Jan 10 23:24:19 2018 +0100
+
+    PDFDoc::setup: Fail early if base stream length is 0
+
+    Bug #103552
+
+ poppler/PDFDoc.cc | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+commit 00c1566e8cc0dacd899ec6dd267265f4b714eae4
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Wed Jan 10 00:49:51 2018 +0100
+
+    UnicodeMapFuncs: Move implementation to .cpp
+
+    With that the last warning i got on poppler core is gone \o/
+
+ CMakeLists.txt             |  1 +
+ poppler/UnicodeMapFuncs.cc | 88
+ ++++++++++++++++++++++++++++++++++++++++++++++
+ poppler/UnicodeMapFuncs.h  | 64 +++------------------------------
+ 3 files changed, 93 insertions(+), 60 deletions(-)
+
+commit bf6d79b5c6b5bdcc0d79b4eebd85840e8f2e30ef
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Wed Jan 10 00:49:33 2018 +0100
+
+    Forgot C for last commit
+
+ poppler/UTF.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit ebf33c2b0c66c456683c189af1b297fe24adcf9d
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Wed Jan 10 00:40:38 2018 +0100
+
+    utf16CountUtf8Bytes: initialize codepoint to 0
+
+    Was tired of seeing the warning
+
+    I actually think the code is a little bit fishy for invalid values,
+    but since we only use it for win32 builds i'm not spending much more
+    time looking at it.
+
+ poppler/UTF.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 43ad7071aa126d3b6754421b544e114d87fdd82a
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Tue Jan 9 23:41:01 2018 +0100
+
+    qt5: Implement operator= for PageTransition
+
+ qt5/src/poppler-page-transition.cc | 10 ++++++++++
+ qt5/src/poppler-page-transition.h  |  5 ++++-
+ 2 files changed, 14 insertions(+), 1 deletion(-)
+
+commit c2711874a4afc00448c21e86fdaf0b7aec40b623
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Tue Jan 9 19:47:29 2018 +0100
+
+    Fix another clazy rule-of-three warning
+
+    We can just use the default copy assignemnt and constructor for Parent
+
+ poppler/StructTreeRoot.h | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+commit 30ccee028213efcf3d3a103ae6003bdcd15e1126
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Tue Jan 9 19:42:53 2018 +0100
+
+    Fix more Wmissing-field-initializer
+
+    by using the default initializer
+
+ goo/gfile.cc               | 6 +++---
+ poppler/GlobalParamsWin.cc | 4 ++--
+ 2 files changed, 5 insertions(+), 5 deletions(-)
+
+commit ef4e450c921f4373955def51a74ebffd8f7b4599
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Tue Jan 9 19:36:16 2018 +0100
+
+    Enable no-missing-field-initializers
+
+ cmake/modules/PopplerMacros.cmake |  2 +-
+ glib/poppler-structure-element.cc | 29 +++++++++++++++--------------
+ poppler/GfxFont.cc                |  4 ++--
+ poppler/JBIG2Stream.cc            | 20 ++++++++++----------
+ test/gtk-test.cc                  |  2 +-
+ test/pdf-fullrewrite.cc           |  2 +-
+ utils/pdfdetach.cc                |  3 ++-
+ utils/pdffonts.cc                 |  4 ++--
+ utils/pdfimages.cc                |  4 ++--
+ utils/pdfinfo.cc                  |  4 ++--
+ utils/pdfseparate.cc              |  4 ++--
+ utils/pdfsig.cc                   |  4 ++--
+ utils/pdftocairo.cc               |  4 ++--
+ utils/pdftohtml.cc                |  4 ++--
+ utils/pdftoppm.cc                 |  4 ++--
+ utils/pdftops.cc                  |  4 ++--
+ utils/pdftotext.cc                |  4 ++--
+ utils/pdfunite.cc                 |  4 ++--
+ 18 files changed, 54 insertions(+), 52 deletions(-)
+
+commit efd2205a0bc9e838fd2184c329f8370aa292c346
+Author: suzuki toshiya <mpsuzuki at hiroshima-u.ac.jp>
+Date:   Tue Jan 9 00:03:59 2018 +0100
+
+    add "--owner root:0 --group root:0" options to tar command in
+    dist target
+
+    Because git-archive always uses root:root in the generated tarball,
+    the source tarballs (since 0.60.0) have 2 uid/gids in it.
+    "root:root" by git-archive, and normal users/group by normal tar.
+    For detail, please find the analysis at::
+    https://lists.freedesktop.org/archives/poppler/2017-December/012737.html
+
+    Bug #104398
+
+ CMakeLists.txt | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit cbd864b74fe368c1172974c7040c67ddfbc52cf6
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Mon Jan 8 23:48:57 2018 +0100
+
+    Fix abort in Gfx::opBeginMarkedContent if args[1] is not a name
+
+    Bug #104468
+
+ poppler/Gfx.cc | 23 ++++++++++++-----------
+ 1 file changed, 12 insertions(+), 11 deletions(-)
+
+commit 1aaf621f511ca4c235cb30a5ddbf050acd30fe91
+Author: Ben Timby <btimby at gmail.com>
+Date:   Mon Jan 8 23:42:40 2018 +0100
+
+    Check return code of getChar(), abort reading on error.
+
+    Bug #104502
+
+ poppler/PDFDoc.cc | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+commit ad7f6acd3c643b5bc0c9b7f91616f678b178a041
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Mon Jan 8 23:40:25 2018 +0100
+
+    (C) of last commit
+
+ poppler/Lexer.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 582153b68e076c0f2ae71392f7553181c466e849
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Mon Jan 8 23:34:13 2018 +0100
+
+    Lexer: Check curStr is actually a Stream before doing Stream
+    operations
+
+    Bug #104518
+
+ poppler/Lexer.cc | 14 +++++++++-----
+ 1 file changed, 9 insertions(+), 5 deletions(-)
+
+commit dea6e03352084361e7c89cff7adaa53110c4e91a
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Mon Jan 8 23:25:39 2018 +0100
+
+    Fix new Object API porting bug
+
+    When doing the XRef::readXRefTable workaround of moving entries[1] to
+    entries[0] set the entries[1] object back to null
+
+    Bug #104517
+
+ poppler/XRef.cc | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 4c9e1b66725051cd4726baf19d891c2d9c710868
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Mon Jan 8 23:09:13 2018 +0100
+
+    A few more nullptr
+
+ poppler/Link.h      | 2 +-
+ poppler/Object.h    | 4 ++--
+ poppler/OutputDev.h | 2 +-
+ 3 files changed, 4 insertions(+), 4 deletions(-)
+
+commit e428033c2d7efbbbf89bb2f84c8998521ac7ef8e
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Mon Jan 8 22:55:00 2018 +0100
+
+    Run clang-tidy with modernize nullptr
+
+    Also add two enum values in the qt5 frontend to representate no flags
+    Also mark glib/gtk/cairo system includes so that gcc doesn't report
+    the issues in those headers
+
+ cmake/modules/PopplerMacros.cmake  |    2 +-
+ cpp/poppler-document.cpp           |   50 +-
+ cpp/poppler-image.cpp              |   20 +-
+ cpp/poppler-page.cpp               |    8 +-
+ cpp/poppler-private.cpp            |    2 +-
+ cpp/poppler-toc.cpp                |    4 +-
+ cpp/tests/poppler-dump.cpp         |    2 +-
+ cpp/tests/poppler-render.cpp       |    2 +-
+ fofi/FoFiBase.cc                   |   10 +-
+ fofi/FoFiEncodings.cc              |  396 +-
+ fofi/FoFiIdentifier.cc             |    2 +-
+ fofi/FoFiTrueType.cc               |   30 +-
+ fofi/FoFiType1.cc                  |   18 +-
+ fofi/FoFiType1C.cc                 |   28 +-
+ glib/CMakeLists.txt                |    4 +
+ glib/demo/info.cc                  |   12 +-
+ glib/poppler-action.cc             |   54 +-
+ glib/poppler-annot.cc              |   64 +-
+ glib/poppler-attachment.cc         |   12 +-
+ glib/poppler-cached-file-loader.cc |   16 +-
+ glib/poppler-document.cc           |  246 +-
+ glib/poppler-form-field.cc         |   30 +-
+ glib/poppler-input-stream.cc       |   14 +-
+ glib/poppler-layer.cc              |   16 +-
+ glib/poppler-media.cc              |   10 +-
+ glib/poppler-movie.cc              |    6 +-
+ glib/poppler-page.cc               |  124 +-
+ glib/poppler-structure-element.cc  |  200 +-
+ glib/poppler.cc                    |    8 +-
+ goo/GooHash.cc                     |   24 +-
+ goo/GooString.cc                   |   16 +-
+ goo/GooTimer.cc                    |    6 +-
+ goo/PNGWriter.cc                   |    6 +-
+ goo/TiffWriter.cc                  |   18 +-
+ goo/gfile.cc                       |   26 +-
+ goo/gmem.cc                        |   18 +-
+ goo/grandom.cc                     |    4 +-
+ goo/gstrtod.cc                     |   10 +-
+ poppler/Annot.cc                   |  300 +-
+ poppler/Array.cc                   |    2 +-
+ poppler/BuiltinFont.cc             |    2 +-
+ poppler/BuiltinFontTables.cc       | 8374
+ ++++++++++++++++++------------------
+ poppler/CMap.cc                    |   22 +-
+ poppler/CairoFontEngine.cc         |   42 +-
+ poppler/CairoOutputDev.cc          |  108 +-
+ poppler/CairoRescaleBox.cc         |    6 +-
+ poppler/Catalog.cc                 |   76 +-
+ poppler/CharCodeToUnicode.cc       |   28 +-
+ poppler/CurlCachedFile.cc          |    6 +-
+ poppler/DCTStream.cc               |   16 +-
+ poppler/DateInfo.cc                |    4 +-
+ poppler/Decrypt.cc                 |    4 +-
+ poppler/Dict.cc                    |    8 +-
+ poppler/Error.cc                   |    4 +-
+ poppler/FileSpec.cc                |   18 +-
+ poppler/FontEncodingTables.cc      |  980 ++---
+ poppler/FontInfo.cc                |   22 +-
+ poppler/Form.cc                    |   70 +-
+ poppler/Function.cc                |   26 +-
+ poppler/Gfx.cc                     |  146 +-
+ poppler/GfxFont.cc                 |  134 +-
+ poppler/GfxState.cc                |  346 +-
+ poppler/GlobalParams.cc            |   76 +-
+ poppler/GlobalParamsWin.cc         |  170 +-
+ poppler/Hints.cc                   |   18 +-
+ poppler/JArithmeticDecoder.cc      |    2 +-
+ poppler/JBIG2Stream.cc             |  202 +-
+ poppler/JPEG2000Stream.cc          |   22 +-
+ poppler/Lexer.cc                   |    8 +-
+ poppler/Linearization.cc           |   16 +-
+ poppler/Link.cc                    |   52 +-
+ poppler/MarkedContentOutputDev.cc  |   22 +-
+ poppler/Movie.cc                   |    2 +-
+ poppler/NameToCharCode.cc          |    4 +-
+ poppler/NameToUnicodeTable.h       |    4 +-
+ poppler/OptionalContent.cc         |   28 +-
+ poppler/Outline.cc                 |   10 +-
+ poppler/OutputDev.cc               |    6 +-
+ poppler/PDFDoc.cc                  |   84 +-
+ poppler/PSOutputDev.cc             |  162 +-
+ poppler/PSOutputDev.h              |    2 +-
+ poppler/Page.cc                    |   10 +-
+ poppler/PageLabelInfo.cc           |    2 +-
+ poppler/Parser.cc                  |   10 +-
+ poppler/PopplerCache.cc            |    4 +-
+ poppler/Rendition.cc               |    4 +-
+ poppler/SecurityHandler.cc         |   26 +-
+ poppler/SignatureHandler.cc        |   60 +-
+ poppler/Sound.cc                   |   10 +-
+ poppler/SplashOutputDev.cc         |  186 +-
+ poppler/StdinCachedFile.cc         |    2 +-
+ poppler/StdinPDFDocBuilder.cc      |    2 +-
+ poppler/Stream.cc                  |   70 +-
+ poppler/StructElement.cc           |   72 +-
+ poppler/StructElement.h            |   30 +-
+ poppler/StructTreeRoot.cc          |    4 +-
+ poppler/StructTreeRoot.h           |    2 +-
+ poppler/TextOutputDev.cc           |  224 +-
+ poppler/UTF.cc                     |    6 +-
+ poppler/UnicodeMap.cc              |   18 +-
+ poppler/UnicodeTypeTable.cc        |  938 ++--
+ poppler/XRef.cc                    |   38 +-
+ qt5/demos/abstractinfodock.h       |    2 +-
+ qt5/demos/documentobserver.cpp     |    2 +-
+ qt5/demos/embeddedfiles.h          |    2 +-
+ qt5/demos/fonts.h                  |    2 +-
+ qt5/demos/info.h                   |    2 +-
+ qt5/demos/metadata.h               |    2 +-
+ qt5/demos/navigationtoolbar.h      |    2 +-
+ qt5/demos/optcontent.cpp           |    2 +-
+ qt5/demos/optcontent.h             |    2 +-
+ qt5/demos/pageview.h               |    2 +-
+ qt5/demos/permissions.h            |    2 +-
+ qt5/demos/thumbnails.h             |    2 +-
+ qt5/demos/toc.cpp                  |    4 +-
+ qt5/demos/toc.h                    |    2 +-
+ qt5/demos/viewer.cpp               |    4 +-
+ qt5/src/ArthurOutputDev.cc         |    2 +-
+ qt5/src/poppler-annotation.cc      |   60 +-
+ qt5/src/poppler-base-converter.cc  |    8 +-
+ qt5/src/poppler-document.cc        |   18 +-
+ qt5/src/poppler-embeddedfile.cc    |   14 +-
+ qt5/src/poppler-form.cc            |    6 +-
+ qt5/src/poppler-link.cc            |    4 +-
+ qt5/src/poppler-media.cc           |    2 +-
+ qt5/src/poppler-movie.cc           |    2 +-
+ qt5/src/poppler-optcontent.cc      |   16 +-
+ qt5/src/poppler-optcontent.h       |    2 +-
+ qt5/src/poppler-page.cc            |   36 +-
+ qt5/src/poppler-pdf-converter.cc   |    2 +-
+ qt5/src/poppler-private.cc         |   16 +-
+ qt5/src/poppler-private.h          |    2 +-
+ qt5/src/poppler-ps-converter.cc    |   10 +-
+ qt5/src/poppler-qt5.h              |    8 +-
+ qt5/src/poppler-sound.cc           |    2 +-
+ qt5/tests/check_lexer.cpp          |    2 +-
+ qt5/tests/check_metadata.cpp       |    8 +-
+ qt5/tests/check_search.cpp         |    2 +-
+ qt5/tests/stress-threads-qt5.cpp   |   12 +-
+ qt5/tests/test-poppler-qt5.cpp     |    2 +-
+ splash/Splash.cc                   |  110 +-
+ splash/SplashBitmap.cc             |   18 +-
+ splash/SplashClip.cc               |   12 +-
+ splash/SplashFTFont.cc             |    8 +-
+ splash/SplashFTFontEngine.cc       |    8 +-
+ splash/SplashFTFontFile.cc         |   12 +-
+ splash/SplashFont.cc               |    8 +-
+ splash/SplashFontEngine.cc         |   22 +-
+ splash/SplashFontFile.cc           |    4 +-
+ splash/SplashPath.cc               |    8 +-
+ splash/SplashScreen.cc             |    4 +-
+ splash/SplashState.cc              |   22 +-
+ splash/SplashXPath.cc              |    8 +-
+ splash/SplashXPathScanner.cc       |    4 +-
+ test/CMakeLists.txt                |    5 +-
+ test/gtk-test.cc                   |   28 +-
+ test/pdf-fullrewrite.cc            |   14 +-
+ test/pdf-inspector.cc              |   22 +-
+ test/perf-test.cc                  |   66 +-
+ utils/HtmlFonts.cc                 |    8 +-
+ utils/HtmlLinks.cc                 |    6 +-
+ utils/HtmlOutputDev.cc             |   94 +-
+ utils/ImageOutputDev.cc            |   10 +-
+ utils/JSInfo.cc                    |    4 +-
+ utils/Win32Console.cc              |    2 +-
+ utils/parseargs.cc                 |    2 +-
+ utils/pdfdetach.cc                 |    8 +-
+ utils/pdffonts.cc                  |    6 +-
+ utils/pdfimages.cc                 |    8 +-
+ utils/pdfinfo.cc                   |    6 +-
+ utils/pdfseparate.cc               |   14 +-
+ utils/pdfsig.cc                    |   12 +-
+ utils/pdftocairo-win32.cc          |   22 +-
+ utils/pdftocairo.cc                |   34 +-
+ utils/pdftohtml.cc                 |   36 +-
+ utils/pdftoppm.cc                  |   20 +-
+ utils/pdftops.cc                   |    8 +-
+ utils/pdftotext.cc                 |   10 +-
+ utils/pdfunite.cc                  |   16 +-
+ 179 files changed, 7929 insertions(+), 7920 deletions(-)
+
+commit 2e47887616155dee566083e1aac9adab69aa4386
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Mon Jan 8 22:14:34 2018 +0100
+
+    Seems we don't need to set this cmake policies to OLD
+
+    builds fine without warnings
+
+ cmake/modules/PopplerDefaults.cmake | 8 --------
+ 1 file changed, 8 deletions(-)
+
+commit 1ae5d91467663576a5d11add69fa72a2d108f0ad
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Mon Jan 8 18:45:43 2018 +0100
+
+    Remove useless return in a void function
+
+ poppler/SplashOutputDev.h | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 8794789a72f845b009656e6d7ae6a00b709e09bc
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Mon Jan 8 18:07:38 2018 +0100
+
+    Delete lots of copy constructors and copy assignment operators
+
+    Fixes rule-of-three and copyable-polymorphic warnings reported
+    by clazy.
+
+    The default copy constructor and copy assignment operator are
+    only valid for simple classes so we delete them (i.e. make then
+    not exist)
+    when we have either a virtual class or a destructor, the code still
+    compiles
+    so this doesn't fix any bug, it is more a protection for when you
+    think you
+    can copy a class and don't realize the default copy constrcutor is
+    not doing
+    what you want and you get crashes. Hopefully this helps us in the
+    future :)
+
+ cpp/poppler-document-private.h         |  4 ++++
+ cpp/poppler-embedded-file-private.h    |  4 ++++
+ cpp/poppler-global.cpp                 |  3 +++
+ cpp/poppler-image-private.h            |  4 ++++
+ cpp/poppler-image.cpp                  |  4 +++-
+ cpp/poppler-page-private.h             |  4 ++++
+ cpp/poppler-toc-private.h              |  4 ++++
+ fofi/FoFiBase.h                        | 16 ++++++++++++++
+ fofi/FoFiIdentifier.cc                 |  4 ++++
+ goo/GooMutex.h                         |  5 ++++-
+ goo/ImgWriter.h                        |  6 +++++-
+ goo/gfile.h                            |  5 ++++-
+ poppler/Annot.h                        | 38
+ +++++++++++++++++++++++++++++++++-
+ poppler/Array.h                        |  5 ++++-
+ poppler/BuiltinFont.h                  | 18 ++++++++++++++++
+ poppler/CMap.h                         |  8 ++++++-
+ poppler/CachedFile.h                   |  9 +++++++-
+ poppler/CairoFontEngine.h              |  6 +++++-
+ poppler/CairoOutputDev.h               |  4 ++++
+ poppler/CairoRescaleBox.h              |  4 ++++
+ poppler/Catalog.h                      |  9 +++++++-
+ poppler/CharCodeToUnicode.h            |  8 ++++++-
+ poppler/Dict.h                         |  5 ++++-
+ poppler/FileSpec.h                     |  8 ++++++-
+ poppler/FontInfo.h                     |  4 +++-
+ poppler/Form.h                         |  8 ++++++-
+ poppler/Function.h                     |  5 ++++-
+ poppler/Gfx.cc                         |  5 ++++-
+ poppler/Gfx.h                          |  8 ++++++-
+ poppler/GfxFont.h                      | 11 +++++++++-
+ poppler/GfxState.cc                    |  2 ++
+ poppler/GfxState.h                     | 26 ++++++++++++++++++++++-
+ poppler/GlobalParams.cc                |  6 +++++-
+ poppler/GlobalParams.h                 |  5 ++++-
+ poppler/Hints.h                        |  5 ++++-
+ poppler/JArithmeticDecoder.h           | 18 ++++++++++++++++
+ poppler/JBIG2Stream.cc                 |  4 +++-
+ poppler/Lexer.h                        |  5 ++++-
+ poppler/Link.h                         | 10 +++++++++
+ poppler/MarkedContentOutputDev.h       |  4 ++++
+ poppler/Movie.h                        |  3 ++-
+ poppler/NameToCharCode.h               | 17 +++++++++++++++
+ poppler/OptionalContent.h              | 11 +++++++++-
+ poppler/Outline.h                      |  8 ++++++-
+ poppler/PDFDoc.h                       |  5 ++++-
+ poppler/PDFDocBuilder.h                |  8 +++++--
+ poppler/PDFDocFactory.h                |  5 ++++-
+ poppler/PSOutputDev.cc                 |  7 ++++++-
+ poppler/Page.h                         |  5 ++++-
+ poppler/PageLabelInfo.h                |  6 +++++-
+ poppler/Parser.h                       |  5 ++++-
+ poppler/PopplerCache.h                 | 18 +++++++++++++---
+ poppler/Rendition.h                    |  3 ++-
+ poppler/SecurityHandler.cc             |  5 ++++-
+ poppler/SecurityHandler.h              |  5 ++++-
+ poppler/Sound.h                        |  5 ++++-
+ poppler/SplashOutputDev.cc             |  4 +++-
+ poppler/Stream.h                       | 14 ++++++++++++-
+ poppler/StructElement.h                |  5 ++++-
+ poppler/StructTreeRoot.h               |  4 ++++
+ poppler/TextOutputDev.cc               |  2 ++
+ poppler/TextOutputDev.h                | 29 +++++++++++++++++++++++++-
+ poppler/UnicodeMap.h                   |  7 +++++++
+ poppler/XRef.cc                        |  5 ++++-
+ poppler/XRef.h                         |  9 +++++++-
+ qt5/demos/documentobserver.h           |  3 +++
+ qt5/src/poppler-annotation-private.h   |  5 ++++-
+ qt5/src/poppler-annotation.cc          | 14 ++++++++++++-
+ qt5/src/poppler-converter-private.h    |  5 ++++-
+ qt5/src/poppler-embeddedfile-private.h |  5 ++++-
+ qt5/src/poppler-link-private.h         |  5 ++++-
+ qt5/src/poppler-media.cc               |  5 ++++-
+ qt5/src/poppler-movie.cc               |  5 ++++-
+ qt5/src/poppler-optcontent-private.h   |  5 ++++-
+ qt5/src/poppler-page-transition.cc     |  3 +++
+ qt5/src/poppler-page-transition.h      |  3 ++-
+ qt5/src/poppler-private.h              | 18 +++++++---------
+ qt5/src/poppler-sound.cc               |  5 ++++-
+ splash/Splash.h                        |  5 ++++-
+ splash/SplashBitmap.h                  |  5 ++++-
+ splash/SplashClip.h                    |  5 ++++-
+ splash/SplashFTFontEngine.h            |  5 ++++-
+ splash/SplashFont.h                    |  5 ++++-
+ splash/SplashFontEngine.h              |  5 ++++-
+ splash/SplashFontFile.h                |  8 ++++++-
+ splash/SplashFontFileID.h              | 16 ++++++++++++++
+ splash/SplashPath.h                    | 17 +++++++++++++++
+ splash/SplashPattern.h                 |  4 ++++
+ splash/SplashScreen.h                  |  5 ++++-
+ splash/SplashState.h                   |  4 ++++
+ splash/SplashXPath.h                   |  4 ++++
+ splash/SplashXPathScanner.h            |  4 ++++
+ test/perf-test.cc                      |  4 ++++
+ utils/HtmlFonts.h                      |  4 +++-
+ utils/HtmlLinks.h                      |  5 ++++-
+ utils/HtmlOutputDev.cc                 |  4 +++-
+ utils/HtmlOutputDev.h                  | 13 ++++++++++--
+ 97 files changed, 626 insertions(+), 83 deletions(-)
+
+commit 4c7814342806b61fedbb2d45ce74462f9dbc20bc
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Thu Jan 4 23:12:54 2018 +0100
+
+    Fix assert on malformed documents
+
+    Bug #104354
+
+ poppler/GfxState.cc | 23 ++++++++++++-----------
+ 1 file changed, 12 insertions(+), 11 deletions(-)
+
+commit 6233710068e8406cb44741bdc74d1a0e2582e5cf
+Author: Adrian Johnson <ajohnson at redneon.com>
+Date:   Thu Jan 4 15:41:11 2018 +1030
+
+    Remove error for wrong child type for tagged pdf
+
+    It is harmless and as a few PDFs do this it just adds noise to
+    the output.
+
+    Bug #103587
+
+ poppler/StructTreeRoot.cc | 3 ---
+ 1 file changed, 3 deletions(-)
+
+commit 321538259a9c79a99ce846a6ea2d94dd7fa56f61
+Author: Adrian Johnson <ajohnson at redneon.com>
+Date:   Sun Nov 26 20:43:15 2017 +1030
+
+    Fix some bugs in StructTreeRoot parsing of parent tree
+
+    - Add support for parsing child nodes in the number tree
+    - Number tree keys do not have to be consecutive numbers. Use
+      map instead of vector for parentTree.
+    - Due to performance impact of iterating a map instead of
+      vector in parentTreeAdd, add a reverse mapping from Ref
+      to parentTree.
+    - Add mcid parameter to findParentElement() to enable finding
+      the parent when there are multiple MCIDs on the same page.
+    - Move RefCompare from pdfinfo.cc to Object.h so it can be
+      used by other files.
+
+    Bug #103912
+
+ poppler/Object.h          |   8 +++
+ poppler/StructElement.cc  |   2 +-
+ poppler/StructTreeRoot.cc | 121
+ +++++++++++++++++++++++++++-------------------
+ poppler/StructTreeRoot.h  |  14 ++++--
+ utils/pdfinfo.cc          |   6 ---
+ 5 files changed, 91 insertions(+), 60 deletions(-)
+
+commit c4cbb4fd5e062544bf34109140266d0b027a512b
+Author: Adrian Johnson <ajohnson at redneon.com>
+Date:   Mon Oct 30 19:21:41 2017 +1030
+
+    Fix pdfimages with flate encoded inline images
+
+    - Remove advance strem pos to end of image code from listImage().
+      getInlineImageLength() already does this.
+
+    - Always EmbedStream in getInlineImageLength() to get size of
+    stored image.
+      The type of encoding does not matter.
+
+    - Use same record EmbeddeStream code for all image types in
+    writeImage()
+
+    - Fix some memory leaks
+
+    Bug #103446
+
+ utils/ImageOutputDev.cc | 54
+ ++++++++++++-------------------------------------
+ 1 file changed, 13 insertions(+), 41 deletions(-)
+
+commit f87238296f7a81f131f2525c4ea3a26d14e8a7ff
+Author: Adrian Johnson <ajohnson at redneon.com>
+Date:   Wed Jan 3 08:36:58 2018 +1030
+
+    Fix EmbedStream replay
+
+    Bug #103446
+
+ poppler/Stream.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit e70990c5b2d95a9099b8f4a1c69ca9e5b2a559a4
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Wed Jan 3 00:46:42 2018 +0100
+
+    qt5: make the check for rendition a bit earlier
+
+ qt5/src/poppler-annotation.cc | 9 +++------
+ 1 file changed, 3 insertions(+), 6 deletions(-)
+
+commit 9f08b62ea283ea66b35cfc6dab3e7f45bc4170b9
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Wed Jan 3 00:32:23 2018 +0100
+
+    qt5: Do not assume all Screen annotation actions are Renditions
+
+    Fixes KDE bug #388175
+
+ qt5/src/poppler-annotation.cc | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+commit 15272137daf186114d8dfeb6898d8d90b3ccfd91
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Wed Jan 3 00:14:13 2018 +0100
+
+    Fix undefined sanitizer warning about qsort
+
+    Said the first parameter is defined by spec to not be null and
+    we where
+    passing null when there's no blocks, so add an if
+
+ poppler/TextOutputDev.cc | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+commit 066e6a3e0487f9e011f7b8d1ccff62def8db1e6c
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Wed Jan 3 00:15:14 2018 +0100
+
+    Welcome 2018
+
+ poppler/poppler-config.h.cmake | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit c9958ecb87de34b923a17521c8bb149569bacca8
+Author: Oliver Sander <oliver.sander at tu-dresden.de>
+Date:   Sat Oct 28 21:16:55 2017 +0200
+
+    ArthurOutputDev: Rudimentary support for transparency groups
+
+    This patch adds minimal support for transparency groups.  With it,
+    the Arthur backend can render highlight annotations.
+
+ qt5/src/ArthurOutputDev.cc | 46
+ ++++++++++++++++++++++++++++++++++++++++++++++
+ qt5/src/ArthurOutputDev.h  | 15 +++++++++++++++
+ 2 files changed, 61 insertions(+)
+
+commit bda1d76fc3c9cf69b2b67d94278e136ac50c3e3b
+Author: Oliver Sander <oliver.sander at tu-dresden.de>
+Date:   Fri Dec 29 00:14:44 2017 +0100
+
+    ArthurOutputDev: Replace the QPainter by a stack of QPainters
+
+    This patch lays some groundwork for the support of transparency
+    groups.  Transparency groups temporarily create new painters.
+    These get painted upon, and then the resulting new painting
+    will be drawn at once onto the original PaintDevice.  To implement
+    this, we need a stack of painters rather than a single one.
+    The first painter on the stack is the original one.  Opening a
+    transparency group pushes a new painter onto the stack, and
+    all drawing operations always go to the painter on the top
+    of the stack.
+
+ qt5/src/ArthurOutputDev.cc | 88
+ +++++++++++++++++++++++-----------------------
+ qt5/src/ArthurOutputDev.h  |  7 +++-
+ 2 files changed, 50 insertions(+), 45 deletions(-)
+
+commit 71b04b79154a8edd27e73a2360d0c3a901246d8c
+Author: Oliver Sander <oliver.sander at tu-dresden.de>
+Date:   Fri Aug 11 22:23:46 2017 +0200
+
+    ArthurOutputDev: Implement updateBlendMode
+
+ qt5/src/ArthurOutputDev.cc | 52
+ ++++++++++++++++++++++++++++++++++++++++++++++
+ qt5/src/ArthurOutputDev.h  |  1 +
+ 2 files changed, 53 insertions(+)
+
+commit 9b981f9123fe8c3c8662015de341cff76aa28b07
+Author: Thomas Freitag <Thomas.Freitag at alfa.de>
+Date:   Thu Dec 28 00:55:39 2017 +0100
+
+    FoFiTrueType::readPostTable() from xpdf 4.00
+
+    Bug #102880
+
+ fofi/FoFiTrueType.cc | 30 +++++++++++-------------------
+ 1 file changed, 11 insertions(+), 19 deletions(-)
+
+commit 00fc829352716b04d9ab59552daefffed20e2852
+Author: Thomas Freitag <Thomas.Freitag at alfa.de>
+Date:   Thu Dec 28 00:55:00 2017 +0100
+
+    Break loop if recursionLimit is reached
+
+ poppler/Parser.cc | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit e41ce80a27b735df8e2ccc17e15adea012543712
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Wed Dec 27 00:18:47 2017 +0100
+
+    OutlineItem: Store parent and refNum
+
+    This way when opening our children we make sure they are not also our
+    parent (i.e. there's a loop)
+
+    Fixes bug #102914
+
+ poppler/Outline.cc | 31 +++++++++++++++++--------------
+ poppler/Outline.h  |  6 ++++--
+ 2 files changed, 21 insertions(+), 16 deletions(-)
+
+commit ffefe1c038de555ed39c3d9eca6ef79ac1f97b86
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Tue Dec 26 23:57:21 2017 +0100
+
+    qt5: demo: don't crash if page is malformed
+
+ qt5/demos/pageview.cpp | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+commit 81461f4cddf6b8705e6cf24d20084fc71891bb91
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Sat Dec 23 11:20:43 2017 +0100
+
+    Remove another LCMS1 old ifdef
+
+ utils/pdftocairo.cc | 9 +--------
+ 1 file changed, 1 insertion(+), 8 deletions(-)
+
+commit 2556ec0705373a01feffe3ca0cd7147af2fdd2c9
+Author: suzuki toshiya <mpsuzuki at hiroshima-u.ac.jp>
+Date:   Sat Dec 23 11:19:17 2017 +0100
+
+    Remove libcms1 crumbs from pdftocairo and qt5 frontend
+
+    Bug #104358
+
+ qt5/src/poppler-document.cc | 5 +----
+ utils/pdftocairo.cc         | 6 +-----
+ 2 files changed, 2 insertions(+), 9 deletions(-)
+
+commit 48de59a92a5f88d10a1a53abf7f15f578104e1ed
+Author: Carlos Garcia Campos <cgarcia at igalia.com>
+Date:   Thu Dec 21 13:25:37 2017 +0100
+
+    regtest: Add an option to exit after n failures
+
+    Note that running jobs are not cancelled when max failures is reached,
+    so we usually end up getting more failures than the maximum.
+
+ regtest/HTMLReport.py         |  2 ++
+ regtest/Printer.py            | 15 ++++++++++++++
+ regtest/TestRun.py            | 46
+ +++++++++++++++++++++++++++++++++++++++++--
+ regtest/commands/run-tests.py |  8 +++++++-
+ 4 files changed, 68 insertions(+), 3 deletions(-)
+
+commit 79a096a48c735ac301ae4d7439bddf630a559a96
+Author: Vincent Le Garrec <legarrec.vincent at gmail.com>
+Date:   Thu Dec 21 00:57:48 2017 +0100
+
+    Fix index out of bounds undefined behaviour in PSTokenizer
+
+    Bug #103583
+
+ poppler/PSTokenizer.cc | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+commit c138ec620b5084348dc892bf9fd8228ed098970a
+Author: Oliver Sander <oliver.sander at tu-dresden.de>
+Date:   Tue Nov 28 16:40:40 2017 +0100
+
+    Arthur: 'clip' should intersect new and old clipping path
+
+    Previously, the 'clip' method of the ArthurOutputDev class
+    replaced the current clipping path with the one given in
+    the GfxState variable.  However, the expected behavior is
+    to intersect the new path with the old one, and use the
+    result as the new clipping path.
+
+ qt5/src/ArthurOutputDev.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 7b434a7ad9333a3b2250d636a517c58d9a12bca2
+Author: Pekka Vuorela <pekka.vuorela at jollamobile.com>
+Date:   Fri Dec 15 16:56:20 2017 +0200
+
+    Honor configuration for building glibc copy of strtok_r
+
+    config.h didn't get included and HAVE_STRTOK_R was never defined.
+    Now getting via glibc.h.
+
+ goo/glibc_strtok_r.cc | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit c2037af18095bb42dd43bafb42650df469e7e5ef
+Author: Oliver Sander <oliver.sander at tu-dresden.de>
+Date:   Wed Oct 18 23:23:50 2017 +0200
+
+    Don't let ArthurOutputDev be friend of SplashPath anymore
+
+    Now that ArthurOutputDev uses Qt glyph rendering, there is
+    not need for it to be friend of SplashPath anymore.
+
+ splash/SplashPath.h | 2 --
+ 1 file changed, 2 deletions(-)
+
+commit 33c3b391dfc3c10b1b63b0b82df4dcb47b71c53a
+Author: Fredrik Fornwall <fredrik at fornwall.net>
+Date:   Tue Dec 19 00:37:44 2017 +0100
+
+    PDFDoc: use %c instead of \x to output binary
+
+    Bug #103873
+
+ poppler/PDFDoc.cc | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit 15dd674a384c80a8f3d4f0647f6617ba72d9bd26
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Thu Dec 14 15:11:31 2017 +0100
+
+    Remove unused FindLIBOPENJPEG.cmake
+
+ cmake/modules/FindLIBOPENJPEG.cmake | 64
+ -------------------------------------
+ 1 file changed, 64 deletions(-)
+
+commit 65dcc0b9c16c80e6718ada060d7ac0e2c0e39abf
+Author: Albert Astals Cid <albert.astals.cid at kdab.com>
+Date:   Wed Dec 13 10:40:50 2017 +0100
+
+    Reset lastAbortCheck on updateLevel reset
+
+    Otherwise we get to a point that the
+      if (updateLevel - lastAbortCheck > 10) {
+    branch is never executed because updateLevel got to 20000 but
+    lastAbortCheck is still at the last value
+
+ poppler/Gfx.cc | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 3690e96154b226025b465ac2260cf1ff2d269abd
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Wed Dec 13 00:07:20 2017 +0100
+
+    Remove the extern C from glib.h
+
+    Apparently this fixes build with MSVC
+
+    Bug #103621
+
+ goo/glibc.h | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
+commit f5706275121409887b0e486b896b48cbcccb766a
+Author: Adrian Johnson <ajohnson at redneon.com>
+Date:   Sun Oct 22 10:26:55 2017 +1030
+
+    cairo: limit image size when printing
+
+    1 bpp image formats can have very large sizes. Even if the maximum
+    cairo image size is not exceeded, it still uses a huge amount
+    of memory
+    and is very slow.
+
+    This limits the image size when printing to 8192x8192 which is
+    sufficient for 300ppi at A2 size. Cairo >= 1.5.10 scales mime images
+    to the same dimensions as the cairo image, so the original mime image
+    can still be embedded.
+
+    Bug 103399
+
+ poppler/CairoOutputDev.cc | 35 ++++++++++++++++++++++++++++++++---
+ 1 file changed, 32 insertions(+), 3 deletions(-)
+
+commit 3f13dd5f04984be1912b4537ffbfacd892750915
+Author: Adrian Johnson <ajohnson at redneon.com>
+Date:   Sun Oct 22 09:37:01 2017 +1030
+
+    cairo: support embedding CCITT image data
+
+    Bug 103399
+
+ poppler/CairoOutputDev.cc | 46
+ +++++++++++++++++++++++++++++++++++++++++++---
+ poppler/CairoOutputDev.h  |  5 ++++-
+ poppler/Stream.cc         | 14 ++++++++++----
+ poppler/Stream.h          |  6 +++++-
+ 4 files changed, 62 insertions(+), 9 deletions(-)
+
+commit 3263fa4439e1a09dae6a0332a90b983d25bc218d
+Author: Thomas Freitag <Thomas.Freitag at alfa.de>
+Date:   Tue Dec 12 00:26:37 2017 +0100
+
+    windows version for Error out on save if file has changed since we
+    opened it
+
+ goo/gfile.cc | 14 +++++++++++++-
+ goo/gfile.h  |  6 ++++--
+ 2 files changed, 17 insertions(+), 3 deletions(-)
+
+commit e4ee1392136188fab0005a0bd7b30c6d9a16d97d
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Tue Dec 12 00:24:31 2017 +0100
+
+    Error out on save if file has changed since we opened it
+
+    In poppler we keep the fd of the file open so the XRef+FileStream can
+    locate objects. This is good since we save lots of memory for
+    not having
+    everything on memory all the time, but that means that when we want to
+    save we need the file to be exactly the same as it was when we created
+    the XRef otherwise we're going to be reading from the wrong part
+    of the
+    "new" file.
+
+    Bug #103793
+
+ goo/gfile.cc         | 18 +++++++++++++++++-
+ goo/gfile.h          | 10 ++++++++--
+ poppler/ErrorCodes.h | 16 ++++++++++++++++
+ poppler/PDFDoc.cc    | 11 +++++++++++
+ 4 files changed, 52 insertions(+), 3 deletions(-)
+
+commit f10359121568409e6062a82de696fe93be615a53
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Sun Dec 3 22:41:32 2017 +0100
+
+    Fix memory leak on error condition
+
+ poppler/Catalog.cc | 1 +
+ 1 file changed, 1 insertion(+)
+
 commit 72e0a3a087f160d819f7697a8536bbee12240c7a
 Author: Albert Astals Cid <aacid at kde.org>
 Date:   Sun Dec 3 20:25:06 2017 +0100

Modified: branches/stable/source/src/libs/poppler/poppler-src/NEWS
===================================================================
--- branches/stable/source/src/libs/poppler/poppler-src/NEWS	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/poppler-src/NEWS	2018-04-22 15:47:12 UTC (rev 796)
@@ -1,3 +1,63 @@
+Release 0.63.0
+        core:
+         * CairoOutputDev: support embedding CCITT image data. Bug #103399
+         * CairoOutputDev: limit image size when printing. Bug #103399
+         * CairoOutputDev: use GOOD instead of BEST as the default cairo filter for scaling. Bug #103136
+         * Error out on save if file has changed since we opened it. Bug #103793
+         * PDFDoc: use %c instead of \x to output binary. Bug #103873
+         * Fix index out of bounds undefined behaviour in PSTokenizer. Bug #103583
+         * Fix opening files with OutlineItem loops. Bug #102914
+         * Fix some bugs in StructTreeRoot parsing of parent tree. Bug #103912
+         * Remove error for wrong child type for tagged pdf. Bug #103587
+         * FoFiTrueType::readPostTable() from xpdf 4.00. Bug #102880
+         * GfxFontDict: merge reference generation from xpdf 4.00. Bug #104565
+         * Reset lastAbortCheck on updateLevel reset
+         * PDFDoc::setup: Fail early if base stream length is 0. Bug #103552
+         * Check curStr is actually a Stream before doing Stream operations. Bug #104518
+         * Fix new Object API porting bug. Bug #104517
+         * Check return code of getChar(), abort reading on error. Bug #104502
+         * TextPage: Add horizontal scaling to font matrix. Bug #105259
+         * Fix EmbedStream replay. Bug #103446
+         * Fix memory leak on error condition
+         * Fix assert on malformed documents. Bug #104354
+         * Fix abort in Gfx::opBeginMarkedContent if args[1] is not a name. Bug #104468
+         * GfxGouraudTriangleShading::parse: Don't abort on malformed documents. Bug #104567
+         * GfxFunctionShading::parse: Fix abort in malformed document. Bug #104581
+         * Remove the extern C from glib.h. Bug #103621
+         * Don't let ArthurOutputDev be friend of SplashPath anymore
+         * Fix undefined sanitizer warning about qsort
+         * Form.h: include time.h for time_t
+         * Various code improvements
+
+        qt5:
+         * Add cancellation support to renderToImage and textList
+         * Do not assume all Screen annotation actions are Renditions. KDE bug #388175
+         * qt5: Implement operator= for PageTransition
+         * ArthurOutputDev: 'clip' should intersect new and old clipping path
+         * ArthurOutputDev: Implement updateBlendMode
+         * ArthurOutputDev: Replace the QPainter by a stack of QPainters
+         * ArthurOutputDev: Rudimentary support for transparency groups
+         * Remove stale libcms1 code. Bug #104358
+         * demo: don't crash if page is malformed
+         * Fix warnings due to the use of deprecated overloads of Poppler::Page::Search in tests.
+
+        utils:
+         * pdfimages: Fix for files with flate encoded inline images. Bug #103446
+         * pdftocairo: Remove stale libcms1 code. Bug #104358
+         * pdfimages: Fix build without libtiff and libpng
+         * pdfseparate: Fix buffer size warning due to missing space for null terminator
+
+        build system:
+         * Enable building all libs as static libs
+         * Enable no-missing-field-initializers
+         * Remove unused FindLIBOPENJPEG.cmake
+         * add "--owner root:0 --group root:0" options to tar command in dist target. Bug #104398
+         * Add python3 support to gtkdoc.py
+         * gtkdoc.py: Make it work with newer gtk-doc. Bug #105075
+
+        cpp:
+         * Add page::text_list
+
 Release 0.62.0
         core:
          * Stop supporting lcms1, you really want to use lcms2 :)

Modified: branches/stable/source/src/libs/poppler/poppler-src/fofi/FoFiBase.cc
===================================================================
--- branches/stable/source/src/libs/poppler/poppler-src/fofi/FoFiBase.cc	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/poppler-src/fofi/FoFiBase.cc	2018-04-22 15:47:12 UTC (rev 796)
@@ -57,29 +57,29 @@
 
   if (!(f = fopen(fileName, "rb"))) {
     error(errIO, -1, "Cannot open '{0:s}'", fileName);
-    return NULL;
+    return nullptr;
   }
   if (fseek(f, 0, SEEK_END) != 0) {
     error(errIO, -1, "Cannot seek to end of '{0:s}'", fileName);
     fclose(f);
-    return NULL;
+    return nullptr;
   }
   n = (int)ftell(f);
   if (n < 0) {
     error(errIO, -1, "Cannot determine length of '{0:s}'", fileName);
     fclose(f);
-    return NULL;
+    return nullptr;
   }
   if (fseek(f, 0, SEEK_SET) != 0) {
     error(errIO, -1, "Cannot seek to start of '{0:s}'", fileName);
     fclose(f);
-    return NULL;
+    return nullptr;
   }
   buf = (char *)gmalloc(n);
   if ((int)fread(buf, 1, n, f) != n) {
     gfree(buf);
     fclose(f);
-    return NULL;
+    return nullptr;
   }
   fclose(f);
   *fileLen = n;

Modified: branches/stable/source/src/libs/poppler/poppler-src/fofi/FoFiBase.h
===================================================================
--- branches/stable/source/src/libs/poppler/poppler-src/fofi/FoFiBase.h	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/poppler-src/fofi/FoFiBase.h	2018-04-22 15:47:12 UTC (rev 796)
@@ -6,6 +6,20 @@
 //
 //========================================================================
 
+//========================================================================
+//
+// Modified under the Poppler project - http://poppler.freedesktop.org
+//
+// All changes made under the Poppler project to this file are licensed
+// under GPL version 2 or later
+//
+// Copyright (C) 2018 Albert Astals Cid <aacid at kde.org>
+//
+// To see a description of the changes please see the Changelog file that
+// came with your tarball or type make ChangeLog if you are building from git
+//
+//========================================================================
+
 #ifndef FOFIBASE_H
 #define FOFIBASE_H
 
@@ -25,6 +39,8 @@
 
 class FoFiBase {
 public:
+  FoFiBase(const FoFiBase &) = delete;
+  FoFiBase& operator=(const FoFiBase &other) = delete;
 
   virtual ~FoFiBase();
 

Modified: branches/stable/source/src/libs/poppler/poppler-src/fofi/FoFiEncodings.cc
===================================================================
--- branches/stable/source/src/libs/poppler/poppler-src/fofi/FoFiEncodings.cc	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/poppler-src/fofi/FoFiEncodings.cc	2018-04-22 15:47:12 UTC (rev 796)
@@ -34,38 +34,38 @@
 //------------------------------------------------------------------------
 
 const char * const fofiType1StandardEncoding[256] = {
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
   "space",
   "exclam",
   "quotedbl",
@@ -161,40 +161,40 @@
   "bar",
   "braceright",
   "asciitilde",
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
   "exclamdown",
   "cent",
   "sterling",
@@ -210,12 +210,12 @@
   "guilsinglright",
   "fi",
   "fl",
-  NULL,
+  nullptr,
   "endash",
   "dagger",
   "daggerdbl",
   "periodcentered",
-  NULL,
+  nullptr,
   "paragraph",
   "bullet",
   "quotesinglbase",
@@ -224,9 +224,9 @@
   "guillemotright",
   "ellipsis",
   "perthousand",
-  NULL,
+  nullptr,
   "questiondown",
-  NULL,
+  nullptr,
   "grave",
   "acute",
   "circumflex",
@@ -235,100 +235,100 @@
   "breve",
   "dotaccent",
   "dieresis",
-  NULL,
+  nullptr,
   "ring",
   "cedilla",
-  NULL,
+  nullptr,
   "hungarumlaut",
   "ogonek",
   "caron",
   "emdash",
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
   "AE",
-  NULL,
+  nullptr,
   "ordfeminine",
-  NULL,
-  NULL,
-  NULL,
-  NULL,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
   "Lslash",
   "Oslash",
   "OE",
   "ordmasculine",
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
   "ae",
-  NULL,
-  NULL,
-  NULL,
+  nullptr,
+  nullptr,
+  nullptr,
   "dotlessi",
-  NULL,
-  NULL,
+  nullptr,
+  nullptr,
   "lslash",
   "oslash",
   "oe",
   "germandbls",
-  NULL,
-  NULL,
-  NULL,
-  NULL
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr
 };
 
 const char * const fofiType1ExpertEncoding[256] = {
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
   "space",
   "exclamsmall",
   "Hungarumlautsmall",
-  NULL,
+  nullptr,
   "dollaroldstyle",
   "dollarsuperior",
   "ampersandsmall",
@@ -357,28 +357,28 @@
   "threequartersemdash",
   "periodsuperior",
   "questionsmall",
-  NULL,
+  nullptr,
   "asuperior",
   "bsuperior",
   "centsuperior",
   "dsuperior",
   "esuperior",
-  NULL,
-  NULL,
-  NULL,
+  nullptr,
+  nullptr,
+  nullptr,
   "isuperior",
-  NULL,
-  NULL,
+  nullptr,
+  nullptr,
   "lsuperior",
   "msuperior",
   "nsuperior",
   "osuperior",
-  NULL,
-  NULL,
+  nullptr,
+  nullptr,
   "rsuperior",
   "ssuperior",
   "tsuperior",
-  NULL,
+  nullptr,
   "ff",
   "fi",
   "fl",
@@ -385,7 +385,7 @@
   "ffi",
   "ffl",
   "parenleftinferior",
-  NULL,
+  nullptr,
   "parenrightinferior",
   "Circumflexsmall",
   "hyphensuperior",
@@ -420,67 +420,67 @@
   "onefitted",
   "rupiah",
   "Tildesmall",
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
-  NULL,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
+  nullptr,
   "exclamdownsmall",
   "centoldstyle",
   "Lslashsmall",
-  NULL,
-  NULL,
+  nullptr,
+  nullptr,
   "Scaronsmall",
   "Zcaronsmall",
   "Dieresissmall",
   "Brevesmall",
   "Caronsmall",
-  NULL,
+  nullptr,
   "Dotaccentsmall",
-  NULL,
-  NULL,
+  nullptr,
+  nullptr,
   "Macronsmall",
-  NULL,
-  NULL,
+  nullptr,
+  nullptr,
   "figuredash",
   "hypheninferior",
-  NULL,
-  NULL,
+  nullptr,
+  nullptr,
   "Ogoneksmall",
   "Ringsmall",
   "Cedillasmall",
-  NULL,
-  NULL,
-  NULL,
+  nullptr,
+  nullptr,
+  nullptr,
   "onequarter",
   "onehalf",
   "threequarters",
@@ -491,8 +491,8 @@
   "seveneighths",
   "onethird",
   "twothirds",
-  NULL,
-  NULL,
+  nullptr,
+  nullptr,
   "zerosuperior",
   "onesuperior",
   "twosuperior",

Modified: branches/stable/source/src/libs/poppler/poppler-src/fofi/FoFiIdentifier.cc
===================================================================
--- branches/stable/source/src/libs/poppler/poppler-src/fofi/FoFiIdentifier.cc	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/poppler-src/fofi/FoFiIdentifier.cc	2018-04-22 15:47:12 UTC (rev 796)
@@ -14,6 +14,7 @@
 // under GPL version 2 or later
 //
 // Copyright (C) 2013 Christoph Duelli <duelli at melosgmbh.de>
+// Copyright (C) 2018 Albert Astals Cid <aacid at kde.org>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -36,6 +37,9 @@
 
 class Reader {
 public:
+  Reader() = default;
+  Reader(const Reader &) = delete;
+  Reader& operator=(const Reader &other) = delete;
 
   virtual ~Reader() {}
 
@@ -186,7 +190,7 @@
   FILE *fA;
 
   if (!(fA = fopen(fileName, "rb"))) {
-    return NULL;
+    return nullptr;
   }
   return new FileReader(fA);
 }

Modified: branches/stable/source/src/libs/poppler/poppler-src/fofi/FoFiTrueType.cc
===================================================================
--- branches/stable/source/src/libs/poppler/poppler-src/fofi/FoFiTrueType.cc	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/poppler-src/fofi/FoFiTrueType.cc	2018-04-22 15:47:12 UTC (rev 796)
@@ -277,7 +277,7 @@
   ff = new FoFiTrueType(fileA, lenA, gFalse, faceIndexA);
   if (!ff->parsedOk) {
     delete ff;
-    return NULL;
+    return nullptr;
   }
   return ff;
 }
@@ -288,12 +288,12 @@
   int lenA;
 
   if (!(fileA = FoFiBase::readFile(fileName, &lenA))) {
-    return NULL;
+    return nullptr;
   }
   ff = new FoFiTrueType(fileA, lenA, gTrue, faceIndexA);
   if (!ff->parsedOk) {
     delete ff;
-    return NULL;
+    return nullptr;
   }
   return ff;
 }
@@ -301,11 +301,11 @@
 FoFiTrueType::FoFiTrueType(char *fileA, int lenA, GBool freeFileDataA, int faceIndexA):
   FoFiBase(fileA, lenA, freeFileDataA)
 {
-  tables = NULL;
+  tables = nullptr;
   nTables = 0;
-  cmaps = NULL;
+  cmaps = nullptr;
   nCmaps = 0;
-  nameToGID = NULL;
+  nameToGID = nullptr;
   parsedOk = gFalse;
   faceIndex = faceIndexA;
   gsubFeatureTable = 0;
@@ -472,10 +472,10 @@
 
   *nCIDs = 0;
   if (!getCFFBlock(&start, &length)) {
-    return NULL;
+    return nullptr;
   }
   if (!(ff = FoFiType1C::make(start, length))) {
-    return NULL;
+    return nullptr;
   }
   map = ff->getCIDToGIDMap(nCIDs);
   delete ff;
@@ -556,7 +556,7 @@
   // write the guts of the dictionary
   cvtEncoding(encoding, outputFunc, outputStream);
   cvtCharStrings(encoding, codeToGID, outputFunc, outputStream);
-  cvtSfnts(outputFunc, outputStream, NULL, gFalse, &maxUsedGlyph);
+  cvtSfnts(outputFunc, outputStream, nullptr, gFalse, &maxUsedGlyph);
 
   // end the dictionary and define the font
   (*outputFunc)(outputStream, "FontName currentdict end definefont pop\n", 40);
@@ -701,7 +701,7 @@
   (*outputFunc)(outputStream, "  end readonly def\n", 19);
 
   // write the guts of the dictionary
-  cvtSfnts(outputFunc, outputStream, NULL, needVerticalMetrics, &maxUsedGlyph);
+  cvtSfnts(outputFunc, outputStream, nullptr, needVerticalMetrics, &maxUsedGlyph);
 
   // end the dictionary and define the font
   (*outputFunc)(outputStream,
@@ -1061,7 +1061,7 @@
       ++nNewTables;
     }
   }
-  vmtxTab = NULL; // make gcc happy
+  vmtxTab = nullptr; // make gcc happy
   vmtxTabLength = 0;
   advance = 0; // make gcc happy
   if (needVerticalMetrics) {
@@ -1387,7 +1387,7 @@
     nTables = j;
     tables = (TrueTypeTable *)greallocn_checkoverflow(tables, nTables, sizeof(TrueTypeTable));
   }
-  if (!parsedOk || tables == NULL) {
+  if (!parsedOk || tables == nullptr) {
     return;
   }
 
@@ -1451,7 +1451,7 @@
 
 void FoFiTrueType::readPostTable() {
   GooString *name;
-  int tablePos, postFmt, stringIdx, stringPos, savedStringIdx;
+  int tablePos, postFmt, stringIdx, stringPos;
   GBool ok;
   int i, j, n, m;
 
@@ -1481,12 +1481,12 @@
     stringIdx = 0;
     stringPos = tablePos + 34 + 2*n;
     for (i = 0; i < n; ++i) {
+      ok = gTrue;
       j = getU16BE(tablePos + 34 + 2*i, &ok);
       if (j < 258) {
 	nameToGID->removeInt(macGlyphNames[j]);
 	nameToGID->add(new GooString(macGlyphNames[j]), i);
       } else {
-	savedStringIdx = stringIdx;
 	j -= 258;
 	if (j != stringIdx) {
 	  for (stringIdx = 0, stringPos = tablePos + 34 + 2*n;
@@ -1493,26 +1493,18 @@
 	       stringIdx < j;
 	       ++stringIdx, stringPos += 1 + getU8(stringPos, &ok)) ;
 	  if (!ok) {
-	    goto err;
+	    continue;
 	  }
 	}
 	m = getU8(stringPos, &ok);
 	if (!ok || !checkRegion(stringPos + 1, m)) {
-	  stringIdx = savedStringIdx;
-	  if (j < 258) {
-	    ok = gTrue;
-	    nameToGID->removeInt(macGlyphNames[j]);
-	    nameToGID->add(new GooString(macGlyphNames[0]), i);
-	  } else {
-	    goto err;
-	  }
-	} else {
-	  name = new GooString((char *)&file[stringPos + 1], m);
-	  nameToGID->removeInt(name);
-	  nameToGID->add(name, i);
-	  ++stringIdx;
-	  stringPos += 1 + m;
-        }
+	  continue;
+	}
+	name = new GooString((char *)&file[stringPos + 1], m);
+	nameToGID->removeInt(name);
+	nameToGID->add(name, i);
+	++stringIdx;
+	stringPos += 1 + m;
       }
     }
   } else if (postFmt == 0x00028000) {
@@ -1520,7 +1512,7 @@
     for (i = 0; i < nGlyphs; ++i) {
       j = getU8(tablePos + 32 + i, &ok);
       if (!ok) {
-	goto err;
+	continue;
       }
       if (j < 258) {
 	nameToGID->removeInt(macGlyphNames[j]);
@@ -1534,7 +1526,7 @@
  err:
   if (nameToGID) {
     delete nameToGID;
-    nameToGID = NULL;
+    nameToGID = nullptr;
   }
 }
 
@@ -1578,7 +1570,7 @@
 */
 int FoFiTrueType::setupGSUB(const char *scriptName)
 {
-  return setupGSUB(scriptName, NULL);
+  return setupGSUB(scriptName, nullptr);
 }
 
 /*
@@ -1603,7 +1595,7 @@
   int x;
   Guint pos;
 
-  if (scriptName == 0) {
+  if (scriptName == nullptr) {
     gsubFeatureTable = 0;
     return 0;
   }

Modified: branches/stable/source/src/libs/poppler/poppler-src/fofi/FoFiType1.cc
===================================================================
--- branches/stable/source/src/libs/poppler/poppler-src/fofi/FoFiType1.cc	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/poppler-src/fofi/FoFiType1.cc	2018-04-22 15:47:12 UTC (rev 796)
@@ -54,7 +54,7 @@
   int lenA;
 
   if (!(fileA = FoFiBase::readFile(fileName, &lenA))) {
-    return NULL;
+    return nullptr;
   }
   return new FoFiType1(fileA, lenA, gTrue);
 }
@@ -62,8 +62,8 @@
 FoFiType1::FoFiType1(char *fileA, int lenA, GBool freeFileDataA):
   FoFiBase(fileA, lenA, freeFileDataA)
 {
-  name = NULL;
-  encoding = NULL;
+  name = nullptr;
+  encoding = nullptr;
   fontMatrix[0] = 0.001;
   fontMatrix[1] = 0;
   fontMatrix[2] = 0;
@@ -150,7 +150,7 @@
     // skip "/Encoding" + one whitespace char,
     // then look for 'def' preceded by PostScript whitespace
     p = line + 10;
-    line = NULL;
+    line = nullptr;
     for (; p < (char *)file + len; ++p) {
       if ((*p == ' ' || *p == '\t' || *p == '\x0a' ||
 	   *p == '\x0d' || *p == '\x0c' || *p == '\0') &&
@@ -176,7 +176,7 @@
 	// skip "/Encoding" + one whitespace char,
 	// then look for 'def' preceded by PostScript whitespace
 	p = line2 + 10;
-	line = NULL;
+	line = nullptr;
 	for (; p < (char *)file + len; ++p) {
 	  if ((*p == ' ' || *p == '\t' || *p == '\x0a' ||
 	       *p == '\x0d' || *p == '\x0c' || *p == '\0') &&
@@ -207,7 +207,7 @@
     ++line;
   }
   if (line >= (char *)file + len) {
-    return NULL;
+    return nullptr;
   }
   return line;
 }
@@ -243,7 +243,7 @@
 	       !strncmp(line, "/Encoding 256 array", 19)) {
       encoding = (char **)gmallocn(256, sizeof(char *));
       for (j = 0; j < 256; ++j) {
-	encoding[j] = NULL;
+	encoding[j] = nullptr;
       }
       continueLine = gFalse;
       for (j = 0, line = getNextLine(line);
@@ -324,7 +324,7 @@
 	  }
 	} else {
 	  if (strtok_r(buf, " \t", &tokptr) &&
-	      (p = strtok_r(NULL, " \t\n\r", &tokptr)) && !strcmp(p, "def")) {
+	      (p = strtok_r(nullptr, " \t\n\r", &tokptr)) && !strcmp(p, "def")) {
 	    break;
 	  }
 	}
@@ -339,7 +339,7 @@
 	if ((p2 = strchr(p, ']'))) {
 	  *p2 = '\0';
 	  for (j = 0; j < 6; ++j) {
-	    if ((p = strtok(j == 0 ? p : (char *)NULL, " \t\n\r"))) {
+	    if ((p = strtok(j == 0 ? p : (char *)nullptr, " \t\n\r"))) {
 	      fontMatrix[j] = atof(p);
 	    } else {
 	      break;

Modified: branches/stable/source/src/libs/poppler/poppler-src/fofi/FoFiType1C.cc
===================================================================
--- branches/stable/source/src/libs/poppler/poppler-src/fofi/FoFiType1C.cc	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/poppler-src/fofi/FoFiType1C.cc	2018-04-22 15:47:12 UTC (rev 796)
@@ -51,7 +51,7 @@
   ff = new FoFiType1C(fileA, lenA, gFalse);
   if (!ff->parse()) {
     delete ff;
-    return NULL;
+    return nullptr;
   }
   return ff;
 }
@@ -62,12 +62,12 @@
   int lenA;
 
   if (!(fileA = FoFiBase::readFile(fileName, &lenA))) {
-    return NULL;
+    return nullptr;
   }
   ff = new FoFiType1C(fileA, lenA, gTrue);
   if (!ff->parse()) {
     delete ff;
-    return NULL;
+    return nullptr;
   }
   return ff;
 }
@@ -75,11 +75,11 @@
 FoFiType1C::FoFiType1C(char *fileA, int lenA, GBool freeFileDataA):
   FoFiBase(fileA, lenA, freeFileDataA)
 {
-  name = NULL;
-  encoding = NULL;
-  privateDicts = NULL;
-  fdSelect = NULL;
-  charset = NULL;
+  name = nullptr;
+  encoding = nullptr;
+  privateDicts = nullptr;
+  fdSelect = nullptr;
+  charset = nullptr;
   charsetLength = 0;
 }
 
@@ -112,7 +112,7 @@
 }
 
 char *FoFiType1C::getName() {
-  return name ? name->getCString() : (char *)NULL;
+  return name ? name->getCString() : (char *)nullptr;
 }
 
 char **FoFiType1C::getEncoding() {
@@ -125,10 +125,10 @@
 
   ok = gTrue;
   if (gid < 0 || gid >= charsetLength)
-    return NULL;
+    return nullptr;
   getString(charset[gid], buf, &ok);
   if (!ok) {
-    return NULL;
+    return nullptr;
   }
   return new GooString(buf);
 }
@@ -140,7 +140,7 @@
   // a CID font's top dict has ROS as the first operator
   if (topDict.firstOp != 0x0c1e) {
     *nCIDs = 0;
-    return NULL;
+    return nullptr;
   }
 
   // in a CID font, the charset data is the GID-to-CID mapping, so all
@@ -2412,7 +2412,7 @@
   } else {
     encoding = (char **)gmallocn(256, sizeof(char *));
     for (i = 0; i < 256; ++i) {
-      encoding[i] = NULL;
+      encoding[i] = nullptr;
     }
     pos = topDict.encodingOffset;
     encFormat = getU8(pos++, &parsedOk);
@@ -2545,7 +2545,7 @@
     }
     if (!parsedOk) {
       gfree(charset);
-      charset = NULL;
+      charset = nullptr;
       charsetLength = 0;
       return gFalse;
     }

Modified: branches/stable/source/src/libs/poppler/poppler-src/goo/GooHash.cc
===================================================================
--- branches/stable/source/src/libs/poppler/poppler-src/goo/GooHash.cc	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/poppler-src/goo/GooHash.cc	2018-04-22 15:47:12 UTC (rev 796)
@@ -56,7 +56,7 @@
   size = 7;
   tab = (GooHashBucket **)gmallocn(size, sizeof(GooHashBucket *));
   for (h = 0; h < size; ++h) {
-    tab[h] = NULL;
+    tab[h] = nullptr;
   }
   len = 0;
 }
@@ -149,7 +149,7 @@
   int h;
 
   if (!(p = find(key, &h))) {
-    return NULL;
+    return nullptr;
   }
   return p->val.p;
 }
@@ -169,7 +169,7 @@
   int h;
 
   if (!(p = find(key, &h))) {
-    return NULL;
+    return nullptr;
   }
   return p->val.p;
 }
@@ -191,7 +191,7 @@
   int h;
 
   if (!(p = find(key, &h))) {
-    return NULL;
+    return nullptr;
   }
   q = &tab[h];
   while (*q != p) {
@@ -237,7 +237,7 @@
   int h;
 
   if (!(p = find(key, &h))) {
-    return NULL;
+    return nullptr;
   }
   q = &tab[h];
   while (*q != p) {
@@ -279,7 +279,7 @@
 void GooHash::startIter(GooHashIter **iter) {
   *iter = new GooHashIter;
   (*iter)->h = -1;
-  (*iter)->p = NULL;
+  (*iter)->p = nullptr;
 }
 
 GBool GooHash::getNext(GooHashIter **iter, GooString **key, void **val) {
@@ -292,7 +292,7 @@
   while (!(*iter)->p) {
     if (++(*iter)->h == size) {
       delete *iter;
-      *iter = NULL;
+      *iter = nullptr;
       return gFalse;
     }
     (*iter)->p = tab[(*iter)->h];
@@ -312,7 +312,7 @@
   while (!(*iter)->p) {
     if (++(*iter)->h == size) {
       delete *iter;
-      *iter = NULL;
+      *iter = nullptr;
       return gFalse;
     }
     (*iter)->p = tab[(*iter)->h];
@@ -324,7 +324,7 @@
 
 void GooHash::killIter(GooHashIter **iter) {
   delete *iter;
-  *iter = NULL;
+  *iter = nullptr;
 }
 
 void GooHash::expand() {
@@ -337,7 +337,7 @@
   size = 2*size + 1;
   tab = (GooHashBucket **)gmallocn(size, sizeof(GooHashBucket *));
   for (h = 0; h < size; ++h) {
-    tab[h] = NULL;
+    tab[h] = nullptr;
   }
   for (i = 0; i < oldSize; ++i) {
     while (oldTab[i]) {
@@ -363,7 +363,7 @@
       return p;
     }
   }
-  return NULL;
+  return nullptr;
 }
 
 GooHashBucket *GooHash::find(const char *key, int *h) {
@@ -375,7 +375,7 @@
       return p;
     }
   }
-  return NULL;
+  return nullptr;
 }
 
 int GooHash::hash(GooString *key) {

Modified: branches/stable/source/src/libs/poppler/poppler-src/goo/GooMutex.h
===================================================================
--- branches/stable/source/src/libs/poppler/poppler-src/goo/GooMutex.h	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/poppler-src/goo/GooMutex.h	2018-04-22 15:47:12 UTC (rev 796)
@@ -17,7 +17,7 @@
 //
 // Copyright (C) 2009 Kovid Goyal <kovid at kovidgoyal.net>
 // Copyright (C) 2013 Thomas Freitag <Thomas.Freitag at alfa.de>
-// Copyright (C) 2013 Albert Astals Cid <aacid at kde.org>
+// Copyright (C) 2013, 2018 Albert Astals Cid <aacid at kde.org>
 // Copyright (C) 2013 Adam Reichold <adamreichold at myopera.com>
 // Copyright (C) 2014 Bogdan Cristea <cristeab at gmail.com>
 // Copyright (C) 2014 Peter Breitenlohner <peb at mppmu.mpg.de>
@@ -81,6 +81,9 @@
   MutexLocker(GooMutex *mutexA) : mutex(mutexA) { gLockMutex(mutex); }
   ~MutexLocker() { gUnlockMutex(mutex); }
 
+  MutexLocker(const MutexLocker &) = delete;
+  MutexLocker& operator=(const MutexLocker &other) = delete;
+
 private:
   GooMutex *mutex;
 };

Modified: branches/stable/source/src/libs/poppler/poppler-src/goo/GooString.cc
===================================================================
--- branches/stable/source/src/libs/poppler/poppler-src/goo/GooString.cc	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/poppler-src/goo/GooString.cc	2018-04-22 15:47:12 UTC (rev 796)
@@ -114,7 +114,7 @@
   "s",
   "t",
   "w",
-  NULL
+  nullptr
 };
 
 //------------------------------------------------------------------------
@@ -185,9 +185,9 @@
 }
 
 GooString::GooString() {
-  s = NULL;
+  s = nullptr;
   length = 0;
-  Set(NULL);
+  Set(nullptr);
 
 #if __cplusplus >= 201103L
   static_assert(sizeof(GooString) == GooString::STR_FINAL_SIZE, "You should check memory alignment or STR_STATIC_SIZE calculation.");
@@ -195,19 +195,19 @@
 }
 
 GooString::GooString(const char *sA) {
-  s = NULL;
+  s = nullptr;
   length = 0;
   Set(sA, CALC_STRING_LEN);
 }
 
 GooString::GooString(const char *sA, int lengthA) {
-  s = NULL;
+  s = nullptr;
   length = 0;
   Set(sA, lengthA);
 }
 
 GooString::GooString(GooString *str, int idx, int lengthA) {
-  s = NULL;
+  s = nullptr;
   length = 0;
   assert(idx + lengthA <= str->length);
   Set(str->getCString() + idx, lengthA);
@@ -214,13 +214,13 @@
 }
 
 GooString::GooString(const GooString *str) {
-  s = NULL;
+  s = nullptr;
   length = 0;
   Set(str->getCString(), str->length);
 }
 
 GooString::GooString(GooString *str1, GooString *str2) {
-  s = NULL;
+  s = nullptr;
   length = 0;
   resize(str1->length + str2->length);
   memcpy(s, str1->getCString(), str1->length);

Modified: branches/stable/source/src/libs/poppler/poppler-src/goo/GooTimer.cc
===================================================================
--- branches/stable/source/src/libs/poppler/poppler-src/goo/GooTimer.cc	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/poppler-src/goo/GooTimer.cc	2018-04-22 15:47:12 UTC (rev 796)
@@ -32,7 +32,7 @@
 
 void GooTimer::start() {
 #ifdef HAVE_GETTIMEOFDAY
-  gettimeofday(&start_time, NULL);
+  gettimeofday(&start_time, nullptr);
 #elif defined(_WIN32)
   QueryPerformanceCounter(&start_time);
 #endif
@@ -41,7 +41,7 @@
 
 void GooTimer::stop() {
 #ifdef HAVE_GETTIMEOFDAY
-  gettimeofday(&end_time, NULL);
+  gettimeofday(&end_time, nullptr);
 #elif defined(_WIN32)
   QueryPerformanceCounter(&end_time);
 #endif
@@ -55,7 +55,7 @@
   struct timeval elapsed;
 
   if (active)
-    gettimeofday(&end_time, NULL);
+    gettimeofday(&end_time, nullptr);
 
   if (start_time.tv_usec > end_time.tv_usec) {
       end_time.tv_usec += USEC_PER_SEC;

Modified: branches/stable/source/src/libs/poppler/poppler-src/goo/ImgWriter.h
===================================================================
--- branches/stable/source/src/libs/poppler/poppler-src/goo/ImgWriter.h	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/poppler-src/goo/ImgWriter.h	2018-04-22 15:47:12 UTC (rev 796)
@@ -5,7 +5,7 @@
 // This file is licensed under the GPLv2 or later
 //
 // Copyright (C) 2009 Stefan Thomas <thomas at eload24.com>
-// Copyright (C) 2009, 2011 Albert Astals Cid <aacid at kde.org>
+// Copyright (C) 2009, 2011, 2018 Albert Astals Cid <aacid at kde.org>
 // Copyright (C) 2010 Adrian Johnson <ajohnson at redneon.com>
 // Copyright (C) 2010 Brian Cameron <brian.cameron at oracle.com>
 // Copyright (C) 2011 Thomas Freitag <Thomas.Freitag at alfa.de>
@@ -20,6 +20,10 @@
 class ImgWriter
 {
 public:
+  ImgWriter() = default;
+  ImgWriter(const ImgWriter &) = delete;
+  ImgWriter& operator=(const ImgWriter &other) = delete;
+
   virtual ~ImgWriter();
   virtual bool init(FILE *f, int width, int height, int hDPI, int vDPI) = 0;
 

Modified: branches/stable/source/src/libs/poppler/poppler-src/goo/PNGWriter.cc
===================================================================
--- branches/stable/source/src/libs/poppler/poppler-src/goo/PNGWriter.cc	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/poppler-src/goo/PNGWriter.cc	2018-04-22 15:47:12 UTC (rev 796)
@@ -41,9 +41,9 @@
 {
   priv = new PNGWriterPrivate;
   priv->format = formatA;
-  priv->icc_data = NULL;
+  priv->icc_data = nullptr;
   priv->icc_data_size = 0;
-  priv->icc_name = NULL;
+  priv->icc_name = nullptr;
   priv->sRGB_profile = false;
 }
 
@@ -82,7 +82,7 @@
 #endif
 
   /* initialize stuff */
-  priv->png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
+  priv->png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, nullptr, nullptr, nullptr);
   if (!priv->png_ptr) {
     error(errInternal, -1, "png_create_write_struct failed");
     return false;

Modified: branches/stable/source/src/libs/poppler/poppler-src/goo/TiffWriter.cc
===================================================================
--- branches/stable/source/src/libs/poppler/poppler-src/goo/TiffWriter.cc	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/poppler-src/goo/TiffWriter.cc	2018-04-22 15:47:12 UTC (rev 796)
@@ -42,10 +42,10 @@
 TiffWriter::TiffWriter(Format formatA)
 {
   priv = new TiffWriterPrivate;
-  priv->f = NULL;
+  priv->f = nullptr;
   priv->numRows = 0;
   priv->curRow = 0;
-  priv->compressionString = NULL;
+  priv->compressionString = nullptr;
   priv->format = formatA;
 }
 
@@ -87,12 +87,12 @@
     { "dcs",	COMPRESSION_DCS,	"Kodak DCS encoding" },
     { "jbig",	COMPRESSION_JBIG,	"ISO JBIG" },
     { "jp2000",	COMPRESSION_JP2000,	"Leadtools JPEG2000" },
-    { NULL,	0,			NULL }
+    { nullptr,	0,			nullptr }
   };
 
   // Initialize
 
-  priv->f = NULL;
+  priv->f = nullptr;
   priv->curRow = 0;
 
   // Store the number of rows
@@ -103,20 +103,20 @@
 
   compression = COMPRESSION_NONE;
 
-  if (priv->compressionString == NULL || strcmp(priv->compressionString, "") == 0) {
+  if (priv->compressionString == nullptr || strcmp(priv->compressionString, "") == 0) {
     compression = COMPRESSION_NONE;
   } else {
     int i;
-    for (i = 0; compressionList[i].compressionName != NULL; i++) {
+    for (i = 0; compressionList[i].compressionName != nullptr; i++) {
       if (strcmp(priv->compressionString, compressionList[i].compressionName) == 0) {
 	compression = compressionList[i].compressionCode;
 	break;
       }
     }
-    if (compressionList[i].compressionName == NULL) {
+    if (compressionList[i].compressionName == nullptr) {
       fprintf(stderr, "TiffWriter: Unknown compression type '%.10s', using 'none'.\n", priv->compressionString);
       fprintf(stderr, "Known compression types (the tiff library might not support every type)\n");
-      for (i = 0; compressionList[i].compressionName != NULL; i++) {
+      for (i = 0; compressionList[i].compressionName != nullptr; i++) {
 	fprintf(stderr, "%10s %s\n", compressionList[i].compressionName, compressionList[i].compressionDescription);
       }
     }
@@ -157,7 +157,7 @@
 
   // Open the file
 
-  if (openedFile == NULL) {
+  if (openedFile == nullptr) {
     fprintf(stderr, "TiffWriter: No output file given.\n");
     return false;
   }

Modified: branches/stable/source/src/libs/poppler/poppler-src/goo/gfile.cc
===================================================================
--- branches/stable/source/src/libs/poppler/poppler-src/goo/gfile.cc	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/poppler-src/goo/gfile.cc	2018-04-22 15:47:12 UTC (rev 796)
@@ -19,12 +19,12 @@
 // Copyright (C) 2006 Kristian Høgsberg <krh at redhat.com>
 // Copyright (C) 2008 Adam Batkin <adam at batkin.net>
 // Copyright (C) 2008, 2010, 2012, 2013 Hib Eris <hib at hiberis.nl>
-// Copyright (C) 2009, 2012, 2014 Albert Astals Cid <aacid at kde.org>
+// Copyright (C) 2009, 2012, 2014, 2017, 2018 Albert Astals Cid <aacid at kde.org>
 // Copyright (C) 2009 Kovid Goyal <kovid at kovidgoyal.net>
-// Copyright (C) 2013 Adam Reichold <adamreichold at myopera.com>
+// Copyright (C) 2013, 2018 Adam Reichold <adamreichold at myopera.com>
 // Copyright (C) 2013, 2017 Adrian Johnson <ajohnson at redneon.com>
 // Copyright (C) 2013 Peter Breitenlohner <peb at mppmu.mpg.de>
-// Copyright (C) 2013 Thomas Freitag <Thomas.Freitag at alfa.de>
+// Copyright (C) 2013, 2017 Thomas Freitag <Thomas.Freitag at alfa.de>
 // Copyright (C) 2017 Christoph Cullmann <cullmann at kde.org>
 //
 // To see a description of the changes please see the Changelog file that
@@ -34,9 +34,7 @@
 
 #include <config.h>
 
-#ifdef _WIN32
-#  include <time.h>
-#else
+#ifndef _WIN32
 #  if defined(MACOS)
 #    include <sys/stat.h>
 #  elif !defined(ACORN)
@@ -44,7 +42,6 @@
 #    include <sys/stat.h>
 #    include <fcntl.h>
 #  endif
-#  include <time.h>
 #  include <limits.h>
 #  include <string.h>
 #  if !defined(VMS) && !defined(ACORN) && !defined(MACOS)
@@ -65,6 +62,44 @@
 #define PATH_MAX 1024
 #endif
 
+#ifndef _WIN32
+
+namespace {
+
+template< typename... >
+struct void_type
+{
+  using type = void;
+};
+
+template< typename... Args >
+using void_t = typename void_type< Args... >::type;
+
+template< typename Stat, typename = void_t<> >
+struct StatMtim
+{
+  static const struct timespec& value(const Stat& stbuf) {
+    return stbuf.st_mtim;
+  }
+};
+
+// Mac OS X uses a different field name than POSIX and this detects it.
+template< typename Stat >
+struct StatMtim< Stat, void_t< decltype ( Stat::st_mtimespec ) > >
+{
+  static const struct timespec& value(const Stat& stbuf) {
+    return stbuf.st_mtimespec;
+  }
+};
+
+inline const struct timespec& mtim(const struct stat& stbuf) {
+  return StatMtim< struct stat >::value(stbuf);
+}
+
+}
+
+#endif
+
 //------------------------------------------------------------------------
 
 GooString *getCurrentDir() {
@@ -357,7 +392,7 @@
   }
   s->appendf("x_{0:d}_{1:d}_",
 	     (int)GetCurrentProcessId(), (int)GetCurrentThreadId());
-  t = (int)time(NULL);
+  t = (int)time(nullptr);
   for (i = 0; i < 1000; ++i) {
     s2 = s->copy()->appendf("{0:d}", t + i);
     if (!(f2 = fopen(s2->getCString(), "r"))) {
@@ -416,7 +451,7 @@
 #endif // HAVE_MKSTEMP
   if (fd < 0 || !(*f = fdopen(fd, mode))) {
     delete *name;
-    *name = NULL;
+    *name = nullptr;
     return gFalse;
   }
   return gTrue;
@@ -548,7 +583,7 @@
   }
   buf[i] = '\0';
   if (i == 0) {
-    return NULL;
+    return nullptr;
   }
   return buf;
 }
@@ -599,13 +634,17 @@
 
 #ifdef _WIN32
 
+GooFile::GooFile(HANDLE handleA) : handle(handleA) {
+  GetFileTime(handleA, nullptr, nullptr, &modifiedTimeOnOpen);
+}
+
 int GooFile::read(char *buf, int n, Goffset offset) const {
   DWORD m;
   
-  LARGE_INTEGER largeInteger = {0};
+  LARGE_INTEGER largeInteger = {};
   largeInteger.QuadPart = offset;
   
-  OVERLAPPED overlapped = {0};
+  OVERLAPPED overlapped = {};
   overlapped.Offset = largeInteger.LowPart;
   overlapped.OffsetHigh = largeInteger.HighPart;
 
@@ -624,11 +663,11 @@
   HANDLE handle = CreateFileA(fileName->getCString(),
                               GENERIC_READ,
                               FILE_SHARE_READ | FILE_SHARE_WRITE,
-                              NULL,
+                              nullptr,
                               OPEN_EXISTING,
-                              FILE_ATTRIBUTE_NORMAL, NULL);
+                              FILE_ATTRIBUTE_NORMAL, nullptr);
   
-  return handle == INVALID_HANDLE_VALUE ? NULL : new GooFile(handle);
+  return handle == INVALID_HANDLE_VALUE ? nullptr : new GooFile(handle);
 }
 
 GooFile* GooFile::open(const wchar_t *fileName) {
@@ -635,13 +674,21 @@
   HANDLE handle = CreateFileW(fileName,
                               GENERIC_READ,
                               FILE_SHARE_READ | FILE_SHARE_WRITE,
-                              NULL,
+                              nullptr,
                               OPEN_EXISTING,
-                              FILE_ATTRIBUTE_NORMAL, NULL);
+                              FILE_ATTRIBUTE_NORMAL, nullptr);
   
-  return handle == INVALID_HANDLE_VALUE ? NULL : new GooFile(handle);
+  return handle == INVALID_HANDLE_VALUE ? nullptr : new GooFile(handle);
 }
 
+bool GooFile::modificationTimeChangedSinceOpen() const
+{
+  struct _FILETIME lastModified;
+  GetFileTime(handle, nullptr, nullptr, &lastModified);
+
+  return modifiedTimeOnOpen.dwHighDateTime != lastModified.dwHighDateTime || modifiedTimeOnOpen.dwLowDateTime != lastModified.dwLowDateTime;
+}
+
 #else
 
 int GooFile::read(char *buf, int n, Goffset offset) const {
@@ -667,9 +714,25 @@
   int fd = ::open(fileName->getCString(), O_RDONLY);
 #endif
   
-  return fd < 0 ? NULL : new GooFile(fd);
+  return fd < 0 ? nullptr : new GooFile(fd);
 }
 
+GooFile::GooFile(int fdA)
+ : fd(fdA)
+{
+    struct stat statbuf;
+    fstat(fd, &statbuf);
+    modifiedTimeOnOpen = mtim(statbuf);
+}
+
+bool GooFile::modificationTimeChangedSinceOpen() const
+{
+    struct stat statbuf;
+    fstat(fd, &statbuf);
+
+    return modifiedTimeOnOpen.tv_sec != mtim(statbuf).tv_sec || modifiedTimeOnOpen.tv_nsec != mtim(statbuf).tv_nsec;
+}
+
 #endif // _WIN32
 
 //------------------------------------------------------------------------
@@ -749,7 +812,7 @@
 }
 
 GDirEntry *GDir::getNextEntry() {
-  GDirEntry *e = NULL;
+  GDirEntry *e = nullptr;
 
 #if defined(_WIN32)
   if (hnd != INVALID_HANDLE_VALUE) {

Modified: branches/stable/source/src/libs/poppler/poppler-src/goo/gfile.h
===================================================================
--- branches/stable/source/src/libs/poppler/poppler-src/goo/gfile.h	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/poppler-src/goo/gfile.h	2018-04-22 15:47:12 UTC (rev 796)
@@ -16,7 +16,7 @@
 // under GPL version 2 or later
 //
 // Copyright (C) 2006 Kristian Høgsberg <krh at redhat.com>
-// Copyright (C) 2009, 2011, 2012 Albert Astals Cid <aacid at kde.org>
+// Copyright (C) 2009, 2011, 2012, 2017, 2018 Albert Astals Cid <aacid at kde.org>
 // Copyright (C) 2009 Kovid Goyal <kovid at kovidgoyal.net>
 // Copyright (C) 2013 Adam Reichold <adamreichold at myopera.com>
 // Copyright (C) 2013, 2017 Adrian Johnson <ajohnson at redneon.com>
@@ -23,6 +23,7 @@
 // Copyright (C) 2014 Bogdan Cristea <cristeab at gmail.com>
 // Copyright (C) 2014 Peter Breitenlohner <peb at mppmu.mpg.de>
 // Copyright (C) 2017 Christoph Cullmann <cullmann at kde.org>
+// Copyright (C) 2017 Thomas Freitag <Thomas.Freitag at alfa.de>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -36,6 +37,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <stddef.h>
+#include <time.h>
 extern "C" {
 #if defined(_WIN32)
 #  include <sys/stat.h>
@@ -48,8 +50,6 @@
 #    include <windows.h>
 #  endif
 #elif defined(ACORN)
-#elif defined(MACOS)
-#  include <ctime.h>
 #else
 #  include <unistd.h>
 #  include <sys/types.h>
@@ -136,6 +136,9 @@
 class GooFile
 {
 public:
+  GooFile(const GooFile &) = delete;
+  GooFile& operator=(const GooFile &other) = delete;
+
   int read(char *buf, int n, Goffset offset) const;
   Goffset size() const;
   
@@ -145,16 +148,23 @@
   static GooFile *open(const wchar_t *fileName);
   
   ~GooFile() { CloseHandle(handle); }
+
+  // Asuming than on windows you can't change files that are already open
+  bool modificationTimeChangedSinceOpen() const;
   
 private:
-  GooFile(HANDLE handleA): handle(handleA) {}
+  GooFile(HANDLE handleA);
   HANDLE handle;
+  struct _FILETIME modifiedTimeOnOpen;
 #else
   ~GooFile() { close(fd); }
+
+  bool modificationTimeChangedSinceOpen() const;
     
 private:
-  GooFile(int fdA) : fd(fdA) {}
+  GooFile(int fdA);
   int fd;
+  struct timespec modifiedTimeOnOpen;
 #endif // _WIN32
 };
 

Modified: branches/stable/source/src/libs/poppler/poppler-src/goo/glibc.h
===================================================================
--- branches/stable/source/src/libs/poppler/poppler-src/goo/glibc.h	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/poppler-src/goo/glibc.h	2018-04-22 15:47:12 UTC (rev 796)
@@ -7,6 +7,7 @@
 // This file is licensed under the GPLv2 or later
 //
 // Copyright (C) 2016, 2017 Adrian Johnson <ajohnson at redneon.com>
+// Copyright (C) 2017 Albert Astals Cid <aacid at kde.org>
 //
 //========================================================================
 
@@ -17,8 +18,6 @@
 
 #include <time.h>
 
-extern "C" {
-
 #ifndef HAVE_GMTIME_R
 struct tm *gmtime_r(const time_t *timep, struct tm *result);
 #endif
@@ -35,7 +34,5 @@
 char * strtok_r (char *s, const char *delim, char **save_ptr);
 #endif
 
-}
-
 #endif // GLIBC_H
 

Modified: branches/stable/source/src/libs/poppler/poppler-src/goo/glibc_strtok_r.cc
===================================================================
--- branches/stable/source/src/libs/poppler/poppler-src/goo/glibc_strtok_r.cc	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/poppler-src/goo/glibc_strtok_r.cc	2018-04-22 15:47:12 UTC (rev 796)
@@ -50,6 +50,7 @@
 // Copyright (C) 2012 Alexey Pavlov <alexpux at gmail.com>
 // Copyright (C) 2012 Albert Astals Cid <aacid at kde.org>
 // Copyright (C) 2017 Adrian Johnson <ajohnson at redneon.com>
+// Copyright (C) 2017 Pekka Vuorela <pekka.vuorela at jollamobile.com>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -56,6 +57,8 @@
 //
 //========================================================================
 
+#include "glibc.h"
+
 #ifndef HAVE_STRTOK_R
 
 #include <string.h>

Modified: branches/stable/source/src/libs/poppler/poppler-src/goo/gmem.cc
===================================================================
--- branches/stable/source/src/libs/poppler/poppler-src/goo/gmem.cc	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/poppler-src/goo/gmem.cc	2018-04-22 15:47:12 UTC (rev 796)
@@ -105,11 +105,11 @@
   void *p;
 
   if (size == 0) {
-    return NULL;
+    return nullptr;
   }
   if (!(p = malloc(size))) {
     fprintf(stderr, "Out of memory\n");
-    if (checkoverflow) return NULL;
+    if (checkoverflow) return nullptr;
     else exit(1);
   }
   return p;
@@ -153,7 +153,7 @@
     if (p) {
       free(p);
     }
-    return NULL;
+    return nullptr;
   }
   if (p) {
     q = realloc(p, size);
@@ -162,7 +162,7 @@
   }
   if (!q) {
     fprintf(stderr, "Out of memory\n");
-    if (checkoverflow) return NULL;
+    if (checkoverflow) return nullptr;
     else exit(1);
   }
   return q;
@@ -181,12 +181,12 @@
   int n;
 
   if (nObjs == 0) {
-    return NULL;
+    return nullptr;
   }
   n = nObjs * objSize;
   if (objSize <= 0 || nObjs < 0 || nObjs >= INT_MAX / objSize) {
     fprintf(stderr, "Bogus memory allocation size\n");
-    if (checkoverflow) return NULL;
+    if (checkoverflow) return nullptr;
     else exit(1);
   }
   return gmalloc(n, checkoverflow);
@@ -204,7 +204,7 @@
   int n = a * b;
   if (b <= 0 || a < 0 || a >= INT_MAX / b) {
     fprintf(stderr, "Bogus memory allocation size\n");
-    if (checkoverflow) return NULL;
+    if (checkoverflow) return nullptr;
     else exit(1);
   }
   return gmallocn(n, c, checkoverflow);
@@ -225,7 +225,7 @@
     if (p) {
       gfree(p);
     }
-    return NULL;
+    return nullptr;
   }
   n = nObjs * objSize;
   if (objSize <= 0 || nObjs < 0 || nObjs >= INT_MAX / objSize) {
@@ -232,7 +232,7 @@
     fprintf(stderr, "Bogus memory allocation size\n");
     if (checkoverflow) {
       gfree(p);
-      return NULL;
+      return nullptr;
     } else {
       exit(1);
     }

Modified: branches/stable/source/src/libs/poppler/poppler-src/goo/grandom.cc
===================================================================
--- branches/stable/source/src/libs/poppler/poppler-src/goo/grandom.cc	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/poppler-src/goo/grandom.cc	2018-04-22 15:47:12 UTC (rev 796)
@@ -22,7 +22,7 @@
 
 static void initialize() {
   if (!initialized) {
-    seed = time(NULL);
+    seed = time(nullptr);
     initialized = gTrue;
   }
 }
@@ -49,7 +49,7 @@
 
 static void initialize() {
   if (!initialized) {
-    srand(time(NULL));
+    srand(time(nullptr));
     initialized = gTrue;
   }
 }

Modified: branches/stable/source/src/libs/poppler/poppler-src/goo/gstrtod.cc
===================================================================
--- branches/stable/source/src/libs/poppler/poppler-src/goo/gstrtod.cc	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/poppler-src/goo/gstrtod.cc	2018-04-22 15:47:12 UTC (rev 796)
@@ -34,7 +34,7 @@
   
 double gatof(const char *nptr)
 {
-  return gstrtod(nptr, NULL);
+  return gstrtod(nptr, nullptr);
 }
 
 double gstrtod(const char *nptr, char **endptr)
@@ -45,17 +45,17 @@
   const char *decimal_point;
   int decimal_point_len;
   const char *p, *decimal_point_pos;
-  const char *end = NULL; /* Silence gcc */
+  const char *end = nullptr; /* Silence gcc */
   int strtod_errno;
 
-  fail_pos = NULL;
+  fail_pos = nullptr;
 
   locale_data = localeconv ();
   decimal_point = locale_data->decimal_point;
   decimal_point_len = strlen (decimal_point);
 
-  decimal_point_pos = NULL;
-  end = NULL;
+  decimal_point_pos = nullptr;
+  end = nullptr;
 
   if (decimal_point[0] != '.' || decimal_point[1] != 0) {
     p = nptr;

Modified: branches/stable/source/src/libs/poppler/poppler-src/gtkdoc.py
===================================================================
--- branches/stable/source/src/libs/poppler/poppler-src/gtkdoc.py	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/poppler-src/gtkdoc.py	2018-04-22 15:47:12 UTC (rev 796)
@@ -21,6 +21,7 @@
 import subprocess
 import sys
 
+PY2 = sys.version_info[0] == 2
 
 class GTKDoc(object):
 
@@ -194,14 +195,20 @@
 
         if print_output:
             if stdout:
-                try:
-                    sys.stdout.write(stdout.encode("utf-8"))
-                except UnicodeDecodeError:
+                if PY2:
+                    try:
+                        sys.stdout.write(stdout.encode("utf-8"))
+                    except UnicodeDecodeError:
+                        sys.stdout.write(stdout)
+                else:
                     sys.stdout.write(stdout)
             if stderr:
-                try:
-                    sys.stderr.write(stderr.encode("utf-8"))
-                except UnicodeDecodeError:
+                if PY2:
+                    try:
+                        sys.stderr.write(stderr.encode("utf-8"))
+                    except UnicodeDecodeError:
+                        sys.stderr.write(stderr)
+                else:
                     sys.stderr.write(stderr)
 
         if process.returncode != 0:
@@ -319,9 +326,9 @@
             ldflags = ' "-L%s" %s ' % (self.library_path, additional_ldflags) + ldflags
             current_ld_library_path = env.get('LD_LIBRARY_PATH')
             if current_ld_library_path:
-                env['RUN'] = 'LD_LIBRARY_PATH="%s:%s" ' % (self.library_path, current_ld_library_path)
+                env['LD_LIBRARY_PATH'] = '%s:%s' % (self.library_path, current_ld_library_path)
             else:
-                env['RUN'] = 'LD_LIBRARY_PATH="%s" ' % self.library_path
+                env['LD_LIBRARY_PATH'] = self.library_path
 
         if ldflags:
             env['LDFLAGS'] = '%s %s' % (ldflags, env.get('LDFLAGS', ''))

Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/Annot.cc
===================================================================
--- branches/stable/source/src/libs/poppler/poppler-src/poppler/Annot.cc	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/poppler-src/poppler/Annot.cc	2018-04-22 15:47:12 UTC (rev 796)
@@ -114,7 +114,7 @@
 #define bezierCircle 0.55228475
 
 static AnnotLineEndingStyle parseAnnotLineEndingStyle(GooString *string) {
-  if (string != NULL) {
+  if (string != nullptr) {
     if (!string->cmp("Square")) {
       return annotLineEndingSquare;
     } else if (!string->cmp("Circle")) {
@@ -186,7 +186,7 @@
 }
 
 static PDFRectangle *parseDiffRectangle(Array *array, PDFRectangle *rect) {
-  PDFRectangle *newRect = NULL;
+  PDFRectangle *newRect = nullptr;
   if (array->getLength() == 4) {
     // deltas
     Object obj1;
@@ -224,7 +224,7 @@
                        type == Annot::actionPageOpening ?   "PO" :
                        type == Annot::actionPageClosing ?   "PC" :
                        type == Annot::actionPageVisible ?   "PV" :
-                       type == Annot::actionPageInvisible ? "PI" : NULL);
+                       type == Annot::actionPageInvisible ? "PI" : nullptr);
 
     Object actionObject = additionalActionsObject.dictLookup(key);
     if (actionObject.isDict())
@@ -242,7 +242,7 @@
     const char *key = (type == Annot::actionFieldModified ?  "K" :
                        type == Annot::actionFormatField ?    "F" :
                        type == Annot::actionValidateField ?  "V" :
-                       type == Annot::actionCalculateField ? "C" : NULL);
+                       type == Annot::actionCalculateField ? "C" : nullptr);
 
     Object actionObject = additionalActionsObject.dictLookup(key);
     if (actionObject.isDict())
@@ -284,12 +284,12 @@
 //------------------------------------------------------------------------
 
 AnnotPath::AnnotPath() {
-  coords = NULL;
+  coords = nullptr;
   coordsLength = 0;
 }
 
 AnnotPath::AnnotPath(Array *array) {
-  coords = NULL;
+  coords = nullptr;
   coordsLength = 0;
   parsePathArray(array);
 }
@@ -322,7 +322,7 @@
 AnnotCoord *AnnotPath::getCoord(int coord) const {
   if (coord >= 0 && coord < coordsLength)
     return coords[coord];
-  return NULL;
+  return nullptr;
 }
 
 void AnnotPath::parsePathArray(Array *array) {
@@ -398,7 +398,7 @@
   double quadArray[8];
 
   // default values
-  quadrilaterals = NULL;
+  quadrilaterals = nullptr;
   quadrilateralsLength = 0;
 
   if ((arrayLength % 8) == 0) {
@@ -514,7 +514,7 @@
 AnnotBorder::AnnotBorder() {
   width = 1;
   dashLength = 0;
-  dash = NULL;
+  dash = nullptr;
   style = borderSolid;
 }
 
@@ -892,7 +892,7 @@
 }
 
 GooString * AnnotAppearance::getStateKey(int i) {
-  GooString * res = NULL;
+  GooString * res = nullptr;
   Object obj1 = appearDict.dictLookupNF("N");
   if (obj1.isDict())
     res = new GooString(obj1.dictGetKey(i));
@@ -1018,10 +1018,10 @@
     if (colorComponents->getLength() > 0) {
       borderColor = new AnnotColor(colorComponents);
     } else {
-      borderColor = NULL;
+      borderColor = nullptr;
     }
   } else {
-    borderColor = NULL;
+    borderColor = nullptr;
   }
 
   obj1 = dict->lookup("BG");
@@ -1030,10 +1030,10 @@
     if (colorComponents->getLength() > 0) {
       backColor = new AnnotColor(colorComponents);
     } else {
-      backColor = NULL;
+      backColor = nullptr;
     }
   } else {
-    backColor = NULL;
+    backColor = nullptr;
   }
 
   obj1 = dict->lookup("CA");
@@ -1040,7 +1040,7 @@
   if (obj1.isString()) {
     normalCaption = new GooString(obj1.getString());
   } else {
-    normalCaption = NULL;
+    normalCaption = nullptr;
   }
 
   obj1 = dict->lookup("RC");
@@ -1047,7 +1047,7 @@
   if (obj1.isString()) {
     rolloverCaption = new GooString(obj1.getString());
   } else {
-    rolloverCaption = NULL;
+    rolloverCaption = nullptr;
   }
 
   obj1 = dict->lookup("AC");
@@ -1054,7 +1054,7 @@
   if (obj1.isString()) {
     alternateCaption = new GooString(obj1.getString());
   } else {
-    alternateCaption = NULL;
+    alternateCaption = nullptr;
   }
 
   obj1 = dict->lookup("IF");
@@ -1061,7 +1061,7 @@
   if (obj1.isDict()) {
     iconFit = new AnnotIconFit(obj1.getDict());
   } else {
-    iconFit = NULL;
+    iconFit = nullptr;
   }
 
   obj1 = dict->lookup("TP");
@@ -1198,10 +1198,10 @@
   ok = gTrue;
   doc = docA;
   xref = doc->getXRef();
-  appearStreams = NULL;
-  appearBBox = NULL;
-  appearState = NULL;
-  appearBuf = NULL;
+  appearStreams = nullptr;
+  appearBBox = nullptr;
+  appearState = nullptr;
+  appearBuf = nullptr;
   fontSize = 0;
 
   appearance.setToNull();
@@ -1255,7 +1255,7 @@
   if (obj1.isString()) {
     name = obj1.getString()->copy();
   } else {
-    name = NULL;
+    name = nullptr;
   }
 
   obj1 = dict->lookup("M");
@@ -1262,7 +1262,7 @@
   if (obj1.isString()) {
     modified = obj1.getString()->copy();
   } else {
-    modified = NULL;
+    modified = nullptr;
   }
 
   //----- get the flags
@@ -1310,13 +1310,13 @@
   if (obj1.isArray())
     border = new AnnotBorderArray(obj1.getArray());
   else
-    border = NULL;
+    border = nullptr;
 
   obj1 = dict->lookup("C");
   if (obj1.isArray()) {
     color = new AnnotColor(obj1.getArray());
   } else {
-    color = NULL;
+    color = nullptr;
   }
 
   obj1 = dict->lookup("StructParent");
@@ -1380,7 +1380,7 @@
   /* Set M to current time, unless we are updating M itself */
   if (strcmp(key, "M") != 0) {
     delete modified;
-    modified = timeToDateString(NULL);
+    modified = timeToDateString(nullptr);
 
     annotObj.dictSet("M", Object(modified->copy()));
   }
@@ -1447,7 +1447,7 @@
     update(new_border->getType() == AnnotBorder::typeArray ? "Border" : "BS", std::move(obj1));
     border = new_border;
   } else {
-    border = NULL;
+    border = nullptr;
   }
   invalidateAppearance();
 }
@@ -1461,7 +1461,7 @@
     update ("C", std::move(obj1));
     color = new_color;
   } else {
-    color = NULL;
+    color = nullptr;
   }
   invalidateAppearance();
 }
@@ -1493,7 +1493,7 @@
   appearState = new GooString(state);
 
   delete appearBBox;
-  appearBBox = NULL;
+  appearBBox = nullptr;
 
   update ("AS", Object(objName, state));
 
@@ -1511,13 +1511,13 @@
     appearStreams->removeAllStreams();
   }
   delete appearStreams;
-  appearStreams = NULL;
+  appearStreams = nullptr;
 
   delete appearState;
-  appearState = NULL;
+  appearState = nullptr;
 
   delete appearBBox;
-  appearBBox = NULL;
+  appearBBox = nullptr;
 
   appearance.setToNull();
 
@@ -1811,7 +1811,7 @@
 int Annot::getRotation() const
 {
   Page *pageobj = doc->getPage(page);
-  assert(pageobj != NULL);
+  assert(pageobj != nullptr);
 
   if (flags & flagNoRotate) {
     return (360 - pageobj->getRotate()) % 360;
@@ -1827,7 +1827,7 @@
 
   // draw the appearance stream
   Object obj = appearance.fetch(gfx->getXRef());
-  gfx->drawAnnot(&obj, (AnnotBorder *)NULL, color,
+  gfx->drawAnnot(&obj, (AnnotBorder *)nullptr, color,
       rect->x1, rect->y1, rect->x2, rect->y2, getRotation());
 }
 
@@ -1837,8 +1837,6 @@
 
 AnnotPopup::AnnotPopup(PDFDoc *docA, PDFRectangle *rect) :
     Annot(docA, rect) {
-  Object obj1;
-
   type = typePopup;
 
   annotObj.dictSet ("Subtype", Object(objName, "Popup"));
@@ -1916,7 +1914,7 @@
   if (obj1.isString()) {
     label = obj1.getString()->copy();
   } else {
-    label = NULL;
+    label = nullptr;
   }
 
   obj1 = dict->lookup("Popup");
@@ -1924,7 +1922,7 @@
   if (obj1.isDict() && obj2.isRef()) {
     popup = new AnnotPopup(docA, &obj1, &obj2);
   } else {
-    popup = NULL;
+    popup = nullptr;
   }
 
   obj1 = dict->lookup("CA");
@@ -1938,7 +1936,7 @@
   if (obj1.isString()) {
     date = obj1.getString()->copy();
   } else {
-    date = NULL;
+    date = nullptr;
   }
 
   obj1 = dict->lookupNF("IRT");
@@ -1953,7 +1951,7 @@
   if (obj1.isString()) {
     subject = obj1.getString()->copy();
   } else {
-    subject = NULL;
+    subject = nullptr;
   }
 
   obj1 = dict->lookup("RT");
@@ -2000,7 +1998,7 @@
   // associated with a page, then we need to remove that
   // popup annotation from the page. Otherwise we would have
   // dangling references to it.
-  if (popup != NULL && popup->getPageNum() != 0) {
+  if (popup != nullptr && popup->getPageNum() != 0) {
     Page *pageobj = doc->getPage(popup->getPageNum());
     if (pageobj) {
       pageobj->removeAnnot(popup);
@@ -2019,12 +2017,12 @@
     // add the new popup annotation to the same page.
     if (page != 0) {
       Page *pageobj = doc->getPage(page);
-      assert(pageobj != NULL); // pageobj should exist in doc (see setPage())
+      assert(pageobj != nullptr); // pageobj should exist in doc (see setPage())
 
       pageobj->addAnnot(popup);
     }
   } else {
-    popup = NULL;
+    popup = nullptr;
   }
 }
 
@@ -2047,7 +2045,7 @@
 
 void AnnotMarkup::removeReferencedObjects() {
   Page *pageobj = doc->getPage(page);
-  assert(pageobj != NULL); // We're called when removing an annot from a page
+  assert(pageobj != nullptr); // We're called when removing an annot from a page
 
   // Remove popup
   if (popup) {
@@ -2163,8 +2161,6 @@
 }
 
 void AnnotText::setOpen(GBool openA) {
-  Object obj1;
-
   open = openA;
   update ("Open", Object(open));
 }
@@ -2478,7 +2474,7 @@
       delete appearBuf;
 
       appearBuf = new GooString ("/GS0 gs\n/Fm0 Do");
-      Dict *resDict = createResourcesDict("Fm0", std::move(aStream), "GS0", ca, NULL);
+      Dict *resDict = createResourcesDict("Fm0", std::move(aStream), "GS0", ca, nullptr);
       appearance = createForm(bbox, gFalse, resDict);
     }
     delete appearBuf;
@@ -2487,12 +2483,12 @@
   // draw the appearance stream
   Object obj = appearance.fetch(gfx->getXRef());
   if (appearBBox) {
-    gfx->drawAnnot(&obj, (AnnotBorder *)NULL, color,
+    gfx->drawAnnot(&obj, (AnnotBorder *)nullptr, color,
                    appearBBox->getPageXMin(), appearBBox->getPageYMin(),
                    appearBBox->getPageXMax(), appearBBox->getPageYMax(),
                    getRotation());
   } else {
-    gfx->drawAnnot(&obj, (AnnotBorder *)NULL, color,
+    gfx->drawAnnot(&obj, (AnnotBorder *)nullptr, color,
                    rect->x1, rect->y1, rect->x2, rect->y2, getRotation());
   }
 }
@@ -2502,8 +2498,6 @@
 //------------------------------------------------------------------------
 AnnotLink::AnnotLink(PDFDoc *docA, PDFRectangle *rect) :
     Annot(docA, rect) {
-  Object obj1;
-
   type = typeLink;
   annotObj.dictSet ("Subtype", Object(objName, "Link"));
   initialize (docA, annotObj.getDict());
@@ -2529,7 +2523,7 @@
 void AnnotLink::initialize(PDFDoc *docA, Dict *dict) {
   Object obj1;
 
-  action = NULL;
+  action = nullptr;
 
   // look for destination
   obj1 = dict->lookup("Dest");
@@ -2574,7 +2568,7 @@
   if (obj1.isArray()) {
     quadrilaterals = new AnnotQuadrilaterals(obj1.getArray(), rect);
   } else {
-    quadrilaterals = NULL;
+    quadrilaterals = nullptr;
   }
 
   obj1 = dict->lookup("BS");
@@ -2602,8 +2596,6 @@
 //------------------------------------------------------------------------
 AnnotFreeText::AnnotFreeText(PDFDoc *docA, PDFRectangle *rect, GooString *da) :
     AnnotMarkup(docA, rect) {
-  Object obj1;
-
   type = typeFreeText;
 
   annotObj.dictSet ("Subtype", Object(objName, "FreeText"));
@@ -2657,7 +2649,7 @@
   if (obj1.isString()) {
     styleString = obj1.getString()->copy();
   } else {
-    styleString = NULL;
+    styleString = nullptr;
   }
 
   obj1 = dict->lookup("CL");
@@ -2679,7 +2671,7 @@
       calloutLine = new AnnotCalloutLine(x1, y1, x2, y2);
     }
   } else {
-    calloutLine = NULL;
+    calloutLine = nullptr;
   }
 
   obj1 = dict->lookup("IT");
@@ -2711,7 +2703,7 @@
   if (obj1.isDict()) {
     borderEffect = new AnnotBorderEffect(obj1.getDict());
   } else {
-    borderEffect = NULL;
+    borderEffect = nullptr;
   }
 
   obj1 = dict->lookup("RD");
@@ -2718,7 +2710,7 @@
   if (obj1.isArray()) {
     rectangle = parseDiffRectangle(obj1.getArray(), rect);
   } else {
-    rectangle = NULL;
+    rectangle = nullptr;
   }
 
   obj1 = dict->lookup("LE");
@@ -2749,7 +2741,6 @@
 }
 
 void AnnotFreeText::setQuadding(AnnotFreeTextQuadding new_quadding) {
-  Object obj1;
   quadding = new_quadding;
   update ("Q", Object((int)quadding));
   invalidateAppearance();
@@ -2775,9 +2766,9 @@
   delete calloutLine;
 
   Object obj1;
-  if (line == NULL) {
+  if (line == nullptr) {
     obj1.setToNull();
-    calloutLine = NULL;
+    calloutLine = nullptr;
   } else {
     double x1 = line->getX1(), y1 = line->getY1();
     double x2 = line->getX2(), y2 = line->getY2();
@@ -2834,7 +2825,7 @@
 
 void AnnotFreeText::parseAppearanceString(GooString *da, double &fontsize, AnnotColor* &fontcolor) {
   fontsize = -1;
-  fontcolor = NULL;
+  fontcolor = nullptr;
   if (da) {
     GooList * daToks = new GooList();
     int i = FormFieldText::tokenizeDA(da, daToks, "Tf");
@@ -2845,7 +2836,7 @@
     }
     // Scan backwards: we are looking for the last set value
     for (i = daToks->getLength()-1; i >= 0; --i) {
-      if (fontcolor == NULL) {
+      if (fontcolor == nullptr) {
         if (!((GooString *)daToks->get(i))->cmp("g") && i >= 1) {
           fontcolor = new AnnotColor(gatof(( (GooString *)daToks->get(i-1) )->getCString()));
         } else if (!((GooString *)daToks->get(i))->cmp("rg") && i >= 3) {
@@ -2886,7 +2877,7 @@
   // Default values
   if (fontsize <= 0)
     fontsize = 10;
-  if (fontcolor == NULL)
+  if (fontcolor == nullptr)
     fontcolor = new AnnotColor(0, 0, 0); // Black
   if (!contents)
     contents = new GooString ();
@@ -2925,7 +2916,7 @@
   while (i < contents->getLength()) {
     GooString out;
     double linewidth, xpos;
-    layoutText(contents, &out, &i, font, &linewidth, textwidth/fontsize, NULL, gFalse);
+    layoutText(contents, &out, &i, font, &linewidth, textwidth/fontsize, nullptr, gFalse);
     linewidth *= fontsize;
     switch (quadding) {
     case quaddingCentered:
@@ -2960,7 +2951,7 @@
     delete appearBuf;
 
     appearBuf = new GooString ("/GS0 gs\n/Fm0 Do");
-    Dict *resDict = createResourcesDict("Fm0", std::move(aStream), "GS0", ca, NULL);
+    Dict *resDict = createResourcesDict("Fm0", std::move(aStream), "GS0", ca, nullptr);
     appearance = createForm(bbox, gFalse, resDict);
   }
   delete appearBuf;
@@ -2977,7 +2968,7 @@
 
   // draw the appearance stream
   Object obj = appearance.fetch(gfx->getXRef());
-  gfx->drawAnnot(&obj, (AnnotBorder *)NULL, color,
+  gfx->drawAnnot(&obj, (AnnotBorder *)nullptr, color,
                  rect->x1, rect->y1, rect->x2, rect->y2, getRotation());
 }
 
@@ -2996,8 +2987,6 @@
 
 AnnotLine::AnnotLine(PDFDoc *docA, PDFRectangle *rect) :
     AnnotMarkup(docA, rect) {
-  Object obj1;
-
   type = typeLine;
   annotObj.dictSet ("Subtype", Object(objName, "Line"));
 
@@ -3065,7 +3054,7 @@
   if (obj1.isArray()) {
     interiorColor = new AnnotColor(obj1.getArray());
   } else {
-    interiorColor = NULL;
+    interiorColor = nullptr;
   }
 
   obj1 = dict->lookup("LL");
@@ -3134,9 +3123,9 @@
 
   obj1 = dict->lookup("Measure");
   if (obj1.isDict()) {
-    measure = NULL;
+    measure = nullptr;
   } else {
-    measure = NULL;
+    measure = nullptr;
   }
 
   obj1 = dict->lookup("CO");
@@ -3202,7 +3191,7 @@
     update ("IC", std::move(obj1));
     interiorColor = new_color;
   } else {
-    interiorColor = NULL;
+    interiorColor = nullptr;
   }
   invalidateAppearance();
 }
@@ -3289,7 +3278,7 @@
     while (i < contents->getLength()) {
       GooString out;
       double linewidth;
-      layoutText(contents, &out, &i, font, &linewidth, 0, NULL, gFalse);
+      layoutText(contents, &out, &i, font, &linewidth, 0, nullptr, gFalse);
       linewidth *= fontsize;
       if (linewidth > captionwidth) {
         captionwidth = linewidth;
@@ -3303,7 +3292,7 @@
     }
   } else {
     fontResDict = nullptr;
-    font = NULL;
+    font = nullptr;
   }
 
   // Draw main segment
@@ -3358,7 +3347,7 @@
     while (i < contents->getLength()) {
       GooString out;
       double linewidth, xpos;
-      layoutText(contents, &out, &i, font, &linewidth, 0, NULL, gFalse);
+      layoutText(contents, &out, &i, font, &linewidth, 0, nullptr, gFalse);
       linewidth *= fontsize;
       xpos = (captionwidth - linewidth) / 2;
       appearBuf->appendf("{0:.2f} {1:.2f} Td\n", xpos - xposPrev, -fontsize);
@@ -3400,7 +3389,7 @@
     delete appearBuf;
 
     appearBuf = new GooString ("/GS0 gs\n/Fm0 Do");
-    Dict *resDict = createResourcesDict("Fm0", std::move(aStream), "GS0", ca, NULL);
+    Dict *resDict = createResourcesDict("Fm0", std::move(aStream), "GS0", ca, nullptr);
     appearance = createForm(bbox, gFalse, resDict);
   }
   delete appearBuf;
@@ -3418,12 +3407,12 @@
   // draw the appearance stream
   Object obj = appearance.fetch(gfx->getXRef());
   if (appearBBox) {
-    gfx->drawAnnot(&obj, (AnnotBorder *)NULL, color,
+    gfx->drawAnnot(&obj, (AnnotBorder *)nullptr, color,
                    appearBBox->getPageXMin(), appearBBox->getPageYMin(),
                    appearBBox->getPageXMax(), appearBBox->getPageYMax(),
                    getRotation());
   } else {
-    gfx->drawAnnot(&obj, (AnnotBorder *)NULL, color,
+    gfx->drawAnnot(&obj, (AnnotBorder *)nullptr, color,
                    rect->x1, rect->y1, rect->x2, rect->y2, getRotation());
   }
 }
@@ -3442,8 +3431,6 @@
 //------------------------------------------------------------------------
 AnnotTextMarkup::AnnotTextMarkup(PDFDoc *docA, PDFRectangle *rect, AnnotSubtype subType) :
     AnnotMarkup(docA, rect) {
-  Object obj1;
-
   switch (subType) {
     case typeHighlight:
       annotObj.dictSet ("Subtype", Object(objName, "Highlight"));
@@ -3500,7 +3487,7 @@
     quadrilaterals = new AnnotQuadrilaterals(obj1.getArray(), rect);
   } else {
     error(errSyntaxError, -1, "Bad Annot Text Markup QuadPoints");
-    quadrilaterals = NULL;
+    quadrilaterals = nullptr;
     ok = gFalse;
   }
 }
@@ -3695,11 +3682,11 @@
     bbox[1] = appearBBox->getPageYMin();
     bbox[2] = appearBBox->getPageXMax();
     bbox[3] = appearBBox->getPageYMax();
-    aStream = createForm(bbox, gTrue, NULL);
+    aStream = createForm(bbox, gTrue, nullptr);
     delete appearBuf;
 
     appearBuf = new GooString ("/GS0 gs\n/Fm0 Do");
-    Dict *resDict = createResourcesDict("Fm0", std::move(aStream), "GS0", 1, blendMultiply ? "Multiply" : NULL);
+    Dict *resDict = createResourcesDict("Fm0", std::move(aStream), "GS0", 1, blendMultiply ? "Multiply" : nullptr);
     if (ca == 1) {
       appearance = createForm(bbox, gFalse, resDict);
     } else {
@@ -3707,7 +3694,7 @@
       delete appearBuf;
 
       appearBuf = new GooString ("/GS0 gs\n/Fm0 Do");
-      Dict *resDict2 = createResourcesDict("Fm0", std::move(aStream), "GS0", ca, NULL);
+      Dict *resDict2 = createResourcesDict("Fm0", std::move(aStream), "GS0", ca, nullptr);
       appearance = createForm(bbox, gFalse, resDict2);
     }
     delete appearBuf;
@@ -3716,12 +3703,12 @@
   // draw the appearance stream
   Object obj = appearance.fetch(gfx->getXRef());
   if (appearBBox) {
-    gfx->drawAnnot(&obj, (AnnotBorder *)NULL, color,
+    gfx->drawAnnot(&obj, (AnnotBorder *)nullptr, color,
                    appearBBox->getPageXMin(), appearBBox->getPageYMin(),
                    appearBBox->getPageXMax(), appearBBox->getPageYMax(),
                    getRotation());
   } else {
-    gfx->drawAnnot(&obj, (AnnotBorder *)NULL, color,
+    gfx->drawAnnot(&obj, (AnnotBorder *)nullptr, color,
                    rect->x1, rect->y1, rect->x2, rect->y2, getRotation());
   }
 }
@@ -3733,7 +3720,7 @@
 AnnotWidget::AnnotWidget(PDFDoc *docA, Object *dictObject, Object *obj) :
     Annot(docA, dictObject, obj) {
   type = typeWidget;
-  field = NULL;
+  field = nullptr;
   initialize(docA, dictObject->getDict());
 }
 
@@ -3781,10 +3768,10 @@
   if (obj1.isDict()) {
     appearCharacs = new AnnotAppearanceCharacs(obj1.getDict());
   } else {
-    appearCharacs = NULL;
+    appearCharacs = nullptr;
   }
 
-  action = NULL;
+  action = nullptr;
   obj1 = dict->lookup("A");
   if (obj1.isDict()) {
     action = LinkAction::parseAction(&obj1, doc->getCatalog()->getBaseURI());
@@ -3794,9 +3781,9 @@
 
   obj1 = dict->lookup("Parent");
   if (obj1.isDict()) {
-    parent = NULL;
+    parent = nullptr;
   } else {
-    parent = NULL;
+    parent = nullptr;
   }
 
   obj1 = dict->lookup("BS");
@@ -4008,13 +3995,13 @@
 
   // Compute the actual width and character count of the final string, based on
   // breakpoint, if this information is requested by the caller.
-  if (width != NULL || charCount != NULL) {
+  if (width != nullptr || charCount != nullptr) {
     char *s = outBuf->getCString();
     int len = outBuf->getLength();
 
-    if (width != NULL)
+    if (width != nullptr)
       *width = 0.0;
-    if (charCount != NULL)
+    if (charCount != nullptr)
       *charCount = 0;
 
     while (len > 0) {
@@ -4025,9 +4012,9 @@
         break;
       }
 
-      if (width != NULL)
+      if (width != nullptr)
         *width += dx;
-      if (charCount != NULL)
+      if (charCount != nullptr)
         *charCount += 1;
 
       s += n;
@@ -4104,7 +4091,7 @@
       }
     }
   } else {
-    daToks = NULL;
+    daToks = nullptr;
   }
 
   // force ZapfDingbats
@@ -4118,7 +4105,7 @@
     }
   }
   // get the font and font size
-  font = NULL;
+  font = nullptr;
   fontSize = 0;
   if (tfPos >= 0) {
     tok = (GooString *)daToks->get(tfPos);
@@ -4214,7 +4201,7 @@
         y = dy - 3;
         i = 0;
         while (i < text->getLength()) {
-          layoutText(text, convertedText, &i, font, &w, wMax / fontSize, NULL,
+          layoutText(text, convertedText, &i, font, &w, wMax / fontSize, nullptr,
                      forceZapfDingbats);
           y -= fontSize;
         }
@@ -4261,7 +4248,7 @@
     i = 0;
     xPrev = 0;
     while (i < text->getLength()) {
-      layoutText(text, convertedText, &i, font, &w, wMax / fontSize, NULL,
+      layoutText(text, convertedText, &i, font, &w, wMax / fontSize, nullptr,
                  forceZapfDingbats);
       w *= fontSize;
 
@@ -4314,7 +4301,7 @@
       }
 
       i = 0;
-      layoutText(text, convertedText, &i, font, NULL, 0.0, &charCount,
+      layoutText(text, convertedText, &i, font, nullptr, 0.0, &charCount,
                  forceZapfDingbats);
       if (charCount > comb)
         charCount = comb;
@@ -4391,7 +4378,7 @@
       // regular (non-comb) formatting
     } else {
       i = 0;
-      layoutText(text, convertedText, &i, font, &w, 0.0, NULL,
+      layoutText(text, convertedText, &i, font, &w, 0.0, nullptr,
                  forceZapfDingbats);
 
       // compute font autosize
@@ -4508,11 +4495,11 @@
       }
     }
   } else {
-    daToks = NULL;
+    daToks = nullptr;
   }
 
   // get the font and font size
-  font = NULL;
+  font = nullptr;
   fontSize = 0;
   if (tfPos >= 0) {
     tok = (GooString *)daToks->get(tfPos);
@@ -4545,7 +4532,7 @@
     wMax = 0;
     for (i = 0; i < fieldChoice->getNumChoices(); ++i) {
       j = 0;
-      if (fieldChoice->getChoice(i) == NULL) {
+      if (fieldChoice->getChoice(i) == nullptr) {
         error(errSyntaxError, -1, "Invalid annotation listbox");
         if (daToks) {
           deleteGooList(daToks, GooString);
@@ -4553,7 +4540,7 @@
         delete convertedText;
         return;
       }
-      layoutText(fieldChoice->getChoice(i), convertedText, &j, font, &w, 0.0, NULL, gFalse);
+      layoutText(fieldChoice->getChoice(i), convertedText, &j, font, &w, 0.0, nullptr, gFalse);
       if (w > wMax) {
         wMax = w;
       }
@@ -4591,7 +4578,7 @@
 
     // compute text width and start position
     j = 0;
-    layoutText(fieldChoice->getChoice(i), convertedText, &j, font, &w, 0.0, NULL, gFalse);
+    layoutText(fieldChoice->getChoice(i), convertedText, &j, font, &w, 0.0, nullptr, gFalse);
     w *= fontSize;
     switch (quadding) {
     case quaddingLeftJustified:
@@ -4668,7 +4655,7 @@
   double dy = rect->y2 - rect->y1;
 
   // radio buttons with no caption have a round border
-  GBool hasCaption = appearCharacs->getNormalCaption() != NULL;
+  GBool hasCaption = appearCharacs->getNormalCaption() != nullptr;
   if (field->getType() == formButton &&
       static_cast<FormFieldButton*>(field)->getButtonType() == formButtonRadio && !hasCaption) {
     double r = 0.5 * (dx < dy ? dx : dy);
@@ -4757,7 +4744,7 @@
 }
 
 void AnnotWidget::drawFormFieldButton(GfxResources *resources, GooString *da) {
-  GooString *caption = NULL;
+  GooString *caption = nullptr;
   if (appearCharacs)
     caption = appearCharacs->getNormalCaption();
 
@@ -4978,7 +4965,7 @@
     gfx->pushResources(dict);
     delete dict;
   }
-  gfx->drawAnnot(&obj, (AnnotBorder *)NULL, color,
+  gfx->drawAnnot(&obj, (AnnotBorder *)nullptr, color,
 		 rect->x1, rect->y1, rect->x2, rect->y2, getRotation());
   if (addDingbatsResource) {
     gfx->popResources();
@@ -4991,8 +4978,6 @@
 //------------------------------------------------------------------------
 AnnotMovie::AnnotMovie(PDFDoc *docA, PDFRectangle *rect, Movie *movieA) :
     Annot(docA, rect) {
-  Object obj1;
-
   type = typeMovie;
   annotObj.dictSet ("Subtype", Object(objName, "Movie"));
 
@@ -5021,7 +5006,7 @@
   if (obj1.isString()) {
     title = obj1.getString()->copy();
   } else {
-    title = NULL;
+    title = nullptr;
   }
 
   Object movieDict = dict->lookup("Movie");
@@ -5033,12 +5018,12 @@
       movie = new Movie (&movieDict);
     if (!movie->isOk()) {
       delete movie;
-      movie = NULL;
+      movie = nullptr;
       ok = gFalse;
     }
   } else {
     error(errSyntaxError, -1, "Bad Annot Movie");
-    movie = NULL;
+    movie = nullptr;
     ok = gFalse;
   }
 }
@@ -5118,7 +5103,7 @@
 
   // draw the appearance stream
   Object obj = appearance.fetch(gfx->getXRef());
-  gfx->drawAnnot(&obj, (AnnotBorder *)NULL, color,
+  gfx->drawAnnot(&obj, (AnnotBorder *)nullptr, color,
 		 rect->x1, rect->y1, rect->x2, rect->y2, getRotation());
 }
 
@@ -5127,8 +5112,6 @@
 //------------------------------------------------------------------------
 AnnotScreen::AnnotScreen(PDFDoc *docA, PDFRectangle *rect) :
     Annot(docA, rect) {
-  Object obj1;
-
   type = typeScreen;
 
   annotObj.dictSet ("Subtype", Object(objName, "Screen"));
@@ -5150,13 +5133,13 @@
 void AnnotScreen::initialize(PDFDoc *docA, Dict* dict) {
   Object obj1;
 
-  title = NULL;
+  title = nullptr;
   obj1 = dict->lookup("T");
   if (obj1.isString()) {
     title = obj1.getString()->copy();
   }
 
-  action = NULL;
+  action = nullptr;
   obj1 = dict->lookup("A");
   if (obj1.isDict()) {
     action = LinkAction::parseAction(&obj1, doc->getCatalog()->getBaseURI());
@@ -5163,7 +5146,7 @@
     if (action && action->getKind() == actionRendition && page == 0) {
       error (errSyntaxError, -1, "Invalid Rendition action: associated screen annotation without P");
       delete action;
-      action = NULL;
+      action = nullptr;
       ok = gFalse;
     }
   }
@@ -5170,7 +5153,7 @@
 
   additionalActions = dict->lookupNF("AA");
 
-  appearCharacs = NULL;
+  appearCharacs = nullptr;
   obj1 = dict->lookup("MK");
   if (obj1.isDict()) {
     appearCharacs = new AnnotAppearanceCharacs(obj1.getDict());
@@ -5180,7 +5163,7 @@
 LinkAction* AnnotScreen::getAdditionalAction(AdditionalActionsType type)
 {
   if (type == actionFocusIn || type == actionFocusOut) // not defined for screen annotation
-    return NULL;
+    return nullptr;
 
   return ::getAdditionalAction(type, &additionalActions, doc);
 }
@@ -5190,8 +5173,6 @@
 //------------------------------------------------------------------------
 AnnotStamp::AnnotStamp(PDFDoc *docA, PDFRectangle *rect) :
   AnnotMarkup(docA, rect) {
-  Object obj1;
-
   type = typeStamp;
   annotObj.dictSet ("Subtype", Object(objName, "Stamp"));
   initialize(docA, annotObj.getDict());
@@ -5235,8 +5216,6 @@
 //------------------------------------------------------------------------
 AnnotGeometry::AnnotGeometry(PDFDoc *docA, PDFRectangle *rect, AnnotSubtype subType) :
     AnnotMarkup(docA, rect) {
-  Object obj1;
-
   switch (subType) {
     case typeSquare:
       annotObj.dictSet ("Subtype", Object(objName, "Square"));
@@ -5281,7 +5260,7 @@
   if (obj1.isArray()) {
     interiorColor = new AnnotColor(obj1.getArray());
   } else {
-    interiorColor = NULL;
+    interiorColor = nullptr;
   }
 
   obj1 = dict->lookup("BS");
@@ -5296,10 +5275,10 @@
   if (obj1.isDict()) {
     borderEffect = new AnnotBorderEffect(obj1.getDict());
   } else {
-    borderEffect = NULL;
+    borderEffect = nullptr;
   }
 
-  geometryRect = NULL;
+  geometryRect = nullptr;
   obj1 = dict->lookup("RD");
   if (obj1.isArray()) {
     geometryRect = parseDiffRectangle(obj1.getArray(), rect);
@@ -5333,7 +5312,7 @@
     update ("IC", std::move(obj1));
     interiorColor = new_color;
   } else {
-    interiorColor = NULL;
+    interiorColor = nullptr;
   }
   invalidateAppearance();
 }
@@ -5430,7 +5409,7 @@
       delete appearBuf;
 
       appearBuf = new GooString ("/GS0 gs\n/Fm0 Do");
-      Dict *resDict = createResourcesDict("Fm0", std::move(aStream), "GS0", ca, NULL);
+      Dict *resDict = createResourcesDict("Fm0", std::move(aStream), "GS0", ca, nullptr);
       appearance = createForm(bbox, gFalse, resDict);
     }
     delete appearBuf;
@@ -5438,7 +5417,7 @@
 
   // draw the appearance stream
   Object obj = appearance.fetch(gfx->getXRef());
-  gfx->drawAnnot(&obj, (AnnotBorder *)NULL, color,
+  gfx->drawAnnot(&obj, (AnnotBorder *)nullptr, color,
 		 rect->x1, rect->y1, rect->x2, rect->y2, getRotation());
 }
 
@@ -5447,8 +5426,6 @@
 //------------------------------------------------------------------------
 AnnotPolygon::AnnotPolygon(PDFDoc *docA, PDFRectangle *rect, AnnotSubtype subType) :
     AnnotMarkup(docA, rect) {
-  Object obj1;
-
   switch (subType) {
     case typePolygon:
       annotObj.dictSet ("Subtype", Object(objName, "Polygon"));
@@ -5530,7 +5507,7 @@
   if (obj1.isArray()) {
     interiorColor = new AnnotColor(obj1.getArray());
   } else {
-    interiorColor = NULL;
+    interiorColor = nullptr;
   }
 
   obj1 = dict->lookup("BS");
@@ -5545,7 +5522,7 @@
   if (obj1.isDict()) {
     borderEffect = new AnnotBorderEffect(obj1.getDict());
   } else {
-    borderEffect = NULL;
+    borderEffect = nullptr;
   }
 
   obj1 = dict->lookup("IT");
@@ -5618,7 +5595,7 @@
     update ("IC", std::move(obj1));
     interiorColor = new_color;
   } else {
-    interiorColor = NULL;
+    interiorColor = nullptr;
   }
   invalidateAppearance();
 }
@@ -5692,7 +5669,7 @@
       delete appearBuf;
 
       appearBuf = new GooString ("/GS0 gs\n/Fm0 Do");
-      Dict *resDict = createResourcesDict("Fm0", std::move(aStream), "GS0", ca, NULL);
+      Dict *resDict = createResourcesDict("Fm0", std::move(aStream), "GS0", ca, nullptr);
       appearance = createForm(bbox, gFalse, resDict);
     }
     delete appearBuf;
@@ -5701,12 +5678,12 @@
   // draw the appearance stream
   Object obj = appearance.fetch(gfx->getXRef());
   if (appearBBox) {
-    gfx->drawAnnot(&obj, (AnnotBorder *)NULL, color,
+    gfx->drawAnnot(&obj, (AnnotBorder *)nullptr, color,
                    appearBBox->getPageXMin(), appearBBox->getPageYMin(),
                    appearBBox->getPageXMax(), appearBBox->getPageYMax(),
                    getRotation());
   } else {
-    gfx->drawAnnot(&obj, (AnnotBorder *)NULL, color,
+    gfx->drawAnnot(&obj, (AnnotBorder *)nullptr, color,
                    rect->x1, rect->y1, rect->x2, rect->y2, getRotation());
   }
 }
@@ -5716,8 +5693,6 @@
 //------------------------------------------------------------------------
 AnnotCaret::AnnotCaret(PDFDoc *docA, PDFRectangle *rect) :
     AnnotMarkup(docA, rect) {
-  Object obj1;
-
   type = typeCaret;
 
   annotObj.dictSet ("Subtype", Object(objName, "Caret"));
@@ -5752,7 +5727,7 @@
   if (obj1.isArray()) {
     caretRect = parseDiffRectangle(obj1.getArray(), rect);
   } else {
-    caretRect = NULL;
+    caretRect = nullptr;
   }
 }
 
@@ -5767,14 +5742,11 @@
 //------------------------------------------------------------------------
 AnnotInk::AnnotInk(PDFDoc *docA, PDFRectangle *rect) :
     AnnotMarkup(docA, rect) {
-  Object obj1;
-
   type = typeInk;
 
   annotObj.dictSet ("Subtype", Object(objName, "Ink"));
 
   // Store dummy path with one null vertex only
-  Object obj3, obj4;
   Array *inkList = new Array(doc->getXRef());
   Array *vList = new Array(doc->getXRef());
   vList->add(Object(0.));
@@ -5803,7 +5775,7 @@
     parseInkList(obj1.getArray());
   } else {
     inkListLength = 0;
-    inkList = NULL;
+    inkList = nullptr;
     error(errSyntaxError, -1, "Bad Annot Ink List");
     ok = gFalse;
   }
@@ -5906,7 +5878,7 @@
       delete appearBuf;
 
       appearBuf = new GooString ("/GS0 gs\n/Fm0 Do");
-      Dict *resDict = createResourcesDict("Fm0", std::move(aStream), "GS0", ca, NULL);
+      Dict *resDict = createResourcesDict("Fm0", std::move(aStream), "GS0", ca, nullptr);
       appearance = createForm(bbox, gFalse, resDict);
     }
     delete appearBuf;
@@ -5915,12 +5887,12 @@
   // draw the appearance stream
   Object obj = appearance.fetch(gfx->getXRef());
   if (appearBBox) {
-    gfx->drawAnnot(&obj, (AnnotBorder *)NULL, color,
+    gfx->drawAnnot(&obj, (AnnotBorder *)nullptr, color,
                    appearBBox->getPageXMin(), appearBBox->getPageYMin(),
                    appearBBox->getPageXMax(), appearBBox->getPageYMax(),
                    getRotation());
   } else {
-    gfx->drawAnnot(&obj, (AnnotBorder *)NULL, color,
+    gfx->drawAnnot(&obj, (AnnotBorder *)nullptr, color,
                    rect->x1, rect->y1, rect->x2, rect->y2, getRotation());
   }
 }
@@ -5930,8 +5902,6 @@
 //------------------------------------------------------------------------
 AnnotFileAttachment::AnnotFileAttachment(PDFDoc *docA, PDFRectangle *rect, GooString *filename) :
     AnnotMarkup(docA, rect) {
-  Object obj1;
-
   type = typeFileAttachment;
 
   annotObj.dictSet("Subtype", Object(objName, "FileAttachment"));
@@ -6118,7 +6088,7 @@
       delete appearBuf;
 
       appearBuf = new GooString ("/GS0 gs\n/Fm0 Do");
-      Dict *resDict = createResourcesDict("Fm0", std::move(aStream), "GS0", ca, NULL);
+      Dict *resDict = createResourcesDict("Fm0", std::move(aStream), "GS0", ca, nullptr);
       appearance = createForm(bbox, gFalse, resDict);
     }
     delete appearBuf;
@@ -6126,7 +6096,7 @@
 
   // draw the appearance stream
   Object obj = appearance.fetch(gfx->getXRef());
-  gfx->drawAnnot(&obj, (AnnotBorder *)NULL, color,
+  gfx->drawAnnot(&obj, (AnnotBorder *)nullptr, color,
 		 rect->x1, rect->y1, rect->x2, rect->y2, getRotation());
 }
 
@@ -6135,8 +6105,6 @@
 //------------------------------------------------------------------------
 AnnotSound::AnnotSound(PDFDoc *docA, PDFRectangle *rect, Sound *soundA) :
     AnnotMarkup(docA, rect) {
-  Object obj1;
-
   type = typeSound;
 
   annotObj.dictSet ("Subtype", Object(objName, "Sound"));
@@ -6271,7 +6239,7 @@
       delete appearBuf;
 
       appearBuf = new GooString ("/GS0 gs\n/Fm0 Do");
-      Dict *resDict = createResourcesDict("Fm0", std::move(aStream), "GS0", ca, NULL);
+      Dict *resDict = createResourcesDict("Fm0", std::move(aStream), "GS0", ca, nullptr);
       appearance = createForm(bbox, gFalse, resDict);
     }
     delete appearBuf;
@@ -6279,7 +6247,7 @@
 
   // draw the appearance stream
   obj = appearance.fetch(gfx->getXRef());
-  gfx->drawAnnot(&obj, (AnnotBorder *)NULL, color,
+  gfx->drawAnnot(&obj, (AnnotBorder *)nullptr, color,
 		 rect->x1, rect->y1, rect->x2, rect->y2, getRotation());
 }
 
@@ -6288,8 +6256,6 @@
 //------------------------------------------------------------------------
 Annot3D::Annot3D(PDFDoc *docA, PDFRectangle *rect) :
     Annot(docA, rect) {
-  Object obj1;
-
   type = type3D;
 
   annotObj.dictSet ("Subtype", Object(objName, "3D"));
@@ -6313,7 +6279,7 @@
   if (obj1.isDict()) {
     activation = new Activation(obj1.getDict());
   } else {
-    activation = NULL;
+    activation = nullptr;
   }
 }
 
@@ -6406,8 +6372,6 @@
 //------------------------------------------------------------------------
 AnnotRichMedia::AnnotRichMedia(PDFDoc *docA, PDFRectangle *rect) :
     Annot(docA, rect) {
-  Object obj1;
-
   type = typeRichMedia;
 
   annotObj.dictSet ("Subtype", Object(objName, "RichMedia"));
@@ -6431,7 +6395,7 @@
   if (obj1.isDict()) {
     content = new AnnotRichMedia::Content(obj1.getDict());
   } else {
-    content = NULL;
+    content = nullptr;
   }
 
   obj1 = dict->lookup("RichMediaSettings");
@@ -6438,7 +6402,7 @@
   if (obj1.isDict()) {
     settings = new AnnotRichMedia::Settings(obj1.getDict());
   } else {
-    settings = NULL;
+    settings = nullptr;
   }
 }
 
@@ -6455,7 +6419,7 @@
   if (obj1.isDict()) {
     activation = new AnnotRichMedia::Activation(obj1.getDict());
   } else {
-    activation = NULL;
+    activation = nullptr;
   }
 
   obj1 = dict->lookup("Deactivation");
@@ -6462,7 +6426,7 @@
   if (obj1.isDict()) {
     deactivation = new AnnotRichMedia::Deactivation(obj1.getDict());
   } else {
-    deactivation = NULL;
+    deactivation = nullptr;
   }
 }
 
@@ -6537,16 +6501,16 @@
       if (obj2.isDict()) {
         configurations[i] = new AnnotRichMedia::Configuration(obj2.getDict());
       } else {
-        configurations[i] = NULL;
+        configurations[i] = nullptr;
       }
     }
   } else {
     nConfigurations = 0;
-    configurations = NULL;
+    configurations = nullptr;
   }
 
   nAssets = 0;
-  assets = NULL;
+  assets = nullptr;
   obj1 = dict->lookup("Assets");
   if (obj1.isDict()) {
     Object obj2 = obj1.getDict()->lookup("Names");
@@ -6590,7 +6554,7 @@
 
 AnnotRichMedia::Configuration* AnnotRichMedia::Content::getConfiguration(int index) const {
   if (index < 0 || index >= nConfigurations)
-    return NULL;
+    return nullptr;
 
   return configurations[index];
 }
@@ -6601,13 +6565,13 @@
 
 AnnotRichMedia::Asset* AnnotRichMedia::Content::getAsset(int index) const {
   if (index < 0 || index >= nAssets)
-    return NULL;
+    return nullptr;
 
   return assets[index];
 }
 
 AnnotRichMedia::Asset::Asset()
-  : name(NULL)
+  : name(nullptr)
 {
 }
 
@@ -6637,11 +6601,11 @@
       if (obj2.isDict()) {
         instances[i] = new AnnotRichMedia::Instance(obj2.getDict());
       } else {
-        instances[i] = NULL;
+        instances[i] = nullptr;
       }
     }
   } else {
-    instances = NULL;
+    instances = nullptr;
   }
 
   obj1 = dict->lookup("Name");
@@ -6648,7 +6612,7 @@
   if (obj1.isString()) {
     name = new GooString(obj1.getString());
   } else {
-    name = NULL;
+    name = nullptr;
   }
 
   obj1 = dict->lookup("Subtype");
@@ -6710,7 +6674,7 @@
 
 AnnotRichMedia::Instance* AnnotRichMedia::Configuration::getInstance(int index) const {
   if (index < 0 || index >= nInstances)
-    return NULL;
+    return nullptr;
 
   return instances[index];
 }
@@ -6744,7 +6708,7 @@
   if (obj1.isDict()) {
     params = new AnnotRichMedia::Params(obj1.getDict());
   } else {
-    params = NULL;
+    params = nullptr;
   }
 }
 
@@ -6767,7 +6731,7 @@
   if (obj1.isString()) {
     flashVars = new GooString(obj1.getString());
   } else {
-    flashVars = NULL;
+    flashVars = nullptr;
   }
 }
 
@@ -6789,7 +6753,7 @@
   int i;
 
   doc = docA;
-  annots = NULL;
+  annots = nullptr;
   size = 0;
   nAnnots = 0;
 
@@ -6920,7 +6884,7 @@
       if (obj2.isNull())
         annot = new AnnotPopup(doc, dictObject, obj);
       else
-        annot = NULL;
+        annot = nullptr;
     } else {
       annot = new Annot(doc, dictObject, obj);
     }
@@ -6937,7 +6901,7 @@
       return annots[i];
     }
   }
-  return NULL;
+  return nullptr;
 }
 
 

Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/Annot.h
===================================================================
--- branches/stable/source/src/libs/poppler/poppler-src/poppler/Annot.h	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/poppler-src/poppler/Annot.h	2018-04-22 15:47:12 UTC (rev 796)
@@ -21,7 +21,7 @@
 // Copyright (C) 2008 Hugo Mercier <hmercier31 at gmail.com>
 // Copyright (C) 2008 Pino Toscano <pino at kde.org>
 // Copyright (C) 2008 Tomas Are Haavet <tomasare at gmail.com>
-// Copyright (C) 2009-2011, 2013, 2016, 2017 Albert Astals Cid <aacid at kde.org>
+// Copyright (C) 2009-2011, 2013, 2016-2018 Albert Astals Cid <aacid at kde.org>
 // Copyright (C) 2012, 2013 Fabio D'Urso <fabiodurso at hotmail.it>
 // Copyright (C) 2012, 2015 Tobias Koenig <tokoe at kdab.com>
 // Copyright (C) 2013 Thomas Freitag <Thomas.Freitag at alfa.de>
@@ -105,6 +105,9 @@
   AnnotPath(AnnotCoord **coords, int coordLength);
   ~AnnotPath();
 
+  AnnotPath(const AnnotPath &) = delete;
+  AnnotPath& operator=(const AnnotPath &other) = delete;
+
   double getX(int coord) const;
   double getY(int coord) const;
   AnnotCoord *getCoord(int coord) const;
@@ -126,6 +129,9 @@
   AnnotCalloutLine(double x1, double y1, double x2, double y2);
   virtual ~AnnotCalloutLine() { }
 
+  AnnotCalloutLine(const AnnotCalloutLine &) = delete;
+  AnnotCalloutLine& operator=(const AnnotCalloutLine &other) = delete;
+
   double getX1() const { return coord1.getX(); }
   double getY1() const { return coord1.getY(); }
   double getX2() const { return coord2.getX(); }
@@ -195,6 +201,9 @@
   AnnotQuadrilaterals(AnnotQuadrilateral **quads, int quadsLength);
   ~AnnotQuadrilaterals();
 
+  AnnotQuadrilaterals(const AnnotQuadrilaterals &) = delete;
+  AnnotQuadrilaterals& operator=(const AnnotQuadrilaterals &other) = delete;
+
   double getX1(int quadrilateral);
   double getY1(int quadrilateral);
   double getX2(int quadrilateral);
@@ -231,6 +240,9 @@
 
   virtual ~AnnotBorder();
 
+  AnnotBorder(const AnnotBorder &) = delete;
+  AnnotBorder& operator=(const AnnotBorder &other) = delete;
+
   virtual void setWidth(double new_width) { width = new_width; }
 
   virtual AnnotBorderType getType() const = 0;
@@ -429,6 +441,9 @@
   AnnotAppearanceCharacs(Dict *dict);
   ~AnnotAppearanceCharacs();
 
+  AnnotAppearanceCharacs(const AnnotAppearanceCharacs &) = delete;
+  AnnotAppearanceCharacs& operator=(const AnnotAppearanceCharacs &) = delete;
+
   int getRotation() { return rotation; }
   AnnotColor *getBorderColor() { return borderColor; }
   AnnotColor *getBackColor() { return backColor; }
@@ -1420,6 +1435,9 @@
     Params(Dict *dict);
     ~Params();
 
+    Params(const Params &) = delete;
+    Params& operator=(const Params &) = delete;
+
     GooString* getFlashVars() const;
 
   private:
@@ -1439,6 +1457,9 @@
     Instance(Dict *dict);
     ~Instance();
 
+    Instance(const Instance &) = delete;
+    Instance& operator=(const Instance &) = delete;
+
     Type getType() const;
     Params* getParams() const;
 
@@ -1460,6 +1481,9 @@
     Configuration(Dict *dict);
     ~Configuration();
 
+    Configuration(const Configuration &) = delete;
+    Configuration& operator=(const Configuration &) = delete;
+
     Type getType() const;
     GooString* getName() const;
     int getInstancesCount() const;
@@ -1480,6 +1504,9 @@
     Asset();
     ~Asset();
 
+    Asset(const Asset &) = delete;
+    Asset& operator=(const Asset &) = delete;
+
     GooString* getName() const;
     Object* getFileSpec() const;
 
@@ -1495,6 +1522,9 @@
     Content(Dict *dict);
     ~Content();
 
+    Content(const Content &) = delete;
+    Content& operator=(const Content &) = delete;
+
     int getConfigurationsCount() const;
     Configuration* getConfiguration(int index) const;
 
@@ -1549,6 +1579,9 @@
     Settings(Dict *dict);
     ~Settings();
 
+    Settings(const Settings &) = delete;
+    Settings& operator=(const Settings &) = delete;
+
     Activation* getActivation() const;
     Deactivation* getDeactivation() const;
 
@@ -1589,6 +1622,9 @@
 
   ~Annots();
 
+  Annots(const Annots &) = delete;
+  Annots& operator=(const Annots &) = delete;
+
   // Iterate through list of annotations.
   int getNumAnnots() { return nAnnots; }
   Annot *getAnnot(int i) { return annots[i]; }

Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/Array.cc
===================================================================
--- branches/stable/source/src/libs/poppler/poppler-src/poppler/Array.cc	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/poppler-src/poppler/Array.cc	2018-04-22 15:47:12 UTC (rev 796)
@@ -47,7 +47,7 @@
 
 Array::Array(XRef *xrefA) {
   xref = xrefA;
-  elems = NULL;
+  elems = nullptr;
   size = length = 0;
   ref = 1;
 #ifdef MULTITHREADED

Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/Array.h
===================================================================
--- branches/stable/source/src/libs/poppler/poppler-src/poppler/Array.h	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/poppler-src/poppler/Array.h	2018-04-22 15:47:12 UTC (rev 796)
@@ -16,7 +16,7 @@
 // Copyright (C) 2005 Kristian Høgsberg <krh at redhat.com>
 // Copyright (C) 2012 Fabio D'Urso <fabiodurso at hotmail.it>
 // Copyright (C) 2013 Thomas Freitag <Thomas.Freitag at alfa.de>
-// Copyright (C) 2017 Albert Astals Cid <aacid at kde.org>
+// Copyright (C) 2017, 2018 Albert Astals Cid <aacid at kde.org>
 // Copyright (C) 2017 Adrian Johnson <ajohnson at redneon.com>
 //
 // To see a description of the changes please see the Changelog file that
@@ -50,6 +50,9 @@
   // Destructor.
   ~Array();
 
+  Array(const Array &) = delete;
+  Array& operator=(const Array &) = delete;
+
   // Get number of elements.
   int getLength() const { return length; }
 

Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/BuiltinFont.cc
===================================================================
--- branches/stable/source/src/libs/poppler/poppler-src/poppler/BuiltinFont.cc	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/poppler-src/poppler/BuiltinFont.cc	2018-04-22 15:47:12 UTC (rev 796)
@@ -26,7 +26,7 @@
   size = sizeA;
   tab = (BuiltinFontWidth **)gmallocn(size, sizeof(BuiltinFontWidth *));
   for (i = 0; i < size; ++i) {
-    tab[i] = NULL;
+    tab[i] = nullptr;
   }
   for (i = 0; i < sizeA; ++i) {
     h = hash(widths[i].name);

Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/BuiltinFont.h
===================================================================
--- branches/stable/source/src/libs/poppler/poppler-src/poppler/BuiltinFont.h	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/poppler-src/poppler/BuiltinFont.h	2018-04-22 15:47:12 UTC (rev 796)
@@ -6,6 +6,20 @@
 //
 //========================================================================
 
+//========================================================================
+//
+// Modified under the Poppler project - http://poppler.freedesktop.org
+//
+// All changes made under the Poppler project to this file are licensed
+// under GPL version 2 or later
+//
+// Copyright (C) 2018 Albert Astals Cid <aacid at kde.org>
+//
+// To see a description of the changes please see the Changelog file that
+// came with your tarball or type make ChangeLog if you are building from git
+//
+//========================================================================
+
 #ifndef BUILTINFONT_H
 #define BUILTINFONT_H
 
@@ -42,6 +56,10 @@
 
   BuiltinFontWidths(BuiltinFontWidth *widths, int sizeA);
   ~BuiltinFontWidths();
+
+  BuiltinFontWidths(const BuiltinFontWidths &) = delete;
+  BuiltinFontWidths& operator=(const BuiltinFontWidths &) = delete;
+
   GBool getWidth(const char *name, Gushort *width);
 
 private:

Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/BuiltinFontTables.cc
===================================================================
--- branches/stable/source/src/libs/poppler/poppler-src/poppler/BuiltinFontTables.cc	2018-02-27 23:34:23 UTC (rev 795)
+++ branches/stable/source/src/libs/poppler/poppler-src/poppler/BuiltinFontTables.cc	2018-04-22 15:47:12 UTC (rev 796)
@@ -12,4235 +12,4235 @@
 #include "BuiltinFontTables.h"
 
 static BuiltinFontWidth courierWidthsTab[] = {
-  { "Ntilde",                            600, NULL },
-  { "rcaron",                            600, NULL },
-  { "kcommaaccent",                      600, NULL },
-  { "Ncommaaccent",                      600, NULL },
-  { "Zacute",                            600, NULL },
-  { "comma",                             600, NULL },
-  { "cedilla",                           600, NULL },
-  { "plusminus",                         600, NULL },
-  { "circumflex",                        600, NULL },
-  { "dotaccent",                         600, NULL },
-  { "edotaccent",                        600, NULL },
-  { "asciitilde",                        600, NULL },
-  { "colon",                             600, NULL },
-  { "onehalf",                           600, NULL },
-  { "dollar",                            600, NULL },
-  { "Lcaron",                            600, NULL },
-  { "ntilde",                            600, NULL },
-  { "Aogonek",                           600, NULL },
-  { "ncommaaccent",                      600, NULL },
-  { "minus",                             600, NULL },
-  { "Iogonek",                           600, NULL },
-  { "zacute",                            600, NULL },
-  { "yen",                               600, NULL },
-  { "space",                             600, NULL },
-  { "Omacron",                           600, NULL },
-  { "questiondown",                      600, NULL },
-  { "emdash",                            600, NULL },
-  { "Agrave",                            600, NULL },
-  { "three",                             600, NULL },
-  { "numbersign",                        600, NULL },
-  { "lcaron",                            600, NULL },
-  { "A",                                 600, NULL },
-  { "B",                                 600, NULL },
-  { "C",                                 600, NULL },
-  { "aogonek",                           600, NULL },
-  { "D",                                 600, NULL },
-  { "E",                                 600, NULL },
-  { "onequarter",                        600, NULL },
-  { "F",                                 600, NULL },
-  { "G",                                 600, NULL },
-  { "H",                                 600, NULL },
-  { "I",                                 600, NULL },
-  { "J",                                 600, NULL },
-  { "K",                                 600, NULL },
-  { "iogonek",                           600, NULL },
-  { "L",                                 600, NULL },
-  { "backslash",                         600, NULL },
-  { "periodcentered",                    600, NULL },
-  { "M",                                 600, NULL },
-  { "N",                                 600, NULL },
-  { "omacron",                           600, NULL },
-  { "Tcommaaccent",                      600, NULL },
-  { "O",                                 600, NULL },
-  { "P",                                 600, NULL },
-  { "Q",                                 600, NULL },
-  { "Uhungarumlaut",                     600, NULL },
-  { "R",                                 600, NULL },
-  { "Aacute",                            600, NULL },
-  { "caron",                             600, NULL },
-  { "S",                                 600, NULL },
-  { "T",                                 600, NULL },
-  { "U",                                 600, NULL },
-  { "agrave",                            600, NULL },
-  { "V",                                 600, NULL },
-  { "W",                                 600, NULL },
-  { "equal",                             600, NULL },
-  { "question",                          600, NULL },
-  { "X",                                 600, NULL },
-  { "Y",                                 600, NULL },
-  { "Z",                                 600, NULL },
-  { "four",                              600, NULL },
-  { "a",                                 600, NULL },
-  { "Gcommaaccent",                      600, NULL },
-  { "b",                                 600, NULL },
-  { "c",                                 600, NULL },
-  { "d",                                 600, NULL },
-  { "e",                                 600, NULL },
-  { "f",                                 600, NULL },
-  { "g",                                 600, NULL },
-  { "bullet",                            600, NULL },
-  { "h",                                 600, NULL },
-  { "i",                                 600, NULL },
-  { "Oslash",                            600, NULL },
-  { "dagger",                            600, NULL },
-  { "j",                                 600, NULL },
-  { "k",                                 600, NULL },
-  { "l",                                 600, NULL },
-  { "m",                                 600, NULL },
-  { "n",                                 600, NULL },
-  { "tcommaaccent",                      600, NULL },
-  { "o",                                 600, NULL },
-  { "ordfeminine",                       600, NULL },
-  { "ring",                              600, NULL },
-  { "p",                                 600, NULL },
-  { "q",                                 600, NULL },
-  { "uhungarumlaut",                     600, NULL },
-  { "r",                                 600, NULL },
-  { "twosuperior",                       600, NULL },
-  { "aacute",                            600, NULL },
-  { "s",                                 600, NULL },
-  { "OE",                                600, NULL },
-  { "t",                                 600, NULL },
-  { "divide",                            600, NULL },
-  { "u",                                 600, NULL },
-  { "Ccaron",                            600, NULL },
-  { "v",                                 600, NULL },
-  { "w",                                 600, NULL },
-  { "x",                                 600, NULL },
-  { "y",                                 600, NULL },
-  { "z",                                 600, NULL },
-  { "Gbreve",                            600, NULL },
-  { "commaaccent",                       600, NULL },
-  { "hungarumlaut",                      600, NULL },
-  { "Idotaccent",                        600, NULL },
-  { "Nacute",                            600, NULL },
-  { "quotedbl",                          600, NULL },
-  { "gcommaaccent",                      600, NULL },
-  { "mu",                                600, NULL },
-  { "greaterequal",                      600, NULL },
-  { "Scaron",                            600, NULL },
-  { "Lslash",                            600, NULL },
-  { "semicolon",                         600, NULL },
-  { "oslash",                            600, NULL },
-  { "lessequal",                         600, NULL },
-  { "lozenge",                           600, NULL },
-  { "parenright",                        600, NULL },
-  { "ccaron",                            600, NULL },
-  { "Ecircumflex",                       600, NULL },
-  { "gbreve",                            600, NULL },
-  { "trademark",                         600, NULL },
-  { "daggerdbl",                         600, NULL },
-  { "nacute",                            600, NULL },
-  { "macron",                            600, NULL },
-  { "Otilde",                            600, NULL },
-  { "Emacron",                           600, NULL },
-  { "ellipsis",                          600, NULL },
-  { "scaron",                            600, NULL },
-  { "AE",                                600, NULL },
-  { "Ucircumflex",                       600, NULL },
-  { "lslash",                            600, NULL },
-  { "quotedblleft",                      600, NULL },
-  { "hyphen",                            600, NULL },
-  { "guilsinglright",                    600, NULL },
-  { "quotesingle",                       600, NULL },
-  { "eight",                             600, NULL },
-  { "exclamdown",                        600, NULL },
-  { "endash",                            600, NULL },
-  { "oe",                                600, NULL },
-  { "Abreve",                            600, NULL },
-  { "Umacron",                           600, NULL },
-  { "ecircumflex",                       600, NULL },
-  { "Adieresis",                         600, NULL },
-  { "copyright",                         600, NULL },
-  { "Egrave",                            600, NULL },
-  { "slash",                             600, NULL },
-  { "Edieresis",                         600, NULL },
-  { "otilde",                            600, NULL },
-  { "Idieresis",                         600, NULL },
-  { "parenleft",                         600, NULL },
-  { "one",                               600, NULL },
-  { "emacron",                           600, NULL },
-  { "Odieresis",                         600, NULL },
-  { "ucircumflex",                       600, NULL },
-  { "bracketleft",                       600, NULL },
-  { "Ugrave",                            600, NULL },
-  { "quoteright",                        600, NULL },
-  { "Udieresis",                         600, NULL },
-  { "perthousand",                       600, NULL },
-  { "Ydieresis",                         600, NULL },
-  { "umacron",                           600, NULL },
-  { "abreve",                            600, NULL },
-  { "Eacute",                            600, NULL },
-  { "adieresis",                         600, NULL },
-  { "egrave",                            600, NULL },
-  { "edieresis",                         600, NULL },
-  { "idieresis",                         600, NULL },
-  { "Eth",                               600, NULL },
-  { "ae",                                600, NULL },
-  { "asterisk",                          600, NULL },
-  { "odieresis",                         600, NULL },
-  { "Uacute",                            600, NULL },
-  { "ugrave",                            600, NULL },
-  { "five",                              600, NULL },
-  { "nine",                              600, NULL },
-  { "udieresis",                         600, NULL },
-  { "Zcaron",                            600, NULL },
-  { "Scommaaccent",                      600, NULL },
-  { "threequarters",                     600, NULL },
-  { "guillemotright",                    600, NULL },
-  { "Ccedilla",                          600, NULL },
-  { "ydieresis",                         600, NULL },
-  { "tilde",                             600, NULL },
-  { "at",                                600, NULL },
-  { "eacute",                            600, NULL },
-  { "underscore",                        600, NULL },
-  { "Euro",                              600, NULL },
-  { "Dcroat",                            600, NULL },
-  { "zero",                              600, NULL },
-  { "multiply",                          600, NULL },
-  { "eth",                               600, NULL },
-  { "Scedilla",                          600, NULL },
-  { "Racute",                            600, NULL },
-  { "Ograve",                            600, NULL },
-  { "partialdiff",                       600, NULL },
-  { "uacute",                            600, NULL },
-  { "braceleft",                         600, NULL },
-  { "Thorn",                             600, NULL },
-  { "zcaron",                            600, NULL },
-  { "scommaaccent",                      600, NULL },
-  { "ccedilla",                          600, NULL },
-  { "Dcaron",                            600, NULL },
-  { "dcroat",                            600, NULL },
-  { "scedilla",                          600, NULL },
-  { "Oacute",                            600, NULL },
-  { "Ocircumflex",                       600, NULL },
-  { "ogonek",                            600, NULL },
-  { "ograve",                            600, NULL },
-  { "racute",                            600, NULL },
-  { "Tcaron",                            600, NULL },
-  { "Eogonek",                           600, NULL },
-  { "thorn",                             600, NULL },
-  { "degree",                            600, NULL },
-  { "registered",                        600, NULL },
-  { "radical",                           600, NULL },
-  { "Aring",                             600, NULL },
-  { "percent",                           600, NULL },
-  { "six",                               600, NULL },
-  { "paragraph",                         600, NULL },
-  { "dcaron",                            600, NULL },
-  { "Uogonek",                           600, NULL },
-  { "two",                               600, NULL },
-  { "summation",                         600, NULL },
-  { "Igrave",                            600, NULL },
-  { "Lacute",                            600, NULL },
-  { "ocircumflex",                       600, NULL },
-  { "oacute",                            600, NULL },
-  { "Uring",                             600, NULL },
-  { "Lcommaaccent",                      600, NULL },
-  { "tcaron",                            600, NULL },
-  { "eogonek",                           600, NULL },
-  { "Delta",                             600, NULL },
-  { "Ohungarumlaut",                     600, NULL },
-  { "asciicircum",                       600, NULL },
-  { "aring",                             600, NULL },
-  { "grave",                             600, NULL },
-  { "uogonek",                           600, NULL },
-  { "bracketright",                      600, NULL },
-  { "ampersand",                         600, NULL },
-  { "Iacute",                            600, NULL },
-  { "lacute",                            600, NULL },
-  { "igrave",                            600, NULL },
-  { "Ncaron",                            600, NULL },
-  { "plus",                              600, NULL },
-  { "uring",                             600, NULL },
-  { "quotesinglbase",                    600, NULL },
-  { "lcommaaccent",                      600, NULL },
-  { "Yacute",                            600, NULL },
-  { "ohungarumlaut",                     600, NULL },
-  { "threesuperior",                     600, NULL },
-  { "acute",                             600, NULL },
-  { "section",                           600, NULL },
-  { "dieresis",                          600, NULL },
-  { "quotedblbase",                      600, NULL },
-  { "iacute",                            600, NULL },
-  { "ncaron",                            600, NULL },
-  { "florin",                            600, NULL },
-  { "yacute",                            600, NULL },
-  { "Rcommaaccent",                      600, NULL },
-  { "fi",                                600, NULL },
-  { "fl",                                600, NULL },
-  { "Acircumflex",                       600, NULL },
-  { "Cacute",                            600, NULL },
-  { "Icircumflex",                       600, NULL },
-  { "guillemotleft",                     600, NULL },
-  { "germandbls",                        600, NULL },
-  { "seven",                             600, NULL },
-  { "Amacron",                           600, NULL },
-  { "Sacute",                            600, NULL },
-  { "ordmasculine",                      600, NULL },
-  { "dotlessi",                          600, NULL },
-  { "sterling",                          600, NULL },
-  { "notequal",                          600, NULL },
-  { "Imacron",                           600, NULL },
-  { "rcommaaccent",                      600, NULL },
-  { "Zdotaccent",                        600, NULL },
-  { "acircumflex",                       600, NULL },
-  { "cacute",                            600, NULL },
-  { "Ecaron",                            600, NULL },
-  { "braceright",                        600, NULL },
-  { "icircumflex",                       600, NULL },
-  { "quotedblright",                     600, NULL },
-  { "amacron",                           600, NULL },
-  { "sacute",                            600, NULL },
-  { "imacron",                           600, NULL },
-  { "cent",                              600, NULL },
-  { "currency",                          600, NULL },
-  { "logicalnot",                        600, NULL },
-  { "zdotaccent",                        600, NULL },
-  { "Atilde",                            600, NULL },
-  { "breve",                             600, NULL },
-  { "bar",                               600, NULL },
-  { "fraction",                          600, NULL },
-  { "less",                              600, NULL },
-  { "ecaron",                            600, NULL },
-  { "guilsinglleft",                     600, NULL },
-  { "exclam",                            600, NULL },
-  { "period",                            600, NULL },
-  { "Rcaron",                            600, NULL },
-  { "Kcommaaccent",                      600, NULL },
-  { "greater",                           600, NULL },
-  { "atilde",                            600, NULL },
-  { "brokenbar",                         600, NULL },
-  { "quoteleft",                         600, NULL },
-  { "Edotaccent",                        600, NULL },
-  { "onesuperior",                       600, NULL }
+  { "Ntilde",                            600, nullptr },
+  { "rcaron",                            600, nullptr },
+  { "kcommaaccent",                      600, nullptr },
+  { "Ncommaaccent",                      600, nullptr },
+  { "Zacute",                            600, nullptr },
+  { "comma",                             600, nullptr },
+  { "cedilla",                           600, nullptr },
+  { "plusminus",                         600, nullptr },
+  { "circumflex",                        600, nullptr },
+  { "dotaccent",                         600, nullptr },
+  { "edotaccent",                        600, nullptr },
+  { "asciitilde",                        600, nullptr },
+  { "colon",                             600, nullptr },
+  { "onehalf",                           600, nullptr },
+  { "dollar",                            600, nullptr },
+  { "Lcaron",                            600, nullptr },
+  { "ntilde",                            600, nullptr },
+  { "Aogonek",                           600, nullptr },
+  { "ncommaaccent",                      600, nullptr },
+  { "minus",                             600, nullptr },
+  { "Iogonek",                           600, nullptr },
+  { "zacute",                            600, nullptr },
+  { "yen",                               600, nullptr },
+  { "space",                             600, nullptr },
+  { "Omacron",                           600, nullptr },
+  { "questiondown",                      600, nullptr },
+  { "emdash",                            600, nullptr },
+  { "Agrave",                            600, nullptr },
+  { "three",                             600, nullptr },
+  { "numbersign",                        600, nullptr },
+  { "lcaron",                            600, nullptr },
+  { "A",                                 600, nullptr },
+  { "B",                                 600, nullptr },
+  { "C",                                 600, nullptr },
+  { "aogonek",                           600, nullptr },
+  { "D",                                 600, nullptr },
+  { "E",                                 600, nullptr },
+  { "onequarter",                        600, nullptr },
+  { "F",                                 600, nullptr },
+  { "G",                                 600, nullptr },
+  { "H",                                 600, nullptr },
+  { "I",                                 600, nullptr },
+  { "J",                                 600, nullptr },
+  { "K",                                 600, nullptr },
+  { "iogonek",                           600, nullptr },
+  { "L",                                 600, nullptr },
+  { "backslash",                         600, nullptr },
+  { "periodcentered",                    600, nullptr },
+  { "M",                                 600, nullptr },
+  { "N",                                 600, nullptr },
+  { "omacron",                           600, nullptr },
+  { "Tcommaaccent",                      600, nullptr },
+  { "O",                                 600, nullptr },
+  { "P",                                 600, nullptr },
+  { "Q",                                 600, nullptr },
+  { "Uhungarumlaut",                     600, nullptr },
+  { "R",                                 600, nullptr },
+  { "Aacute",                            600, nullptr },
+  { "caron",                             600, nullptr },
+  { "S",                                 600, nullptr },
+  { "T",                                 600, nullptr },
+  { "U",                                 600, nullptr },
+  { "agrave",                            600, nullptr },
+  { "V",                                 600, nullptr },
+  { "W",                                 600, nullptr },
+  { "equal",                             600, nullptr },
+  { "question",                          600, nullptr },
+  { "X",                                 600, nullptr },
+  { "Y",                                 600, nullptr },
+  { "Z",                                 600, nullptr },
+  { "four",                              600, nullptr },
+  { "a",                                 600, nullptr },
+  { "Gcommaaccent",                      600, nullptr },
+  { "b",                                 600, nullptr },
+  { "c",                                 600, nullptr },
+  { "d",                                 600, nullptr },
+  { "e",                                 600, nullptr },
+  { "f",                                 600, nullptr },
+  { "g",                                 600, nullptr },
+  { "bullet",                            600, nullptr },
+  { "h",                                 600, nullptr },
+  { "i",                                 600, nullptr },
+  { "Oslash",                            600, nullptr },
+  { "dagger",                            600, nullptr },
+  { "j",                                 600, nullptr },
+  { "k",                                 600, nullptr },
+  { "l",                                 600, nullptr },
+  { "m",                                 600, nullptr },
+  { "n",                                 600, nullptr },
+  { "tcommaaccent",                      600, nullptr },
+  { "o",                                 600, nullptr },
+  { "ordfeminine",                       600, nullptr },
+  { "ring",                              600, nullptr },
+  { "p",                                 600, nullptr },
+  { "q",                                 600, nullptr },
+  { "uhungarumlaut",                     600, nullptr },
+  { "r",                                 600, nullptr },
+  { "twosuperior",                       600, nullptr },
+  { "aacute",                            600, nullptr },
+  { "s",                                 600, nullptr },
+  { "OE",                                600, nullptr },
+  { "t",                                 600, nullptr },
+  { "divide",                            600, nullptr },
+  { "u",                                 600, nullptr },
+  { "Ccaron",                            600, nullptr },
+  { "v",                                 600, nullptr },
+  { "w",                                 600, nullptr },
+  { "x",                                 600, nullptr },
+  { "y",                                 600, nullptr },
+  { "z",                                 600, nullptr },
+  { "Gbreve",                            600, nullptr },
+  { "commaaccent",                       600, nullptr },
+  { "hungarumlaut",                      600, nullptr },
+  { "Idotaccent",                        600, nullptr },
+  { "Nacute",                            600, nullptr },
+  { "quotedbl",                          600, nullptr },
+  { "gcommaaccent",                      600, nullptr },
+  { "mu",                                600, nullptr },
+  { "greaterequal",                      600, nullptr },
+  { "Scaron",                            600, nullptr },
+  { "Lslash",                            600, nullptr },
+  { "semicolon",                         600, nullptr },
+  { "oslash",                            600, nullptr },
+  { "lessequal",                         600, nullptr },
+  { "lozenge",                           600, nullptr },
+  { "parenright",                        600, nullptr },
+  { "ccaron",                            600, nullptr },
+  { "Ecircumflex",                       600, nullptr },
+  { "gbreve",                            600, nullptr },
+  { "trademark",                         600, nullptr },
+  { "daggerdbl",                         600, nullptr },
+  { "nacute",                            600, nullptr },
+  { "macron",                            600, nullptr },
+  { "Otilde",                            600, nullptr },
+  { "Emacron",                           600, nullptr },
+  { "ellipsis",                          600, nullptr },
+  { "scaron",                            600, nullptr },
+  { "AE",                                600, nullptr },
+  { "Ucircumflex",                       600, nullptr },
+  { "lslash",                            600, nullptr },
+  { "quotedblleft",                      600, nullptr },
+  { "hyphen",                            600, nullptr },
+  { "guilsinglright",                    600, nullptr },
+  { "quotesingle",                       600, nullptr },
+  { "eight",                             600, nullptr },
+  { "exclamdown",                        600, nullptr },
+  { "endash",                            600, nullptr },
+  { "oe",                                600, nullptr },
+  { "Abreve",                            600, nullptr },
+  { "Umacron",                           600, nullptr },
+  { "ecircumflex",                       600, nullptr },
+  { "Adieresis",                         600, nullptr },
+  { "copyright",                         600, nullptr },
+  { "Egrave",                            600, nullptr },
+  { "slash",                             600, nullptr },
+  { "Edieresis",                         600, nullptr },
+  { "otilde",                            600, nullptr },
+  { "Idieresis",                         600, nullptr },
+  { "parenleft",                         600, nullptr },
+  { "one",                               600, nullptr },
+  { "emacron",                           600, nullptr },
+  { "Odieresis",                         600, nullptr },
+  { "ucircumflex",                       600, nullptr },
+  { "bracketleft",                       600, nullptr },
+  { "Ugrave",                            600, nullptr },
+  { "quoteright",                        600, nullptr },
+  { "Udieresis",                         600, nullptr },
+  { "perthousand",                       600, nullptr },
+  { "Ydieresis",                         600, nullptr },
+  { "umacron",                           600, nullptr },
+  { "abreve",                            600, nullptr },
+  { "Eacute",                            600, nullptr },
+  { "adieresis",                         600, nullptr },
+  { "egrave",                            600, nullptr },
+  { "edieresis",                         600, nullptr },
+  { "idieresis",                         600, nullptr },
+  { "Eth",                               600, nullptr },
+  { "ae",                                600, nullptr },
+  { "asterisk",                          600, nullptr },
+  { "odieresis",                         600, nullptr },
+  { "Uacute",                            600, nullptr },
+  { "ugrave",                            600, nullptr },
+  { "five",                              600, nullptr },
+  { "nine",                              600, nullptr },
+  { "udieresis",                         600, nullptr },
+  { "Zcaron",                            600, nullptr },
+  { "Scommaaccent",                      600, nullptr },
+  { "threequarters",                     600, nullptr },
+  { "guillemotright",                    600, nullptr },
+  { "Ccedilla",                          600, nullptr },
+  { "ydieresis",                         600, nullptr },
+  { "tilde",                             600, nullptr },
+  { "at",                                600, nullptr },
+  { "eacute",                            600, nullptr },
+  { "underscore",                        600, nullptr },
+  { "Euro",                              600, nullptr },
+  { "Dcroat",                            600, nullptr },
+  { "zero",                              600, nullptr },
+  { "multiply",                          600, nullptr },
+  { "eth",                               600, nullptr },
+  { "Scedilla",                          600, nullptr },
+  { "Racute",                            600, nullptr },
+  { "Ograve",                            600, nullptr },
+  { "partialdiff",                       600, nullptr },
+  { "uacute",                            600, nullptr },
+  { "braceleft",                         600, nullptr },
+  { "Thorn",                             600, nullptr },
+  { "zcaron",                            600, nullptr },
+  { "scommaaccent",                      600, nullptr },
+  { "ccedilla",                          600, nullptr },
+  { "Dcaron",                            600, nullptr },
+  { "dcroat",                            600, nullptr },
+  { "scedilla",                          600, nullptr },
+  { "Oacute",                            600, nullptr },
+  { "Ocircumflex",                       600, nullptr },
+  { "ogonek",                            600, nullptr },
+  { "ograve",                            600, nullptr },
+  { "racute",                            600, nullptr },
+  { "Tcaron",                            600, nullptr },
+  { "Eogonek",                           600, nullptr },
+  { "thorn",                             600, nullptr },
+  { "degree",                            600, nullptr },
+  { "registered",                        600, nullptr },
+  { "radical",                           600, nullptr },
+  { "Aring",                             600, nullptr },
+  { "percent",                           600, nullptr },
+  { "six",                               600, nullptr },
+  { "paragraph",                         600, nullptr },
+  { "dcaron",                            600, nullptr },
+  { "Uogonek",                           600, nullptr },
+  { "two",                               600, nullptr },
+  { "summation",                         600, nullptr },
+  { "Igrave",                            600, nullptr },
+  { "Lacute",                            600, nullptr },
+  { "ocircumflex",                       600, nullptr },
+  { "oacute",                            600, nullptr },
+  { "Uring",                             600, nullptr },
+  { "Lcommaaccent",                      600, nullptr },
+  { "tcaron",                            600, nullptr },
+  { "eogonek",                           600, nullptr },
+  { "Delta",                             600, nullptr },
+  { "Ohungarumlaut",                     600, nullptr },
+  { "asciicircum",                       600, nullptr },
+  { "aring",                             600, nullptr },
+  { "grave",                             600, nullptr },
+  { "uogonek",                           600, nullptr },
+  { "bracketright",                      600, nullptr },
+  { "ampersand",                         600, nullptr },
+  { "Iacute",                            600, nullptr },
+  { "lacute",                            600, nullptr },
+  { "igrave",                            600, nullptr },
+  { "Ncaron",                            600, nullptr },
+  { "plus",                              600, nullptr },
+  { "uring",                             600, nullptr },
+  { "quotesinglbase",                    600, nullptr },
+  { "lcommaaccent",                      600, nullptr },
+  { "Yacute",                            600, nullptr },
+  { "ohungarumlaut",                     600, nullptr },
+  { "threesuperior",                     600, nullptr },
+  { "acute",                             600, nullptr },
+  { "section",                           600, nullptr },
+  { "dieresis",                          600, nullptr },
+  { "quotedblbase",                      600, nullptr },
+  { "iacute",                            600, nullptr },
+  { "ncaron",                            600, nullptr },
+  { "florin",                            600, nullptr },
+  { "yacute",                            600, nullptr },
+  { "Rcommaaccent",                      600, nullptr },
+  { "fi",                                600, nullptr },
+  { "fl",                                600, nullptr },
+  { "Acircumflex",                       600, nullptr },
+  { "Cacute",                            600, nullptr },
+  { "Icircumflex",                       600, nullptr },
+  { "guillemotleft",                     600, nullptr },
+  { "germandbls",                        600, nullptr },
+  { "seven",                             600, nullptr },
+  { "Amacron",                           600, nullptr },
+  { "Sacute",                            600, nullptr },
+  { "ordmasculine",                      600, nullptr },
+  { "dotlessi",                          600, nullptr },
+  { "sterling",                          600, nullptr },
+  { "notequal",                          600, nullptr },
+  { "Imacron",                           600, nullptr },
+  { "rcommaaccent",                      600, nullptr },
+  { "Zdotaccent",                        600, nullptr },
+  { "acircumflex",                       600, nullptr },
+  { "cacute",                            600, nullptr },
+  { "Ecaron",                            600, nullptr },
+  { "braceright",                        600, nullptr },
+  { "icircumflex",                       600, nullptr },
+  { "quotedblright",                     600, nullptr },
+  { "amacron",                           600, nullptr },
+  { "sacute",                            600, nullptr },
+  { "imacron",                           600, nullptr },
+  { "cent",                              600, nullptr },
+  { "currency",                          600, nullptr },
+  { "logicalnot",                        600, nullptr },
+  { "zdotaccent",                        600, nullptr },
+  { "Atilde",                            600, nullptr },
+  { "breve",                             600, nullptr },
+  { "bar",                               600, nullptr },
+  { "fraction",                          600, nullptr },
+  { "less",                              600, nullptr },
+  { "ecaron",                            600, nullptr },
+  { "guilsinglleft",                     600, nullptr },
+  { "exclam",                            600, nullptr },
+  { "period",                            600, nullptr },
+  { "Rcaron",                            600, nullptr },
+  { "Kcommaaccent",                      600, nullptr },
+  { "greater",                           600, nullptr },
+  { "atilde",                            600, nullptr },
+  { "brokenbar",                         600, nullptr },
+  { "quoteleft",                         600, nullptr },
+  { "Edotaccent",                        600, nullptr },
+  { "onesuperior",                       600, nullptr }
 };
 
 static BuiltinFontWidth courierBoldWidthsTab[] = {
-  { "Ntilde",                            600, NULL },
-  { "rcaron",                            600, NULL },
-  { "kcommaaccent",                      600, NULL },
-  { "Ncommaaccent",                      600, NULL },
-  { "Zacute",                            600, NULL },
-  { "comma",                             600, NULL },
-  { "cedilla",                           600, NULL },
-  { "plusminus",                         600, NULL },
-  { "circumflex",                        600, NULL },
-  { "dotaccent",                         600, NULL },
-  { "edotaccent",                        600, NULL },
-  { "asciitilde",                        600, NULL },
-  { "colon",                             600, NULL },
-  { "onehalf",                           600, NULL },
-  { "dollar",                            600, NULL },
-  { "Lcaron",                            600, NULL },
-  { "ntilde",                            600, NULL },
-  { "Aogonek",                           600, NULL },
-  { "ncommaaccent",                      600, NULL },
-  { "minus",                             600, NULL },
-  { "Iogonek",                           600, NULL },
-  { "zacute",                            600, NULL },
-  { "yen",                               600, NULL },
-  { "space",                             600, NULL },
-  { "Omacron",                           600, NULL },
-  { "questiondown",                      600, NULL },
-  { "emdash",                            600, NULL },
-  { "Agrave",                            600, NULL },
-  { "three",                             600, NULL },
-  { "numbersign",                        600, NULL },
-  { "lcaron",                            600, NULL },
-  { "A",                                 600, NULL },
-  { "B",                                 600, NULL },
-  { "C",                                 600, NULL },
-  { "aogonek",                           600, NULL },
-  { "D",                                 600, NULL },
-  { "E",                                 600, NULL },
-  { "onequarter",                        600, NULL },
-  { "F",                                 600, NULL },
-  { "G",                                 600, NULL },
-  { "H",                                 600, NULL },
-  { "I",                                 600, NULL },
-  { "J",                                 600, NULL },
-  { "K",                                 600, NULL },
-  { "iogonek",                           600, NULL },
-  { "backslash",                         600, NULL },
-  { "L",                                 600, NULL },
-  { "periodcentered",                    600, NULL },
-  { "M",                                 600, NULL },
-  { "N",                                 600, NULL },
-  { "omacron",                           600, NULL },
-  { "Tcommaaccent",                      600, NULL },
-  { "O",                                 600, NULL },
-  { "P",                                 600, NULL },
-  { "Q",                                 600, NULL },
-  { "Uhungarumlaut",                     600, NULL },
-  { "R",                                 600, NULL },
-  { "Aacute",                            600, NULL },
-  { "caron",                             600, NULL },
-  { "S",                                 600, NULL },
-  { "T",                                 600, NULL },
-  { "U",                                 600, NULL },
-  { "agrave",                            600, NULL },
-  { "V",                                 600, NULL },
-  { "W",                                 600, NULL },
-  { "X",                                 600, NULL },
-  { "question",                          600, NULL },
-  { "equal",                             600, NULL },
-  { "Y",                                 600, NULL },
-  { "Z",                                 600, NULL },
-  { "four",                              600, NULL },
-  { "a",                                 600, NULL },
-  { "Gcommaaccent",                      600, NULL },
-  { "b",                                 600, NULL },
-  { "c",                                 600, NULL },
-  { "d",                                 600, NULL },
-  { "e",                                 600, NULL },
-  { "f",                                 600, NULL },
-  { "g",                                 600, NULL },
-  { "bullet",                            600, NULL },
-  { "h",                                 600, NULL },
-  { "i",                                 600, NULL },
-  { "Oslash",                            600, NULL },
-  { "dagger",                            600, NULL },
-  { "j",                                 600, NULL },
-  { "k",                                 600, NULL },
-  { "l",                                 600, NULL },
-  { "m",                                 600, NULL },
-  { "n",                                 600, NULL },
-  { "tcommaaccent",                      600, NULL },
-  { "o",                                 600, NULL },
-  { "ordfeminine",                       600, NULL },
-  { "ring",                              600, NULL },
-  { "p",                                 600, NULL },
-  { "q",                                 600, NULL },
-  { "uhungarumlaut",                     600, NULL },
-  { "r",                                 600, NULL },
-  { "twosuperior",                       600, NULL },
-  { "aacute",                            600, NULL },
-  { "s",                                 600, NULL },
-  { "OE",                                600, NULL },
-  { "t",                                 600, NULL },
-  { "divide",                            600, NULL },
-  { "u",                                 600, NULL },
-  { "Ccaron",                            600, NULL },
-  { "v",                                 600, NULL },
-  { "w",                                 600, NULL },
-  { "x",                                 600, NULL },
-  { "y",                                 600, NULL },
-  { "z",                                 600, NULL },
-  { "Gbreve",                            600, NULL },
-  { "commaaccent",                       600, NULL },
-  { "hungarumlaut",                      600, NULL },
-  { "Idotaccent",                        600, NULL },
-  { "Nacute",                            600, NULL },
-  { "quotedbl",                          600, NULL },
-  { "gcommaaccent",                      600, NULL },
-  { "mu",                                600, NULL },
-  { "greaterequal",                      600, NULL },
-  { "Scaron",                            600, NULL },
-  { "Lslash",                            600, NULL },
-  { "semicolon",                         600, NULL },
-  { "oslash",                            600, NULL },
-  { "lessequal",                         600, NULL },
-  { "lozenge",                           600, NULL },
-  { "parenright",                        600, NULL },
-  { "ccaron",                            600, NULL },
-  { "Ecircumflex",                       600, NULL },
-  { "gbreve",                            600, NULL },
-  { "trademark",                         600, NULL },
-  { "daggerdbl",                         600, NULL },
-  { "nacute",                            600, NULL },
-  { "macron",                            600, NULL },
-  { "Otilde",                            600, NULL },
-  { "Emacron",                           600, NULL },
-  { "ellipsis",                          600, NULL },
-  { "scaron",                            600, NULL },
-  { "AE",                                600, NULL },
-  { "Ucircumflex",                       600, NULL },
-  { "lslash",                            600, NULL },
-  { "quotedblleft",                      600, NULL },
-  { "guilsinglright",                    600, NULL },
-  { "hyphen",                            600, NULL },
-  { "quotesingle",                       600, NULL },
-  { "eight",                             600, NULL },
-  { "exclamdown",                        600, NULL },
-  { "endash",                            600, NULL },
-  { "oe",                                600, NULL },
-  { "Abreve",                            600, NULL },
-  { "Umacron",                           600, NULL },
-  { "ecircumflex",                       600, NULL },
-  { "Adieresis",                         600, NULL },
-  { "copyright",                         600, NULL },
-  { "Egrave",                            600, NULL },
-  { "slash",                             600, NULL },
-  { "Edieresis",                         600, NULL },
-  { "otilde",                            600, NULL },
-  { "Idieresis",                         600, NULL },
-  { "parenleft",                         600, NULL },
-  { "one",                               600, NULL },
-  { "emacron",                           600, NULL },
-  { "Odieresis",                         600, NULL },
-  { "ucircumflex",                       600, NULL },
-  { "bracketleft",                       600, NULL },
-  { "Ugrave",                            600, NULL },
-  { "quoteright",                        600, NULL },
-  { "Udieresis",                         600, NULL },
-  { "perthousand",                       600, NULL },
-  { "Ydieresis",                         600, NULL },
-  { "umacron",                           600, NULL },
-  { "abreve",                            600, NULL },
-  { "Eacute",                            600, NULL },
-  { "adieresis",                         600, NULL },
-  { "egrave",                            600, NULL },
-  { "edieresis",                         600, NULL },
-  { "idieresis",                         600, NULL },
-  { "Eth",                               600, NULL },
-  { "ae",                                600, NULL },
-  { "asterisk",                          600, NULL },
-  { "odieresis",                         600, NULL },
-  { "Uacute",                            600, NULL },
-  { "ugrave",                            600, NULL },
-  { "nine",                              600, NULL },
-  { "five",                              600, NULL },
-  { "udieresis",                         600, NULL },
-  { "Zcaron",                            600, NULL },
-  { "Scommaaccent",                      600, NULL },
-  { "threequarters",                     600, NULL },
-  { "guillemotright",                    600, NULL },
-  { "Ccedilla",                          600, NULL },
-  { "ydieresis",                         600, NULL },
-  { "tilde",                             600, NULL },
-  { "at",                                600, NULL },
-  { "eacute",                            600, NULL },
-  { "underscore",                        600, NULL },
-  { "Euro",                              600, NULL },
-  { "Dcroat",                            600, NULL },
-  { "multiply",                          600, NULL },
-  { "zero",                              600, NULL },
-  { "eth",                               600, NULL },
-  { "Scedilla",                          600, NULL },
-  { "Ograve",                            600, NULL },
-  { "Racute",                            600, NULL },
-  { "partialdiff",                       600, NULL },
-  { "uacute",                            600, NULL },
-  { "braceleft",                         600, NULL },
-  { "Thorn",                             600, NULL },
-  { "zcaron",                            600, NULL },
-  { "scommaaccent",                      600, NULL },
-  { "ccedilla",                          600, NULL },
-  { "Dcaron",                            600, NULL },
-  { "dcroat",                            600, NULL },
-  { "Ocircumflex",                       600, NULL },
-  { "Oacute",                            600, NULL },
-  { "scedilla",                          600, NULL },
-  { "ogonek",                            600, NULL },
-  { "ograve",                            600, NULL },
-  { "racute",                            600, NULL },
-  { "Tcaron",                            600, NULL },
-  { "Eogonek",                           600, NULL },
-  { "thorn",                             600, NULL },
-  { "degree",                            600, NULL },
-  { "registered",                        600, NULL },
-  { "radical",                           600, NULL },
-  { "Aring",                             600, NULL },
-  { "percent",                           600, NULL },
-  { "six",                               600, NULL },
-  { "paragraph",                         600, NULL },
-  { "dcaron",                            600, NULL },
-  { "Uogonek",                           600, NULL },
-  { "two",                               600, NULL },
-  { "summation",                         600, NULL },
-  { "Igrave",                            600, NULL },
-  { "Lacute",                            600, NULL },
-  { "ocircumflex",                       600, NULL },
-  { "oacute",                            600, NULL },
-  { "Uring",                             600, NULL },
-  { "Lcommaaccent",                      600, NULL },
-  { "tcaron",                            600, NULL },
-  { "eogonek",                           600, NULL },
-  { "Delta",                             600, NULL },
-  { "Ohungarumlaut",                     600, NULL },
-  { "asciicircum",                       600, NULL },
-  { "aring",                             600, NULL },
-  { "grave",                             600, NULL },
-  { "uogonek",                           600, NULL },
-  { "bracketright",                      600, NULL },
-  { "Iacute",                            600, NULL },
-  { "ampersand",                         600, NULL },
-  { "igrave",                            600, NULL },
-  { "lacute",                            600, NULL },
-  { "Ncaron",                            600, NULL },
-  { "plus",                              600, NULL },
-  { "uring",                             600, NULL },
-  { "quotesinglbase",                    600, NULL },
-  { "lcommaaccent",                      600, NULL },
-  { "Yacute",                            600, NULL },
-  { "ohungarumlaut",                     600, NULL },
-  { "threesuperior",                     600, NULL },
-  { "acute",                             600, NULL },
-  { "section",                           600, NULL },
-  { "dieresis",                          600, NULL },
-  { "iacute",                            600, NULL },
-  { "quotedblbase",                      600, NULL },
-  { "ncaron",                            600, NULL },
-  { "florin",                            600, NULL },
-  { "yacute",                            600, NULL },
-  { "Rcommaaccent",                      600, NULL },
-  { "fi",                                600, NULL },
-  { "fl",                                600, NULL },
-  { "Acircumflex",                       600, NULL },
-  { "Cacute",                            600, NULL },
-  { "Icircumflex",                       600, NULL },
-  { "guillemotleft",                     600, NULL },
-  { "germandbls",                        600, NULL },
-  { "Amacron",                           600, NULL },
-  { "seven",                             600, NULL },
-  { "Sacute",                            600, NULL },
-  { "ordmasculine",                      600, NULL },
-  { "dotlessi",                          600, NULL },
-  { "sterling",                          600, NULL },
-  { "notequal",                          600, NULL },
-  { "Imacron",                           600, NULL },
-  { "rcommaaccent",                      600, NULL },
-  { "Zdotaccent",                        600, NULL },
-  { "acircumflex",                       600, NULL },
-  { "cacute",                            600, NULL },
-  { "Ecaron",                            600, NULL },
-  { "icircumflex",                       600, NULL },
-  { "braceright",                        600, NULL },
-  { "quotedblright",                     600, NULL },
-  { "amacron",                           600, NULL },
-  { "sacute",                            600, NULL },
-  { "imacron",                           600, NULL },
-  { "cent",                              600, NULL },
-  { "currency",                          600, NULL },
-  { "logicalnot",                        600, NULL },
-  { "zdotaccent",                        600, NULL },
-  { "Atilde",                            600, NULL },
-  { "breve",                             600, NULL },
-  { "bar",                               600, NULL },
-  { "fraction",                          600, NULL },
-  { "less",                              600, NULL },
-  { "ecaron",                            600, NULL },
-  { "guilsinglleft",                     600, NULL },
-  { "exclam",                            600, NULL },
-  { "period",                            600, NULL },
-  { "Rcaron",                            600, NULL },
-  { "Kcommaaccent",                      600, NULL },
-  { "greater",                           600, NULL },
-  { "atilde",                            600, NULL },
-  { "brokenbar",                         600, NULL },
-  { "quoteleft",                         600, NULL },
-  { "Edotaccent",                        600, NULL },
-  { "onesuperior",                       600, NULL }
+  { "Ntilde",                            600, nullptr },
+  { "rcaron",                            600, nullptr },
+  { "kcommaaccent",                      600, nullptr },
+  { "Ncommaaccent",                      600, nullptr },
+  { "Zacute",                            600, nullptr },
+  { "comma",                             600, nullptr },
+  { "cedilla",                           600, nullptr },
+  { "plusminus",                         600, nullptr },
+  { "circumflex",                        600, nullptr },
+  { "dotaccent",                         600, nullptr },
+  { "edotaccent",                        600, nullptr },
+  { "asciitilde",                        600, nullptr },
+  { "colon",                             600, nullptr },
+  { "onehalf",                           600, nullptr },
+  { "dollar",                            600, nullptr },
+  { "Lcaron",                            600, nullptr },
+  { "ntilde",                            600, nullptr },
+  { "Aogonek",                           600, nullptr },
+  { "ncommaaccent",                      600, nullptr },
+  { "minus",                             600, nullptr },
+  { "Iogonek",                           600, nullptr },
+  { "zacute",                            600, nullptr },
+  { "yen",                               600, nullptr },
+  { "space",                             600, nullptr },
+  { "Omacron",                           600, nullptr },
+  { "questiondown",                      600, nullptr },
+  { "emdash",                            600, nullptr },
+  { "Agrave",                            600, nullptr },
+  { "three",                             600, nullptr },
+  { "numbersign",                        600, nullptr },
+  { "lcaron",                            600, nullptr },
+  { "A",                                 600, nullptr },
+  { "B",                                 600, nullptr },
+  { "C",                                 600, nullptr },
+  { "aogonek",                           600, nullptr },
+  { "D",                                 600, nullptr },
+  { "E",                                 600, nullptr },
+  { "onequarter",                        600, nullptr },
+  { "F",                                 600, nullptr },
+  { "G",                                 600, nullptr },
+  { "H",                                 600, nullptr },
+  { "I",                                 600, nullptr },
+  { "J",                                 600, nullptr },
+  { "K",                                 600, nullptr },
+  { "iogonek",                           600, nullptr },
+  { "backslash",                         600, nullptr },
+  { "L",                                 600, nullptr },
+  { "periodcentered",                    600, nullptr },
+  { "M",                                 600, nullptr },
+  { "N",                                 600, nullptr },
+  { "omacron",                           600, nullptr },
+  { "Tcommaaccent",                      600, nullptr },
+  { "O",                                 600, nullptr },
+  { "P",                                 600, nullptr },
+  { "Q",                                 600, nullptr },
+  { "Uhungarumlaut",                     600, nullptr },
+  { "R",                                 600, nullptr },
+  { "Aacute",                            600, nullptr },
+  { "caron",                             600, nullptr },
+  { "S",                                 600, nullptr },
+  { "T",                                 600, nullptr },
+  { "U",                                 600, nullptr },
+  { "agrave",                            600, nullptr },
+  { "V",                                 600, nullptr },
+  { "W",                                 600, nullptr },
+  { "X",                                 600, nullptr },
+  { "question",                          600, nullptr },
+  { "equal",                             600, nullptr },
+  { "Y",                                 600, nullptr },
+  { "Z",                                 600, nullptr },
+  { "four",                              600, nullptr },
+  { "a",                                 600, nullptr },
+  { "Gcommaaccent",                      600, nullptr },
+  { "b",                                 600, nullptr },
+  { "c",                                 600, nullptr },
+  { "d",                                 600, nullptr },
+  { "e",                                 600, nullptr },
+  { "f",                                 600, nullptr },
+  { "g",                                 600, nullptr },
+  { "bullet",                            600, nullptr },
+  { "h",                                 600, nullptr },
+  { "i",                                 600, nullptr },
+  { "Oslash",                            600, nullptr },
+  { "dagger",                            600, nullptr },
+  { "j",                                 600, nullptr },
+  { "k",                                 600, nullptr },
+  { "l",                                 600, nullptr },
+  { "m",                                 600, nullptr },
+  { "n",                                 600, nullptr },
+  { "tcommaaccent",                      600, nullptr },
+  { "o",                                 600, nullptr },
+  { "ordfeminine",                       600, nullptr },
+  { "ring",                              600, nullptr },
+  { "p",                                 600, nullptr },
+  { "q",                                 600, nullptr },
+  { "uhungarumlaut",                     600, nullptr },
+  { "r",                                 600, nullptr },
+  { "twosuperior",                       600, nullptr },
+  { "aacute",                            600, nullptr },
+  { "s",                                 600, nullptr },
+  { "OE",                                600, nullptr },
+  { "t",                                 600, nullptr },
+  { "divide",                            600, nullptr },
+  { "u",                                 600, nullptr },
+  { "Ccaron",                            600, nullptr },
+  { "v",                                 600, nullptr },
+  { "w",                                 600, nullptr },
+  { "x",                                 600, nullptr },
+  { "y",                                 600, nullptr },
+  { "z",                                 600, nullptr },
+  { "Gbreve",                            600, nullptr },
+  { "commaaccent",                       600, nullptr },
+  { "hungarumlaut",                      600, nullptr },
+  { "Idotaccent",                        600, nullptr },
+  { "Nacute",                            600, nullptr },
+  { "quotedbl",                          600, nullptr },
+  { "gcommaaccent",                      600, nullptr },
+  { "mu",                                600, nullptr },
+  { "greaterequal",                      600, nullptr },
+  { "Scaron",                            600, nullptr },
+  { "Lslash",                            600, nullptr },
+  { "semicolon",                         600, nullptr },
+  { "oslash",                            600, nullptr },
+  { "lessequal",                         600, nullptr },
+  { "lozenge",                           600, nullptr },
+  { "parenright",                        600, nullptr },
+  { "ccaron",                            600, nullptr },
+  { "Ecircumflex",                       600, nullptr },
+  { "gbreve",                            600, nullptr },
+  { "trademark",                         600, nullptr },
+  { "daggerdbl",                         600, nullptr },
+  { "nacute",                            600, nullptr },
+  { "macron",                            600, nullptr },
+  { "Otilde",                            600, nullptr },
+  { "Emacron",                           600, nullptr },
+  { "ellipsis",                          600, nullptr },
+  { "scaron",                            600, nullptr },
+  { "AE",                                600, nullptr },
+  { "Ucircumflex",                       600, nullptr },
+  { "lslash",                            600, nullptr },
+  { "quotedblleft",                      600, nullptr },
+  { "guilsinglright",                    600, nullptr },
+  { "hyphen",                            600, nullptr },
+  { "quotesingle",                       600, nullptr },
+  { "eight",                             600, nullptr },
+  { "exclamdown",                        600, nullptr },
+  { "endash",                            600, nullptr },
+  { "oe",                                600, nullptr },
+  { "Abreve",                            600, nullptr },
+  { "Umacron",                           600, nullptr },
+  { "ecircumflex",                       600, nullptr },
+  { "Adieresis",                         600, nullptr },
+  { "copyright",                         600, nullptr },
+  { "Egrave",                            600, nullptr },
+  { "slash",                             600, nullptr },
+  { "Edieresis",                         600, nullptr },
+  { "otilde",                            600, nullptr },
+  { "Idieresis",                         600, nullptr },
+  { "parenleft",                         600, nullptr },
+  { "one",                               600, nullptr },
+  { "emacron",                           600, nullptr },
+  { "Odieresis",                         600, nullptr },
+  { "ucircumflex",                       600, nullptr },
+  { "bracketleft",                       600, nullptr },
+  { "Ugrave",                            600, nullptr },
+  { "quoteright",                        600, nullptr },
+  { "Udieresis",                         600, nullptr },
+  { "perthousand",                       600, nullptr },
+  { "Ydieresis",                         600, nullptr },
+  { "umacron",                           600, nullptr },
+  { "abreve",                            600, nullptr },
+  { "Eacute",                            600, nullptr },
+  { "adieresis",                         600, nullptr },
+  { "egrave",                            600, nullptr },
+  { "edieresis",                         600, nullptr },
+  { "idieresis",                         600, nullptr },
+  { "Eth",                               600, nullptr },
+  { "ae",                                600, nullptr },
+  { "asterisk",                          600, nullptr },
+  { "odieresis",                         600, nullptr },
+  { "Uacute",                            600, nullptr },
+  { "ugrave",                            600, nullptr },
+  { "nine",                              600, nullptr },
+  { "five",                              600, nullptr },
+  { "udieresis",                         600, nullptr },
+  { "Zcaron",                            600, nullptr },
+  { "Scommaaccent",                      600, nullptr },
+  { "threequarters",                     600, nullptr },
+  { "guillemotright",                    600, nullptr },
+  { "Ccedilla",                          600, nullptr },
+  { "ydieresis",                         600, nullptr },
+  { "tilde",                             600, nullptr },
+  { "at",                                600, nullptr },
+  { "eacute",                            600, nullptr },
+  { "underscore",                        600, nullptr },
+  { "Euro",                              600, nullptr },
+  { "Dcroat",                            600, nullptr },
+  { "multiply",                          600, nullptr },
+  { "zero",                              600, nullptr },
+  { "eth",                               600, nullptr },
+  { "Scedilla",                          600, nullptr },
+  { "Ograve",                            600, nullptr },
+  { "Racute",                            600, nullptr },
+  { "partialdiff",                       600, nullptr },
+  { "uacute",                            600, nullptr },
+  { "braceleft",                         600, nullptr },
+  { "Thorn",                             600, nullptr },
+  { "zcaron",                            600, nullptr },
+  { "scommaaccent",                      600, nullptr },
+  { "ccedilla",                          600, nullptr },
+  { "Dcaron",                            600, nullptr },
+  { "dcroat",                            600, nullptr },
+  { "Ocircumflex",                       600, nullptr },
+  { "Oacute",                            600, nullptr },
+  { "scedilla",                          600, nullptr },
+  { "ogonek",                            600, nullptr },
+  { "ograve",                            600, nullptr },
+  { "racute",                            600, nullptr },
+  { "Tcaron",                            600, nullptr },
+  { "Eogonek",                           600, nullptr },
+  { "thorn",                             600, nullptr },
+  { "degree",                            600, nullptr },
+  { "registered",                        600, nullptr },
+  { "radical",                           600, nullptr },
+  { "Aring",                             600, nullptr },
+  { "percent",                           600, nullptr },
+  { "six",                               600, nullptr },
+  { "paragraph",                         600, nullptr },
+  { "dcaron",                            600, nullptr },
+  { "Uogonek",                           600, nullptr },
+  { "two",                               600, nullptr },
+  { "summation",                         600, nullptr },
+  { "Igrave",                            600, nullptr },
+  { "Lacute",                            600, nullptr },
+  { "ocircumflex",                       600, nullptr },
+  { "oacute",                            600, nullptr },
+  { "Uring",                             600, nullptr },
+  { "Lcommaaccent",                      600, nullptr },
+  { "tcaron",                            600, nullptr },
+  { "eogonek",                           600, nullptr },
+  { "Delta",                             600, nullptr },
+  { "Ohungarumlaut",                     600, nullptr },
+  { "asciicircum",                       600, nullptr },
+  { "aring",                             600, nullptr },
+  { "grave",                             600, nullptr },
+  { "uogonek",                           600, nullptr },
+  { "bracketright",                      600, nullptr },
+  { "Iacute",                            600, nullptr },
+  { "ampersand",                         600, nullptr },
+  { "igrave",                            600, nullptr },
+  { "lacute",                            600, nullptr },
+  { "Ncaron",                            600, nullptr },
+  { "plus",                              600, nullptr },
+  { "uring",                             600, nullptr },
+  { "quotesinglbase",                    600, nullptr },
+  { "lcommaaccent",                      600, nullptr },
+  { "Yacute",                            600, nullptr },
+  { "ohungarumlaut",                     600, nullptr },
+  { "threesuperior",                     600, nullptr },
+  { "acute",                             600, nullptr },
+  { "section",                           600, nullptr },
+  { "dieresis",                          600, nullptr },
+  { "iacute",                            600, nullptr },
+  { "quotedblbase",                      600, nullptr },
+  { "ncaron",                            600, nullptr },
+  { "florin",                            600, nullptr },
+  { "yacute",                            600, nullptr },
+  { "Rcommaaccent",                      600, nullptr },
+  { "fi",                                600, nullptr },
+  { "fl",                                600, nullptr },
+  { "Acircumflex",                       600, nullptr },
+  { "Cacute",                            600, nullptr },
+  { "Icircumflex",                       600, nullptr },
+  { "guillemotleft",                     600, nullptr },
+  { "germandbls",                        600, nullptr },
+  { "Amacron",                           600, nullptr },
+  { "seven",                             600, nullptr },
+  { "Sacute",                            600, nullptr },
+  { "ordmasculine",                      600, nullptr },
+  { "dotlessi",                          600, nullptr },
+  { "sterling",                          600, nullptr },
+  { "notequal",                          600, nullptr },
+  { "Imacron",                           600, nullptr },
+  { "rcommaaccent",                      600, nullptr },
+  { "Zdotaccent",                        600, nullptr },
+  { "acircumflex",                       600, nullptr },
+  { "cacute",                            600, nullptr },
+  { "Ecaron",                            600, nullptr },
+  { "icircumflex",                       600, nullptr },
+  { "braceright",                        600, nullptr },
+  { "quotedblright",                     600, nullptr },
+  { "amacron",                           600, nullptr },
+  { "sacute",                            600, nullptr },
+  { "imacron",                           600, nullptr },
+  { "cent",                              600, nullptr },
+  { "currency",                          600, nullptr },
+  { "logicalnot",                        600, nullptr },
+  { "zdotaccent",                        600, nullptr },
+  { "Atilde",                            600, nullptr },
+  { "breve",                             600, nullptr },
+  { "bar",                               600, nullptr },
+  { "fraction",                          600, nullptr },
+  { "less",                              600, nullptr },
+  { "ecaron",                            600, nullptr },
+  { "guilsinglleft",                     600, nullptr },
+  { "exclam",                            600, nullptr },
+  { "period",                            600, nullptr },
+  { "Rcaron",                            600, nullptr },
+  { "Kcommaaccent",                      600, nullptr },
+  { "greater",                           600, nullptr },
+  { "atilde",                            600, nullptr },
+  { "brokenbar",                         600, nullptr },
+  { "quoteleft",                         600, nullptr },
+  { "Edotaccent",                        600, nullptr },
+  { "onesuperior",                       600, nullptr }
 };
 
 static BuiltinFontWidth courierBoldObliqueWidthsTab[] = {
-  { "Ntilde",                            600, NULL },
-  { "rcaron",                            600, NULL },
-  { "kcommaaccent",                      600, NULL },
-  { "Ncommaaccent",                      600, NULL },
-  { "Zacute",                            600, NULL },
-  { "comma",                             600, NULL },
-  { "cedilla",                           600, NULL },
-  { "plusminus",                         600, NULL },
-  { "circumflex",                        600, NULL },
-  { "dotaccent",                         600, NULL },
-  { "edotaccent",                        600, NULL },
-  { "asciitilde",                        600, NULL },
-  { "colon",                             600, NULL },
-  { "onehalf",                           600, NULL },
-  { "dollar",                            600, NULL },
-  { "Lcaron",                            600, NULL },
-  { "ntilde",                            600, NULL },
-  { "Aogonek",                           600, NULL },
-  { "ncommaaccent",                      600, NULL },
-  { "minus",                             600, NULL },
-  { "Iogonek",                           600, NULL },
-  { "zacute",                            600, NULL },
-  { "yen",                               600, NULL },
-  { "space",                             600, NULL },
-  { "Omacron",                           600, NULL },
-  { "questiondown",                      600, NULL },
-  { "emdash",                            600, NULL },
-  { "Agrave",                            600, NULL },
-  { "three",                             600, NULL },
-  { "numbersign",                        600, NULL },
-  { "lcaron",                            600, NULL },
-  { "A",                                 600, NULL },
-  { "B",                                 600, NULL },
-  { "C",                                 600, NULL },
-  { "aogonek",                           600, NULL },
-  { "D",                                 600, NULL },
-  { "E",                                 600, NULL },
-  { "onequarter",                        600, NULL },
-  { "F",                                 600, NULL },
-  { "G",                                 600, NULL },
-  { "H",                                 600, NULL },
-  { "I",                                 600, NULL },
-  { "J",                                 600, NULL },
-  { "K",                                 600, NULL },
-  { "iogonek",                           600, NULL },
-  { "backslash",                         600, NULL },
-  { "L",                                 600, NULL },
-  { "periodcentered",                    600, NULL },
-  { "M",                                 600, NULL },
-  { "N",                                 600, NULL },
-  { "omacron",                           600, NULL },
-  { "Tcommaaccent",                      600, NULL },
-  { "O",                                 600, NULL },
-  { "P",                                 600, NULL },
-  { "Q",                                 600, NULL },
-  { "Uhungarumlaut",                     600, NULL },
-  { "R",                                 600, NULL },
-  { "Aacute",                            600, NULL },
-  { "caron",                             600, NULL },
-  { "S",                                 600, NULL },
-  { "T",                                 600, NULL },
-  { "U",                                 600, NULL },
-  { "agrave",                            600, NULL },
-  { "V",                                 600, NULL },
-  { "W",                                 600, NULL },
-  { "X",                                 600, NULL },
-  { "question",                          600, NULL },
-  { "equal",                             600, NULL },
-  { "Y",                                 600, NULL },
-  { "Z",                                 600, NULL },
-  { "four",                              600, NULL },
-  { "a",                                 600, NULL },
-  { "Gcommaaccent",                      600, NULL },
-  { "b",                                 600, NULL },
-  { "c",                                 600, NULL },
-  { "d",                                 600, NULL },
-  { "e",                                 600, NULL },
-  { "f",                                 600, NULL },
-  { "g",                                 600, NULL },
-  { "bullet",                            600, NULL },
-  { "h",                                 600, NULL },
-  { "i",                                 600, NULL },
-  { "Oslash",                            600, NULL },
-  { "dagger",                            600, NULL },
-  { "j",                                 600, NULL },
-  { "k",                                 600, NULL },
-  { "l",                                 600, NULL },
-  { "m",                                 600, NULL },
-  { "n",                                 600, NULL },
-  { "tcommaaccent",                      600, NULL },
-  { "o",                                 600, NULL },
-  { "ordfeminine",                       600, NULL },
-  { "ring",                              600, NULL },
-  { "p",                                 600, NULL },
-  { "q",                                 600, NULL },
-  { "uhungarumlaut",                     600, NULL },
-  { "r",                                 600, NULL },
-  { "twosuperior",                       600, NULL },
-  { "aacute",                            600, NULL },
-  { "s",                                 600, NULL },
-  { "OE",                                600, NULL },
-  { "t",                                 600, NULL },
-  { "divide",                            600, NULL },
-  { "u",                                 600, NULL },
-  { "Ccaron",                            600, NULL },
-  { "v",                                 600, NULL },
-  { "w",                                 600, NULL },
-  { "x",                                 600, NULL },
-  { "y",                                 600, NULL },
-  { "z",                                 600, NULL },
-  { "Gbreve",                            600, NULL },
-  { "commaaccent",                       600, NULL },
-  { "hungarumlaut",                      600, NULL },
-  { "Idotaccent",                        600, NULL },
-  { "Nacute",                            600, NULL },
-  { "quotedbl",                          600, NULL },
-  { "gcommaaccent",                      600, NULL },
-  { "mu",                                600, NULL },
-  { "greaterequal",                      600, NULL },
-  { "Scaron",                            600, NULL },
-  { "Lslash",                            600, NULL },
-  { "semicolon",                         600, NULL },
-  { "oslash",                            600, NULL },
-  { "lessequal",                         600, NULL },
-  { "lozenge",                           600, NULL },
-  { "parenright",                        600, NULL },
-  { "ccaron",                            600, NULL },
-  { "Ecircumflex",                       600, NULL },
-  { "gbreve",                            600, NULL },
-  { "trademark",                         600, NULL },
-  { "daggerdbl",                         600, NULL },
-  { "nacute",                            600, NULL },
-  { "macron",                            600, NULL },
-  { "Otilde",                            600, NULL },
-  { "Emacron",                           600, NULL },
-  { "ellipsis",                          600, NULL },
-  { "scaron",                            600, NULL },
-  { "AE",                                600, NULL },
-  { "Ucircumflex",                       600, NULL },
-  { "lslash",                            600, NULL },
-  { "quotedblleft",                      600, NULL },
-  { "guilsinglright",                    600, NULL },
-  { "hyphen",                            600, NULL },
-  { "quotesingle",                       600, NULL },
-  { "eight",                             600, NULL },
-  { "exclamdown",                        600, NULL },
-  { "endash",                            600, NULL },
-  { "oe",                                600, NULL },
-  { "Abreve",                            600, NULL },
-  { "Umacron",                           600, NULL },
-  { "ecircumflex",                       600, NULL },
-  { "Adieresis",                         600, NULL },
-  { "copyright",                         600, NULL },
-  { "Egrave",                            600, NULL },
-  { "slash",                             600, NULL },
-  { "Edieresis",                         600, NULL },
-  { "otilde",                            600, NULL },
-  { "Idieresis",                         600, NULL },
-  { "parenleft",                         600, NULL },
-  { "one",                               600, NULL },
-  { "emacron",                           600, NULL },
-  { "Odieresis",                         600, NULL },
-  { "ucircumflex",                       600, NULL },
-  { "bracketleft",                       600, NULL },
-  { "Ugrave",                            600, NULL },
-  { "quoteright",                        600, NULL },
-  { "Udieresis",                         600, NULL },
-  { "perthousand",                       600, NULL },
-  { "Ydieresis",                         600, NULL },
-  { "umacron",                           600, NULL },
-  { "abreve",                            600, NULL },
-  { "Eacute",                            600, NULL },
-  { "adieresis",                         600, NULL },
-  { "egrave",                            600, NULL },
-  { "edieresis",                         600, NULL },
-  { "idieresis",                         600, NULL },
-  { "Eth",                               600, NULL },
-  { "ae",                                600, NULL },
-  { "asterisk",                          600, NULL },
-  { "odieresis",                         600, NULL },
-  { "Uacute",                            600, NULL },
-  { "ugrave",                            600, NULL },
-  { "nine",                              600, NULL },
-  { "five",                              600, NULL },
-  { "udieresis",                         600, NULL },
-  { "Zcaron",                            600, NULL },
-  { "Scommaaccent",                      600, NULL },
-  { "threequarters",                     600, NULL },
-  { "guillemotright",                    600, NULL },
-  { "Ccedilla",                          600, NULL },
-  { "ydieresis",                         600, NULL },
-  { "tilde",                             600, NULL },
-  { "at",                                600, NULL },
-  { "eacute",                            600, NULL },
-  { "underscore",                        600, NULL },
-  { "Euro",                              600, NULL },
-  { "Dcroat",                            600, NULL },
-  { "multiply",                          600, NULL },
-  { "zero",                              600, NULL },
-  { "eth",                               600, NULL },
-  { "Scedilla",                          600, NULL },
-  { "Ograve",                            600, NULL },
-  { "Racute",                            600, NULL },
-  { "partialdiff",                       600, NULL },
-  { "uacute",                            600, NULL },
-  { "braceleft",                         600, NULL },
-  { "Thorn",                             600, NULL },
-  { "zcaron",                            600, NULL },
-  { "scommaaccent",                      600, NULL },
-  { "ccedilla",                          600, NULL },
-  { "Dcaron",                            600, NULL },
-  { "dcroat",                            600, NULL },
-  { "Ocircumflex",                       600, NULL },
-  { "Oacute",                            600, NULL },
-  { "scedilla",                          600, NULL },
-  { "ogonek",                            600, NULL },
-  { "ograve",                            600, NULL },
-  { "racute",                            600, NULL },
-  { "Tcaron",                            600, NULL },
-  { "Eogonek",                           600, NULL },
-  { "thorn",                             600, NULL },
-  { "degree",                            600, NULL },
-  { "registered",                        600, NULL },
-  { "radical",                           600, NULL },
-  { "Aring",                             600, NULL },
-  { "percent",                           600, NULL },
-  { "six",                               600, NULL },
-  { "paragraph",                         600, NULL },
-  { "dcaron",                            600, NULL },
-  { "Uogonek",                           600, NULL },
-  { "two",                               600, NULL },
-  { "summation",                         600, NULL },
-  { "Igrave",                            600, NULL },
-  { "Lacute",                            600, NULL },
-  { "ocircumflex",                       600, NULL },
-  { "oacute",                            600, NULL },
-  { "Uring",                             600, NULL },
-  { "Lcommaaccent",                      600, NULL },
-  { "tcaron",                            600, NULL },
-  { "eogonek",                           600, NULL },
-  { "Delta",                             600, NULL },
-  { "Ohungarumlaut",                     600, NULL },
-  { "asciicircum",                       600, NULL },
-  { "aring",                             600, NULL },
-  { "grave",                             600, NULL },
-  { "uogonek",                           600, NULL },
-  { "bracketright",                      600, NULL },
-  { "Iacute",                            600, NULL },
-  { "ampersand",                         600, NULL },
-  { "igrave",                            600, NULL },
-  { "lacute",                            600, NULL },
-  { "Ncaron",                            600, NULL },
-  { "plus",                              600, NULL },
-  { "uring",                             600, NULL },
-  { "quotesinglbase",                    600, NULL },
-  { "lcommaaccent",                      600, NULL },
-  { "Yacute",                            600, NULL },
-  { "ohungarumlaut",                     600, NULL },
-  { "threesuperior",                     600, NULL },
-  { "acute",                             600, NULL },
-  { "section",                           600, NULL },
-  { "dieresis",                          600, NULL },
-  { "iacute",                            600, NULL },
-  { "quotedblbase",                      600, NULL },
-  { "ncaron",                            600, NULL },
-  { "florin",                            600, NULL },
-  { "yacute",                            600, NULL },
-  { "Rcommaaccent",                      600, NULL },
-  { "fi",                                600, NULL },
-  { "fl",                                600, NULL },
-  { "Acircumflex",                       600, NULL },
-  { "Cacute",                            600, NULL },
-  { "Icircumflex",                       600, NULL },
-  { "guillemotleft",                     600, NULL },
-  { "germandbls",                        600, NULL },
-  { "Amacron",                           600, NULL },
-  { "seven",                             600, NULL },
-  { "Sacute",                            600, NULL },
-  { "ordmasculine",                      600, NULL },
-  { "dotlessi",                          600, NULL },
-  { "sterling",                          600, NULL },
-  { "notequal",                          600, NULL },
-  { "Imacron",                           600, NULL },
-  { "rcommaaccent",                      600, NULL },
-  { "Zdotaccent",                        600, NULL },
-  { "acircumflex",                       600, NULL },
-  { "cacute",                            600, NULL },
-  { "Ecaron",                            600, NULL },
-  { "icircumflex",                       600, NULL },
-  { "braceright",                        600, NULL },
-  { "quotedblright",                     600, NULL },
-  { "amacron",                           600, NULL },
-  { "sacute",                            600, NULL },
-  { "imacron",                           600, NULL },
-  { "cent",                              600, NULL },
-  { "currency",                          600, NULL },
-  { "logicalnot",                        600, NULL },
-  { "zdotaccent",                        600, NULL },
-  { "Atilde",                            600, NULL },
-  { "breve",                             600, NULL },
-  { "bar",                               600, NULL },
-  { "fraction",                          600, NULL },
-  { "less",                              600, NULL },
-  { "ecaron",                            600, NULL },
-  { "guilsinglleft",                     600, NULL },
-  { "exclam",                            600, NULL },
-  { "period",                            600, NULL },
-  { "Rcaron",                            600, NULL },
-  { "Kcommaaccent",                      600, NULL },
-  { "greater",                           600, NULL },
-  { "atilde",                            600, NULL },
-  { "brokenbar",                         600, NULL },
-  { "quoteleft",                         600, NULL },
-  { "Edotaccent",                        600, NULL },
-  { "onesuperior",                       600, NULL }
+  { "Ntilde",                            600, nullptr },
+  { "rcaron",                            600, nullptr },
+  { "kcommaaccent",                      600, nullptr },
+  { "Ncommaaccent",                      600, nullptr },
+  { "Zacute",                            600, nullptr },
+  { "comma",                             600, nullptr },
+  { "cedilla",                           600, nullptr },
+  { "plusminus",                         600, nullptr },
+  { "circumflex",                        600, nullptr },
+  { "dotaccent",                         600, nullptr },
+  { "edotaccent",                        600, nullptr },
+  { "asciitilde",                        600, nullptr },
+  { "colon",                             600, nullptr },
+  { "onehalf",                           600, nullptr },
+  { "dollar",                            600, nullptr },
+  { "Lcaron",                            600, nullptr },
+  { "ntilde",                            600, nullptr },
+  { "Aogonek",                           600, nullptr },
+  { "ncommaaccent",                      600, nullptr },
+  { "minus",                             600, nullptr },
+  { "Iogonek",                           600, nullptr },
+  { "zacute",                            600, nullptr },
+  { "yen",                               600, nullptr },
+  { "space",                             600, nullptr },
+  { "Omacron",                           600, nullptr },
+  { "questiondown",                      600, nullptr },
+  { "emdash",                            600, nullptr },
+  { "Agrave",                            600, nullptr },
+  { "three",                             600, nullptr },
+  { "numbersign",                        600, nullptr },
+  { "lcaron",                            600, nullptr },
+  { "A",                                 600, nullptr },
+  { "B",                                 600, nullptr },
+  { "C",                                 600, nullptr },
+  { "aogonek",                           600, nullptr },
+  { "D",                                 600, nullptr },
+  { "E",                                 600, nullptr },
+  { "onequarter",                        600, nullptr },
+  { "F",                                 600, nullptr },
+  { "G",                                 600, nullptr },
+  { "H",                                 600, nullptr },
+  { "I",                                 600, nullptr },
+  { "J",                                 600, nullptr },
+  { "K",                                 600, nullptr },
+  { "iogonek",                           600, nullptr },
+  { "backslash",                         600, nullptr },
+  { "L",                                 600, nullptr },
+  { "periodcentered",                    600, nullptr },
+  { "M",                                 600, nullptr },
+  { "N",                                 600, nullptr },
+  { "omacron",                           600, nullptr },
+  { "Tcommaaccent",                      600, nullptr },
+  { "O",                                 600, nullptr },
+  { "P",                                 600, nullptr },
+  { "Q",                                 600, nullptr },
+  { "Uhungarumlaut",                     600, nullptr },
+  { "R",                                 600, nullptr },
+  { "Aacute",                            600, nullptr },
+  { "caron",                             600, nullptr },
+  { "S",                                 600, nullptr },
+  { "T",                                 600, nullptr },
+  { "U",                                 600, nullptr },
+  { "agrave",                            600, nullptr },
+  { "V",                                 600, nullptr },
+  { "W",                                 600, nullptr },
+  { "X",                                 600, nullptr },
+  { "question",                          600, nullptr },
+  { "equal",                             600, nullptr },
+  { "Y",                                 600, nullptr },
+  { "Z",                                 600, nullptr },
+  { "four",                              600, nullptr },
+  { "a",                                 600, nullptr },
+  { "Gcommaaccent",                      600, nullptr },
+  { "b",                                 600, nullptr },
+  { "c",                                 600, nullptr },
+  { "d",                                 600, nullptr },
+  { "e",                                 600, nullptr },
+  { "f",                                 600, nullptr },
+  { "g",                                 600, nullptr },
+  { "bullet",                            600, nullptr },
+  { "h",                                 600, nullptr },
+  { "i",                                 600, nullptr },
+  { "Oslash",                            600, nullptr },
+  { "dagger",                            600, nullptr },
+  { "j",                                 600, nullptr },
+  { "k",                                 600, nullptr },
+  { "l",                                 600, nullptr },
+  { "m",                                 600, nullptr },
+  { "n",                                 600, nullptr },
+  { "tcommaaccent",                      600, nullptr },
+  { "o",                                 600, nullptr },
+  { "ordfeminine",                       600, nullptr },
+  { "ring",                              600, nullptr },
+  { "p",                                 600, nullptr },
+  { "q",                                 600, nullptr },
+  { "uhungarumlaut",                     600, nullptr },
+  { "r",                                 600, nullptr },
+  { "twosuperior",                       600, nullptr },
+  { "aacute",                            600, nullptr },
+  { "s",                                 600, nullptr },
+  { "OE",                                600, nullptr },
+  { "t",                                 600, nullptr },
+  { "divide",                            600, nullptr },
+  { "u",                                 600, nullptr },
+  { "Ccaron",                            600, nullptr },
+  { "v",                                 600, nullptr },
+  { "w",                                 600, nullptr },
+  { "x",                                 600, nullptr },
+  { "y",                                 600, nullptr },
+  { "z",                                 600, nullptr },
+  { "Gbreve",                            600, nullptr },
+  { "commaaccent",                       600, nullptr },
+  { "hungarumlaut",                      600, nullptr },
+  { "Idotaccent",                        600, nullptr },
+  { "Nacute",                            600, nullptr },
+  { "quotedbl",                          600, nullptr },
+  { "gcommaaccent",                      600, nullptr },
+  { "mu",                                600, nullptr },
+  { "greaterequal",                      600, nullptr },
+  { "Scaron",                            600, nullptr },
+  { "Lslash",                            600, nullptr },
+  { "semicolon",                         600, nullptr },
+  { "oslash",                            600, nullptr },
+  { "lessequal",                         600, nullptr },
+  { "lozenge",                           600, nullptr },
+  { "parenright",                        600, nullptr },
+  { "ccaron",                            600, nullptr },
+  { "Ecircumflex",                       600, nullptr },
+  { "gbreve",                            600, nullptr },
+  { "trademark",                         600, nullptr },
+  { "daggerdbl",                         600, nullptr },
+  { "nacute",                            600, nullptr },
+  { "macron",                            600, nullptr },
+  { "Otilde",                            600, nullptr },
+  { "Emacron",                           600, nullptr },
+  { "ellipsis",                          600, nullptr },
+  { "scaron",                            600, nullptr },
+  { "AE",                                600, nullptr },
+  { "Ucircumflex",                       600, nullptr },
+  { "lslash",                            600, nullptr },
+  { "quotedblleft",                      600, nullptr },
+  { "guilsinglright",                    600, nullptr },
+  { "hyphen",                            600, nullptr },
+  { "quotesingle",                       600, nullptr },
+  { "eight",                             600, nullptr },
+  { "exclamdown",                        600, nullptr },
+  { "endash",                            600, nullptr },
+  { "oe",                                600, nullptr },
+  { "Abreve",                            600, nullptr },
+  { "Umacron",                           600, nullptr },
+  { "ecircumflex",                       600, nullptr },
+  { "Adieresis",                         600, nullptr },
+  { "copyright",                         600, nullptr },
+  { "Egrave",                            600, nullptr },
+  { "slash",                             600, nullptr },
+  { "Edieresis",                         600, nullptr },
+  { "otilde",                            600, nullptr },
+  { "Idieresis",                         600, nullptr },
+  { "parenleft",                         600, nullptr },
+  { "one",                               600, nullptr },
+  { "emacron",                           600, nullptr },
+  { "Odieresis",                         600, nullptr },
+  { "ucircumflex",                       600, nullptr },
+  { "bracketleft",                       600, nullptr },
+  { "Ugrave",                            600, nullptr },
+  { "quoteright",                        600, nullptr },
+  { "Udieresis",                         600, nullptr },
+  { "perthousand",                       600, nullptr },
+  { "Ydieresis",                         600, nullptr },
+  { "umacron",                           600, nullptr },
+  { "abreve",                            600, nullptr },
+  { "Eacute",                            600, nullptr },
+  { "adieresis",                         600, nullptr },
+  { "egrave",                            600, nullptr },
+  { "edieresis",                         600, nullptr },
+  { "idieresis",                         600, nullptr },
+  { "Eth",                               600, nullptr },
+  { "ae",                                600, nullptr },
+  { "asterisk",                          600, nullptr },
+  { "odieresis",                         600, nullptr },
+  { "Uacute",                            600, nullptr },
+  { "ugrave",                            600, nullptr },
+  { "nine",                              600, nullptr },
+  { "five",                              600, nullptr },
+  { "udieresis",                         600, nullptr },
+  { "Zcaron",                            600, nullptr },
+  { "Scommaaccent",                      600, nullptr },
+  { "threequarters",                     600, nullptr },
+  { "guillemotright",                    600, nullptr },
+  { "Ccedilla",                          600, nullptr },
+  { "ydieresis",                         600, nullptr },
+  { "tilde",                             600, nullptr },
+  { "at",                                600, nullptr },
+  { "eacute",                            600, nullptr },
+  { "underscore",                        600, nullptr },
+  { "Euro",                              600, nullptr },
+  { "Dcroat",                            600, nullptr },
+  { "multiply",                          600, nullptr },
+  { "zero",                              600, nullptr },
+  { "eth",                               600, nullptr },
+  { "Scedilla",                          600, nullptr },
+  { "Ograve",                            600, nullptr },
+  { "Racute",                            600, nullptr },
+  { "partialdiff",                       600, nullptr },
+  { "uacute",                            600, nullptr },
+  { "braceleft",                         600, nullptr },
+  { "Thorn",                             600, nullptr },
+  { "zcaron",                            600, nullptr },
+  { "scommaaccent",                      600, nullptr },
+  { "ccedilla",                          600, nullptr },
+  { "Dcaron",                            600, nullptr },
+  { "dcroat",                            600, nullptr },
+  { "Ocircumflex",                       600, nullptr },
+  { "Oacute",                            600, nullptr },
+  { "scedilla",                          600, nullptr },
+  { "ogonek",                            600, nullptr },
+  { "ograve",                            600, nullptr },
+  { "racute",                            600, nullptr },
+  { "Tcaron",                            600, nullptr },
+  { "Eogonek",                           600, nullptr },
+  { "thorn",                             600, nullptr },
+  { "degree",                            600, nullptr },
+  { "registered",                        600, nullptr },
+  { "radical",                           600, nullptr },
+  { "Aring",                             600, nullptr },
+  { "percent",                           600, nullptr },
+  { "six",                               600, nullptr },
+  { "paragraph",                         600, nullptr },
+  { "dcaron",                            600, nullptr },
+  { "Uogonek",                           600, nullptr },
+  { "two",                               600, nullptr },
+  { "summation",                         600, nullptr },
+  { "Igrave",                            600, nullptr },
+  { "Lacute",                            600, nullptr },
+  { "ocircumflex",                       600, nullptr },
+  { "oacute",                            600, nullptr },
+  { "Uring",                             600, nullptr },
+  { "Lcommaaccent",                      600, nullptr },
+  { "tcaron",                            600, nullptr },
+  { "eogonek",                           600, nullptr },
+  { "Delta",                             600, nullptr },
+  { "Ohungarumlaut",                     600, nullptr },
+  { "asciicircum",                       600, nullptr },
+  { "aring",                             600, nullptr },
+  { "grave",                             600, nullptr },
+  { "uogonek",                           600, nullptr },
+  { "bracketright",                      600, nullptr },
+  { "Iacute",                            600, nullptr },
+  { "ampersand",                         600, nullptr },
+  { "igrave",                            600, nullptr },
+  { "lacute",                            600, nullptr },
+  { "Ncaron",                            600, nullptr },
+  { "plus",                              600, nullptr },
+  { "uring",                             600, nullptr },
+  { "quotesinglbase",                    600, nullptr },
+  { "lcommaaccent",                      600, nullptr },
+  { "Yacute",                            600, nullptr },
+  { "ohungarumlaut",                     600, nullptr },
+  { "threesuperior",                     600, nullptr },
+  { "acute",                             600, nullptr },
+  { "section",                           600, nullptr },
+  { "dieresis",                          600, nullptr },
+  { "iacute",                            600, nullptr },
+  { "quotedblbase",                      600, nullptr },
+  { "ncaron",                            600, nullptr },
+  { "florin",                            600, nullptr },
+  { "yacute",                            600, nullptr },
+  { "Rcommaaccent",                      600, nullptr },
+  { "fi",                                600, nullptr },
+  { "fl",                                600, nullptr },
+  { "Acircumflex",                       600, nullptr },
+  { "Cacute",                            600, nullptr },
+  { "Icircumflex",                       600, nullptr },
+  { "guillemotleft",                     600, nullptr },
+  { "germandbls",                        600, nullptr },
+  { "Amacron",                           600, nullptr },
+  { "seven",                             600, nullptr },
+  { "Sacute",                            600, nullptr },
+  { "ordmasculine",                      600, nullptr },
+  { "dotlessi",                          600, nullptr },
+  { "sterling",                          600, nullptr },
+  { "notequal",                          600, nullptr },
+  { "Imacron",                           600, nullptr },
+  { "rcommaaccent",                      600, nullptr },
+  { "Zdotaccent",                        600, nullptr },
+  { "acircumflex",                       600, nullptr },
+  { "cacute",                            600, nullptr },
+  { "Ecaron",                            600, nullptr },
+  { "icircumflex",                       600, nullptr },
+  { "braceright",                        600, nullptr },
+  { "quotedblright",                     600, nullptr },
+  { "amacron",                           600, nullptr },
+  { "sacute",                            600, nullptr },
+  { "imacron",                           600, nullptr },
+  { "cent",                              600, nullptr },
+  { "currency",                          600, nullptr },
+  { "logicalnot",                        600, nullptr },
+  { "zdotaccent",                        600, nullptr },
+  { "Atilde",                            600, nullptr },
+  { "breve",                             600, nullptr },
+  { "bar",                               600, nullptr },
+  { "fraction",                          600, nullptr },
+  { "less",                              600, nullptr },
+  { "ecaron",                            600, nullptr },
+  { "guilsinglleft",                     600, nullptr },
+  { "exclam",                            600, nullptr },
+  { "period",                            600, nullptr },
+  { "Rcaron",                            600, nullptr },
+  { "Kcommaaccent",                      600, nullptr },
+  { "greater",                           600, nullptr },
+  { "atilde",                            600, nullptr },
+  { "brokenbar",                         600, nullptr },
+  { "quoteleft",                         600, nullptr },
+  { "Edotaccent",                        600, nullptr },
+  { "onesuperior",                       600, nullptr }
 };
 
 static BuiltinFontWidth courierObliqueWidthsTab[] = {
-  { "Ntilde",                            600, NULL },
-  { "rcaron",                            600, NULL },
-  { "kcommaaccent",                      600, NULL },
-  { "Ncommaaccent",                      600, NULL },
-  { "Zacute",                            600, NULL },
-  { "comma",                             600, NULL },
-  { "cedilla",                           600, NULL },
-  { "plusminus",                         600, NULL },
-  { "circumflex",                        600, NULL },
-  { "dotaccent",                         600, NULL },
-  { "edotaccent",                        600, NULL },
-  { "asciitilde",                        600, NULL },
-  { "colon",                             600, NULL },
-  { "onehalf",                           600, NULL },
-  { "dollar",                            600, NULL },
-  { "Lcaron",                            600, NULL },
-  { "ntilde",                            600, NULL },
-  { "Aogonek",                           600, NULL },
-  { "ncommaaccent",                      600, NULL },
-  { "minus",                             600, NULL },
-  { "Iogonek",                           600, NULL },
-  { "zacute",                            600, NULL },
-  { "yen",                               600, NULL },
-  { "space",                             600, NULL },
-  { "Omacron",                           600, NULL },
-  { "questiondown",                      600, NULL },
-  { "emdash",                            600, NULL },
-  { "Agrave",                            600, NULL },
-  { "three",                             600, NULL },
-  { "numbersign",                        600, NULL },
-  { "lcaron",                            600, NULL },
-  { "A",                                 600, NULL },
-  { "B",                                 600, NULL },
-  { "C",                                 600, NULL },
-  { "aogonek",                           600, NULL },
-  { "D",                                 600, NULL },
-  { "E",                                 600, NULL },
-  { "onequarter",                        600, NULL },
-  { "F",                                 600, NULL },
-  { "G",                                 600, NULL },
-  { "H",                                 600, NULL },
-  { "I",                                 600, NULL },
-  { "J",                                 600, NULL },
-  { "K",                                 600, NULL },
-  { "iogonek",                           600, NULL },
-  { "backslash",                         600, NULL },
-  { "L",                                 600, NULL },
-  { "periodcentered",                    600, NULL },
-  { "M",                                 600, NULL },
-  { "N",                                 600, NULL },
-  { "omacron",                           600, NULL },
-  { "Tcommaaccent",                      600, NULL },
-  { "O",                                 600, NULL },
-  { "P",                                 600, NULL },
-  { "Q",                                 600, NULL },
-  { "Uhungarumlaut",                     600, NULL },
-  { "R",                                 600, NULL },
-  { "Aacute",                            600, NULL },
-  { "caron",                             600, NULL },
-  { "S",                                 600, NULL },
-  { "T",                                 600, NULL },
-  { "U",                                 600, NULL },
-  { "agrave",                            600, NULL },
-  { "V",                                 600, NULL },
-  { "W",                                 600, NULL },
-  { "X",                                 600, NULL },
-  { "question",                          600, NULL },
-  { "equal",                             600, NULL },
-  { "Y",                                 600, NULL },
-  { "Z",                                 600, NULL },
-  { "four",                              600, NULL },
-  { "a",                                 600, NULL },
-  { "Gcommaaccent",                      600, NULL },
-  { "b",                                 600, NULL },
-  { "c",                                 600, NULL },
-  { "d",                                 600, NULL },
-  { "e",                                 600, NULL },
-  { "f",                                 600, NULL },
-  { "g",                                 600, NULL },
-  { "bullet",                            600, NULL },
-  { "h",                                 600, NULL },
-  { "i",                                 600, NULL },
-  { "Oslash",                            600, NULL },
-  { "dagger",                            600, NULL },
-  { "j",                                 600, NULL },
-  { "k",                                 600, NULL },
-  { "l",                                 600, NULL },
-  { "m",                                 600, NULL },
-  { "n",                                 600, NULL },
-  { "tcommaaccent",                      600, NULL },
-  { "o",                                 600, NULL },
-  { "ordfeminine",                       600, NULL },
-  { "ring",                              600, NULL },
-  { "p",                                 600, NULL },
-  { "q",                                 600, NULL },
-  { "uhungarumlaut",                     600, NULL },
-  { "r",                                 600, NULL },
-  { "twosuperior",                       600, NULL },
-  { "aacute",                            600, NULL },
-  { "s",                                 600, NULL },
-  { "OE",                                600, NULL },
-  { "t",                                 600, NULL },
-  { "divide",                            600, NULL },
-  { "u",                                 600, NULL },
-  { "Ccaron",                            600, NULL },
-  { "v",                                 600, NULL },
-  { "w",                                 600, NULL },
-  { "x",                                 600, NULL },
-  { "y",                                 600, NULL },
-  { "z",                                 600, NULL },
-  { "Gbreve",                            600, NULL },
-  { "commaaccent",                       600, NULL },
-  { "hungarumlaut",                      600, NULL },
-  { "Idotaccent",                        600, NULL },
-  { "Nacute",                            600, NULL },
-  { "quotedbl",                          600, NULL },
-  { "gcommaaccent",                      600, NULL },
-  { "mu",                                600, NULL },
-  { "greaterequal",                      600, NULL },
-  { "Scaron",                            600, NULL },
-  { "Lslash",                            600, NULL },
-  { "semicolon",                         600, NULL },
-  { "oslash",                            600, NULL },
-  { "lessequal",                         600, NULL },
-  { "lozenge",                           600, NULL },
-  { "parenright",                        600, NULL },
-  { "ccaron",                            600, NULL },
-  { "Ecircumflex",                       600, NULL },
-  { "gbreve",                            600, NULL },
-  { "trademark",                         600, NULL },
-  { "daggerdbl",                         600, NULL },
-  { "nacute",                            600, NULL },
-  { "macron",                            600, NULL },
-  { "Otilde",                            600, NULL },
-  { "Emacron",                           600, NULL },
-  { "ellipsis",                          600, NULL },
-  { "scaron",                            600, NULL },
-  { "AE",                                600, NULL },
-  { "Ucircumflex",                       600, NULL },
-  { "lslash",                            600, NULL },
-  { "quotedblleft",                      600, NULL },
-  { "guilsinglright",                    600, NULL },
-  { "hyphen",                            600, NULL },
-  { "quotesingle",                       600, NULL },
-  { "eight",                             600, NULL },
-  { "exclamdown",                        600, NULL },
-  { "endash",                            600, NULL },
-  { "oe",                                600, NULL },
-  { "Abreve",                            600, NULL },
-  { "Umacron",                           600, NULL },
-  { "ecircumflex",                       600, NULL },
-  { "Adieresis",                         600, NULL },
-  { "copyright",                         600, NULL },
-  { "Egrave",                            600, NULL },
-  { "slash",                             600, NULL },
-  { "Edieresis",                         600, NULL },
-  { "otilde",                            600, NULL },
-  { "Idieresis",                         600, NULL },
-  { "parenleft",                         600, NULL },
-  { "one",                               600, NULL },
-  { "emacron",                           600, NULL },
-  { "Odieresis",                         600, NULL },
-  { "ucircumflex",                       600, NULL },
-  { "bracketleft",                       600, NULL },
-  { "Ugrave",                            600, NULL },
-  { "quoteright",                        600, NULL },
-  { "Udieresis",                         600, NULL },
-  { "perthousand",                       600, NULL },
-  { "Ydieresis",                         600, NULL },
-  { "umacron",                           600, NULL },
-  { "abreve",                            600, NULL },
-  { "Eacute",                            600, NULL },
-  { "adieresis",                         600, NULL },
-  { "egrave",                            600, NULL },
-  { "edieresis",                         600, NULL },
-  { "idieresis",                         600, NULL },
-  { "Eth",                               600, NULL },
-  { "ae",                                600, NULL },
-  { "asterisk",                          600, NULL },
-  { "odieresis",                         600, NULL },
-  { "Uacute",                            600, NULL },
-  { "ugrave",                            600, NULL },
-  { "nine",                              600, NULL },
-  { "five",                              600, NULL },
-  { "udieresis",                         600, NULL },
-  { "Zcaron",                            600, NULL },
-  { "Scommaaccent",                      600, NULL },
-  { "threequarters",                     600, NULL },
-  { "guillemotright",                    600, NULL },
-  { "Ccedilla",                          600, NULL },
-  { "ydieresis",                         600, NULL },
-  { "tilde",                             600, NULL },
-  { "at",                                600, NULL },
-  { "eacute",                            600, NULL },
-  { "underscore",                        600, NULL },
-  { "Euro",                              600, NULL },
-  { "Dcroat",                            600, NULL },
-  { "multiply",                          600, NULL },
-  { "zero",                              600, NULL },
-  { "eth",                               600, NULL },
-  { "Scedilla",                          600, NULL },
-  { "Ograve",                            600, NULL },
-  { "Racute",                            600, NULL },
-  { "partialdiff",                       600, NULL },
-  { "uacute",                            600, NULL },
-  { "braceleft",                         600, NULL },
-  { "Thorn",                             600, NULL },
-  { "zcaron",                            600, NULL },
-  { "scommaaccent",                      600, NULL },
-  { "ccedilla",                          600, NULL },
-  { "Dcaron",                            600, NULL },
-  { "dcroat",                            600, NULL },
-  { "Ocircumflex",                       600, NULL },
-  { "Oacute",                            600, NULL },
-  { "scedilla",                          600, NULL },
-  { "ogonek",                            600, NULL },
-  { "ograve",                            600, NULL },
-  { "racute",                            600, NULL },
-  { "Tcaron",                            600, NULL },
-  { "Eogonek",                           600, NULL },
-  { "thorn",                             600, NULL },
-  { "degree",                            600, NULL },
-  { "registered",                        600, NULL },
-  { "radical",                           600, NULL },
-  { "Aring",                             600, NULL },
-  { "percent",                           600, NULL },
-  { "six",                               600, NULL },
-  { "paragraph",                         600, NULL },
-  { "dcaron",                            600, NULL },
-  { "Uogonek",                           600, NULL },
-  { "two",                               600, NULL },
-  { "summation",                         600, NULL },
-  { "Igrave",                            600, NULL },
-  { "Lacute",                            600, NULL },
-  { "ocircumflex",                       600, NULL },
-  { "oacute",                            600, NULL },
-  { "Uring",                             600, NULL },
-  { "Lcommaaccent",                      600, NULL },
-  { "tcaron",                            600, NULL },
-  { "eogonek",                           600, NULL },
-  { "Delta",                             600, NULL },
-  { "Ohungarumlaut",                     600, NULL },
-  { "asciicircum",                       600, NULL },
-  { "aring",                             600, NULL },
-  { "grave",                             600, NULL },
-  { "uogonek",                           600, NULL },
-  { "bracketright",                      600, NULL },
-  { "Iacute",                            600, NULL },
-  { "ampersand",                         600, NULL },
-  { "igrave",                            600, NULL },
-  { "lacute",                            600, NULL },
-  { "Ncaron",                            600, NULL },
-  { "plus",                              600, NULL },
-  { "uring",                             600, NULL },
-  { "quotesinglbase",                    600, NULL },
-  { "lcommaaccent",                      600, NULL },
-  { "Yacute",                            600, NULL },
-  { "ohungarumlaut",                     600, NULL },
-  { "threesuperior",                     600, NULL },
-  { "acute",                             600, NULL },
-  { "section",                           600, NULL },
-  { "dieresis",                          600, NULL },
-  { "iacute",                            600, NULL },
-  { "quotedblbase",                      600, NULL },
-  { "ncaron",                            600, NULL },
-  { "florin",                            600, NULL },
-  { "yacute",                            600, NULL },
-  { "Rcommaaccent",                      600, NULL },
-  { "fi",                                600, NULL },
-  { "fl",                                600, NULL },
-  { "Acircumflex",                       600, NULL },
-  { "Cacute",                            600, NULL },
-  { "Icircumflex",                       600, NULL },
-  { "guillemotleft",                     600, NULL },
-  { "germandbls",                        600, NULL },
-  { "Amacron",                           600, NULL },
-  { "seven",                             600, NULL },
-  { "Sacute",                            600, NULL },
-  { "ordmasculine",                      600, NULL },
-  { "dotlessi",                          600, NULL },
-  { "sterling",                          600, NULL },
-  { "notequal",                          600, NULL },
-  { "Imacron",                           600, NULL },
-  { "rcommaaccent",                      600, NULL },
-  { "Zdotaccent",                        600, NULL },
-  { "acircumflex",                       600, NULL },
-  { "cacute",                            600, NULL },
-  { "Ecaron",                            600, NULL },
-  { "icircumflex",                       600, NULL },
-  { "braceright",                        600, NULL },
-  { "quotedblright",                     600, NULL },
-  { "amacron",                           600, NULL },
-  { "sacute",                            600, NULL },
-  { "imacron",                           600, NULL },
-  { "cent",                              600, NULL },
-  { "currency",                          600, NULL },
-  { "logicalnot",                        600, NULL },
-  { "zdotaccent",                        600, NULL },
-  { "Atilde",                            600, NULL },
-  { "breve",                             600, NULL },
-  { "bar",                               600, NULL },
-  { "fraction",                          600, NULL },
-  { "less",                              600, NULL },
-  { "ecaron",                            600, NULL },
-  { "guilsinglleft",                     600, NULL },
-  { "exclam",                            600, NULL },
-  { "period",                            600, NULL },
-  { "Rcaron",                            600, NULL },
-  { "Kcommaaccent",                      600, NULL },
-  { "greater",                           600, NULL },
-  { "atilde",                            600, NULL },
-  { "brokenbar",                         600, NULL },
-  { "quoteleft",                         600, NULL },
-  { "Edotaccent",                        600, NULL },
-  { "onesuperior",                       600, NULL }
+  { "Ntilde",                            600, nullptr },
+  { "rcaron",                            600, nullptr },
+  { "kcommaaccent",                      600, nullptr },
+  { "Ncommaaccent",                      600, nullptr },
+  { "Zacute",                            600, nullptr },
+  { "comma",                             600, nullptr },
+  { "cedilla",                           600, nullptr },
+  { "plusminus",                         600, nullptr },
+  { "circumflex",                        600, nullptr },
+  { "dotaccent",                         600, nullptr },
+  { "edotaccent",                        600, nullptr },
+  { "asciitilde",                        600, nullptr },
+  { "colon",                             600, nullptr },
+  { "onehalf",                           600, nullptr },
+  { "dollar",                            600, nullptr },
+  { "Lcaron",                            600, nullptr },
+  { "ntilde",                            600, nullptr },
+  { "Aogonek",                           600, nullptr },
+  { "ncommaaccent",                      600, nullptr },
+  { "minus",                             600, nullptr },
+  { "Iogonek",                           600, nullptr },
+  { "zacute",                            600, nullptr },
+  { "yen",                               600, nullptr },
+  { "space",                             600, nullptr },
+  { "Omacron",                           600, nullptr },
+  { "questiondown",                      600, nullptr },
+  { "emdash",                            600, nullptr },
+  { "Agrave",                            600, nullptr },
+  { "three",                             600, nullptr },
+  { "numbersign",                        600, nullptr },
+  { "lcaron",                            600, nullptr },
+  { "A",                                 600, nullptr },
+  { "B",                                 600, nullptr },
+  { "C",                                 600, nullptr },
+  { "aogonek",                           600, nullptr },
+  { "D",                                 600, nullptr },
+  { "E",                                 600, nullptr },
+  { "onequarter",                        600, nullptr },
+  { "F",                                 600, nullptr },
+  { "G",                                 600, nullptr },
+  { "H",                                 600, nullptr },
+  { "I",                                 600, nullptr },
+  { "J",                                 600, nullptr },
+  { "K",                                 600, nullptr },
+  { "iogonek",                           600, nullptr },
+  { "backslash",                         600, nullptr },
+  { "L",                                 600, nullptr },
+  { "periodcentered",                    600, nullptr },
+  { "M",                                 600, nullptr },
+  { "N",                                 600, nullptr },
+  { "omacron",                           600, nullptr },
+  { "Tcommaaccent",                      600, nullptr },
+  { "O",                                 600, nullptr },
+  { "P",                                 600, nullptr },
+  { "Q",                                 600, nullptr },
+  { "Uhungarumlaut",                     600, nullptr },
+  { "R",                                 600, nullptr },
+  { "Aacute",                            600, nullptr },
+  { "caron",                             600, nullptr },
+  { "S",                                 600, nullptr },
+  { "T",                                 600, nullptr },
+  { "U",                                 600, nullptr },
+  { "agrave",                            600, nullptr },
+  { "V",                                 600, nullptr },
+  { "W",                                 600, nullptr },
+  { "X",                                 600, nullptr },
+  { "question",                          600, nullptr },
+  { "equal",                             600, nullptr },
+  { "Y",                                 600, nullptr },
+  { "Z",                                 600, nullptr },
+  { "four",                              600, nullptr },
+  { "a",                                 600, nullptr },
+  { "Gcommaaccent",                      600, nullptr },
+  { "b",                                 600, nullptr },
+  { "c",                                 600, nullptr },
+  { "d",                                 600, nullptr },
+  { "e",                                 600, nullptr },
+  { "f",                                 600, nullptr },
+  { "g",                                 600, nullptr },
+  { "bullet",                            600, nullptr },
+  { "h",                                 600, nullptr },
+  { "i",                                 600, nullptr },
+  { "Oslash",                            600, nullptr },
+  { "dagger",                            600, nullptr },
+  { "j",                                 600, nullptr },
+  { "k",                                 600, nullptr },
+  { "l",                                 600, nullptr },
+  { "m",                                 600, nullptr },
+  { "n",                                 600, nullptr },
+  { "tcommaaccent",                      600, nullptr },
+  { "o",                                 600, nullptr },
+  { "ordfeminine",                       600, nullptr },
+  { "ring",                              600, nullptr },
+  { "p",                                 600, nullptr },
+  { "q",                                 600, nullptr },
+  { "uhungarumlaut",                     600, nullptr },
+  { "r",                                 600, nullptr },
+  { "twosuperior",                       600, nullptr },
+  { "aacute",                            600, nullptr },
+  { "s",                                 600, nullptr },
+  { "OE",                                600, nullptr },
+  { "t",                                 600, nullptr },
+  { "divide",                            600, nullptr },
+  { "u",                                 600, nullptr },
+  { "Ccaron",                            600, nullptr },
+  { "v",                                 600, nullptr },
+  { "w",                                 600, nullptr },
+  { "x",                                 600, nullptr },
+  { "y",                                 600, nullptr },
+  { "z",                                 600, nullptr },
+  { "Gbreve",                            600, nullptr },
+  { "commaaccent",                       600, nullptr },
+  { "hungarumlaut",                      600, nullptr },
+  { "Idotaccent",                        600, nullptr },
+  { "Nacute",                            600, nullptr },
+  { "quotedbl",                          600, nullptr },
+  { "gcommaaccent",                      600, nullptr },
+  { "mu",                                600, nullptr },
+  { "greaterequal",                      600, nullptr },
+  { "Scaron",                            600, nullptr },
+  { "Lslash",                            600, nullptr },
+  { "semicolon",                         600, nullptr },
+  { "oslash",                            600, nullptr },
+  { "lessequal",                         600, nullptr },
+  { "lozenge",                           600, nullptr },
+  { "parenright",                        600, nullptr },
+  { "ccaron",                            600, nullptr },
+  { "Ecircumflex",                       600, nullptr },
+  { "gbreve",                            600, nullptr },
+  { "trademark",                         600, nullptr },
+  { "daggerdbl",                         600, nullptr },
+  { "nacute",                            600, nullptr },
+  { "macron",                            600, nullptr },
+  { "Otilde",                            600, nullptr },
+  { "Emacron",                           600, nullptr },
+  { "ellipsis",                          600, nullptr },
+  { "scaron",                            600, nullptr },
+  { "AE",                                600, nullptr },
+  { "Ucircumflex",                       600, nullptr },
+  { "lslash",                            600, nullptr },
+  { "quotedblleft",                      600, nullptr },
+  { "guilsinglright",                    600, nullptr },
+  { "hyphen",                            600, nullptr },
+  { "quotesingle",                       600, nullptr },
+  { "eight",                             600, nullptr },
+  { "exclamdown",                        600, nullptr },
+  { "endash",                            600, nullptr },
+  { "oe",                                600, nullptr },
+  { "Abreve",                            600, nullptr },
+  { "Umacron",                           600, nullptr },
+  { "ecircumflex",                       600, nullptr },
+  { "Adieresis",                         600, nullptr },
+  { "copyright",                         600, nullptr },
+  { "Egrave",                            600, nullptr },
+  { "slash",                             600, nullptr },
+  { "Edieresis",                         600, nullptr },
+  { "otilde",                            600, nullptr },
+  { "Idieresis",                         600, nullptr },
+  { "parenleft",                         600, nullptr },
+  { "one",                               600, nullptr },
+  { "emacron",                           600, nullptr },
+  { "Odieresis",                         600, nullptr },
+  { "ucircumflex",                       600, nullptr },
+  { "bracketleft",                       600, nullptr },
+  { "Ugrave",                            600, nullptr },
+  { "quoteright",                        600, nullptr },
+  { "Udieresis",                         600, nullptr },
+  { "perthousand",                       600, nullptr },
+  { "Ydieresis",                         600, nullptr },
+  { "umacron",                           600, nullptr },
+  { "abreve",                            600, nullptr },
+  { "Eacute",                            600, nullptr },
+  { "adieresis",                         600, nullptr },
+  { "egrave",                            600, nullptr },
+  { "edieresis",                         600, nullptr },
+  { "idieresis",                         600, nullptr },
+  { "Eth",                               600, nullptr },
+  { "ae",                                600, nullptr },
+  { "asterisk",                          600, nullptr },
+  { "odieresis",                         600, nullptr },
+  { "Uacute",                            600, nullptr },
+  { "ugrave",                            600, nullptr },
+  { "nine",                              600, nullptr },
+  { "five",                              600, nullptr },
+  { "udieresis",                         600, nullptr },
+  { "Zcaron",                            600, nullptr },
+  { "Scommaaccent",                      600, nullptr },
+  { "threequarters",                     600, nullptr },
+  { "guillemotright",                    600, nullptr },
+  { "Ccedilla",                          600, nullptr },
+  { "ydieresis",                         600, nullptr },
+  { "tilde",                             600, nullptr },
+  { "at",                                600, nullptr },
+  { "eacute",                            600, nullptr },
+  { "underscore",                        600, nullptr },
+  { "Euro",                              600, nullptr },
+  { "Dcroat",                            600, nullptr },
+  { "multiply",                          600, nullptr },
+  { "zero",                              600, nullptr },
+  { "eth",                               600, nullptr },
+  { "Scedilla",                          600, nullptr },
+  { "Ograve",                            600, nullptr },
+  { "Racute",                            600, nullptr },
+  { "partialdiff",                       600, nullptr },
+  { "uacute",                            600, nullptr },
+  { "braceleft",                         600, nullptr },
+  { "Thorn",                             600, nullptr },
+  { "zcaron",                            600, nullptr },
+  { "scommaaccent",                      600, nullptr },
+  { "ccedilla",                          600, nullptr },
+  { "Dcaron",                            600, nullptr },
+  { "dcroat",                            600, nullptr },
+  { "Ocircumflex",                       600, nullptr },
+  { "Oacute",                            600, nullptr },
+  { "scedilla",                          600, nullptr },
+  { "ogonek",                            600, nullptr },
+  { "ograve",                            600, nullptr },
+  { "racute",                            600, nullptr },
+  { "Tcaron",                            600, nullptr },
+  { "Eogonek",                           600, nullptr },
+  { "thorn",                             600, nullptr },
+  { "degree",                            600, nullptr },
+  { "registered",                        600, nullptr },
+  { "radical",                           600, nullptr },
+  { "Aring",                             600, nullptr },
+  { "percent",                           600, nullptr },
+  { "six",                               600, nullptr },
+  { "paragraph",                         600, nullptr },
+  { "dcaron",                            600, nullptr },
+  { "Uogonek",                           600, nullptr },
+  { "two",                               600, nullptr },
+  { "summation",                         600, nullptr },
+  { "Igrave",                            600, nullptr },
+  { "Lacute",                            600, nullptr },
+  { "ocircumflex",                       600, nullptr },
+  { "oacute",                            600, nullptr },
+  { "Uring",                             600, nullptr },
+  { "Lcommaaccent",                      600, nullptr },
+  { "tcaron",                            600, nullptr },
+  { "eogonek",                           600, nullptr },
+  { "Delta",                             600, nullptr },
+  { "Ohungarumlaut",                     600, nullptr },
+  { "asciicircum",                       600, nullptr },
+  { "aring",                             600, nullptr },
+  { "grave",                             600, nullptr },
+  { "uogonek",                           600, nullptr },
+  { "bracketright",                      600, nullptr },
+  { "Iacute",                            600, nullptr },
+  { "ampersand",                         600, nullptr },
+  { "igrave",                            600, nullptr },
+  { "lacute",                            600, nullptr },
+  { "Ncaron",                            600, nullptr },
+  { "plus",                              600, nullptr },
+  { "uring",                             600, nullptr },
+  { "quotesinglbase",                    600, nullptr },
+  { "lcommaaccent",                      600, nullptr },
+  { "Yacute",                            600, nullptr },
+  { "ohungarumlaut",                     600, nullptr },
+  { "threesuperior",                     600, nullptr },
+  { "acute",                             600, nullptr },
+  { "section",                           600, nullptr },
+  { "dieresis",                          600, nullptr },
+  { "iacute",                            600, nullptr },
+  { "quotedblbase",                      600, nullptr },
+  { "ncaron",                            600, nullptr },
+  { "florin",                            600, nullptr },
+  { "yacute",                            600, nullptr },
+  { "Rcommaaccent",                      600, nullptr },
+  { "fi",                                600, nullptr },
+  { "fl",                                600, nullptr },
+  { "Acircumflex",                       600, nullptr },
+  { "Cacute",                            600, nullptr },
+  { "Icircumflex",                       600, nullptr },
+  { "guillemotleft",                     600, nullptr },
+  { "germandbls",                        600, nullptr },
+  { "Amacron",                           600, nullptr },
+  { "seven",                             600, nullptr },
+  { "Sacute",                            600, nullptr },
+  { "ordmasculine",                      600, nullptr },
+  { "dotlessi",                          600, nullptr },
+  { "sterling",                          600, nullptr },
+  { "notequal",                          600, nullptr },
+  { "Imacron",                           600, nullptr },
+  { "rcommaaccent",                      600, nullptr },
+  { "Zdotaccent",                        600, nullptr },
+  { "acircumflex",                       600, nullptr },
+  { "cacute",                            600, nullptr },
+  { "Ecaron",                            600, nullptr },
+  { "icircumflex",                       600, nullptr },
+  { "braceright",                        600, nullptr },
+  { "quotedblright",                     600, nullptr },
+  { "amacron",                           600, nullptr },
+  { "sacute",                            600, nullptr },
+  { "imacron",                           600, nullptr },
+  { "cent",                              600, nullptr },
+  { "currency",                          600, nullptr },
+  { "logicalnot",                        600, nullptr },
+  { "zdotaccent",                        600, nullptr },
+  { "Atilde",                            600, nullptr },
+  { "breve",                             600, nullptr },
+  { "bar",                               600, nullptr },
+  { "fraction",                          600, nullptr },
+  { "less",                              600, nullptr },
+  { "ecaron",                            600, nullptr },
+  { "guilsinglleft",                     600, nullptr },
+  { "exclam",                            600, nullptr },
+  { "period",                            600, nullptr },
+  { "Rcaron",                            600, nullptr },
+  { "Kcommaaccent",                      600, nullptr },
+  { "greater",                           600, nullptr },
+  { "atilde",                            600, nullptr },
+  { "brokenbar",                         600, nullptr },
+  { "quoteleft",                         600, nullptr },
+  { "Edotaccent",                        600, nullptr },
+  { "onesuperior",                       600, nullptr }
 };
 
 static BuiltinFontWidth helveticaWidthsTab[] = {
-  { "Ntilde",                            722, NULL },
-  { "rcaron",                            333, NULL },
-  { "kcommaaccent",                      500, NULL },
-  { "Ncommaaccent",                      722, NULL },
-  { "Zacute",                            611, NULL },
-  { "comma",                             278, NULL },
-  { "cedilla",                           333, NULL },
-  { "plusminus",                         584, NULL },
-  { "circumflex",                        333, NULL },
-  { "dotaccent",                         333, NULL },
-  { "edotaccent",                        556, NULL },
-  { "asciitilde",                        584, NULL },
-  { "colon",                             278, NULL },
-  { "onehalf",                           834, NULL },
-  { "dollar",                            556, NULL },
-  { "Lcaron",                            556, NULL },
-  { "ntilde",                            556, NULL },
-  { "Aogonek",                           667, NULL },
-  { "ncommaaccent",                      556, NULL },
-  { "minus",                             584, NULL },
-  { "Iogonek",                           278, NULL },
-  { "zacute",                            500, NULL },
-  { "yen",                               556, NULL },
-  { "space",                             278, NULL },
-  { "Omacron",                           778, NULL },
-  { "questiondown",                      611, NULL },
-  { "emdash",                           1000, NULL },
-  { "Agrave",                            667, NULL },
-  { "three",                             556, NULL },
-  { "numbersign",                        556, NULL },
-  { "lcaron",                            299, NULL },
-  { "A",                                 667, NULL },
-  { "B",                                 667, NULL },
-  { "C",                                 722, NULL },
-  { "aogonek",                           556, NULL },
-  { "D",                                 722, NULL },
-  { "E",                                 667, NULL },
-  { "onequarter",                        834, NULL },
-  { "F",                                 611, NULL },
-  { "G",                                 778, NULL },
-  { "H",                                 722, NULL },
-  { "I",                                 278, NULL },
-  { "J",                                 500, NULL },
-  { "K",                                 667, NULL },
-  { "iogonek",                           222, NULL },
-  { "backslash",                         278, NULL },
-  { "L",                                 556, NULL },
-  { "periodcentered",                    278, NULL },
-  { "M",                                 833, NULL },
-  { "N",                                 722, NULL },
-  { "omacron",                           556, NULL },
-  { "Tcommaaccent",                      611, NULL },
-  { "O",                                 778, NULL },
-  { "P",                                 667, NULL },
-  { "Q",                                 778, NULL },
-  { "Uhungarumlaut",                     722, NULL },
-  { "R",                                 722, NULL },
-  { "Aacute",                            667, NULL },
-  { "caron",                             333, NULL },
-  { "S",                                 667, NULL },
-  { "T",                                 611, NULL },
-  { "U",                                 722, NULL },
-  { "agrave",                            556, NULL },
-  { "V",                                 667, NULL },
-  { "W",                                 944, NULL },
-  { "X",                                 667, NULL },
-  { "question",                          556, NULL },
-  { "equal",                             584, NULL },
-  { "Y",                                 667, NULL },
-  { "Z",                                 611, NULL },
-  { "four",                              556, NULL },
-  { "a",                                 556, NULL },
-  { "Gcommaaccent",                      778, NULL },
-  { "b",                                 556, NULL },
-  { "c",                                 500, NULL },
-  { "d",                                 556, NULL },
-  { "e",                                 556, NULL },
-  { "f",                                 278, NULL },
-  { "g",                                 556, NULL },
-  { "bullet",                            350, NULL },
-  { "h",                                 556, NULL },
-  { "i",                                 222, NULL },
-  { "Oslash",                            778, NULL },
-  { "dagger",                            556, NULL },
-  { "j",                                 222, NULL },
-  { "k",                                 500, NULL },
-  { "l",                                 222, NULL },
-  { "m",                                 833, NULL },
-  { "n",                                 556, NULL },
-  { "tcommaaccent",                      278, NULL },
-  { "o",                                 556, NULL },
-  { "ordfeminine",                       370, NULL },
-  { "ring",                              333, NULL },
-  { "p",                                 556, NULL },
-  { "q",                                 556, NULL },
-  { "uhungarumlaut",                     556, NULL },
-  { "r",                                 333, NULL },
-  { "twosuperior",                       333, NULL },
-  { "aacute",                            556, NULL },
-  { "s",                                 500, NULL },
-  { "OE",                               1000, NULL },
-  { "t",                                 278, NULL },
-  { "divide",                            584, NULL },
-  { "u",                                 556, NULL },
-  { "Ccaron",                            722, NULL },
-  { "v",                                 500, NULL },
-  { "w",                                 722, NULL },
-  { "x",                                 500, NULL },
-  { "y",                                 500, NULL },
-  { "z",                                 500, NULL },
-  { "Gbreve",                            778, NULL },
-  { "commaaccent",                       250, NULL },
-  { "hungarumlaut",                      333, NULL },
-  { "Idotaccent",                        278, NULL },
-  { "Nacute",                            722, NULL },
-  { "quotedbl",                          355, NULL },
-  { "gcommaaccent",                      556, NULL },
-  { "mu",                                556, NULL },
-  { "greaterequal",                      549, NULL },
-  { "Scaron",                            667, NULL },
-  { "Lslash",                            556, NULL },
-  { "semicolon",                         278, NULL },
-  { "oslash",                            611, NULL },
-  { "lessequal",                         549, NULL },
-  { "lozenge",                           471, NULL },
-  { "parenright",                        333, NULL },
-  { "ccaron",                            500, NULL },
-  { "Ecircumflex",                       667, NULL },
-  { "gbreve",                            556, NULL },
-  { "trademark",                        1000, NULL },
-  { "daggerdbl",                         556, NULL },
-  { "nacute",                            556, NULL },
-  { "macron",                            333, NULL },
-  { "Otilde",                            778, NULL },
-  { "Emacron",                           667, NULL },
-  { "ellipsis",                         1000, NULL },
-  { "scaron",                            500, NULL },
-  { "AE",                               1000, NULL },
-  { "Ucircumflex",                       722, NULL },
-  { "lslash",                            222, NULL },
-  { "quotedblleft",                      333, NULL },
-  { "guilsinglright",                    333, NULL },
-  { "hyphen",                            333, NULL },
-  { "quotesingle",                       191, NULL },
-  { "eight",                             556, NULL },
-  { "exclamdown",                        333, NULL },
-  { "endash",                            556, NULL },
-  { "oe",                                944, NULL },
-  { "Abreve",                            667, NULL },
-  { "Umacron",                           722, NULL },
-  { "ecircumflex",                       556, NULL },
-  { "Adieresis",                         667, NULL },
-  { "copyright",                         737, NULL },
-  { "Egrave",                            667, NULL },
-  { "slash",                             278, NULL },
-  { "Edieresis",                         667, NULL },
-  { "otilde",                            556, NULL },
-  { "Idieresis",                         278, NULL },
-  { "parenleft",                         333, NULL },
-  { "one",                               556, NULL },
-  { "emacron",                           556, NULL },
-  { "Odieresis",                         778, NULL },
-  { "ucircumflex",                       556, NULL },
-  { "bracketleft",                       278, NULL },
-  { "Ugrave",                            722, NULL },
-  { "quoteright",                        222, NULL },
-  { "Udieresis",                         722, NULL },
-  { "perthousand",                      1000, NULL },
-  { "Ydieresis",                         667, NULL },
-  { "umacron",                           556, NULL },
-  { "abreve",                            556, NULL },
-  { "Eacute",                            667, NULL },
-  { "adieresis",                         556, NULL },
-  { "egrave",                            556, NULL },
-  { "edieresis",                         556, NULL },
-  { "idieresis",                         278, NULL },
-  { "Eth",                               722, NULL },
-  { "ae",                                889, NULL },
-  { "asterisk",                          389, NULL },
-  { "odieresis",                         556, NULL },
-  { "Uacute",                            722, NULL },
-  { "ugrave",                            556, NULL },
-  { "nine",                              556, NULL },
-  { "five",                              556, NULL },
-  { "udieresis",                         556, NULL },
-  { "Zcaron",                            611, NULL },
-  { "Scommaaccent",                      667, NULL },
-  { "threequarters",                     834, NULL },
-  { "guillemotright",                    556, NULL },
-  { "Ccedilla",                          722, NULL },
-  { "ydieresis",                         500, NULL },
-  { "tilde",                             333, NULL },
-  { "at",                               1015, NULL },
-  { "eacute",                            556, NULL },
-  { "underscore",                        556, NULL },
-  { "Euro",                              556, NULL },
-  { "Dcroat",                            722, NULL },
-  { "multiply",                          584, NULL },
-  { "zero",                              556, NULL },
-  { "eth",                               556, NULL },
-  { "Scedilla",                          667, NULL },
-  { "Ograve",                            778, NULL },
-  { "Racute",                            722, NULL },
-  { "partialdiff",                       476, NULL },
-  { "uacute",                            556, NULL },
-  { "braceleft",                         334, NULL },
-  { "Thorn",                             667, NULL },
-  { "zcaron",                            500, NULL },
-  { "scommaaccent",                      500, NULL },
-  { "ccedilla",                          500, NULL },
-  { "Dcaron",                            722, NULL },
-  { "dcroat",                            556, NULL },
-  { "Ocircumflex",                       778, NULL },
-  { "Oacute",                            778, NULL },
-  { "scedilla",                          500, NULL },
-  { "ogonek",                            333, NULL },
-  { "ograve",                            556, NULL },
-  { "racute",                            333, NULL },
-  { "Tcaron",                            611, NULL },
-  { "Eogonek",                           667, NULL },
-  { "thorn",                             556, NULL },
-  { "degree",                            400, NULL },
-  { "registered",                        737, NULL },
-  { "radical",                           453, NULL },
-  { "Aring",                             667, NULL },
-  { "percent",                           889, NULL },
-  { "six",                               556, NULL },
-  { "paragraph",                         537, NULL },
-  { "dcaron",                            643, NULL },
-  { "Uogonek",                           722, NULL },
-  { "two",                               556, NULL },
-  { "summation",                         600, NULL },
-  { "Igrave",                            278, NULL },
-  { "Lacute",                            556, NULL },
-  { "ocircumflex",                       556, NULL },
-  { "oacute",                            556, NULL },
-  { "Uring",                             722, NULL },
-  { "Lcommaaccent",                      556, NULL },
-  { "tcaron",                            317, NULL },
-  { "eogonek",                           556, NULL },
-  { "Delta",                             612, NULL },
-  { "Ohungarumlaut",                     778, NULL },
-  { "asciicircum",                       469, NULL },
-  { "aring",                             556, NULL },
-  { "grave",                             333, NULL },
-  { "uogonek",                           556, NULL },
-  { "bracketright",                      278, NULL },
-  { "Iacute",                            278, NULL },
-  { "ampersand",                         667, NULL },
-  { "igrave",                            278, NULL },
-  { "lacute",                            222, NULL },
-  { "Ncaron",                            722, NULL },
-  { "plus",                              584, NULL },
-  { "uring",                             556, NULL },
-  { "quotesinglbase",                    222, NULL },
-  { "lcommaaccent",                      222, NULL },
-  { "Yacute",                            667, NULL },
-  { "ohungarumlaut",                     556, NULL },
-  { "threesuperior",                     333, NULL },
-  { "acute",                             333, NULL },
-  { "section",                           556, NULL },
-  { "dieresis",                          333, NULL },
-  { "iacute",                            278, NULL },
-  { "quotedblbase",                      333, NULL },
-  { "ncaron",                            556, NULL },
-  { "florin",                            556, NULL },
-  { "yacute",                            500, NULL },
-  { "Rcommaaccent",                      722, NULL },
-  { "fi",                                500, NULL },
-  { "fl",                                500, NULL },
-  { "Acircumflex",                       667, NULL },
-  { "Cacute",                            722, NULL },
-  { "Icircumflex",                       278, NULL },
-  { "guillemotleft",                     556, NULL },
-  { "germandbls",                        611, NULL },
-  { "Amacron",                           667, NULL },
-  { "seven",                             556, NULL },
-  { "Sacute",                            667, NULL },
-  { "ordmasculine",                      365, NULL },
-  { "dotlessi",                          278, NULL },
-  { "sterling",                          556, NULL },
-  { "notequal",                          549, NULL },
-  { "Imacron",                           278, NULL },
-  { "rcommaaccent",                      333, NULL },
-  { "Zdotaccent",                        611, NULL },
-  { "acircumflex",                       556, NULL },
-  { "cacute",                            500, NULL },
-  { "Ecaron",                            667, NULL },
-  { "icircumflex",                       278, NULL },
-  { "braceright",                        334, NULL },
-  { "quotedblright",                     333, NULL },
-  { "amacron",                           556, NULL },
-  { "sacute",                            500, NULL },
-  { "imacron",                           278, NULL },
-  { "cent",                              556, NULL },
-  { "currency",                          556, NULL },
-  { "logicalnot",                        584, NULL },
-  { "zdotaccent",                        500, NULL },
-  { "Atilde",                            667, NULL },
-  { "breve",                             333, NULL },
-  { "bar",                               260, NULL },
-  { "fraction",                          167, NULL },
-  { "less",                              584, NULL },
-  { "ecaron",                            556, NULL },
-  { "guilsinglleft",                     333, NULL },
-  { "exclam",                            278, NULL },
-  { "period",                            278, NULL },
-  { "Rcaron",                            722, NULL },
-  { "Kcommaaccent",                      667, NULL },
-  { "greater",                           584, NULL },
-  { "atilde",                            556, NULL },
-  { "brokenbar",                         260, NULL },
-  { "quoteleft",                         222, NULL },
-  { "Edotaccent",                        667, NULL },
-  { "onesuperior",                       333, NULL }
+  { "Ntilde",                            722, nullptr },
+  { "rcaron",                            333, nullptr },
+  { "kcommaaccent",                      500, nullptr },
+  { "Ncommaaccent",                      722, nullptr },
+  { "Zacute",                            611, nullptr },
+  { "comma",                             278, nullptr },
+  { "cedilla",                           333, nullptr },
+  { "plusminus",                         584, nullptr },
+  { "circumflex",                        333, nullptr },
+  { "dotaccent",                         333, nullptr },
+  { "edotaccent",                        556, nullptr },
+  { "asciitilde",                        584, nullptr },
+  { "colon",                             278, nullptr },
+  { "onehalf",                           834, nullptr },
+  { "dollar",                            556, nullptr },
+  { "Lcaron",                            556, nullptr },
+  { "ntilde",                            556, nullptr },
+  { "Aogonek",                           667, nullptr },
+  { "ncommaaccent",                      556, nullptr },
+  { "minus",                             584, nullptr },
+  { "Iogonek",                           278, nullptr },
+  { "zacute",                            500, nullptr },
+  { "yen",                               556, nullptr },
+  { "space",                             278, nullptr },
+  { "Omacron",                           778, nullptr },
+  { "questiondown",                      611, nullptr },
+  { "emdash",                           1000, nullptr },
+  { "Agrave",                            667, nullptr },
+  { "three",                             556, nullptr },
+  { "numbersign",                        556, nullptr },
+  { "lcaron",                            299, nullptr },
+  { "A",                                 667, nullptr },
+  { "B",                                 667, nullptr },
+  { "C",                                 722, nullptr },
+  { "aogonek",                           556, nullptr },
+  { "D",                                 722, nullptr },
+  { "E",                                 667, nullptr },
+  { "onequarter",                        834, nullptr },
+  { "F",                                 611, nullptr },
+  { "G",                                 778, nullptr },
+  { "H",                                 722, nullptr },
+  { "I",                                 278, nullptr },
+  { "J",                                 500, nullptr },
+  { "K",                                 667, nullptr },
+  { "iogonek",                           222, nullptr },
+  { "backslash",                         278, nullptr },
+  { "L",                                 556, nullptr },
+  { "periodcentered",                    278, nullptr },
+  { "M",                                 833, nullptr },
+  { "N",                                 722, nullptr },
+  { "omacron",                           556, nullptr },
+  { "Tcommaaccent",                      611, nullptr },
+  { "O",                                 778, nullptr },
+  { "P",                                 667, nullptr },
+  { "Q",                                 778, nullptr },
+  { "Uhungarumlaut",                     722, nullptr },
+  { "R",                                 722, nullptr },
+  { "Aacute",                            667, nullptr },
+  { "caron",                             333, nullptr },
+  { "S",                                 667, nullptr },
+  { "T",                                 611, nullptr },
+  { "U",                                 722, nullptr },
+  { "agrave",                            556, nullptr },
+  { "V",                                 667, nullptr },
+  { "W",                                 944, nullptr },
+  { "X",                                 667, nullptr },
+  { "question",                          556, nullptr },
+  { "equal",                             584, nullptr },
+  { "Y",                                 667, nullptr },
+  { "Z",                                 611, nullptr },
+  { "four",                              556, nullptr },
+  { "a",                                 556, nullptr },
+  { "Gcommaaccent",                      778, nullptr },
+  { "b",                                 556, nullptr },
+  { "c",                                 500, nullptr },
+  { "d",                                 556, nullptr },
+  { "e",                                 556, nullptr },
+  { "f",                                 278, nullptr },
+  { "g",                                 556, nullptr },
+  { "bullet",                            350, nullptr },
+  { "h",                                 556, nullptr },
+  { "i",                                 222, nullptr },
+  { "Oslash",                            778, nullptr },
+  { "dagger",                            556, nullptr },
+  { "j",                                 222, nullptr },
+  { "k",                                 500, nullptr },
+  { "l",                                 222, nullptr },
+  { "m",                                 833, nullptr },
+  { "n",                                 556, nullptr },
+  { "tcommaaccent",                      278, nullptr },
+  { "o",                                 556, nullptr },
+  { "ordfeminine",                       370, nullptr },
+  { "ring",                              333, nullptr },
+  { "p",                                 556, nullptr },
+  { "q",                                 556, nullptr },
+  { "uhungarumlaut",                     556, nullptr },
+  { "r",                                 333, nullptr },
+  { "twosuperior",                       333, nullptr },
+  { "aacute",                            556, nullptr },
+  { "s",                                 500, nullptr },
+  { "OE",                               1000, nullptr },
+  { "t",                                 278, nullptr },
+  { "divide",                            584, nullptr },
+  { "u",                                 556, nullptr },
+  { "Ccaron",                            722, nullptr },
+  { "v",                                 500, nullptr },
+  { "w",                                 722, nullptr },
+  { "x",                                 500, nullptr },
+  { "y",                                 500, nullptr },
+  { "z",                                 500, nullptr },
+  { "Gbreve",                            778, nullptr },
+  { "commaaccent",                       250, nullptr },
+  { "hungarumlaut",                      333, nullptr },
+  { "Idotaccent",                        278, nullptr },
+  { "Nacute",                            722, nullptr },
+  { "quotedbl",                          355, nullptr },
+  { "gcommaaccent",                      556, nullptr },
+  { "mu",                                556, nullptr },
+  { "greaterequal",                      549, nullptr },
+  { "Scaron",                            667, nullptr },
+  { "Lslash",                            556, nullptr },
+  { "semicolon",                         278, nullptr },
+  { "oslash",                            611, nullptr },
+  { "lessequal",                         549, nullptr },
+  { "lozenge",                           471, nullptr },
+  { "parenright",                        333, nullptr },
+  { "ccaron",                            500, nullptr },
+  { "Ecircumflex",                       667, nullptr },
+  { "gbreve",                            556, nullptr },
+  { "trademark",                        1000, nullptr },
+  { "daggerdbl",                         556, nullptr },
+  { "nacute",                            556, nullptr },
+  { "macron",                            333, nullptr },
+  { "Otilde",                            778, nullptr },
+  { "Emacron",                           667, nullptr },
+  { "ellipsis",                         1000, nullptr },
+  { "scaron",                            500, nullptr },
+  { "AE",                               1000, nullptr },
+  { "Ucircumflex",                       722, nullptr },
+  { "lslash",                            222, nullptr },
+  { "quotedblleft",                      333, nullptr },
+  { "guilsinglright",                    333, nullptr },
+  { "hyphen",                            333, nullptr },
+  { "quotesingle",                       191, nullptr },
+  { "eight",                             556, nullptr },
+  { "exclamdown",                        333, nullptr },
+  { "endash",                            556, nullptr },
+  { "oe",                                944, nullptr },
+  { "Abreve",                            667, nullptr },
+  { "Umacron",                           722, nullptr },
+  { "ecircumflex",                       556, nullptr },
+  { "Adieresis",                         667, nullptr },
+  { "copyright",                         737, nullptr },
+  { "Egrave",                            667, nullptr },
+  { "slash",                             278, nullptr },
+  { "Edieresis",                         667, nullptr },
+  { "otilde",                            556, nullptr },
+  { "Idieresis",                         278, nullptr },
+  { "parenleft",                         333, nullptr },
+  { "one",                               556, nullptr },
+  { "emacron",                           556, nullptr },
+  { "Odieresis",                         778, nullptr },
+  { "ucircumflex",                       556, nullptr },
+  { "bracketleft",                       278, nullptr },
+  { "Ugrave",                            722, nullptr },
+  { "quoteright",                        222, nullptr },
+  { "Udieresis",                         722, nullptr },
+  { "perthousand",                      1000, nullptr },
+  { "Ydieresis",                         667, nullptr },
+  { "umacron",                           556, nullptr },
+  { "abreve",                            556, nullptr },
+  { "Eacute",                            667, nullptr },
+  { "adieresis",                         556, nullptr },
+  { "egrave",                            556, nullptr },
+  { "edieresis",                         556, nullptr },
+  { "idieresis",                         278, nullptr },
+  { "Eth",                               722, nullptr },
+  { "ae",                                889, nullptr },
+  { "asterisk",                          389, nullptr },
+  { "odieresis",                         556, nullptr },
+  { "Uacute",                            722, nullptr },
+  { "ugrave",                            556, nullptr },
+  { "nine",                              556, nullptr },
+  { "five",                              556, nullptr },
+  { "udieresis",                         556, nullptr },
+  { "Zcaron",                            611, nullptr },
+  { "Scommaaccent",                      667, nullptr },
+  { "threequarters",                     834, nullptr },
+  { "guillemotright",                    556, nullptr },
+  { "Ccedilla",                          722, nullptr },
+  { "ydieresis",                         500, nullptr },
+  { "tilde",                             333, nullptr },
+  { "at",                               1015, nullptr },
+  { "eacute",                            556, nullptr },
+  { "underscore",                        556, nullptr },
+  { "Euro",                              556, nullptr },
+  { "Dcroat",                            722, nullptr },
+  { "multiply",                          584, nullptr },
+  { "zero",                              556, nullptr },
+  { "eth",                               556, nullptr },
+  { "Scedilla",                          667, nullptr },
+  { "Ograve",                            778, nullptr },
+  { "Racute",                            722, nullptr },
+  { "partialdiff",                       476, nullptr },
+  { "uacute",                            556, nullptr },
+  { "braceleft",                         334, nullptr },
+  { "Thorn",                             667, nullptr },
+  { "zcaron",                            500, nullptr },
+  { "scommaaccent",                      500, nullptr },
+  { "ccedilla",                          500, nullptr },
+  { "Dcaron",                            722, nullptr },
+  { "dcroat",                            556, nullptr },
+  { "Ocircumflex",                       778, nullptr },
+  { "Oacute",                            778, nullptr },
+  { "scedilla",                          500, nullptr },
+  { "ogonek",                            333, nullptr },
+  { "ograve",                            556, nullptr },
+  { "racute",                            333, nullptr },
+  { "Tcaron",                            611, nullptr },
+  { "Eogonek",                           667, nullptr },
+  { "thorn",                             556, nullptr },
+  { "degree",                            400, nullptr },
+  { "registered",                        737, nullptr },
+  { "radical",                           453, nullptr },
+  { "Aring",                             667, nullptr },
+  { "percent",                           889, nullptr },
+  { "six",                               556, nullptr },
+  { "paragraph",                         537, nullptr },
+  { "dcaron",                            643, nullptr },
+  { "Uogonek",                           722, nullptr },
+  { "two",                               556, nullptr },
+  { "summation",                         600, nullptr },
+  { "Igrave",                            278, nullptr },
+  { "Lacute",                            556, nullptr },
+  { "ocircumflex",                       556, nullptr },
+  { "oacute",                            556, nullptr },
+  { "Uring",                             722, nullptr },
+  { "Lcommaaccent",                      556, nullptr },
+  { "tcaron",                            317, nullptr },
+  { "eogonek",                           556, nullptr },
+  { "Delta",                             612, nullptr },
+  { "Ohungarumlaut",                     778, nullptr },
+  { "asciicircum",                       469, nullptr },
+  { "aring",                             556, nullptr },
+  { "grave",                             333, nullptr },
+  { "uogonek",                           556, nullptr },
+  { "bracketright",                      278, nullptr },
+  { "Iacute",                            278, nullptr },
+  { "ampersand",                         667, nullptr },
+  { "igrave",                            278, nullptr },
+  { "lacute",                            222, nullptr },
+  { "Ncaron",                            722, nullptr },
+  { "plus",                              584, nullptr },
+  { "uring",                             556, nullptr },
+  { "quotesinglbase",                    222, nullptr },
+  { "lcommaaccent",                      222, nullptr },
+  { "Yacute",                            667, nullptr },
+  { "ohungarumlaut",                     556, nullptr },
+  { "threesuperior",                     333, nullptr },
+  { "acute",                             333, nullptr },
+  { "section",                           556, nullptr },
+  { "dieresis",                          333, nullptr },
+  { "iacute",                            278, nullptr },
+  { "quotedblbase",                      333, nullptr },
+  { "ncaron",                            556, nullptr },
+  { "florin",                            556, nullptr },
+  { "yacute",                            500, nullptr },
+  { "Rcommaaccent",                      722, nullptr },
+  { "fi",                                500, nullptr },
+  { "fl",                                500, nullptr },
+  { "Acircumflex",                       667, nullptr },
+  { "Cacute",                            722, nullptr },
+  { "Icircumflex",                       278, nullptr },
+  { "guillemotleft",                     556, nullptr },
+  { "germandbls",                        611, nullptr },
+  { "Amacron",                           667, nullptr },
+  { "seven",                             556, nullptr },
+  { "Sacute",                            667, nullptr },
+  { "ordmasculine",                      365, nullptr },
+  { "dotlessi",                          278, nullptr },
+  { "sterling",                          556, nullptr },
+  { "notequal",                          549, nullptr },
+  { "Imacron",                           278, nullptr },
+  { "rcommaaccent",                      333, nullptr },
+  { "Zdotaccent",                        611, nullptr },
+  { "acircumflex",                       556, nullptr },
+  { "cacute",                            500, nullptr },
+  { "Ecaron",                            667, nullptr },
+  { "icircumflex",                       278, nullptr },
+  { "braceright",                        334, nullptr },
+  { "quotedblright",                     333, nullptr },
+  { "amacron",                           556, nullptr },
+  { "sacute",                            500, nullptr },
+  { "imacron",                           278, nullptr },
+  { "cent",                              556, nullptr },
+  { "currency",                          556, nullptr },
+  { "logicalnot",                        584, nullptr },
+  { "zdotaccent",                        500, nullptr },
+  { "Atilde",                            667, nullptr },
+  { "breve",                             333, nullptr },
+  { "bar",                               260, nullptr },
+  { "fraction",                          167, nullptr },
+  { "less",                              584, nullptr },
+  { "ecaron",                            556, nullptr },
+  { "guilsinglleft",                     333, nullptr },
+  { "exclam",                            278, nullptr },
+  { "period",                            278, nullptr },
+  { "Rcaron",                            722, nullptr },
+  { "Kcommaaccent",                      667, nullptr },
+  { "greater",                           584, nullptr },
+  { "atilde",                            556, nullptr },
+  { "brokenbar",                         260, nullptr },
+  { "quoteleft",                         222, nullptr },
+  { "Edotaccent",                        667, nullptr },
+  { "onesuperior",                       333, nullptr }
 };
 
 static BuiltinFontWidth helveticaBoldWidthsTab[] = {
-  { "Ntilde",                            722, NULL },
-  { "rcaron",                            389, NULL },
-  { "kcommaaccent",                      556, NULL },
-  { "Ncommaaccent",                      722, NULL },
-  { "Zacute",                            611, NULL },
-  { "comma",                             278, NULL },
-  { "cedilla",                           333, NULL },
-  { "plusminus",                         584, NULL },
-  { "circumflex",                        333, NULL },
-  { "dotaccent",                         333, NULL },
-  { "edotaccent",                        556, NULL },
-  { "asciitilde",                        584, NULL },
-  { "colon",                             333, NULL },
-  { "onehalf",                           834, NULL },
-  { "dollar",                            556, NULL },
-  { "Lcaron",                            611, NULL },
-  { "ntilde",                            611, NULL },
-  { "Aogonek",                           722, NULL },
-  { "ncommaaccent",                      611, NULL },
-  { "minus",                             584, NULL },
-  { "Iogonek",                           278, NULL },
-  { "zacute",                            500, NULL },
-  { "yen",                               556, NULL },
-  { "space",                             278, NULL },
-  { "Omacron",                           778, NULL },
-  { "questiondown",                      611, NULL },
-  { "emdash",                           1000, NULL },
-  { "Agrave",                            722, NULL },
-  { "three",                             556, NULL },
-  { "numbersign",                        556, NULL },
-  { "lcaron",                            400, NULL },
-  { "A",                                 722, NULL },
-  { "B",                                 722, NULL },
-  { "C",                                 722, NULL },
-  { "aogonek",                           556, NULL },
-  { "D",                                 722, NULL },
-  { "E",                                 667, NULL },
-  { "onequarter",                        834, NULL },
-  { "F",                                 611, NULL },
-  { "G",                                 778, NULL },
-  { "H",                                 722, NULL },
-  { "I",                                 278, NULL },
-  { "J",                                 556, NULL },
-  { "K",                                 722, NULL },
-  { "iogonek",                           278, NULL },
-  { "backslash",                         278, NULL },
-  { "L",                                 611, NULL },
-  { "periodcentered",                    278, NULL },
-  { "M",                                 833, NULL },
-  { "N",                                 722, NULL },
-  { "omacron",                           611, NULL },
-  { "Tcommaaccent",                      611, NULL },
-  { "O",                                 778, NULL },
-  { "P",                                 667, NULL },
-  { "Q",                                 778, NULL },
-  { "Uhungarumlaut",                     722, NULL },
-  { "R",                                 722, NULL },
-  { "Aacute",                            722, NULL },
-  { "caron",                             333, NULL },
-  { "S",                                 667, NULL },
-  { "T",                                 611, NULL },
-  { "U",                                 722, NULL },
-  { "agrave",                            556, NULL },
-  { "V",                                 667, NULL },
-  { "W",                                 944, NULL },
-  { "X",                                 667, NULL },
-  { "question",                          611, NULL },
-  { "equal",                             584, NULL },
-  { "Y",                                 667, NULL },
-  { "Z",                                 611, NULL },
-  { "four",                              556, NULL },
-  { "a",                                 556, NULL },
-  { "Gcommaaccent",                      778, NULL },
-  { "b",                                 611, NULL },
-  { "c",                                 556, NULL },
-  { "d",                                 611, NULL },
-  { "e",                                 556, NULL },
-  { "f",                                 333, NULL },
-  { "g",                                 611, NULL },
-  { "bullet",                            350, NULL },
-  { "h",                                 611, NULL },
-  { "i",                                 278, NULL },
-  { "Oslash",                            778, NULL },
-  { "dagger",                            556, NULL },
-  { "j",                                 278, NULL },
-  { "k",                                 556, NULL },
-  { "l",                                 278, NULL },
-  { "m",                                 889, NULL },
-  { "n",                                 611, NULL },
-  { "tcommaaccent",                      333, NULL },
-  { "o",                                 611, NULL },
-  { "ordfeminine",                       370, NULL },
-  { "ring",                              333, NULL },
-  { "p",                                 611, NULL },
-  { "q",                                 611, NULL },
-  { "uhungarumlaut",                     611, NULL },
-  { "r",                                 389, NULL },
-  { "twosuperior",                       333, NULL },
-  { "aacute",                            556, NULL },
-  { "s",                                 556, NULL },
-  { "OE",                               1000, NULL },
-  { "t",                                 333, NULL },
-  { "divide",                            584, NULL },
-  { "u",                                 611, NULL },
-  { "Ccaron",                            722, NULL },
-  { "v",                                 556, NULL },
-  { "w",                                 778, NULL },
-  { "x",                                 556, NULL },
-  { "y",                                 556, NULL },
-  { "z",                                 500, NULL },
-  { "Gbreve",                            778, NULL },
-  { "commaaccent",                       250, NULL },
-  { "hungarumlaut",                      333, NULL },
-  { "Idotaccent",                        278, NULL },
-  { "Nacute",                            722, NULL },
-  { "quotedbl",                          474, NULL },
-  { "gcommaaccent",                      611, NULL },
-  { "mu",                                611, NULL },
-  { "greaterequal",                      549, NULL },
-  { "Scaron",                            667, NULL },
-  { "Lslash",                            611, NULL },
-  { "semicolon",                         333, NULL },
-  { "oslash",                            611, NULL },
-  { "lessequal",                         549, NULL },
-  { "lozenge",                           494, NULL },
-  { "parenright",                        333, NULL },
-  { "ccaron",                            556, NULL },
-  { "Ecircumflex",                       667, NULL },
-  { "gbreve",                            611, NULL },
-  { "trademark",                        1000, NULL },
-  { "daggerdbl",                         556, NULL },
-  { "nacute",                            611, NULL },
-  { "macron",                            333, NULL },
-  { "Otilde",                            778, NULL },
-  { "Emacron",                           667, NULL },
-  { "ellipsis",                         1000, NULL },
-  { "scaron",                            556, NULL },
-  { "AE",                               1000, NULL },
-  { "Ucircumflex",                       722, NULL },
-  { "lslash",                            278, NULL },
-  { "quotedblleft",                      500, NULL },
-  { "guilsinglright",                    333, NULL },
-  { "hyphen",                            333, NULL },
-  { "quotesingle",                       238, NULL },
-  { "eight",                             556, NULL },
-  { "exclamdown",                        333, NULL },
-  { "endash",                            556, NULL },
-  { "oe",                                944, NULL },
-  { "Abreve",                            722, NULL },
-  { "Umacron",                           722, NULL },
-  { "ecircumflex",                       556, NULL },
-  { "Adieresis",                         722, NULL },
-  { "copyright",                         737, NULL },
-  { "Egrave",                            667, NULL },
-  { "slash",                             278, NULL },
-  { "Edieresis",                         667, NULL },
-  { "otilde",                            611, NULL },
-  { "Idieresis",                         278, NULL },
-  { "parenleft",                         333, NULL },
-  { "one",                               556, NULL },
-  { "emacron",                           556, NULL },
-  { "Odieresis",                         778, NULL },
-  { "ucircumflex",                       611, NULL },
-  { "bracketleft",                       333, NULL },
-  { "Ugrave",                            722, NULL },
-  { "quoteright",                        278, NULL },
-  { "Udieresis",                         722, NULL },
-  { "perthousand",                      1000, NULL },
-  { "Ydieresis",                         667, NULL },
-  { "umacron",                           611, NULL },
-  { "abreve",                            556, NULL },
-  { "Eacute",                            667, NULL },
-  { "adieresis",                         556, NULL },
-  { "egrave",                            556, NULL },
-  { "edieresis",                         556, NULL },
-  { "idieresis",                         278, NULL },
-  { "Eth",                               722, NULL },
-  { "ae",                                889, NULL },
-  { "asterisk",                          389, NULL },
-  { "odieresis",                         611, NULL },
-  { "Uacute",                            722, NULL },
-  { "ugrave",                            611, NULL },
-  { "nine",                              556, NULL },
-  { "five",                              556, NULL },
-  { "udieresis",                         611, NULL },
-  { "Zcaron",                            611, NULL },
-  { "Scommaaccent",                      667, NULL },
-  { "threequarters",                     834, NULL },
-  { "guillemotright",                    556, NULL },
-  { "Ccedilla",                          722, NULL },
-  { "ydieresis",                         556, NULL },
-  { "tilde",                             333, NULL },
-  { "dbldaggerumlaut",                   556, NULL },
-  { "at",                                975, NULL },
-  { "eacute",                            556, NULL },
-  { "underscore",                        556, NULL },
-  { "Euro",                              556, NULL },
-  { "Dcroat",                            722, NULL },
-  { "multiply",                          584, NULL },
-  { "zero",                              556, NULL },
-  { "eth",                               611, NULL },
-  { "Scedilla",                          667, NULL },
-  { "Ograve",                            778, NULL },
-  { "Racute",                            722, NULL },
-  { "partialdiff",                       494, NULL },
-  { "uacute",                            611, NULL },
-  { "braceleft",                         389, NULL },
-  { "Thorn",                             667, NULL },
-  { "zcaron",                            500, NULL },
-  { "scommaaccent",                      556, NULL },
-  { "ccedilla",                          556, NULL },
-  { "Dcaron",                            722, NULL },
-  { "dcroat",                            611, NULL },
-  { "Ocircumflex",                       778, NULL },
-  { "Oacute",                            778, NULL },
-  { "scedilla",                          556, NULL },
-  { "ogonek",                            333, NULL },
-  { "ograve",                            611, NULL },
-  { "racute",                            389, NULL },
-  { "Tcaron",                            611, NULL },
-  { "Eogonek",                           667, NULL },
-  { "thorn",                             611, NULL },
-  { "degree",                            400, NULL },
-  { "registered",                        737, NULL },
-  { "radical",                           549, NULL },
-  { "Aring",                             722, NULL },
-  { "percent",                           889, NULL },
-  { "six",                               556, NULL },
-  { "paragraph",                         556, NULL },
-  { "dcaron",                            743, NULL },
-  { "Uogonek",                           722, NULL },
-  { "two",                               556, NULL },
-  { "summation",                         600, NULL },
-  { "Igrave",                            278, NULL },
-  { "Lacute",                            611, NULL },
-  { "ocircumflex",                       611, NULL },
-  { "oacute",                            611, NULL },
-  { "Uring",                             722, NULL },
-  { "Lcommaaccent",                      611, NULL },
-  { "tcaron",                            389, NULL },
-  { "eogonek",                           556, NULL },
-  { "Delta",                             612, NULL },
-  { "Ohungarumlaut",                     778, NULL },
-  { "asciicircum",                       584, NULL },
-  { "aring",                             556, NULL },
-  { "grave",                             333, NULL },
-  { "uogonek",                           611, NULL },
-  { "bracketright",                      333, NULL },
-  { "Iacute",                            278, NULL },
-  { "ampersand",                         722, NULL },
-  { "igrave",                            278, NULL },
-  { "lacute",                            278, NULL },
-  { "Ncaron",                            722, NULL },
-  { "plus",                              584, NULL },
-  { "uring",                             611, NULL },
-  { "quotesinglbase",                    278, NULL },
-  { "lcommaaccent",                      278, NULL },
-  { "Yacute",                            667, NULL },
-  { "ohungarumlaut",                     611, NULL },
-  { "threesuperior",                     333, NULL },
-  { "acute",                             333, NULL },
-  { "section",                           556, NULL },
-  { "dieresis",                          333, NULL },
-  { "iacute",                            278, NULL },
-  { "quotedblbase",                      500, NULL },
-  { "ncaron",                            611, NULL },
-  { "florin",                            556, NULL },
-  { "yacute",                            556, NULL },
-  { "Rcommaaccent",                      722, NULL },
-  { "fi",                                611, NULL },
-  { "fl",                                611, NULL },
-  { "Acircumflex",                       722, NULL },
-  { "Cacute",                            722, NULL },
-  { "Icircumflex",                       278, NULL },
-  { "guillemotleft",                     556, NULL },
-  { "germandbls",                        611, NULL },
-  { "Amacron",                           722, NULL },
-  { "seven",                             556, NULL },
-  { "Sacute",                            667, NULL },
-  { "ordmasculine",                      365, NULL },
-  { "dotlessi",                          278, NULL },
-  { "sterling",                          556, NULL },
-  { "notequal",                          549, NULL },
-  { "Imacron",                           278, NULL },
-  { "rcommaaccent",                      389, NULL },
-  { "Zdotaccent",                        611, NULL },
-  { "acircumflex",                       556, NULL },
-  { "cacute",                            556, NULL },
-  { "Ecaron",                            667, NULL },
-  { "icircumflex",                       278, NULL },
-  { "braceright",                        389, NULL },
-  { "quotedblright",                     500, NULL },
-  { "amacron",                           556, NULL },
-  { "sacute",                            556, NULL },
-  { "imacron",                           278, NULL },
-  { "cent",                              556, NULL },
-  { "currency",                          556, NULL },
-  { "logicalnot",                        584, NULL },
-  { "zdotaccent",                        500, NULL },
-  { "Atilde",                            722, NULL },
-  { "breve",                             333, NULL },
-  { "bar",                               280, NULL },
-  { "fraction",                          167, NULL },
-  { "less",                              584, NULL },
-  { "ecaron",                            556, NULL },
-  { "guilsinglleft",                     333, NULL },
-  { "exclam",                            333, NULL },
-  { "period",                            278, NULL },
-  { "Rcaron",                            722, NULL },
-  { "Kcommaaccent",                      722, NULL },
-  { "greater",                           584, NULL },
-  { "atilde",                            556, NULL },
-  { "brokenbar",                         280, NULL },
-  { "quoteleft",                         278, NULL },
-  { "Edotaccent",                        667, NULL },
-  { "onesuperior",                       333, NULL }
+  { "Ntilde",                            722, nullptr },
+  { "rcaron",                            389, nullptr },
+  { "kcommaaccent",                      556, nullptr },
+  { "Ncommaaccent",                      722, nullptr },
+  { "Zacute",                            611, nullptr },
+  { "comma",                             278, nullptr },
+  { "cedilla",                           333, nullptr },
+  { "plusminus",                         584, nullptr },
+  { "circumflex",                        333, nullptr },
+  { "dotaccent",                         333, nullptr },
+  { "edotaccent",                        556, nullptr },
+  { "asciitilde",                        584, nullptr },
+  { "colon",                             333, nullptr },
+  { "onehalf",                           834, nullptr },
+  { "dollar",                            556, nullptr },
+  { "Lcaron",                            611, nullptr },
+  { "ntilde",                            611, nullptr },
+  { "Aogonek",                           722, nullptr },
+  { "ncommaaccent",                      611, nullptr },
+  { "minus",                             584, nullptr },
+  { "Iogonek",                           278, nullptr },
+  { "zacute",                            500, nullptr },
+  { "yen",                               556, nullptr },
+  { "space",                             278, nullptr },
+  { "Omacron",                           778, nullptr },
+  { "questiondown",                      611, nullptr },
+  { "emdash",                           1000, nullptr },
+  { "Agrave",                            722, nullptr },
+  { "three",                             556, nullptr },
+  { "numbersign",                        556, nullptr },
+  { "lcaron",                            400, nullptr },
+  { "A",                                 722, nullptr },
+  { "B",                                 722, nullptr },
+  { "C",                                 722, nullptr },
+  { "aogonek",                           556, nullptr },
+  { "D",                                 722, nullptr },
+  { "E",                                 667, nullptr },
+  { "onequarter",                        834, nullptr },
+  { "F",                                 611, nullptr },
+  { "G",                                 778, nullptr },
+  { "H",                                 722, nullptr },
+  { "I",                                 278, nullptr },
+  { "J",                                 556, nullptr },
+  { "K",                                 722, nullptr },
+  { "iogonek",                           278, nullptr },
+  { "backslash",                         278, nullptr },
+  { "L",                                 611, nullptr },
+  { "periodcentered",                    278, nullptr },
+  { "M",                                 833, nullptr },
+  { "N",                                 722, nullptr },
+  { "omacron",                           611, nullptr },
+  { "Tcommaaccent",                      611, nullptr },
+  { "O",                                 778, nullptr },
+  { "P",                                 667, nullptr },
+  { "Q",                                 778, nullptr },
+  { "Uhungarumlaut",                     722, nullptr },
+  { "R",                                 722, nullptr },
+  { "Aacute",                            722, nullptr },
+  { "caron",                             333, nullptr },
+  { "S",                                 667, nullptr },
+  { "T",                                 611, nullptr },
+  { "U",                                 722, nullptr },
+  { "agrave",                            556, nullptr },
+  { "V",                                 667, nullptr },
+  { "W",                                 944, nullptr },
+  { "X",                                 667, nullptr },
+  { "question",                          611, nullptr },
+  { "equal",                             584, nullptr },
+  { "Y",                                 667, nullptr },
+  { "Z",                                 611, nullptr },
+  { "four",                              556, nullptr },
+  { "a",                                 556, nullptr },
+  { "Gcommaaccent",                      778, nullptr },
+  { "b",                                 611, nullptr },
+  { "c",                                 556, nullptr },
+  { "d",                                 611, nullptr },
+  { "e",                                 556, nullptr },
+  { "f",                                 333, nullptr },
+  { "g",                                 611, nullptr },
+  { "bullet",                            350, nullptr },
+  { "h",                                 611, nullptr },
+  { "i",                                 278, nullptr },
+  { "Oslash",                            778, nullptr },
+  { "dagger",                            556, nullptr },
+  { "j",                                 278, nullptr },
+  { "k",                                 556, nullptr },
+  { "l",                                 278, nullptr },
+  { "m",                                 889, nullptr },
+  { "n",                                 611, nullptr },
+  { "tcommaaccent",                      333, nullptr },
+  { "o",                                 611, nullptr },
+  { "ordfeminine",                       370, nullptr },
+  { "ring",                              333, nullptr },
+  { "p",                                 611, nullptr },
+  { "q",                                 611, nullptr },
+  { "uhungarumlaut",                     611, nullptr },
+  { "r",                                 389, nullptr },
+  { "twosuperior",                       333, nullptr },
+  { "aacute",                            556, nullptr },
+  { "s",                                 556, nullptr },
+  { "OE",                               1000, nullptr },
+  { "t",                                 333, nullptr },
+  { "divide",                            584, nullptr },
+  { "u",                                 611, nullptr },
+  { "Ccaron",                            722, nullptr },
+  { "v",                                 556, nullptr },
+  { "w",                                 778, nullptr },
+  { "x",                                 556, nullptr },
+  { "y",                                 556, nullptr },
+  { "z",                                 500, nullptr },
+  { "Gbreve",                            778, nullptr },
+  { "commaaccent",                       250, nullptr },
+  { "hungarumlaut",                      333, nullptr },
+  { "Idotaccent",                        278, nullptr },
+  { "Nacute",                            722, nullptr },
+  { "quotedbl",                          474, nullptr },
+  { "gcommaaccent",                      611, nullptr },
+  { "mu",                                611, nullptr },
+  { "greaterequal",                      549, nullptr },
+  { "Scaron",                            667, nullptr },
+  { "Lslash",                            611, nullptr },
+  { "semicolon",                         333, nullptr },
+  { "oslash",                            611, nullptr },
+  { "lessequal",                         549, nullptr },
+  { "lozenge",                           494, nullptr },
+  { "parenright",                        333, nullptr },
+  { "ccaron",                            556, nullptr },
+  { "Ecircumflex",                       667, nullptr },
+  { "gbreve",                            611, nullptr },
+  { "trademark",                        1000, nullptr },
+  { "daggerdbl",                         556, nullptr },
+  { "nacute",                            611, nullptr },
+  { "macron",                            333, nullptr },
+  { "Otilde",                            778, nullptr },
+  { "Emacron",                           667, nullptr },
+  { "ellipsis",                         1000, nullptr },
+  { "scaron",                            556, nullptr },
+  { "AE",                               1000, nullptr },
+  { "Ucircumflex",                       722, nullptr },
+  { "lslash",                            278, nullptr },
+  { "quotedblleft",                      500, nullptr },
+  { "guilsinglright",                    333, nullptr },
+  { "hyphen",                            333, nullptr },
+  { "quotesingle",                       238, nullptr },
+  { "eight",                             556, nullptr },
+  { "exclamdown",                        333, nullptr },
+  { "endash",                            556, nullptr },
+  { "oe",                                944, nullptr },
+  { "Abreve",                            722, nullptr },
+  { "Umacron",                           722, nullptr },
+  { "ecircumflex",                       556, nullptr },
+  { "Adieresis",                         722, nullptr },
+  { "copyright",                         737, nullptr },
+  { "Egrave",                            667, nullptr },
+  { "slash",                             278, nullptr },
+  { "Edieresis",                         667, nullptr },
+  { "otilde",                            611, nullptr },
+  { "Idieresis",                         278, nullptr },
+  { "parenleft",                         333, nullptr },
+  { "one",                               556, nullptr },
+  { "emacron",                           556, nullptr },
+  { "Odieresis",                         778, nullptr },
+  { "ucircumflex",                       611, nullptr },
+  { "bracketleft",                       333, nullptr },
+  { "Ugrave",                            722, nullptr },
+  { "quoteright",                        278, nullptr },
+  { "Udieresis",                         722, nullptr },
+  { "perthousand",                      1000, nullptr },
+  { "Ydieresis",                         667, nullptr },
+  { "umacron",                           611, nullptr },
+  { "abreve",                            556, nullptr },
+  { "Eacute",                            667, nullptr },
+  { "adieresis",                         556, nullptr },
+  { "egrave",                            556, nullptr },
+  { "edieresis",                         556, nullptr },
+  { "idieresis",                         278, nullptr },
+  { "Eth",                               722, nullptr },
+  { "ae",                                889, nullptr },
+  { "asterisk",                          389, nullptr },
+  { "odieresis",                         611, nullptr },
+  { "Uacute",                            722, nullptr },
+  { "ugrave",                            611, nullptr },
+  { "nine",                              556, nullptr },
+  { "five",                              556, nullptr },
+  { "udieresis",                         611, nullptr },
+  { "Zcaron",                            611, nullptr },
+  { "Scommaaccent",                      667, nullptr },
+  { "threequarters",                     834, nullptr },
+  { "guillemotright",                    556, nullptr },
+  { "Ccedilla",                          722, nullptr },
+  { "ydieresis",                         556, nullptr },
+  { "tilde",                             333, nullptr },
+  { "dbldaggerumlaut",                   556, nullptr },
+  { "at",                                975, nullptr },
+  { "eacute",                            556, nullptr },
+  { "underscore",                        556, nullptr },
+  { "Euro",                              556, nullptr },
+  { "Dcroat",                            722, nullptr },
+  { "multiply",                          584, nullptr },
+  { "zero",                              556, nullptr },
+  { "eth",                               611, nullptr },
+  { "Scedilla",                          667, nullptr },
+  { "Ograve",                            778, nullptr },
+  { "Racute",                            722, nullptr },
+  { "partialdiff",                       494, nullptr },
+  { "uacute",                            611, nullptr },
+  { "braceleft",                         389, nullptr },
+  { "Thorn",                             667, nullptr },
+  { "zcaron",                            500, nullptr },
+  { "scommaaccent",                      556, nullptr },
+  { "ccedilla",                          556, nullptr },
+  { "Dcaron",                            722, nullptr },
+  { "dcroat",                            611, nullptr },
+  { "Ocircumflex",                       778, nullptr },
+  { "Oacute",                            778, nullptr },
+  { "scedilla",                          556, nullptr },
+  { "ogonek",                            333, nullptr },
+  { "ograve",                            611, nullptr },
+  { "racute",                            389, nullptr },
+  { "Tcaron",                            611, nullptr },
+  { "Eogonek",                           667, nullptr },
+  { "thorn",                             611, nullptr },
+  { "degree",                            400, nullptr },
+  { "registered",                        737, nullptr },
+  { "radical",                           549, nullptr },
+  { "Aring",                             722, nullptr },
+  { "percent",                           889, nullptr },
+  { "six",                               556, nullptr },
+  { "paragraph",                         556, nullptr },
+  { "dcaron",                            743, nullptr },
+  { "Uogonek",                           722, nullptr },
+  { "two",                               556, nullptr },
+  { "summation",                         600, nullptr },
+  { "Igrave",                            278, nullptr },
+  { "Lacute",                            611, nullptr },
+  { "ocircumflex",                       611, nullptr },
+  { "oacute",                            611, nullptr },
+  { "Uring",                             722, nullptr },
+  { "Lcommaaccent",                      611, nullptr },
+  { "tcaron",                            389, nullptr },
+  { "eogonek",                           556, nullptr },
+  { "Delta",                             612, nullptr },
+  { "Ohungarumlaut",                     778, nullptr },
+  { "asciicircum",                       584, nullptr },
+  { "aring",                             556, nullptr },
+  { "grave",                             333, nullptr },
+  { "uogonek",                           611, nullptr },
+  { "bracketright",                      333, nullptr },
+  { "Iacute",                            278, nullptr },
+  { "ampersand",                         722, nullptr },
+  { "igrave",                            278, nullptr },
+  { "lacute",                            278, nullptr },
+  { "Ncaron",                            722, nullptr },
+  { "plus",                              584, nullptr },
+  { "uring",                             611, nullptr },
+  { "quotesinglbase",                    278, nullptr },
+  { "lcommaaccent",                      278, nullptr },
+  { "Yacute",                            667, nullptr },
+  { "ohungarumlaut",                     611, nullptr },
+  { "threesuperior",                     333, nullptr },
+  { "acute",                             333, nullptr },
+  { "section",                           556, nullptr },
+  { "dieresis",                          333, nullptr },
+  { "iacute",                            278, nullptr },
+  { "quotedblbase",                      500, nullptr },
+  { "ncaron",                            611, nullptr },
+  { "florin",                            556, nullptr },
+  { "yacute",                            556, nullptr },
+  { "Rcommaaccent",                      722, nullptr },
+  { "fi",                                611, nullptr },
+  { "fl",                                611, nullptr },
+  { "Acircumflex",                       722, nullptr },
+  { "Cacute",                            722, nullptr },
+  { "Icircumflex",                       278, nullptr },
+  { "guillemotleft",                     556, nullptr },
+  { "germandbls",                        611, nullptr },
+  { "Amacron",                           722, nullptr },
+  { "seven",                             556, nullptr },
+  { "Sacute",                            667, nullptr },
+  { "ordmasculine",                      365, nullptr },
+  { "dotlessi",                          278, nullptr },
+  { "sterling",                          556, nullptr },
+  { "notequal",                          549, nullptr },
+  { "Imacron",                           278, nullptr },
+  { "rcommaaccent",                      389, nullptr },
+  { "Zdotaccent",                        611, nullptr },
+  { "acircumflex",                       556, nullptr },
+  { "cacute",                            556, nullptr },
+  { "Ecaron",                            667, nullptr },
+  { "icircumflex",                       278, nullptr },
+  { "braceright",                        389, nullptr },
+  { "quotedblright",                     500, nullptr },
+  { "amacron",                           556, nullptr },
+  { "sacute",                            556, nullptr },
+  { "imacron",                           278, nullptr },
+  { "cent",                              556, nullptr },
+  { "currency",                          556, nullptr },
+  { "logicalnot",                        584, nullptr },
+  { "zdotaccent",                        500, nullptr },
+  { "Atilde",                            722, nullptr },
+  { "breve",                             333, nullptr },
+  { "bar",                               280, nullptr },
+  { "fraction",                          167, nullptr },
+  { "less",                              584, nullptr },
+  { "ecaron",                            556, nullptr },
+  { "guilsinglleft",                     333, nullptr },
+  { "exclam",                            333, nullptr },
+  { "period",                            278, nullptr },
+  { "Rcaron",                            722, nullptr },
+  { "Kcommaaccent",                      722, nullptr },
+  { "greater",                           584, nullptr },
+  { "atilde",                            556, nullptr },
+  { "brokenbar",                         280, nullptr },
+  { "quoteleft",                         278, nullptr },
+  { "Edotaccent",                        667, nullptr },
+  { "onesuperior",                       333, nullptr }
 };
 
 static BuiltinFontWidth helveticaBoldObliqueWidthsTab[] = {
-  { "Ntilde",                            722, NULL },
-  { "rcaron",                            389, NULL },
-  { "kcommaaccent",                      556, NULL },
-  { "Ncommaaccent",                      722, NULL },
-  { "Zacute",                            611, NULL },
-  { "comma",                             278, NULL },
-  { "cedilla",                           333, NULL },
-  { "plusminus",                         584, NULL },
-  { "circumflex",                        333, NULL },
-  { "dotaccent",                         333, NULL },
-  { "edotaccent",                        556, NULL },
-  { "asciitilde",                        584, NULL },
-  { "colon",                             333, NULL },
-  { "onehalf",                           834, NULL },
-  { "dollar",                            556, NULL },
-  { "Lcaron",                            611, NULL },
-  { "ntilde",                            611, NULL },
-  { "Aogonek",                           722, NULL },
-  { "ncommaaccent",                      611, NULL },
-  { "minus",                             584, NULL },
-  { "Iogonek",                           278, NULL },
-  { "zacute",                            500, NULL },
-  { "yen",                               556, NULL },
-  { "space",                             278, NULL },
-  { "Omacron",                           778, NULL },
-  { "questiondown",                      611, NULL },
-  { "emdash",                           1000, NULL },
-  { "Agrave",                            722, NULL },
-  { "three",                             556, NULL },
-  { "numbersign",                        556, NULL },
-  { "lcaron",                            400, NULL },
-  { "A",                                 722, NULL },
-  { "B",                                 722, NULL },
-  { "C",                                 722, NULL },
-  { "aogonek",                           556, NULL },
-  { "D",                                 722, NULL },
-  { "E",                                 667, NULL },
-  { "onequarter",                        834, NULL },
-  { "F",                                 611, NULL },
-  { "G",                                 778, NULL },
-  { "H",                                 722, NULL },
-  { "I",                                 278, NULL },
-  { "J",                                 556, NULL },
-  { "K",                                 722, NULL },
-  { "iogonek",                           278, NULL },
-  { "backslash",                         278, NULL },
-  { "L",                                 611, NULL },
-  { "periodcentered",                    278, NULL },
-  { "M",                                 833, NULL },
-  { "N",                                 722, NULL },
-  { "omacron",                           611, NULL },
-  { "Tcommaaccent",                      611, NULL },
-  { "O",                                 778, NULL },
-  { "P",                                 667, NULL },
-  { "Q",                                 778, NULL },
-  { "Uhungarumlaut",                     722, NULL },
-  { "R",                                 722, NULL },
-  { "Aacute",                            722, NULL },
-  { "caron",                             333, NULL },
-  { "S",                                 667, NULL },
-  { "T",                                 611, NULL },
-  { "U",                                 722, NULL },
-  { "agrave",                            556, NULL },
-  { "V",                                 667, NULL },
-  { "W",                                 944, NULL },
-  { "X",                                 667, NULL },
-  { "question",                          611, NULL },
-  { "equal",                             584, NULL },
-  { "Y",                                 667, NULL },
-  { "Z",                                 611, NULL },
-  { "four",                              556, NULL },
-  { "a",                                 556, NULL },
-  { "Gcommaaccent",                      778, NULL },
-  { "b",                                 611, NULL },
-  { "c",                                 556, NULL },
-  { "d",                                 611, NULL },
-  { "e",                                 556, NULL },
-  { "f",                                 333, NULL },
-  { "g",                                 611, NULL },
-  { "bullet",                            350, NULL },
-  { "h",                                 611, NULL },
-  { "i",                                 278, NULL },
-  { "Oslash",                            778, NULL },
-  { "dagger",                            556, NULL },
-  { "j",                                 278, NULL },
-  { "k",                                 556, NULL },
-  { "l",                                 278, NULL },
-  { "m",                                 889, NULL },
-  { "n",                                 611, NULL },
-  { "tcommaaccent",                      333, NULL },
-  { "o",                                 611, NULL },
-  { "ordfeminine",                       370, NULL },
-  { "ring",                              333, NULL },
-  { "p",                                 611, NULL },
-  { "q",                                 611, NULL },
-  { "uhungarumlaut",                     611, NULL },
-  { "r",                                 389, NULL },
-  { "twosuperior",                       333, NULL },
-  { "aacute",                            556, NULL },
-  { "s",                                 556, NULL },
-  { "OE",                               1000, NULL },
-  { "t",                                 333, NULL },
-  { "divide",                            584, NULL },
-  { "u",                                 611, NULL },
-  { "Ccaron",                            722, NULL },
-  { "v",                                 556, NULL },
-  { "w",                                 778, NULL },
-  { "x",                                 556, NULL },
-  { "y",                                 556, NULL },
-  { "z",                                 500, NULL },
-  { "Gbreve",                            778, NULL },
-  { "commaaccent",                       250, NULL },
-  { "hungarumlaut",                      333, NULL },
-  { "Idotaccent",                        278, NULL },
-  { "Nacute",                            722, NULL },
-  { "quotedbl",                          474, NULL },
-  { "gcommaaccent",                      611, NULL },
-  { "mu",                                611, NULL },
-  { "greaterequal",                      549, NULL },
-  { "Scaron",                            667, NULL },
-  { "Lslash",                            611, NULL },
-  { "semicolon",                         333, NULL },
-  { "oslash",                            611, NULL },
-  { "lessequal",                         549, NULL },
-  { "lozenge",                           494, NULL },
-  { "parenright",                        333, NULL },
-  { "ccaron",                            556, NULL },
-  { "Ecircumflex",                       667, NULL },
-  { "gbreve",                            611, NULL },
-  { "trademark",                        1000, NULL },
-  { "daggerdbl",                         556, NULL },
-  { "nacute",                            611, NULL },
-  { "macron",                            333, NULL },
-  { "Otilde",                            778, NULL },
-  { "Emacron",                           667, NULL },
-  { "ellipsis",                         1000, NULL },
-  { "scaron",                            556, NULL },
-  { "AE",                               1000, NULL },
-  { "Ucircumflex",                       722, NULL },
-  { "lslash",                            278, NULL },
-  { "quotedblleft",                      500, NULL },
-  { "guilsinglright",                    333, NULL },
-  { "hyphen",                            333, NULL },
-  { "quotesingle",                       238, NULL },
-  { "eight",                             556, NULL },
-  { "exclamdown",                        333, NULL },
-  { "endash",                            556, NULL },
-  { "oe",                                944, NULL },
-  { "Abreve",                            722, NULL },
-  { "Umacron",                           722, NULL },
-  { "ecircumflex",                       556, NULL },
-  { "Adieresis",                         722, NULL },
-  { "copyright",                         737, NULL },
-  { "Egrave",                            667, NULL },
-  { "slash",                             278, NULL },
-  { "Edieresis",                         667, NULL },
-  { "otilde",                            611, NULL },
-  { "Idieresis",                         278, NULL },
-  { "parenleft",                         333, NULL },
-  { "one",                               556, NULL },
-  { "emacron",                           556, NULL },
-  { "Odieresis",                         778, NULL },
-  { "ucircumflex",                       611, NULL },
-  { "bracketleft",                       333, NULL },
-  { "Ugrave",                            722, NULL },
-  { "quoteright",                        278, NULL },
-  { "Udieresis",                         722, NULL },
-  { "perthousand",                      1000, NULL },
-  { "Ydieresis",                         667, NULL },
-  { "umacron",                           611, NULL },
-  { "abreve",                            556, NULL },
-  { "Eacute",                            667, NULL },
-  { "adieresis",                         556, NULL },
-  { "egrave",                            556, NULL },
-  { "edieresis",                         556, NULL },
-  { "idieresis",                         278, NULL },
-  { "Eth",                               722, NULL },
-  { "ae",                                889, NULL },
-  { "asterisk",                          389, NULL },
-  { "odieresis",                         611, NULL },
-  { "Uacute",                            722, NULL },
-  { "ugrave",                            611, NULL },
-  { "nine",                              556, NULL },
-  { "five",                              556, NULL },
-  { "udieresis",                         611, NULL },
-  { "Zcaron",                            611, NULL },
-  { "Scommaaccent",                      667, NULL },
-  { "threequarters",                     834, NULL },
-  { "guillemotright",                    556, NULL },
-  { "Ccedilla",                          722, NULL },
-  { "ydieresis",                         556, NULL },
-  { "tilde",                             333, NULL },
-  { "at",                                975, NULL },
-  { "eacute",                            556, NULL },
-  { "underscore",                        556, NULL },
-  { "Euro",                              556, NULL },
-  { "Dcroat",                            722, NULL },
-  { "multiply",                          584, NULL },
-  { "zero",                              556, NULL },
-  { "eth",                               611, NULL },
-  { "Scedilla",                          667, NULL },
-  { "Ograve",                            778, NULL },
-  { "Racute",                            722, NULL },
-  { "partialdiff",                       494, NULL },
-  { "uacute",                            611, NULL },
-  { "braceleft",                         389, NULL },
-  { "Thorn",                             667, NULL },
-  { "zcaron",                            500, NULL },
-  { "scommaaccent",                      556, NULL },
-  { "ccedilla",                          556, NULL },
-  { "Dcaron",                            722, NULL },
-  { "dcroat",                            611, NULL },
-  { "Ocircumflex",                       778, NULL },
-  { "Oacute",                            778, NULL },
-  { "scedilla",                          556, NULL },
-  { "ogonek",                            333, NULL },
-  { "ograve",                            611, NULL },
-  { "racute",                            389, NULL },
-  { "Tcaron",                            611, NULL },
-  { "Eogonek",                           667, NULL },
-  { "thorn",                             611, NULL },
-  { "degree",                            400, NULL },
-  { "registered",                        737, NULL },
-  { "radical",                           549, NULL },
-  { "Aring",                             722, NULL },
-  { "percent",                           889, NULL },
-  { "six",                               556, NULL },
-  { "paragraph",                         556, NULL },
-  { "dcaron",                            743, NULL },
-  { "Uogonek",                           722, NULL },
-  { "two",                               556, NULL },
-  { "summation",                         600, NULL },
-  { "Igrave",                            278, NULL },
-  { "Lacute",                            611, NULL },
-  { "ocircumflex",                       611, NULL },
-  { "oacute",                            611, NULL },
-  { "Uring",                             722, NULL },
-  { "Lcommaaccent",                      611, NULL },
-  { "tcaron",                            389, NULL },
-  { "eogonek",                           556, NULL },
-  { "Delta",                             612, NULL },
-  { "Ohungarumlaut",                     778, NULL },
-  { "asciicircum",                       584, NULL },
-  { "aring",                             556, NULL },
-  { "grave",                             333, NULL },
-  { "uogonek",                           611, NULL },
-  { "bracketright",                      333, NULL },
-  { "Iacute",                            278, NULL },
-  { "ampersand",                         722, NULL },
-  { "igrave",                            278, NULL },
-  { "lacute",                            278, NULL },
-  { "Ncaron",                            722, NULL },
-  { "plus",                              584, NULL },
-  { "uring",                             611, NULL },
-  { "quotesinglbase",                    278, NULL },
-  { "lcommaaccent",                      278, NULL },
-  { "Yacute",                            667, NULL },
-  { "ohungarumlaut",                     611, NULL },
-  { "threesuperior",                     333, NULL },
-  { "acute",                             333, NULL },
-  { "section",                           556, NULL },
-  { "dieresis",                          333, NULL },
-  { "iacute",                            278, NULL },
-  { "quotedblbase",                      500, NULL },
-  { "ncaron",                            611, NULL },
-  { "florin",                            556, NULL },
-  { "yacute",                            556, NULL },
-  { "Rcommaaccent",                      722, NULL },
-  { "fi",                                611, NULL },
-  { "fl",                                611, NULL },
-  { "Acircumflex",                       722, NULL },
-  { "Cacute",                            722, NULL },
-  { "Icircumflex",                       278, NULL },
-  { "guillemotleft",                     556, NULL },
-  { "germandbls",                        611, NULL },
-  { "Amacron",                           722, NULL },
-  { "seven",                             556, NULL },
-  { "Sacute",                            667, NULL },
-  { "ordmasculine",                      365, NULL },
-  { "dotlessi",                          278, NULL },
-  { "sterling",                          556, NULL },
-  { "notequal",                          549, NULL },
-  { "Imacron",                           278, NULL },
-  { "rcommaaccent",                      389, NULL },
-  { "Zdotaccent",                        611, NULL },
-  { "acircumflex",                       556, NULL },
-  { "cacute",                            556, NULL },
-  { "Ecaron",                            667, NULL },
-  { "icircumflex",                       278, NULL },
-  { "braceright",                        389, NULL },
-  { "quotedblright",                     500, NULL },
-  { "amacron",                           556, NULL },
-  { "sacute",                            556, NULL },
-  { "imacron",                           278, NULL },
-  { "cent",                              556, NULL },
-  { "currency",                          556, NULL },
-  { "logicalnot",                        584, NULL },
-  { "zdotaccent",                        500, NULL },
-  { "Atilde",                            722, NULL },
-  { "breve",                             333, NULL },
-  { "bar",                               280, NULL },
-  { "fraction",                          167, NULL },
-  { "less",                              584, NULL },
-  { "ecaron",                            556, NULL },
-  { "guilsinglleft",                     333, NULL },
-  { "exclam",                            333, NULL },
-  { "period",                            278, NULL },
-  { "Rcaron",                            722, NULL },
-  { "Kcommaaccent",                      722, NULL },
-  { "greater",                           584, NULL },
-  { "atilde",                            556, NULL },
-  { "brokenbar",                         280, NULL },
-  { "quoteleft",                         278, NULL },
-  { "Edotaccent",                        667, NULL },
-  { "onesuperior",                       333, NULL }
+  { "Ntilde",                            722, nullptr },
+  { "rcaron",                            389, nullptr },
+  { "kcommaaccent",                      556, nullptr },
+  { "Ncommaaccent",                      722, nullptr },
+  { "Zacute",                            611, nullptr },
+  { "comma",                             278, nullptr },
+  { "cedilla",                           333, nullptr },
+  { "plusminus",                         584, nullptr },
+  { "circumflex",                        333, nullptr },
+  { "dotaccent",                         333, nullptr },
+  { "edotaccent",                        556, nullptr },
+  { "asciitilde",                        584, nullptr },
+  { "colon",                             333, nullptr },
+  { "onehalf",                           834, nullptr },
+  { "dollar",                            556, nullptr },
+  { "Lcaron",                            611, nullptr },
+  { "ntilde",                            611, nullptr },
+  { "Aogonek",                           722, nullptr },
+  { "ncommaaccent",                      611, nullptr },
+  { "minus",                             584, nullptr },
+  { "Iogonek",                           278, nullptr },
+  { "zacute",                            500, nullptr },
+  { "yen",                               556, nullptr },
+  { "space",                             278, nullptr },
+  { "Omacron",                           778, nullptr },
+  { "questiondown",                      611, nullptr },
+  { "emdash",                           1000, nullptr },
+  { "Agrave",                            722, nullptr },
+  { "three",                             556, nullptr },
+  { "numbersign",                        556, nullptr },
+  { "lcaron",                            400, nullptr },
+  { "A",                                 722, nullptr },
+  { "B",                                 722, nullptr },
+  { "C",                                 722, nullptr },
+  { "aogonek",                           556, nullptr },
+  { "D",                                 722, nullptr },
+  { "E",                                 667, nullptr },
+  { "onequarter",                        834, nullptr },
+  { "F",                                 611, nullptr },
+  { "G",                                 778, nullptr },
+  { "H",                                 722, nullptr },
+  { "I",                                 278, nullptr },
+  { "J",                                 556, nullptr },
+  { "K",                                 722, nullptr },
+  { "iogonek",                           278, nullptr },
+  { "backslash",                         278, nullptr },
+  { "L",                                 611, nullptr },
+  { "periodcentered",                    278, nullptr },
+  { "M",                                 833, nullptr },
+  { "N",                                 722, nullptr },
+  { "omacron",                           611, nullptr },
+  { "Tcommaaccent",                      611, nullptr },
+  { "O",                                 778, nullptr },
+  { "P",                                 667, nullptr },
+  { "Q",                                 778, nullptr },
+  { "Uhungarumlaut",                     722, nullptr },
+  { "R",                                 722, nullptr },
+  { "Aacute",                            722, nullptr },
+  { "caron",                             333, nullptr },
+  { "S",                                 667, nullptr },
+  { "T",                                 611, nullptr },
+  { "U",                                 722, nullptr },
+  { "agrave",                            556, nullptr },
+  { "V",                                 667, nullptr },
+  { "W",                                 944, nullptr },
+  { "X",                                 667, nullptr },
+  { "question",                          611, nullptr },
+  { "equal",                             584, nullptr },
+  { "Y",                                 667, nullptr },
+  { "Z",                                 611, nullptr },
+  { "four",                              556, nullptr },
+  { "a",                                 556, nullptr },
+  { "Gcommaaccent",                      778, nullptr },
+  { "b",                                 611, nullptr },
+  { "c",                                 556, nullptr },
+  { "d",                                 611, nullptr },
+  { "e",                                 556, nullptr },
+  { "f",                                 333, nullptr },
+  { "g",                                 611, nullptr },
+  { "bullet",                            350, nullptr },
+  { "h",                                 611, nullptr },
+  { "i",                                 278, nullptr },
+  { "Oslash",                            778, nullptr },
+  { "dagger",                            556, nullptr },
+  { "j",                                 278, nullptr },
+  { "k",                                 556, nullptr },
+  { "l",                                 278, nullptr },
+  { "m",                                 889, nullptr },
+  { "n",                                 611, nullptr },
+  { "tcommaaccent",                      333, nullptr },
+  { "o",                                 611, nullptr },
+  { "ordfeminine",                       370, nullptr },
+  { "ring",                              333, nullptr },
+  { "p",                                 611, nullptr },
+  { "q",                                 611, nullptr },
+  { "uhungarumlaut",                     611, nullptr },
+  { "r",                                 389, nullptr },
+  { "twosuperior",                       333, nullptr },
+  { "aacute",                            556, nullptr },
+  { "s",                                 556, nullptr },
+  { "OE",                               1000, nullptr },
+  { "t",                                 333, nullptr },
+  { "divide",                            584, nullptr },
+  { "u",                                 611, nullptr },
+  { "Ccaron",                            722, nullptr },
+  { "v",                                 556, nullptr },
+  { "w",                                 778, nullptr },
+  { "x",                                 556, nullptr },
+  { "y",                                 556, nullptr },
+  { "z",                                 500, nullptr },
+  { "Gbreve",                            778, nullptr },
+  { "commaaccent",                       250, nullptr },
+  { "hungarumlaut",                      333, nullptr },
+  { "Idotaccent",                        278, nullptr },
+  { "Nacute",                            722, nullptr },
+  { "quotedbl",                          474, nullptr },
+  { "gcommaaccent",                      611, nullptr },
+  { "mu",                                611, nullptr },
+  { "greaterequal",                      549, nullptr },
+  { "Scaron",                            667, nullptr },
+  { "Lslash",                            611, nullptr },
+  { "semicolon",                         333, nullptr },
+  { "oslash",                            611, nullptr },
+  { "lessequal",                         549, nullptr },
+  { "lozenge",                           494, nullptr },
+  { "parenright",                        333, nullptr },
+  { "ccaron",                            556, nullptr },
+  { "Ecircumflex",                       667, nullptr },
+  { "gbreve",                            611, nullptr },
+  { "trademark",                        1000, nullptr },
+  { "daggerdbl",                         556, nullptr },
+  { "nacute",                            611, nullptr },
+  { "macron",                            333, nullptr },
+  { "Otilde",                            778, nullptr },
+  { "Emacron",                           667, nullptr },
+  { "ellipsis",                         1000, nullptr },
+  { "scaron",                            556, nullptr },
+  { "AE",                               1000, nullptr },
+  { "Ucircumflex",                       722, nullptr },
+  { "lslash",                            278, nullptr },
+  { "quotedblleft",                      500, nullptr },
+  { "guilsinglright",                    333, nullptr },
+  { "hyphen",                            333, nullptr },
+  { "quotesingle",                       238, nullptr },
+  { "eight",                             556, nullptr },
+  { "exclamdown",                        333, nullptr },
+  { "endash",                            556, nullptr },
+  { "oe",                                944, nullptr },
+  { "Abreve",                            722, nullptr },
+  { "Umacron",                           722, nullptr },
+  { "ecircumflex",                       556, nullptr },
+  { "Adieresis",                         722, nullptr },
+  { "copyright",                         737, nullptr },
+  { "Egrave",                            667, nullptr },
+  { "slash",                             278, nullptr },
+  { "Edieresis",                         667, nullptr },
+  { "otilde",                            611, nullptr },
+  { "Idieresis",                         278, nullptr },
+  { "parenleft",                         333, nullptr },
+  { "one",                               556, nullptr },
+  { "emacron",                           556, nullptr },
+  { "Odieresis",                         778, nullptr },
+  { "ucircumflex",                       611, nullptr },
+  { "bracketleft",                       333, nullptr },
+  { "Ugrave",                            722, nullptr },
+  { "quoteright",                        278, nullptr },
+  { "Udieresis",                         722, nullptr },
+  { "perthousand",                      1000, nullptr },
+  { "Ydieresis",                         667, nullptr },
+  { "umacron",                           611, nullptr },
+  { "abreve",                            556, nullptr },
+  { "Eacute",                            667, nullptr },
+  { "adieresis",                         556, nullptr },
+  { "egrave",                            556, nullptr },
+  { "edieresis",                         556, nullptr },
+  { "idieresis",                         278, nullptr },
+  { "Eth",                               722, nullptr },
+  { "ae",                                889, nullptr },
+  { "asterisk",                          389, nullptr },
+  { "odieresis",                         611, nullptr },
+  { "Uacute",                            722, nullptr },
+  { "ugrave",                            611, nullptr },
+  { "nine",                              556, nullptr },
+  { "five",                              556, nullptr },
+  { "udieresis",                         611, nullptr },
+  { "Zcaron",                            611, nullptr },
+  { "Scommaaccent",                      667, nullptr },
+  { "threequarters",                     834, nullptr },
+  { "guillemotright",                    556, nullptr },
+  { "Ccedilla",                          722, nullptr },
+  { "ydieresis",                         556, nullptr },
+  { "tilde",                             333, nullptr },
+  { "at",                                975, nullptr },
+  { "eacute",                            556, nullptr },
+  { "underscore",                        556, nullptr },
+  { "Euro",                              556, nullptr },
+  { "Dcroat",                            722, nullptr },
+  { "multiply",                          584, nullptr },
+  { "zero",                              556, nullptr },
+  { "eth",                               611, nullptr },
+  { "Scedilla",                          667, nullptr },
+  { "Ograve",                            778, nullptr },
+  { "Racute",                            722, nullptr },
+  { "partialdiff",                       494, nullptr },
+  { "uacute",                            611, nullptr },
+  { "braceleft",                         389, nullptr },
+  { "Thorn",                             667, nullptr },
+  { "zcaron",                            500, nullptr },
+  { "scommaaccent",                      556, nullptr },
+  { "ccedilla",                          556, nullptr },
+  { "Dcaron",                            722, nullptr },
+  { "dcroat",                            611, nullptr },
+  { "Ocircumflex",                       778, nullptr },
+  { "Oacute",                            778, nullptr },
+  { "scedilla",                          556, nullptr },
+  { "ogonek",                            333, nullptr },
+  { "ograve",                            611, nullptr },
+  { "racute",                            389, nullptr },
+  { "Tcaron",                            611, nullptr },
+  { "Eogonek",                           667, nullptr },
+  { "thorn",                             611, nullptr },
+  { "degree",                            400, nullptr },
+  { "registered",                        737, nullptr },
+  { "radical",                           549, nullptr },
+  { "Aring",                             722, nullptr },
+  { "percent",                           889, nullptr },
+  { "six",                               556, nullptr },
+  { "paragraph",                         556, nullptr },
+  { "dcaron",                            743, nullptr },
+  { "Uogonek",                           722, nullptr },
+  { "two",                               556, nullptr },
+  { "summation",                         600, nullptr },
+  { "Igrave",                            278, nullptr },
+  { "Lacute",                            611, nullptr },
+  { "ocircumflex",                       611, nullptr },
+  { "oacute",                            611, nullptr },
+  { "Uring",                             722, nullptr },
+  { "Lcommaaccent",                      611, nullptr },
+  { "tcaron",                            389, nullptr },
+  { "eogonek",                           556, nullptr },
+  { "Delta",                             612, nullptr },
+  { "Ohungarumlaut",                     778, nullptr },
+  { "asciicircum",                       584, nullptr },
+  { "aring",                             556, nullptr },
+  { "grave",                             333, nullptr },
+  { "uogonek",                           611, nullptr },
+  { "bracketright",                      333, nullptr },
+  { "Iacute",                            278, nullptr },
+  { "ampersand",                         722, nullptr },
+  { "igrave",                            278, nullptr },
+  { "lacute",                            278, nullptr },
+  { "Ncaron",                            722, nullptr },
+  { "plus",                              584, nullptr },
+  { "uring",                             611, nullptr },
+  { "quotesinglbase",                    278, nullptr },
+  { "lcommaaccent",                      278, nullptr },
+  { "Yacute",                            667, nullptr },
+  { "ohungarumlaut",                     611, nullptr },
+  { "threesuperior",                     333, nullptr },
+  { "acute",                             333, nullptr },
+  { "section",                           556, nullptr },
+  { "dieresis",                          333, nullptr },
+  { "iacute",                            278, nullptr },
+  { "quotedblbase",                      500, nullptr },
+  { "ncaron",                            611, nullptr },
+  { "florin",                            556, nullptr },
+  { "yacute",                            556, nullptr },
+  { "Rcommaaccent",                      722, nullptr },
+  { "fi",                                611, nullptr },
+  { "fl",                                611, nullptr },
+  { "Acircumflex",                       722, nullptr },
+  { "Cacute",                            722, nullptr },
+  { "Icircumflex",                       278, nullptr },
+  { "guillemotleft",                     556, nullptr },
+  { "germandbls",                        611, nullptr },
+  { "Amacron",                           722, nullptr },
+  { "seven",                             556, nullptr },
+  { "Sacute",                            667, nullptr },
+  { "ordmasculine",                      365, nullptr },
+  { "dotlessi",                          278, nullptr },
+  { "sterling",                          556, nullptr },
+  { "notequal",                          549, nullptr },
+  { "Imacron",                           278, nullptr },
+  { "rcommaaccent",                      389, nullptr },
+  { "Zdotaccent",                        611, nullptr },
+  { "acircumflex",                       556, nullptr },
+  { "cacute",                            556, nullptr },
+  { "Ecaron",                            667, nullptr },
+  { "icircumflex",                       278, nullptr },
+  { "braceright",                        389, nullptr },
+  { "quotedblright",                     500, nullptr },
+  { "amacron",                           556, nullptr },
+  { "sacute",                            556, nullptr },
+  { "imacron",                           278, nullptr },
+  { "cent",                              556, nullptr },
+  { "currency",                          556, nullptr },
+  { "logicalnot",                        584, nullptr },
+  { "zdotaccent",                        500, nullptr },
+  { "Atilde",                            722, nullptr },
+  { "breve",                             333, nullptr },
+  { "bar",                               280, nullptr },
+  { "fraction",                          167, nullptr },
+  { "less",                              584, nullptr },
+  { "ecaron",                            556, nullptr },
+  { "guilsinglleft",                     333, nullptr },
+  { "exclam",                            333, nullptr },
+  { "period",                            278, nullptr },
+  { "Rcaron",                            722, nullptr },
+  { "Kcommaaccent",                      722, nullptr },
+  { "greater",                           584, nullptr },
+  { "atilde",                            556, nullptr },
+  { "brokenbar",                         280, nullptr },
+  { "quoteleft",                         278, nullptr },
+  { "Edotaccent",                        667, nullptr },
+  { "onesuperior",                       333, nullptr }
 };
 
 static BuiltinFontWidth helveticaObliqueWidthsTab[] = {
-  { "Ntilde",                            722, NULL },
-  { "rcaron",                            333, NULL },
-  { "kcommaaccent",                      500, NULL },
-  { "Ncommaaccent",                      722, NULL },
-  { "Zacute",                            611, NULL },
-  { "comma",                             278, NULL },
-  { "cedilla",                           333, NULL },
-  { "plusminus",                         584, NULL },
-  { "circumflex",                        333, NULL },
-  { "dotaccent",                         333, NULL },
-  { "edotaccent",                        556, NULL },
-  { "asciitilde",                        584, NULL },
-  { "colon",                             278, NULL },
-  { "onehalf",                           834, NULL },
-  { "dollar",                            556, NULL },
-  { "Lcaron",                            556, NULL },
-  { "ntilde",                            556, NULL },
-  { "Aogonek",                           667, NULL },
-  { "ncommaaccent",                      556, NULL },
-  { "minus",                             584, NULL },
-  { "Iogonek",                           278, NULL },
-  { "zacute",                            500, NULL },
-  { "yen",                               556, NULL },
-  { "space",                             278, NULL },
-  { "Omacron",                           778, NULL },
-  { "questiondown",                      611, NULL },
-  { "emdash",                           1000, NULL },
-  { "Agrave",                            667, NULL },
-  { "three",                             556, NULL },
-  { "numbersign",                        556, NULL },
-  { "lcaron",                            299, NULL },
-  { "A",                                 667, NULL },
-  { "B",                                 667, NULL },
-  { "C",                                 722, NULL },
-  { "aogonek",                           556, NULL },
-  { "D",                                 722, NULL },
-  { "E",                                 667, NULL },
-  { "onequarter",                        834, NULL },
-  { "F",                                 611, NULL },
-  { "G",                                 778, NULL },
-  { "H",                                 722, NULL },
-  { "I",                                 278, NULL },
-  { "J",                                 500, NULL },
-  { "K",                                 667, NULL },
-  { "iogonek",                           222, NULL },
-  { "backslash",                         278, NULL },
-  { "L",                                 556, NULL },
-  { "periodcentered",                    278, NULL },
-  { "M",                                 833, NULL },
-  { "N",                                 722, NULL },
-  { "omacron",                           556, NULL },
-  { "Tcommaaccent",                      611, NULL },
-  { "O",                                 778, NULL },
-  { "P",                                 667, NULL },
-  { "Q",                                 778, NULL },
-  { "Uhungarumlaut",                     722, NULL },
-  { "R",                                 722, NULL },
-  { "Aacute",                            667, NULL },
-  { "caron",                             333, NULL },
-  { "S",                                 667, NULL },
-  { "T",                                 611, NULL },
-  { "U",                                 722, NULL },
-  { "agrave",                            556, NULL },
-  { "V",                                 667, NULL },
-  { "W",                                 944, NULL },
-  { "X",                                 667, NULL },
-  { "question",                          556, NULL },
-  { "equal",                             584, NULL },
-  { "Y",                                 667, NULL },
-  { "Z",                                 611, NULL },
-  { "four",                              556, NULL },
-  { "a",                                 556, NULL },
-  { "Gcommaaccent",                      778, NULL },
-  { "b",                                 556, NULL },
-  { "c",                                 500, NULL },
-  { "d",                                 556, NULL },
-  { "e",                                 556, NULL },
-  { "f",                                 278, NULL },
-  { "g",                                 556, NULL },
-  { "bullet",                            350, NULL },
-  { "h",                                 556, NULL },
-  { "i",                                 222, NULL },
-  { "Oslash",                            778, NULL },
-  { "dagger",                            556, NULL },
-  { "j",                                 222, NULL },
-  { "k",                                 500, NULL },
-  { "l",                                 222, NULL },
-  { "m",                                 833, NULL },
-  { "n",                                 556, NULL },
-  { "tcommaaccent",                      278, NULL },
-  { "o",                                 556, NULL },
-  { "ordfeminine",                       370, NULL },
-  { "ring",                              333, NULL },
-  { "p",                                 556, NULL },
-  { "q",                                 556, NULL },
-  { "uhungarumlaut",                     556, NULL },
-  { "r",                                 333, NULL },
-  { "twosuperior",                       333, NULL },
-  { "aacute",                            556, NULL },
-  { "s",                                 500, NULL },
-  { "OE",                               1000, NULL },
-  { "t",                                 278, NULL },
-  { "divide",                            584, NULL },
-  { "u",                                 556, NULL },
-  { "Ccaron",                            722, NULL },
-  { "v",                                 500, NULL },
-  { "w",                                 722, NULL },
-  { "x",                                 500, NULL },
-  { "y",                                 500, NULL },
-  { "z",                                 500, NULL },
-  { "Gbreve",                            778, NULL },
-  { "commaaccent",                       250, NULL },
-  { "hungarumlaut",                      333, NULL },
-  { "Idotaccent",                        278, NULL },
-  { "Nacute",                            722, NULL },
-  { "quotedbl",                          355, NULL },
-  { "gcommaaccent",                      556, NULL },
-  { "mu",                                556, NULL },
-  { "greaterequal",                      549, NULL },
-  { "Scaron",                            667, NULL },
-  { "Lslash",                            556, NULL },
-  { "semicolon",                         278, NULL },
-  { "oslash",                            611, NULL },
-  { "lessequal",                         549, NULL },
-  { "lozenge",                           471, NULL },
-  { "parenright",                        333, NULL },
-  { "ccaron",                            500, NULL },
-  { "Ecircumflex",                       667, NULL },
-  { "gbreve",                            556, NULL },
-  { "trademark",                        1000, NULL },
-  { "daggerdbl",                         556, NULL },
-  { "nacute",                            556, NULL },
-  { "macron",                            333, NULL },
-  { "Otilde",                            778, NULL },
-  { "Emacron",                           667, NULL },
-  { "ellipsis",                         1000, NULL },
-  { "scaron",                            500, NULL },
-  { "AE",                               1000, NULL },
-  { "Ucircumflex",                       722, NULL },
-  { "lslash",                            222, NULL },
-  { "quotedblleft",                      333, NULL },
-  { "guilsinglright",                    333, NULL },
-  { "hyphen",                            333, NULL },
-  { "quotesingle",                       191, NULL },
-  { "eight",                             556, NULL },
-  { "exclamdown",                        333, NULL },
-  { "endash",                            556, NULL },
-  { "oe",                                944, NULL },
-  { "Abreve",                            667, NULL },
-  { "Umacron",                           722, NULL },
-  { "ecircumflex",                       556, NULL },
-  { "Adieresis",                         667, NULL },
-  { "copyright",                         737, NULL },
-  { "Egrave",                            667, NULL },
-  { "slash",                             278, NULL },
-  { "Edieresis",                         667, NULL },
-  { "otilde",                            556, NULL },
-  { "Idieresis",                         278, NULL },
-  { "parenleft",                         333, NULL },
-  { "one",                               556, NULL },
-  { "emacron",                           556, NULL },
-  { "Odieresis",                         778, NULL },
-  { "ucircumflex",                       556, NULL },
-  { "bracketleft",                       278, NULL },
-  { "Ugrave",                            722, NULL },
-  { "quoteright",                        222, NULL },
-  { "Udieresis",                         722, NULL },
-  { "perthousand",                      1000, NULL },
-  { "Ydieresis",                         667, NULL },
-  { "umacron",                           556, NULL },
-  { "abreve",                            556, NULL },
-  { "Eacute",                            667, NULL },
-  { "adieresis",                         556, NULL },
-  { "egrave",                            556, NULL },
-  { "edieresis",                         556, NULL },
-  { "idieresis",                         278, NULL },
-  { "Eth",                               722, NULL },
-  { "ae",                                889, NULL },
-  { "asterisk",                          389, NULL },
-  { "odieresis",                         556, NULL },
-  { "Uacute",                            722, NULL },
-  { "ugrave",                            556, NULL },
-  { "nine",                              556, NULL },
-  { "five",                              556, NULL },
-  { "udieresis",                         556, NULL },
-  { "Zcaron",                            611, NULL },
-  { "Scommaaccent",                      667, NULL },
-  { "threequarters",                     834, NULL },
-  { "guillemotright",                    556, NULL },
-  { "Ccedilla",                          722, NULL },
-  { "ydieresis",                         500, NULL },
-  { "tilde",                             333, NULL },
-  { "at",                               1015, NULL },
-  { "eacute",                            556, NULL },
-  { "underscore",                        556, NULL },
-  { "Euro",                              556, NULL },
-  { "Dcroat",                            722, NULL },
-  { "multiply",                          584, NULL },
-  { "zero",                              556, NULL },
-  { "eth",                               556, NULL },
-  { "Scedilla",                          667, NULL },
-  { "Ograve",                            778, NULL },
-  { "Racute",                            722, NULL },
-  { "partialdiff",                       476, NULL },
-  { "uacute",                            556, NULL },
-  { "braceleft",                         334, NULL },
-  { "Thorn",                             667, NULL },
-  { "zcaron",                            500, NULL },
-  { "scommaaccent",                      500, NULL },
-  { "ccedilla",                          500, NULL },
-  { "Dcaron",                            722, NULL },
-  { "dcroat",                            556, NULL },
-  { "Ocircumflex",                       778, NULL },
-  { "Oacute",                            778, NULL },
-  { "scedilla",                          500, NULL },
-  { "ogonek",                            333, NULL },
-  { "ograve",                            556, NULL },
-  { "racute",                            333, NULL },
-  { "Tcaron",                            611, NULL },
-  { "Eogonek",                           667, NULL },
-  { "thorn",                             556, NULL },
-  { "degree",                            400, NULL },
-  { "registered",                        737, NULL },
-  { "radical",                           453, NULL },
-  { "Aring",                             667, NULL },
-  { "percent",                           889, NULL },
-  { "six",                               556, NULL },
-  { "paragraph",                         537, NULL },
-  { "dcaron",                            643, NULL },
-  { "Uogonek",                           722, NULL },
-  { "two",                               556, NULL },
-  { "summation",                         600, NULL },
-  { "Igrave",                            278, NULL },
-  { "Lacute",                            556, NULL },
-  { "ocircumflex",                       556, NULL },
-  { "oacute",                            556, NULL },
-  { "Uring",                             722, NULL },
-  { "Lcommaaccent",                      556, NULL },
-  { "tcaron",                            317, NULL },
-  { "eogonek",                           556, NULL },
-  { "Delta",                             612, NULL },
-  { "Ohungarumlaut",                     778, NULL },
-  { "asciicircum",                       469, NULL },
-  { "aring",                             556, NULL },
-  { "grave",                             333, NULL },
-  { "uogonek",                           556, NULL },
-  { "bracketright",                      278, NULL },
-  { "Iacute",                            278, NULL },
-  { "ampersand",                         667, NULL },
-  { "igrave",                            278, NULL },
-  { "lacute",                            222, NULL },
-  { "Ncaron",                            722, NULL },
-  { "plus",                              584, NULL },
-  { "uring",                             556, NULL },
-  { "quotesinglbase",                    222, NULL },
-  { "lcommaaccent",                      222, NULL },
-  { "Yacute",                            667, NULL },
-  { "ohungarumlaut",                     556, NULL },
-  { "threesuperior",                     333, NULL },
-  { "acute",                             333, NULL },
-  { "section",                           556, NULL },
-  { "dieresis",                          333, NULL },
-  { "iacute",                            278, NULL },
-  { "quotedblbase",                      333, NULL },
-  { "ncaron",                            556, NULL },
-  { "florin",                            556, NULL },
-  { "yacute",                            500, NULL },
-  { "Rcommaaccent",                      722, NULL },
-  { "fi",                                500, NULL },
-  { "fl",                                500, NULL },
-  { "Acircumflex",                       667, NULL },
-  { "Cacute",                            722, NULL },
-  { "Icircumflex",                       278, NULL },
-  { "guillemotleft",                     556, NULL },
-  { "germandbls",                        611, NULL },
-  { "Amacron",                           667, NULL },
-  { "seven",                             556, NULL },
-  { "Sacute",                            667, NULL },
-  { "ordmasculine",                      365, NULL },
-  { "dotlessi",                          278, NULL },
-  { "sterling",                          556, NULL },
-  { "notequal",                          549, NULL },
-  { "Imacron",                           278, NULL },
-  { "rcommaaccent",                      333, NULL },
-  { "Zdotaccent",                        611, NULL },
-  { "acircumflex",                       556, NULL },
-  { "cacute",                            500, NULL },
-  { "Ecaron",                            667, NULL },
-  { "icircumflex",                       278, NULL },
-  { "braceright",                        334, NULL },
-  { "quotedblright",                     333, NULL },
-  { "amacron",                           556, NULL },
-  { "sacute",                            500, NULL },
-  { "imacron",                           278, NULL },
-  { "cent",                              556, NULL },
-  { "currency",                          556, NULL },
-  { "logicalnot",                        584, NULL },
-  { "zdotaccent",                        500, NULL },
-  { "Atilde",                            667, NULL },
-  { "breve",                             333, NULL },
-  { "bar",                               260, NULL },
-  { "fraction",                          167, NULL },
-  { "less",                              584, NULL },
-  { "ecaron",                            556, NULL },
-  { "guilsinglleft",                     333, NULL },
-  { "exclam",                            278, NULL },
-  { "period",                            278, NULL },
-  { "Rcaron",                            722, NULL },
-  { "Kcommaaccent",                      667, NULL },
-  { "greater",                           584, NULL },
-  { "atilde",                            556, NULL },
-  { "brokenbar",                         260, NULL },
-  { "quoteleft",                         222, NULL },
-  { "Edotaccent",                        667, NULL },
-  { "onesuperior",                       333, NULL }
+  { "Ntilde",                            722, nullptr },
+  { "rcaron",                            333, nullptr },
+  { "kcommaaccent",                      500, nullptr },
+  { "Ncommaaccent",                      722, nullptr },
+  { "Zacute",                            611, nullptr },
+  { "comma",                             278, nullptr },
+  { "cedilla",                           333, nullptr },
+  { "plusminus",                         584, nullptr },
+  { "circumflex",                        333, nullptr },
+  { "dotaccent",                         333, nullptr },
+  { "edotaccent",                        556, nullptr },
+  { "asciitilde",                        584, nullptr },
+  { "colon",                             278, nullptr },
+  { "onehalf",                           834, nullptr },
+  { "dollar",                            556, nullptr },
+  { "Lcaron",                            556, nullptr },
+  { "ntilde",                            556, nullptr },
+  { "Aogonek",                           667, nullptr },
+  { "ncommaaccent",                      556, nullptr },
+  { "minus",                             584, nullptr },
+  { "Iogonek",                           278, nullptr },
+  { "zacute",                            500, nullptr },
+  { "yen",                               556, nullptr },
+  { "space",                             278, nullptr },
+  { "Omacron",                           778, nullptr },
+  { "questiondown",                      611, nullptr },
+  { "emdash",                           1000, nullptr },
+  { "Agrave",                            667, nullptr },
+  { "three",                             556, nullptr },
+  { "numbersign",                        556, nullptr },
+  { "lcaron",                            299, nullptr },
+  { "A",                                 667, nullptr },
+  { "B",                                 667, nullptr },
+  { "C",                                 722, nullptr },
+  { "aogonek",                           556, nullptr },
+  { "D",                                 722, nullptr },
+  { "E",                                 667, nullptr },
+  { "onequarter",                        834, nullptr },
+  { "F",                                 611, nullptr },
+  { "G",                                 778, nullptr },
+  { "H",                                 722, nullptr },
+  { "I",                                 278, nullptr },
+  { "J",                                 500, nullptr },
+  { "K",                                 667, nullptr },
+  { "iogonek",                           222, nullptr },
+  { "backslash",                         278, nullptr },
+  { "L",                                 556, nullptr },
+  { "periodcentered",                    278, nullptr },
+  { "M",                                 833, nullptr },
+  { "N",                                 722, nullptr },
+  { "omacron",                           556, nullptr },
+  { "Tcommaaccent",                      611, nullptr },
+  { "O",                                 778, nullptr },
+  { "P",                                 667, nullptr },
+  { "Q",                                 778, nullptr },
+  { "Uhungarumlaut",                     722, nullptr },
+  { "R",                                 722, nullptr },
+  { "Aacute",                            667, nullptr },
+  { "caron",                             333, nullptr },
+  { "S",                                 667, nullptr },
+  { "T",                                 611, nullptr },
+  { "U",                                 722, nullptr },
+  { "agrave",                            556, nullptr },
+  { "V",                                 667, nullptr },
+  { "W",                                 944, nullptr },
+  { "X",                                 667, nullptr },
+  { "question",                          556, nullptr },
+  { "equal",                             584, nullptr },
+  { "Y",                                 667, nullptr },
+  { "Z",                                 611, nullptr },
+  { "four",                              556, nullptr },
+  { "a",                                 556, nullptr },
+  { "Gcommaaccent",                      778, nullptr },
+  { "b",                                 556, nullptr },
+  { "c",                                 500, nullptr },
+  { "d",                                 556, nullptr },
+  { "e",                                 556, nullptr },
+  { "f",                                 278, nullptr },
+  { "g",                                 556, nullptr },
+  { "bullet",                            350, nullptr },
+  { "h",                                 556, nullptr },
+  { "i",                                 222, nullptr },
+  { "Oslash",                            778, nullptr },
+  { "dagger",                            556, nullptr },
+  { "j",                                 222, nullptr },
+  { "k",                                 500, nullptr },
+  { "l",                                 222, nullptr },
+  { "m",                                 833, nullptr },
+  { "n",                                 556, nullptr },
+  { "tcommaaccent",                      278, nullptr },
+  { "o",                                 556, nullptr },
+  { "ordfeminine",                       370, nullptr },
+  { "ring",                              333, nullptr },
+  { "p",                                 556, nullptr },
+  { "q",                                 556, nullptr },
+  { "uhungarumlaut",                     556, nullptr },
+  { "r",                                 333, nullptr },
+  { "twosuperior",                       333, nullptr },
+  { "aacute",                            556, nullptr },
+  { "s",                                 500, nullptr },
+  { "OE",                               1000, nullptr },
+  { "t",                                 278, nullptr },
+  { "divide",                            584, nullptr },
+  { "u",                                 556, nullptr },
+  { "Ccaron",                            722, nullptr },
+  { "v",                                 500, nullptr },
+  { "w",                                 722, nullptr },
+  { "x",                                 500, nullptr },
+  { "y",                                 500, nullptr },
+  { "z",                                 500, nullptr },
+  { "Gbreve",                            778, nullptr },
+  { "commaaccent",                       250, nullptr },
+  { "hungarumlaut",                      333, nullptr },
+  { "Idotaccent",                        278, nullptr },
+  { "Nacute",                            722, nullptr },
+  { "quotedbl",                          355, nullptr },
+  { "gcommaaccent",                      556, nullptr },
+  { "mu",                                556, nullptr },
+  { "greaterequal",                      549, nullptr },
+  { "Scaron",                            667, nullptr },
+  { "Lslash",                            556, nullptr },
+  { "semicolon",                         278, nullptr },
+  { "oslash",                            611, nullptr },
+  { "lessequal",                         549, nullptr },
+  { "lozenge",                           471, nullptr },
+  { "parenright",                        333, nullptr },
+  { "ccaron",                            500, nullptr },
+  { "Ecircumflex",                       667, nullptr },
+  { "gbreve",                            556, nullptr },
+  { "trademark",                        1000, nullptr },
+  { "daggerdbl",                         556, nullptr },
+  { "nacute",                            556, nullptr },
+  { "macron",                            333, nullptr },
+  { "Otilde",                            778, nullptr },
+  { "Emacron",                           667, nullptr },
+  { "ellipsis",                         1000, nullptr },
+  { "scaron",                            500, nullptr },
+  { "AE",                               1000, nullptr },
+  { "Ucircumflex",                       722, nullptr },
+  { "lslash",                            222, nullptr },
+  { "quotedblleft",                      333, nullptr },
+  { "guilsinglright",                    333, nullptr },
+  { "hyphen",                            333, nullptr },
+  { "quotesingle",                       191, nullptr },
+  { "eight",                             556, nullptr },
+  { "exclamdown",                        333, nullptr },
+  { "endash",                            556, nullptr },
+  { "oe",                                944, nullptr },
+  { "Abreve",                            667, nullptr },
+  { "Umacron",                           722, nullptr },
+  { "ecircumflex",                       556, nullptr },
+  { "Adieresis",                         667, nullptr },
+  { "copyright",                         737, nullptr },
+  { "Egrave",                            667, nullptr },
+  { "slash",                             278, nullptr },
+  { "Edieresis",                         667, nullptr },
+  { "otilde",                            556, nullptr },
+  { "Idieresis",                         278, nullptr },
+  { "parenleft",                         333, nullptr },
+  { "one",                               556, nullptr },
+  { "emacron",                           556, nullptr },
+  { "Odieresis",                         778, nullptr },
+  { "ucircumflex",                       556, nullptr },
+  { "bracketleft",                       278, nullptr },
+  { "Ugrave",                            722, nullptr },
+  { "quoteright",                        222, nullptr },
+  { "Udieresis",                         722, nullptr },
+  { "perthousand",                      1000, nullptr },
+  { "Ydieresis",                         667, nullptr },
+  { "umacron",                           556, nullptr },
+  { "abreve",                            556, nullptr },
+  { "Eacute",                            667, nullptr },
+  { "adieresis",                         556, nullptr },
+  { "egrave",                            556, nullptr },
+  { "edieresis",                         556, nullptr },
+  { "idieresis",                         278, nullptr },
+  { "Eth",                               722, nullptr },
+  { "ae",                                889, nullptr },
+  { "asterisk",                          389, nullptr },
+  { "odieresis",                         556, nullptr },
+  { "Uacute",                            722, nullptr },
+  { "ugrave",                            556, nullptr },
+  { "nine",                              556, nullptr },
+  { "five",                              556, nullptr },
+  { "udieresis",                         556, nullptr },
+  { "Zcaron",                            611, nullptr },
+  { "Scommaaccent",                      667, nullptr },
+  { "threequarters",                     834, nullptr },
+  { "guillemotright",                    556, nullptr },
+  { "Ccedilla",                          722, nullptr },
+  { "ydieresis",                         500, nullptr },
+  { "tilde",                             333, nullptr },
+  { "at",                               1015, nullptr },
+  { "eacute",                            556, nullptr },
+  { "underscore",                        556, nullptr },
+  { "Euro",                              556, nullptr },
+  { "Dcroat",                            722, nullptr },
+  { "multiply",                          584, nullptr },
+  { "zero",                              556, nullptr },
+  { "eth",                               556, nullptr },
+  { "Scedilla",                          667, nullptr },
+  { "Ograve",                            778, nullptr },
+  { "Racute",                            722, nullptr },
+  { "partialdiff",                       476, nullptr },
+  { "uacute",                            556, nullptr },
+  { "braceleft",                         334, nullptr },
+  { "Thorn",                             667, nullptr },
+  { "zcaron",                            500, nullptr },
+  { "scommaaccent",                      500, nullptr },
+  { "ccedilla",                          500, nullptr },
+  { "Dcaron",                            722, nullptr },
+  { "dcroat",                            556, nullptr },
+  { "Ocircumflex",                       778, nullptr },
+  { "Oacute",                            778, nullptr },
+  { "scedilla",                          500, nullptr },
+  { "ogonek",                            333, nullptr },
+  { "ograve",                            556, nullptr },
+  { "racute",                            333, nullptr },
+  { "Tcaron",                            611, nullptr },
+  { "Eogonek",                           667, nullptr },
+  { "thorn",                             556, nullptr },
+  { "degree",                            400, nullptr },
+  { "registered",                        737, nullptr },
+  { "radical",                           453, nullptr },
+  { "Aring",                             667, nullptr },
+  { "percent",                           889, nullptr },
+  { "six",                               556, nullptr },
+  { "paragraph",                         537, nullptr },
+  { "dcaron",                            643, nullptr },
+  { "Uogonek",                           722, nullptr },
+  { "two",                               556, nullptr },
+  { "summation",                         600, nullptr },
+  { "Igrave",                            278, nullptr },
+  { "Lacute",                            556, nullptr },
+  { "ocircumflex",                       556, nullptr },
+  { "oacute",                            556, nullptr },
+  { "Uring",                             722, nullptr },
+  { "Lcommaaccent",                      556, nullptr },
+  { "tcaron",                            317, nullptr },
+  { "eogonek",                           556, nullptr },
+  { "Delta",                             612, nullptr },
+  { "Ohungarumlaut",                     778, nullptr },
+  { "asciicircum",                       469, nullptr },
+  { "aring",                             556, nullptr },
+  { "grave",                             333, nullptr },
+  { "uogonek",                           556, nullptr },
+  { "bracketright",                      278, nullptr },
+  { "Iacute",                            278, nullptr },
+  { "ampersand",                         667, nullptr },
+  { "igrave",                            278, nullptr },
+  { "lacute",                            222, nullptr },
+  { "Ncaron",                            722, nullptr },
+  { "plus",                              584, nullptr },
+  { "uring",                             556, nullptr },
+  { "quotesinglbase",                    222, nullptr },
+  { "lcommaaccent",                      222, nullptr },
+  { "Yacute",                            667, nullptr },
+  { "ohungarumlaut",                     556, nullptr },
+  { "threesuperior",                     333, nullptr },
+  { "acute",                             333, nullptr },
+  { "section",                           556, nullptr },
+  { "dieresis",                          333, nullptr },
+  { "iacute",                            278, nullptr },
+  { "quotedblbase",                      333, nullptr },
+  { "ncaron",                            556, nullptr },
+  { "florin",                            556, nullptr },
+  { "yacute",                            500, nullptr },
+  { "Rcommaaccent",                      722, nullptr },
+  { "fi",                                500, nullptr },
+  { "fl",                                500, nullptr },
+  { "Acircumflex",                       667, nullptr },
+  { "Cacute",                            722, nullptr },
+  { "Icircumflex",                       278, nullptr },
+  { "guillemotleft",                     556, nullptr },
+  { "germandbls",                        611, nullptr },
+  { "Amacron",                           667, nullptr },
+  { "seven",                             556, nullptr },
+  { "Sacute",                            667, nullptr },
+  { "ordmasculine",                      365, nullptr },
+  { "dotlessi",                          278, nullptr },
+  { "sterling",                          556, nullptr },
+  { "notequal",                          549, nullptr },
+  { "Imacron",                           278, nullptr },
+  { "rcommaaccent",                      333, nullptr },
+  { "Zdotaccent",                        611, nullptr },
+  { "acircumflex",                       556, nullptr },
+  { "cacute",                            500, nullptr },
+  { "Ecaron",                            667, nullptr },
+  { "icircumflex",                       278, nullptr },
+  { "braceright",                        334, nullptr },
+  { "quotedblright",                     333, nullptr },
+  { "amacron",                           556, nullptr },
+  { "sacute",                            500, nullptr },
+  { "imacron",                           278, nullptr },
+  { "cent",                              556, nullptr },
+  { "currency",                          556, nullptr },
+  { "logicalnot",                        584, nullptr },
+  { "zdotaccent",                        500, nullptr },
+  { "Atilde",                            667, nullptr },
+  { "breve",                             333, nullptr },
+  { "bar",                               260, nullptr },
+  { "fraction",                          167, nullptr },
+  { "less",                              584, nullptr },
+  { "ecaron",                            556, nullptr },
+  { "guilsinglleft",                     333, nullptr },
+  { "exclam",                            278, nullptr },
+  { "period",                            278, nullptr },
+  { "Rcaron",                            722, nullptr },
+  { "Kcommaaccent",                      667, nullptr },
+  { "greater",                           584, nullptr },
+  { "atilde",                            556, nullptr },
+  { "brokenbar",                         260, nullptr },
+  { "quoteleft",                         222, nullptr },
+  { "Edotaccent",                        667, nullptr },
+  { "onesuperior",                       333, nullptr }
 };
 
 static BuiltinFontWidth symbolWidthsTab[] = {
-  { "bracketleftex",                     384, NULL },
-  { "alpha",                             631, NULL },
-  { "union",                             768, NULL },
-  { "infinity",                          713, NULL },
-  { "comma",                             250, NULL },
-  { "copyrightsans",                     790, NULL },
-  { "plusminus",                         549, NULL },
-  { "arrowup",                           603, NULL },
-  { "apple",                             790, NULL },
-  { "parenleftbt",                       384, NULL },
-  { "notelement",                        713, NULL },
-  { "colon",                             278, NULL },
-  { "beta",                              549, NULL },
-  { "braceleftbt",                       494, NULL },
-  { "Lambda",                            686, NULL },
-  { "Phi",                               763, NULL },
-  { "minus",                             549, NULL },
-  { "space",                             250, NULL },
-  { "Sigma",                             592, NULL },
-  { "approxequal",                       549, NULL },
-  { "minute",                            247, NULL },
-  { "circleplus",                        768, NULL },
-  { "Omicron",                           722, NULL },
-  { "three",                             500, NULL },
-  { "numbersign",                        500, NULL },
-  { "lambda",                            549, NULL },
-  { "phi",                               521, NULL },
-  { "aleph",                             823, NULL },
-  { "Tau",                               611, NULL },
-  { "spade",                             753, NULL },
-  { "logicaland",                        603, NULL },
-  { "sigma",                             603, NULL },
-  { "propersuperset",                    713, NULL },
-  { "omicron",                           549, NULL },
-  { "question",                          444, NULL },
-  { "equal",                             549, NULL },
-  { "Epsilon",                           611, NULL },
-  { "emptyset",                          823, NULL },
-  { "diamond",                           753, NULL },
-  { "four",                              500, NULL },
-  { "Mu",                                889, NULL },
-  { "parenlefttp",                       384, NULL },
-  { "club",                              753, NULL },
-  { "bullet",                            460, NULL },
-  { "Omega",                             768, NULL },
-  { "tau",                               439, NULL },
-  { "Upsilon",                           690, NULL },
-  { "bracelefttp",                       494, NULL },
-  { "heart",                             753, NULL },
-  { "divide",                            549, NULL },
-  { "epsilon",                           439, NULL },
-  { "logicalor",                         603, NULL },
-  { "parenleftex",                       384, NULL },
-  { "greaterequal",                      549, NULL },
-  { "mu",                                576, NULL },
-  { "Nu",                                722, NULL },
-  { "therefore",                         863, NULL },
-  { "notsubset",                         713, NULL },
-  { "omega",                             686, NULL },
-  { "semicolon",                         278, NULL },
-  { "element",                           713, NULL },
-  { "upsilon",                           576, NULL },
-  { "existential",                       549, NULL },
-  { "integralbt",                        686, NULL },
-  { "lessequal",                         549, NULL },
-  { "phi1",                              603, NULL },
-  { "lozenge",                           494, NULL },
-  { "trademarkserif",                    890, NULL },
-  { "parenright",                        333, NULL },
-  { "reflexsuperset",                    713, NULL },
-  { "sigma1",                            439, NULL },
-  { "nu",                                521, NULL },
-  { "Gamma",                             603, NULL },
-  { "angleright",                        329, NULL },
-  { "ellipsis",                         1000, NULL },
-  { "Rho",                               556, NULL },
-  { "parenrightbt",                      384, NULL },
-  { "radicalex",                         500, NULL },
-  { "eight",                             500, NULL },
-  { "angleleft",                         329, NULL },
-  { "arrowdbldown",                      603, NULL },
-  { "congruent",                         549, NULL },
-  { "Theta",                             741, NULL },
-  { "intersection",                      768, NULL },
-  { "Pi",                                768, NULL },
-  { "slash",                             278, NULL },
-  { "registerserif",                     790, NULL },
-  { "parenleft",                         333, NULL },
-  { "one",                               500, NULL },
-  { "gamma",                             411, NULL },
-  { "bracketleft",                       333, NULL },
-  { "rho",                               549, NULL },
-  { "circlemultiply",                    768, NULL },
-  { "Chi",                               722, NULL },
-  { "theta",                             521, NULL },
-  { "pi",                                549, NULL },
-  { "integraltp",                        686, NULL },
-  { "Eta",                               722, NULL },
-  { "product",                           823, NULL },
-  { "nine",                              500, NULL },
-  { "five",                              500, NULL },
-  { "propersubset",                      713, NULL },
-  { "bracketrightbt",                    384, NULL },
-  { "trademarksans",                     786, NULL },
-  { "dotmath",                           250, NULL },
-  { "integralex",                        686, NULL },
-  { "chi",                               549, NULL },
-  { "parenrighttp",                      384, NULL },
-  { "eta",                               603, NULL },
-  { "underscore",                        500, NULL },
-  { "Euro",                              750, NULL },
-  { "multiply",                          549, NULL },
-  { "zero",                              500, NULL },
-  { "partialdiff",                       494, NULL },
-  { "angle",                             768, NULL },
-  { "arrowdblleft",                      987, NULL },
-  { "braceleft",                         480, NULL },
-  { "parenrightex",                      384, NULL },
-  { "Rfraktur",                          795, NULL },
-  { "Zeta",                              611, NULL },
-  { "braceex",                           494, NULL },
-  { "arrowdblup",                        603, NULL },
-  { "arrowdown",                         603, NULL },
-  { "Ifraktur",                          686, NULL },
-  { "degree",                            400, NULL },
-  { "Iota",                              333, NULL },
-  { "perpendicular",                     658, NULL },
-  { "radical",                           549, NULL },
-  { "asteriskmath",                      500, NULL },
-  { "percent",                           833, NULL },
-  { "zeta",                              494, NULL },
-  { "six",                               500, NULL },
-  { "two",                               500, NULL },
-  { "weierstrass",                       987, NULL },
-  { "summation",                         713, NULL },
-  { "bracketrighttp",                    384, NULL },
-  { "carriagereturn",                    658, NULL },
-  { "suchthat",                          439, NULL },
-  { "arrowvertex",                       603, NULL },
-  { "Delta",                             612, NULL },
-  { "iota",                              329, NULL },
-  { "arrowhorizex",                     1000, NULL },
-  { "bracketrightex",                    384, NULL },
-  { "bracketright",                      333, NULL },
-  { "ampersand",                         778, NULL },
-  { "plus",                              549, NULL },
-  { "proportional",                      713, NULL },
-  { "delta",                             494, NULL },
-  { "copyrightserif",                    790, NULL },
-  { "bracerightmid",                     494, NULL },
-  { "arrowleft",                         987, NULL },
-  { "second",                            411, NULL },
-  { "arrowdblboth",                     1042, NULL },
-  { "florin",                            500, NULL },
-  { "Psi",                               795, NULL },
-  { "bracerightbt",                      494, NULL },
-  { "bracketleftbt",                     384, NULL },
-  { "seven",                             500, NULL },
-  { "braceleftmid",                      494, NULL },
-  { "notequal",                          549, NULL },
-  { "psi",                               686, NULL },
-  { "equivalence",                       549, NULL },
-  { "universal",                         713, NULL },
-  { "arrowdblright",                     987, NULL },
-  { "braceright",                        480, NULL },
-  { "reflexsubset",                      713, NULL },
-  { "Xi",                                645, NULL },
-  { "theta1",                            631, NULL },
-  { "logicalnot",                        713, NULL },
-  { "Kappa",                             722, NULL },
-  { "similar",                           549, NULL },
-  { "bar",                               200, NULL },
-  { "fraction",                          167, NULL },
-  { "less",                              549, NULL },
-  { "registersans",                      790, NULL },
-  { "omega1",                            713, NULL },
-  { "exclam",                            333, NULL },
-  { "Upsilon1",                          620, NULL },
-  { "bracerighttp",                      494, NULL },
-  { "xi",                                493, NULL },
-  { "period",                            250, NULL },
-  { "Alpha",                             722, NULL },
-  { "arrowright",                        987, NULL },
-  { "greater",                           549, NULL },
-  { "bracketlefttp",                     384, NULL },
-  { "kappa",                             549, NULL },
-  { "gradient",                          713, NULL },
-  { "integral",                          274, NULL },
-  { "arrowboth",                        1042, NULL },
-  { "Beta",                              667, NULL }
+  { "bracketleftex",                     384, nullptr },
+  { "alpha",                             631, nullptr },
+  { "union",                             768, nullptr },
+  { "infinity",                          713, nullptr },
+  { "comma",                             250, nullptr },
+  { "copyrightsans",                     790, nullptr },
+  { "plusminus",                         549, nullptr },
+  { "arrowup",                           603, nullptr },
+  { "apple",                             790, nullptr },
+  { "parenleftbt",                       384, nullptr },
+  { "notelement",                        713, nullptr },
+  { "colon",                             278, nullptr },
+  { "beta",                              549, nullptr },
+  { "braceleftbt",                       494, nullptr },
+  { "Lambda",                            686, nullptr },
+  { "Phi",                               763, nullptr },
+  { "minus",                             549, nullptr },
+  { "space",                             250, nullptr },
+  { "Sigma",                             592, nullptr },
+  { "approxequal",                       549, nullptr },
+  { "minute",                            247, nullptr },
+  { "circleplus",                        768, nullptr },
+  { "Omicron",                           722, nullptr },
+  { "three",                             500, nullptr },
+  { "numbersign",                        500, nullptr },
+  { "lambda",                            549, nullptr },
+  { "phi",                               521, nullptr },
+  { "aleph",                             823, nullptr },
+  { "Tau",                               611, nullptr },
+  { "spade",                             753, nullptr },
+  { "logicaland",                        603, nullptr },
+  { "sigma",                             603, nullptr },
+  { "propersuperset",                    713, nullptr },
+  { "omicron",                           549, nullptr },
+  { "question",                          444, nullptr },
+  { "equal",                             549, nullptr },
+  { "Epsilon",                           611, nullptr },
+  { "emptyset",                          823, nullptr },
+  { "diamond",                           753, nullptr },
+  { "four",                              500, nullptr },
+  { "Mu",                                889, nullptr },
+  { "parenlefttp",                       384, nullptr },
+  { "club",                              753, nullptr },
+  { "bullet",                            460, nullptr },
+  { "Omega",                             768, nullptr },
+  { "tau",                               439, nullptr },
+  { "Upsilon",                           690, nullptr },
+  { "bracelefttp",                       494, nullptr },
+  { "heart",                             753, nullptr },
+  { "divide",                            549, nullptr },
+  { "epsilon",                           439, nullptr },
+  { "logicalor",                         603, nullptr },
+  { "parenleftex",                       384, nullptr },
+  { "greaterequal",                      549, nullptr },
+  { "mu",                                576, nullptr },
+  { "Nu",                                722, nullptr },
+  { "therefore",                         863, nullptr },
+  { "notsubset",                         713, nullptr },
+  { "omega",                             686, nullptr },
+  { "semicolon",                         278, nullptr },
+  { "element",                           713, nullptr },
+  { "upsilon",                           576, nullptr },
+  { "existential",                       549, nullptr },
+  { "integralbt",                        686, nullptr },
+  { "lessequal",                         549, nullptr },
+  { "phi1",                              603, nullptr },
+  { "lozenge",                           494, nullptr },
+  { "trademarkserif",                    890, nullptr },
+  { "parenright",                        333, nullptr },
+  { "reflexsuperset",                    713, nullptr },
+  { "sigma1",                            439, nullptr },
+  { "nu",                                521, nullptr },
+  { "Gamma",                             603, nullptr },
+  { "angleright",                        329, nullptr },
+  { "ellipsis",                         1000, nullptr },
+  { "Rho",                               556, nullptr },
+  { "parenrightbt",                      384, nullptr },
+  { "radicalex",                         500, nullptr },
+  { "eight",                             500, nullptr },
+  { "angleleft",                         329, nullptr },
+  { "arrowdbldown",                      603, nullptr },
+  { "congruent",                         549, nullptr },
+  { "Theta",                             741, nullptr },
+  { "intersection",                      768, nullptr },
+  { "Pi",                                768, nullptr },
+  { "slash",                             278, nullptr },
+  { "registerserif",                     790, nullptr },
+  { "parenleft",                         333, nullptr },
+  { "one",                               500, nullptr },
+  { "gamma",                             411, nullptr },
+  { "bracketleft",                       333, nullptr },
+  { "rho",                               549, nullptr },
+  { "circlemultiply",                    768, nullptr },
+  { "Chi",                               722, nullptr },
+  { "theta",                             521, nullptr },
+  { "pi",                                549, nullptr },
+  { "integraltp",                        686, nullptr },
+  { "Eta",                               722, nullptr },
+  { "product",                           823, nullptr },
+  { "nine",                              500, nullptr },
+  { "five",                              500, nullptr },
+  { "propersubset",                      713, nullptr },
+  { "bracketrightbt",                    384, nullptr },
+  { "trademarksans",                     786, nullptr },
+  { "dotmath",                           250, nullptr },
+  { "integralex",                        686, nullptr },
+  { "chi",                               549, nullptr },
+  { "parenrighttp",                      384, nullptr },
+  { "eta",                               603, nullptr },
+  { "underscore",                        500, nullptr },
+  { "Euro",                              750, nullptr },
+  { "multiply",                          549, nullptr },
+  { "zero",                              500, nullptr },
+  { "partialdiff",                       494, nullptr },
+  { "angle",                             768, nullptr },
+  { "arrowdblleft",                      987, nullptr },
+  { "braceleft",                         480, nullptr },
+  { "parenrightex",                      384, nullptr },
+  { "Rfraktur",                          795, nullptr },
+  { "Zeta",                              611, nullptr },
+  { "braceex",                           494, nullptr },
+  { "arrowdblup",                        603, nullptr },
+  { "arrowdown",                         603, nullptr },
+  { "Ifraktur",                          686, nullptr },
+  { "degree",                            400, nullptr },
+  { "Iota",                              333, nullptr },
+  { "perpendicular",                     658, nullptr },
+  { "radical",                           549, nullptr },
+  { "asteriskmath",                      500, nullptr },
+  { "percent",                           833, nullptr },
+  { "zeta",                              494, nullptr },
+  { "six",                               500, nullptr },
+  { "two",                               500, nullptr },
+  { "weierstrass",                       987, nullptr },
+  { "summation",                         713, nullptr },
+  { "bracketrighttp",                    384, nullptr },
+  { "carriagereturn",                    658, nullptr },
+  { "suchthat",                          439, nullptr },
+  { "arrowvertex",                       603, nullptr },
+  { "Delta",                             612, nullptr },
+  { "iota",                              329, nullptr },
+  { "arrowhorizex",                     1000, nullptr },
+  { "bracketrightex",                    384, nullptr },
+  { "bracketright",                      333, nullptr },
+  { "ampersand",                         778, nullptr },
+  { "plus",                              549, nullptr },
+  { "proportional",                      713, nullptr },
+  { "delta",                             494, nullptr },
+  { "copyrightserif",                    790, nullptr },
+  { "bracerightmid",                     494, nullptr },
+  { "arrowleft",                         987, nullptr },
+  { "second",                            411, nullptr },
+  { "arrowdblboth",                     1042, nullptr },
+  { "florin",                            500, nullptr },
+  { "Psi",                               795, nullptr },
+  { "bracerightbt",                      494, nullptr },
+  { "bracketleftbt",                     384, nullptr },
+  { "seven",                             500, nullptr },
+  { "braceleftmid",                      494, nullptr },
+  { "notequal",                          549, nullptr },
+  { "psi",                               686, nullptr },
+  { "equivalence",                       549, nullptr },
+  { "universal",                         713, nullptr },
+  { "arrowdblright",                     987, nullptr },
+  { "braceright",                        480, nullptr },
+  { "reflexsubset",                      713, nullptr },
+  { "Xi",                                645, nullptr },
+  { "theta1",                            631, nullptr },
+  { "logicalnot",                        713, nullptr },
+  { "Kappa",                             722, nullptr },
+  { "similar",                           549, nullptr },
+  { "bar",                               200, nullptr },
+  { "fraction",                          167, nullptr },
+  { "less",                              549, nullptr },
+  { "registersans",                      790, nullptr },
+  { "omega1",                            713, nullptr },
+  { "exclam",                            333, nullptr },
+  { "Upsilon1",                          620, nullptr },
+  { "bracerighttp",                      494, nullptr },
+  { "xi",                                493, nullptr },
+  { "period",                            250, nullptr },
+  { "Alpha",                             722, nullptr },
+  { "arrowright",                        987, nullptr },
+  { "greater",                           549, nullptr },
+  { "bracketlefttp",                     384, nullptr },
+  { "kappa",                             549, nullptr },
+  { "gradient",                          713, nullptr },
+  { "integral",                          274, nullptr },
+  { "arrowboth",                        1042, nullptr },
+  { "Beta",                              667, nullptr }
 };
 
 static BuiltinFontWidth timesBoldWidthsTab[] = {
-  { "Ntilde",                            722, NULL },
-  { "rcaron",                            444, NULL },
-  { "kcommaaccent",                      556, NULL },
-  { "Ncommaaccent",                      722, NULL },
-  { "Zacute",                            667, NULL },
-  { "comma",                             250, NULL },
-  { "cedilla",                           333, NULL },
-  { "plusminus",                         570, NULL },
-  { "circumflex",                        333, NULL },
-  { "dotaccent",                         333, NULL },
-  { "edotaccent",                        444, NULL },
-  { "asciitilde",                        520, NULL },
-  { "colon",                             333, NULL },
-  { "onehalf",                           750, NULL },
-  { "dollar",                            500, NULL },
-  { "Lcaron",                            667, NULL },
-  { "ntilde",                            556, NULL },
-  { "Aogonek",                           722, NULL },
-  { "ncommaaccent",                      556, NULL },
-  { "minus",                             570, NULL },
-  { "Iogonek",                           389, NULL },
-  { "zacute",                            444, NULL },
-  { "yen",                               500, NULL },
-  { "space",                             250, NULL },
-  { "Omacron",                           778, NULL },
-  { "questiondown",                      500, NULL },
-  { "emdash",                           1000, NULL },
-  { "Agrave",                            722, NULL },
-  { "three",                             500, NULL },
-  { "numbersign",                        500, NULL },
-  { "lcaron",                            394, NULL },
-  { "A",                                 722, NULL },
-  { "B",                                 667, NULL },
-  { "C",                                 722, NULL },
-  { "aogonek",                           500, NULL },
-  { "D",                                 722, NULL },
-  { "E",                                 667, NULL },
-  { "onequarter",                        750, NULL },
-  { "F",                                 611, NULL },
-  { "G",                                 778, NULL },
-  { "H",                                 778, NULL },
-  { "I",                                 389, NULL },
-  { "J",                                 500, NULL },
-  { "K",                                 778, NULL },
-  { "iogonek",                           278, NULL },
-  { "backslash",                         278, NULL },
-  { "L",                                 667, NULL },
-  { "periodcentered",                    250, NULL },
-  { "M",                                 944, NULL },
-  { "N",                                 722, NULL },
-  { "omacron",                           500, NULL },
-  { "Tcommaaccent",                      667, NULL },
-  { "O",                                 778, NULL },
-  { "P",                                 611, NULL },
-  { "Q",                                 778, NULL },
-  { "Uhungarumlaut",                     722, NULL },
-  { "R",                                 722, NULL },
-  { "Aacute",                            722, NULL },
-  { "caron",                             333, NULL },
-  { "S",                                 556, NULL },
-  { "T",                                 667, NULL },
-  { "U",                                 722, NULL },
-  { "agrave",                            500, NULL },
-  { "V",                                 722, NULL },
-  { "W",                                1000, NULL },
-  { "X",                                 722, NULL },
-  { "question",                          500, NULL },
-  { "equal",                             570, NULL },
-  { "Y",                                 722, NULL },
-  { "Z",                                 667, NULL },
-  { "four",                              500, NULL },
-  { "a",                                 500, NULL },
-  { "Gcommaaccent",                      778, NULL },
-  { "b",                                 556, NULL },
-  { "c",                                 444, NULL },
-  { "d",                                 556, NULL },
-  { "e",                                 444, NULL },
-  { "f",                                 333, NULL },
-  { "g",                                 500, NULL },
-  { "bullet",                            350, NULL },
-  { "h",                                 556, NULL },
-  { "i",                                 278, NULL },
-  { "Oslash",                            778, NULL },
-  { "dagger",                            500, NULL },
-  { "j",                                 333, NULL },
-  { "k",                                 556, NULL },
-  { "l",                                 278, NULL },
-  { "m",                                 833, NULL },
-  { "n",                                 556, NULL },
-  { "tcommaaccent",                      333, NULL },
-  { "o",                                 500, NULL },
-  { "ordfeminine",                       300, NULL },
-  { "ring",                              333, NULL },
-  { "p",                                 556, NULL },
-  { "q",                                 556, NULL },
-  { "uhungarumlaut",                     556, NULL },
-  { "r",                                 444, NULL },
-  { "twosuperior",                       300, NULL },
-  { "aacute",                            500, NULL },
-  { "s",                                 389, NULL },
-  { "OE",                               1000, NULL },
-  { "t",                                 333, NULL },
-  { "divide",                            570, NULL },
-  { "u",                                 556, NULL },
-  { "Ccaron",                            722, NULL },
-  { "v",                                 500, NULL },
-  { "w",                                 722, NULL },
-  { "x",                                 500, NULL },
-  { "y",                                 500, NULL },
-  { "z",                                 444, NULL },
-  { "Gbreve",                            778, NULL },
-  { "commaaccent",                       250, NULL },
-  { "hungarumlaut",                      333, NULL },
-  { "Idotaccent",                        389, NULL },
-  { "Nacute",                            722, NULL },
-  { "quotedbl",                          555, NULL },
-  { "gcommaaccent",                      500, NULL },
-  { "mu",                                556, NULL },
-  { "greaterequal",                      549, NULL },
-  { "Scaron",                            556, NULL },
-  { "Lslash",                            667, NULL },
-  { "semicolon",                         333, NULL },
-  { "oslash",                            500, NULL },
-  { "lessequal",                         549, NULL },
-  { "lozenge",                           494, NULL },
-  { "parenright",                        333, NULL },
-  { "ccaron",                            444, NULL },
-  { "Ecircumflex",                       667, NULL },
-  { "gbreve",                            500, NULL },
-  { "trademark",                        1000, NULL },
-  { "daggerdbl",                         500, NULL },
-  { "nacute",                            556, NULL },
-  { "macron",                            333, NULL },
-  { "Otilde",                            778, NULL },
-  { "Emacron",                           667, NULL },
-  { "ellipsis",                         1000, NULL },
-  { "scaron",                            389, NULL },
-  { "AE",                               1000, NULL },
-  { "Ucircumflex",                       722, NULL },
-  { "lslash",                            278, NULL },
-  { "quotedblleft",                      500, NULL },
-  { "guilsinglright",                    333, NULL },
-  { "hyphen",                            333, NULL },
-  { "quotesingle",                       278, NULL },
-  { "eight",                             500, NULL },
-  { "exclamdown",                        333, NULL },
-  { "endash",                            500, NULL },
-  { "oe",                                722, NULL },
-  { "Abreve",                            722, NULL },
-  { "Umacron",                           722, NULL },
-  { "ecircumflex",                       444, NULL },
-  { "Adieresis",                         722, NULL },
-  { "copyright",                         747, NULL },
-  { "Egrave",                            667, NULL },
-  { "slash",                             278, NULL },
-  { "Edieresis",                         667, NULL },
-  { "otilde",                            500, NULL },
-  { "Idieresis",                         389, NULL },
-  { "parenleft",                         333, NULL },
-  { "one",                               500, NULL },
-  { "emacron",                           444, NULL },
-  { "Odieresis",                         778, NULL },
-  { "ucircumflex",                       556, NULL },
-  { "bracketleft",                       333, NULL },
-  { "Ugrave",                            722, NULL },
-  { "quoteright",                        333, NULL },
-  { "Udieresis",                         722, NULL },
-  { "perthousand",                      1000, NULL },
-  { "Ydieresis",                         722, NULL },
-  { "umacron",                           556, NULL },
-  { "abreve",                            500, NULL },
-  { "Eacute",                            667, NULL },
-  { "adieresis",                         500, NULL },
-  { "egrave",                            444, NULL },
-  { "edieresis",                         444, NULL },
-  { "idieresis",                         278, NULL },
-  { "Eth",                               722, NULL },
-  { "ae",                                722, NULL },
-  { "asterisk",                          500, NULL },
-  { "odieresis",                         500, NULL },
-  { "Uacute",                            722, NULL },
-  { "ugrave",                            556, NULL },
-  { "nine",                              500, NULL },
-  { "five",                              500, NULL },
-  { "udieresis",                         556, NULL },
-  { "Zcaron",                            667, NULL },
-  { "Scommaaccent",                      556, NULL },
-  { "threequarters",                     750, NULL },
-  { "guillemotright",                    500, NULL },
-  { "Ccedilla",                          722, NULL },
-  { "ydieresis",                         500, NULL },
-  { "tilde",                             333, NULL },
-  { "at",                                930, NULL },
-  { "eacute",                            444, NULL },
-  { "underscore",                        500, NULL },
-  { "Euro",                              500, NULL },
-  { "Dcroat",                            722, NULL },
-  { "multiply",                          570, NULL },
-  { "zero",                              500, NULL },
-  { "eth",                               500, NULL },
-  { "Scedilla",                          556, NULL },
-  { "Ograve",                            778, NULL },
-  { "Racute",                            722, NULL },
-  { "partialdiff",                       494, NULL },
-  { "uacute",                            556, NULL },
-  { "braceleft",                         394, NULL },
-  { "Thorn",                             611, NULL },
-  { "zcaron",                            444, NULL },
-  { "scommaaccent",                      389, NULL },
-  { "ccedilla",                          444, NULL },
-  { "Dcaron",                            722, NULL },
-  { "dcroat",                            556, NULL },
-  { "Ocircumflex",                       778, NULL },
-  { "Oacute",                            778, NULL },
-  { "scedilla",                          389, NULL },
-  { "ogonek",                            333, NULL },
-  { "ograve",                            500, NULL },
-  { "racute",                            444, NULL },
-  { "Tcaron",                            667, NULL },
-  { "Eogonek",                           667, NULL },
-  { "thorn",                             556, NULL },
-  { "degree",                            400, NULL },
-  { "registered",                        747, NULL },
-  { "radical",                           549, NULL },
-  { "Aring",                             722, NULL },
-  { "percent",                          1000, NULL },
-  { "six",                               500, NULL },
-  { "paragraph",                         540, NULL },
-  { "dcaron",                            672, NULL },
-  { "Uogonek",                           722, NULL },
-  { "two",                               500, NULL },
-  { "summation",                         600, NULL },
-  { "Igrave",                            389, NULL },
-  { "Lacute",                            667, NULL },
-  { "ocircumflex",                       500, NULL },
-  { "oacute",                            500, NULL },
-  { "Uring",                             722, NULL },
-  { "Lcommaaccent",                      667, NULL },
-  { "tcaron",                            416, NULL },
-  { "eogonek",                           444, NULL },
-  { "Delta",                             612, NULL },
-  { "Ohungarumlaut",                     778, NULL },
-  { "asciicircum",                       581, NULL },
-  { "aring",                             500, NULL },
-  { "grave",                             333, NULL },
-  { "uogonek",                           556, NULL },
-  { "bracketright",                      333, NULL },
-  { "Iacute",                            389, NULL },
-  { "ampersand",                         833, NULL },
-  { "igrave",                            278, NULL },
-  { "lacute",                            278, NULL },
-  { "Ncaron",                            722, NULL },
-  { "plus",                              570, NULL },
-  { "uring",                             556, NULL },
-  { "quotesinglbase",                    333, NULL },
-  { "lcommaaccent",                      278, NULL },
-  { "Yacute",                            722, NULL },
-  { "ohungarumlaut",                     500, NULL },
-  { "threesuperior",                     300, NULL },
-  { "acute",                             333, NULL },
-  { "section",                           500, NULL },
-  { "dieresis",                          333, NULL },
-  { "iacute",                            278, NULL },
-  { "quotedblbase",                      500, NULL },
-  { "ncaron",                            556, NULL },
-  { "florin",                            500, NULL },
-  { "yacute",                            500, NULL },
-  { "Rcommaaccent",                      722, NULL },
-  { "fi",                                556, NULL },
-  { "fl",                                556, NULL },
-  { "Acircumflex",                       722, NULL },
-  { "Cacute",                            722, NULL },
-  { "Icircumflex",                       389, NULL },
-  { "guillemotleft",                     500, NULL },
-  { "germandbls",                        556, NULL },
-  { "Amacron",                           722, NULL },
-  { "seven",                             500, NULL },
-  { "Sacute",                            556, NULL },
-  { "ordmasculine",                      330, NULL },
-  { "dotlessi",                          278, NULL },
-  { "sterling",                          500, NULL },
-  { "notequal",                          549, NULL },
-  { "Imacron",                           389, NULL },
-  { "rcommaaccent",                      444, NULL },
-  { "Zdotaccent",                        667, NULL },
-  { "acircumflex",                       500, NULL },
-  { "cacute",                            444, NULL },
-  { "Ecaron",                            667, NULL },
-  { "icircumflex",                       278, NULL },
-  { "braceright",                        394, NULL },
-  { "quotedblright",                     500, NULL },
-  { "amacron",                           500, NULL },
-  { "sacute",                            389, NULL },
-  { "imacron",                           278, NULL },
-  { "cent",                              500, NULL },
-  { "currency",                          500, NULL },
-  { "logicalnot",                        570, NULL },
-  { "zdotaccent",                        444, NULL },
-  { "Atilde",                            722, NULL },
-  { "breve",                             333, NULL },
-  { "bar",                               220, NULL },
-  { "fraction",                          167, NULL },
-  { "less",                              570, NULL },
-  { "ecaron",                            444, NULL },
-  { "guilsinglleft",                     333, NULL },
-  { "exclam",                            333, NULL },
-  { "period",                            250, NULL },
-  { "Rcaron",                            722, NULL },
-  { "Kcommaaccent",                      778, NULL },
-  { "greater",                           570, NULL },
-  { "atilde",                            500, NULL },
-  { "brokenbar",                         220, NULL },
-  { "quoteleft",                         333, NULL },
-  { "Edotaccent",                        667, NULL },
-  { "onesuperior",                       300, NULL }
+  { "Ntilde",                            722, nullptr },
+  { "rcaron",                            444, nullptr },
+  { "kcommaaccent",                      556, nullptr },
+  { "Ncommaaccent",                      722, nullptr },
+  { "Zacute",                            667, nullptr },
+  { "comma",                             250, nullptr },
+  { "cedilla",                           333, nullptr },
+  { "plusminus",                         570, nullptr },
+  { "circumflex",                        333, nullptr },
+  { "dotaccent",                         333, nullptr },
+  { "edotaccent",                        444, nullptr },
+  { "asciitilde",                        520, nullptr },
+  { "colon",                             333, nullptr },
+  { "onehalf",                           750, nullptr },
+  { "dollar",                            500, nullptr },
+  { "Lcaron",                            667, nullptr },
+  { "ntilde",                            556, nullptr },
+  { "Aogonek",                           722, nullptr },
+  { "ncommaaccent",                      556, nullptr },
+  { "minus",                             570, nullptr },
+  { "Iogonek",                           389, nullptr },
+  { "zacute",                            444, nullptr },
+  { "yen",                               500, nullptr },
+  { "space",                             250, nullptr },
+  { "Omacron",                           778, nullptr },
+  { "questiondown",                      500, nullptr },
+  { "emdash",                           1000, nullptr },
+  { "Agrave",                            722, nullptr },
+  { "three",                             500, nullptr },
+  { "numbersign",                        500, nullptr },
+  { "lcaron",                            394, nullptr },
+  { "A",                                 722, nullptr },
+  { "B",                                 667, nullptr },
+  { "C",                                 722, nullptr },
+  { "aogonek",                           500, nullptr },
+  { "D",                                 722, nullptr },
+  { "E",                                 667, nullptr },
+  { "onequarter",                        750, nullptr },
+  { "F",                                 611, nullptr },
+  { "G",                                 778, nullptr },
+  { "H",                                 778, nullptr },
+  { "I",                                 389, nullptr },
+  { "J",                                 500, nullptr },
+  { "K",                                 778, nullptr },
+  { "iogonek",                           278, nullptr },
+  { "backslash",                         278, nullptr },
+  { "L",                                 667, nullptr },
+  { "periodcentered",                    250, nullptr },
+  { "M",                                 944, nullptr },
+  { "N",                                 722, nullptr },
+  { "omacron",                           500, nullptr },
+  { "Tcommaaccent",                      667, nullptr },
+  { "O",                                 778, nullptr },
+  { "P",                                 611, nullptr },
+  { "Q",                                 778, nullptr },
+  { "Uhungarumlaut",                     722, nullptr },
+  { "R",                                 722, nullptr },
+  { "Aacute",                            722, nullptr },
+  { "caron",                             333, nullptr },
+  { "S",                                 556, nullptr },
+  { "T",                                 667, nullptr },
+  { "U",                                 722, nullptr },
+  { "agrave",                            500, nullptr },
+  { "V",                                 722, nullptr },
+  { "W",                                1000, nullptr },
+  { "X",                                 722, nullptr },
+  { "question",                          500, nullptr },
+  { "equal",                             570, nullptr },
+  { "Y",                                 722, nullptr },
+  { "Z",                                 667, nullptr },
+  { "four",                              500, nullptr },
+  { "a",                                 500, nullptr },
+  { "Gcommaaccent",                      778, nullptr },
+  { "b",                                 556, nullptr },
+  { "c",                                 444, nullptr },
+  { "d",                                 556, nullptr },
+  { "e",                                 444, nullptr },
+  { "f",                                 333, nullptr },
+  { "g",                                 500, nullptr },
+  { "bullet",                            350, nullptr },
+  { "h",                                 556, nullptr },
+  { "i",                                 278, nullptr },
+  { "Oslash",                            778, nullptr },
+  { "dagger",                            500, nullptr },
+  { "j",                                 333, nullptr },
+  { "k",                                 556, nullptr },
+  { "l",                                 278, nullptr },
+  { "m",                                 833, nullptr },
+  { "n",                                 556, nullptr },
+  { "tcommaaccent",                      333, nullptr },
+  { "o",                                 500, nullptr },
+  { "ordfeminine",                       300, nullptr },
+  { "ring",                              333, nullptr },
+  { "p",                                 556, nullptr },
+  { "q",                                 556, nullptr },
+  { "uhungarumlaut",                     556, nullptr },
+  { "r",                                 444, nullptr },
+  { "twosuperior",                       300, nullptr },
+  { "aacute",                            500, nullptr },
+  { "s",                                 389, nullptr },
+  { "OE",                               1000, nullptr },
+  { "t",                                 333, nullptr },
+  { "divide",                            570, nullptr },
+  { "u",                                 556, nullptr },
+  { "Ccaron",                            722, nullptr },
+  { "v",                                 500, nullptr },
+  { "w",                                 722, nullptr },
+  { "x",                                 500, nullptr },
+  { "y",                                 500, nullptr },
+  { "z",                                 444, nullptr },
+  { "Gbreve",                            778, nullptr },
+  { "commaaccent",                       250, nullptr },
+  { "hungarumlaut",                      333, nullptr },
+  { "Idotaccent",                        389, nullptr },
+  { "Nacute",                            722, nullptr },
+  { "quotedbl",                          555, nullptr },
+  { "gcommaaccent",                      500, nullptr },
+  { "mu",                                556, nullptr },
+  { "greaterequal",                      549, nullptr },
+  { "Scaron",                            556, nullptr },
+  { "Lslash",                            667, nullptr },
+  { "semicolon",                         333, nullptr },
+  { "oslash",                            500, nullptr },
+  { "lessequal",                         549, nullptr },
+  { "lozenge",                           494, nullptr },
+  { "parenright",                        333, nullptr },
+  { "ccaron",                            444, nullptr },
+  { "Ecircumflex",                       667, nullptr },
+  { "gbreve",                            500, nullptr },
+  { "trademark",                        1000, nullptr },
+  { "daggerdbl",                         500, nullptr },
+  { "nacute",                            556, nullptr },
+  { "macron",                            333, nullptr },
+  { "Otilde",                            778, nullptr },
+  { "Emacron",                           667, nullptr },
+  { "ellipsis",                         1000, nullptr },
+  { "scaron",                            389, nullptr },
+  { "AE",                               1000, nullptr },
+  { "Ucircumflex",                       722, nullptr },
+  { "lslash",                            278, nullptr },
+  { "quotedblleft",                      500, nullptr },
+  { "guilsinglright",                    333, nullptr },
+  { "hyphen",                            333, nullptr },
+  { "quotesingle",                       278, nullptr },
+  { "eight",                             500, nullptr },
+  { "exclamdown",                        333, nullptr },
+  { "endash",                            500, nullptr },
+  { "oe",                                722, nullptr },
+  { "Abreve",                            722, nullptr },
+  { "Umacron",                           722, nullptr },
+  { "ecircumflex",                       444, nullptr },
+  { "Adieresis",                         722, nullptr },
+  { "copyright",                         747, nullptr },
+  { "Egrave",                            667, nullptr },
+  { "slash",                             278, nullptr },
+  { "Edieresis",                         667, nullptr },
+  { "otilde",                            500, nullptr },
+  { "Idieresis",                         389, nullptr },
+  { "parenleft",                         333, nullptr },
+  { "one",                               500, nullptr },
+  { "emacron",                           444, nullptr },
+  { "Odieresis",                         778, nullptr },
+  { "ucircumflex",                       556, nullptr },
+  { "bracketleft",                       333, nullptr },
+  { "Ugrave",                            722, nullptr },
+  { "quoteright",                        333, nullptr },
+  { "Udieresis",                         722, nullptr },
+  { "perthousand",                      1000, nullptr },
+  { "Ydieresis",                         722, nullptr },
+  { "umacron",                           556, nullptr },
+  { "abreve",                            500, nullptr },
+  { "Eacute",                            667, nullptr },
+  { "adieresis",                         500, nullptr },
+  { "egrave",                            444, nullptr },
+  { "edieresis",                         444, nullptr },
+  { "idieresis",                         278, nullptr },
+  { "Eth",                               722, nullptr },
+  { "ae",                                722, nullptr },
+  { "asterisk",                          500, nullptr },
+  { "odieresis",                         500, nullptr },
+  { "Uacute",                            722, nullptr },
+  { "ugrave",                            556, nullptr },
+  { "nine",                              500, nullptr },
+  { "five",                              500, nullptr },
+  { "udieresis",                         556, nullptr },
+  { "Zcaron",                            667, nullptr },
+  { "Scommaaccent",                      556, nullptr },
+  { "threequarters",                     750, nullptr },
+  { "guillemotright",                    500, nullptr },
+  { "Ccedilla",                          722, nullptr },
+  { "ydieresis",                         500, nullptr },
+  { "tilde",                             333, nullptr },
+  { "at",                                930, nullptr },
+  { "eacute",                            444, nullptr },
+  { "underscore",                        500, nullptr },
+  { "Euro",                              500, nullptr },
+  { "Dcroat",                            722, nullptr },
+  { "multiply",                          570, nullptr },
+  { "zero",                              500, nullptr },
+  { "eth",                               500, nullptr },
+  { "Scedilla",                          556, nullptr },
+  { "Ograve",                            778, nullptr },
+  { "Racute",                            722, nullptr },
+  { "partialdiff",                       494, nullptr },
+  { "uacute",                            556, nullptr },
+  { "braceleft",                         394, nullptr },
+  { "Thorn",                             611, nullptr },
+  { "zcaron",                            444, nullptr },
+  { "scommaaccent",                      389, nullptr },
+  { "ccedilla",                          444, nullptr },
+  { "Dcaron",                            722, nullptr },
+  { "dcroat",                            556, nullptr },
+  { "Ocircumflex",                       778, nullptr },
+  { "Oacute",                            778, nullptr },
+  { "scedilla",                          389, nullptr },
+  { "ogonek",                            333, nullptr },
+  { "ograve",                            500, nullptr },
+  { "racute",                            444, nullptr },
+  { "Tcaron",                            667, nullptr },
+  { "Eogonek",                           667, nullptr },
+  { "thorn",                             556, nullptr },
+  { "degree",                            400, nullptr },
+  { "registered",                        747, nullptr },
+  { "radical",                           549, nullptr },
+  { "Aring",                             722, nullptr },
+  { "percent",                          1000, nullptr },
+  { "six",                               500, nullptr },
+  { "paragraph",                         540, nullptr },
+  { "dcaron",                            672, nullptr },
+  { "Uogonek",                           722, nullptr },
+  { "two",                               500, nullptr },
+  { "summation",                         600, nullptr },
+  { "Igrave",                            389, nullptr },
+  { "Lacute",                            667, nullptr },
+  { "ocircumflex",                       500, nullptr },
+  { "oacute",                            500, nullptr },
+  { "Uring",                             722, nullptr },
+  { "Lcommaaccent",                      667, nullptr },
+  { "tcaron",                            416, nullptr },
+  { "eogonek",                           444, nullptr },
+  { "Delta",                             612, nullptr },
+  { "Ohungarumlaut",                     778, nullptr },
+  { "asciicircum",                       581, nullptr },
+  { "aring",                             500, nullptr },
+  { "grave",                             333, nullptr },
+  { "uogonek",                           556, nullptr },
+  { "bracketright",                      333, nullptr },
+  { "Iacute",                            389, nullptr },
+  { "ampersand",                         833, nullptr },
+  { "igrave",                            278, nullptr },
+  { "lacute",                            278, nullptr },
+  { "Ncaron",                            722, nullptr },
+  { "plus",                              570, nullptr },
+  { "uring",                             556, nullptr },
+  { "quotesinglbase",                    333, nullptr },
+  { "lcommaaccent",                      278, nullptr },
+  { "Yacute",                            722, nullptr },
+  { "ohungarumlaut",                     500, nullptr },
+  { "threesuperior",                     300, nullptr },
+  { "acute",                             333, nullptr },
+  { "section",                           500, nullptr },
+  { "dieresis",                          333, nullptr },
+  { "iacute",                            278, nullptr },
+  { "quotedblbase",                      500, nullptr },
+  { "ncaron",                            556, nullptr },
+  { "florin",                            500, nullptr },
+  { "yacute",                            500, nullptr },
+  { "Rcommaaccent",                      722, nullptr },
+  { "fi",                                556, nullptr },
+  { "fl",                                556, nullptr },
+  { "Acircumflex",                       722, nullptr },
+  { "Cacute",                            722, nullptr },
+  { "Icircumflex",                       389, nullptr },
+  { "guillemotleft",                     500, nullptr },
+  { "germandbls",                        556, nullptr },
+  { "Amacron",                           722, nullptr },
+  { "seven",                             500, nullptr },
+  { "Sacute",                            556, nullptr },
+  { "ordmasculine",                      330, nullptr },
+  { "dotlessi",                          278, nullptr },
+  { "sterling",                          500, nullptr },
+  { "notequal",                          549, nullptr },
+  { "Imacron",                           389, nullptr },
+  { "rcommaaccent",                      444, nullptr },
+  { "Zdotaccent",                        667, nullptr },
+  { "acircumflex",                       500, nullptr },
+  { "cacute",                            444, nullptr },
+  { "Ecaron",                            667, nullptr },
+  { "icircumflex",                       278, nullptr },
+  { "braceright",                        394, nullptr },
+  { "quotedblright",                     500, nullptr },
+  { "amacron",                           500, nullptr },
+  { "sacute",                            389, nullptr },
+  { "imacron",                           278, nullptr },
+  { "cent",                              500, nullptr },
+  { "currency",                          500, nullptr },
+  { "logicalnot",                        570, nullptr },
+  { "zdotaccent",                        444, nullptr },
+  { "Atilde",                            722, nullptr },
+  { "breve",                             333, nullptr },
+  { "bar",                               220, nullptr },
+  { "fraction",                          167, nullptr },
+  { "less",                              570, nullptr },
+  { "ecaron",                            444, nullptr },
+  { "guilsinglleft",                     333, nullptr },
+  { "exclam",                            333, nullptr },
+  { "period",                            250, nullptr },
+  { "Rcaron",                            722, nullptr },
+  { "Kcommaaccent",                      778, nullptr },
+  { "greater",                           570, nullptr },
+  { "atilde",                            500, nullptr },
+  { "brokenbar",                         220, nullptr },
+  { "quoteleft",                         333, nullptr },
+  { "Edotaccent",                        667, nullptr },
+  { "onesuperior",                       300, nullptr }
 };
 
 static BuiltinFontWidth timesBoldItalicWidthsTab[] = {
-  { "Ntilde",                            722, NULL },
-  { "rcaron",                            389, NULL },
-  { "kcommaaccent",                      500, NULL },
-  { "Ncommaaccent",                      722, NULL },
-  { "Zacute",                            611, NULL },
-  { "comma",                             250, NULL },
-  { "cedilla",                           333, NULL },
-  { "plusminus",                         570, NULL },
-  { "circumflex",                        333, NULL },
-  { "dotaccent",                         333, NULL },
-  { "edotaccent",                        444, NULL },
-  { "asciitilde",                        570, NULL },
-  { "colon",                             333, NULL },
-  { "onehalf",                           750, NULL },
-  { "dollar",                            500, NULL },
-  { "Lcaron",                            611, NULL },
-  { "ntilde",                            556, NULL },
-  { "Aogonek",                           667, NULL },
-  { "ncommaaccent",                      556, NULL },
-  { "minus",                             606, NULL },
-  { "Iogonek",                           389, NULL },
-  { "zacute",                            389, NULL },
-  { "yen",                               500, NULL },
-  { "space",                             250, NULL },
-  { "Omacron",                           722, NULL },
-  { "questiondown",                      500, NULL },
-  { "emdash",                           1000, NULL },
-  { "Agrave",                            667, NULL },
-  { "three",                             500, NULL },
-  { "numbersign",                        500, NULL },
-  { "lcaron",                            382, NULL },
-  { "A",                                 667, NULL },
-  { "B",                                 667, NULL },
-  { "C",                                 667, NULL },
-  { "aogonek",                           500, NULL },
-  { "D",                                 722, NULL },
-  { "E",                                 667, NULL },
-  { "onequarter",                        750, NULL },
-  { "F",                                 667, NULL },
-  { "G",                                 722, NULL },
-  { "H",                                 778, NULL },
-  { "I",                                 389, NULL },
-  { "J",                                 500, NULL },
-  { "K",                                 667, NULL },
-  { "iogonek",                           278, NULL },
-  { "backslash",                         278, NULL },
-  { "L",                                 611, NULL },
-  { "periodcentered",                    250, NULL },
-  { "M",                                 889, NULL },
-  { "N",                                 722, NULL },
-  { "omacron",                           500, NULL },
-  { "Tcommaaccent",                      611, NULL },
-  { "O",                                 722, NULL },
-  { "P",                                 611, NULL },
-  { "Q",                                 722, NULL },
-  { "Uhungarumlaut",                     722, NULL },
-  { "R",                                 667, NULL },
-  { "Aacute",                            667, NULL },
-  { "caron",                             333, NULL },
-  { "S",                                 556, NULL },
-  { "T",                                 611, NULL },
-  { "U",                                 722, NULL },
-  { "agrave",                            500, NULL },
-  { "V",                                 667, NULL },
-  { "W",                                 889, NULL },
-  { "X",                                 667, NULL },
-  { "question",                          500, NULL },
-  { "equal",                             570, NULL },
-  { "Y",                                 611, NULL },
-  { "Z",                                 611, NULL },
-  { "four",                              500, NULL },
-  { "a",                                 500, NULL },
-  { "Gcommaaccent",                      722, NULL },
-  { "b",                                 500, NULL },
-  { "c",                                 444, NULL },
-  { "d",                                 500, NULL },
-  { "e",                                 444, NULL },
-  { "f",                                 333, NULL },
-  { "g",                                 500, NULL },
-  { "bullet",                            350, NULL },
-  { "h",                                 556, NULL },
-  { "i",                                 278, NULL },
-  { "Oslash",                            722, NULL },
-  { "dagger",                            500, NULL },
-  { "j",                                 278, NULL },
-  { "k",                                 500, NULL },
-  { "l",                                 278, NULL },
-  { "m",                                 778, NULL },
-  { "n",                                 556, NULL },
-  { "tcommaaccent",                      278, NULL },
-  { "o",                                 500, NULL },
-  { "ordfeminine",                       266, NULL },
-  { "ring",                              333, NULL },
-  { "p",                                 500, NULL },
-  { "q",                                 500, NULL },
-  { "uhungarumlaut",                     556, NULL },
-  { "r",                                 389, NULL },
-  { "twosuperior",                       300, NULL },
-  { "aacute",                            500, NULL },
-  { "s",                                 389, NULL },
-  { "OE",                                944, NULL },
-  { "t",                                 278, NULL },
-  { "divide",                            570, NULL },
-  { "u",                                 556, NULL },
-  { "Ccaron",                            667, NULL },
-  { "v",                                 444, NULL },
-  { "w",                                 667, NULL },
-  { "x",                                 500, NULL },
-  { "y",                                 444, NULL },
-  { "z",                                 389, NULL },
-  { "Gbreve",                            722, NULL },
-  { "commaaccent",                       250, NULL },
-  { "hungarumlaut",                      333, NULL },
-  { "Idotaccent",                        389, NULL },
-  { "Nacute",                            722, NULL },
-  { "quotedbl",                          555, NULL },
-  { "gcommaaccent",                      500, NULL },
-  { "mu",                                576, NULL },
-  { "greaterequal",                      549, NULL },
-  { "Scaron",                            556, NULL },
-  { "Lslash",                            611, NULL },
-  { "semicolon",                         333, NULL },
-  { "oslash",                            500, NULL },
-  { "lessequal",                         549, NULL },
-  { "lozenge",                           494, NULL },
-  { "parenright",                        333, NULL },
-  { "ccaron",                            444, NULL },
-  { "Ecircumflex",                       667, NULL },
-  { "gbreve",                            500, NULL },
-  { "trademark",                        1000, NULL },
-  { "daggerdbl",                         500, NULL },
-  { "nacute",                            556, NULL },
-  { "macron",                            333, NULL },
-  { "Otilde",                            722, NULL },
-  { "Emacron",                           667, NULL },
-  { "ellipsis",                         1000, NULL },
-  { "scaron",                            389, NULL },
-  { "AE",                                944, NULL },
-  { "Ucircumflex",                       722, NULL },
-  { "lslash",                            278, NULL },
-  { "quotedblleft",                      500, NULL },
-  { "guilsinglright",                    333, NULL },
-  { "hyphen",                            333, NULL },
-  { "quotesingle",                       278, NULL },
-  { "eight",                             500, NULL },
-  { "exclamdown",                        389, NULL },
-  { "endash",                            500, NULL },
-  { "oe",                                722, NULL },
-  { "Abreve",                            667, NULL },
-  { "Umacron",                           722, NULL },
-  { "ecircumflex",                       444, NULL },
-  { "Adieresis",                         667, NULL },
-  { "copyright",                         747, NULL },
-  { "Egrave",                            667, NULL },
-  { "slash",                             278, NULL },
-  { "Edieresis",                         667, NULL },
-  { "otilde",                            500, NULL },
-  { "Idieresis",                         389, NULL },
-  { "parenleft",                         333, NULL },
-  { "one",                               500, NULL },
-  { "emacron",                           444, NULL },
-  { "Odieresis",                         722, NULL },
-  { "ucircumflex",                       556, NULL },
-  { "bracketleft",                       333, NULL },
-  { "Ugrave",                            722, NULL },
-  { "quoteright",                        333, NULL },
-  { "Udieresis",                         722, NULL },
-  { "perthousand",                      1000, NULL },
-  { "Ydieresis",                         611, NULL },
-  { "umacron",                           556, NULL },
-  { "abreve",                            500, NULL },
-  { "Eacute",                            667, NULL },
-  { "adieresis",                         500, NULL },
-  { "egrave",                            444, NULL },
-  { "edieresis",                         444, NULL },
-  { "idieresis",                         278, NULL },
-  { "Eth",                               722, NULL },
-  { "ae",                                722, NULL },
-  { "asterisk",                          500, NULL },
-  { "odieresis",                         500, NULL },
-  { "Uacute",                            722, NULL },
-  { "ugrave",                            556, NULL },
-  { "nine",                              500, NULL },
-  { "five",                              500, NULL },
-  { "udieresis",                         556, NULL },
-  { "Zcaron",                            611, NULL },
-  { "Scommaaccent",                      556, NULL },
-  { "threequarters",                     750, NULL },
-  { "guillemotright",                    500, NULL },
-  { "Ccedilla",                          667, NULL },
-  { "ydieresis",                         444, NULL },
-  { "tilde",                             333, NULL },
-  { "at",                                832, NULL },
-  { "eacute",                            444, NULL },
-  { "underscore",                        500, NULL },
-  { "Euro",                              500, NULL },
-  { "Dcroat",                            722, NULL },
-  { "multiply",                          570, NULL },
-  { "zero",                              500, NULL },
-  { "eth",                               500, NULL },
-  { "Scedilla",                          556, NULL },
-  { "Ograve",                            722, NULL },
-  { "Racute",                            667, NULL },
-  { "partialdiff",                       494, NULL },
-  { "uacute",                            556, NULL },
-  { "braceleft",                         348, NULL },
-  { "Thorn",                             611, NULL },
-  { "zcaron",                            389, NULL },
-  { "scommaaccent",                      389, NULL },
-  { "ccedilla",                          444, NULL },
-  { "Dcaron",                            722, NULL },
-  { "dcroat",                            500, NULL },
-  { "Ocircumflex",                       722, NULL },
-  { "Oacute",                            722, NULL },
-  { "scedilla",                          389, NULL },
-  { "ogonek",                            333, NULL },
-  { "ograve",                            500, NULL },
-  { "racute",                            389, NULL },
-  { "Tcaron",                            611, NULL },
-  { "Eogonek",                           667, NULL },
-  { "thorn",                             500, NULL },
-  { "degree",                            400, NULL },
-  { "registered",                        747, NULL },
-  { "radical",                           549, NULL },
-  { "Aring",                             667, NULL },
-  { "percent",                           833, NULL },
-  { "six",                               500, NULL },
-  { "paragraph",                         500, NULL },
-  { "dcaron",                            608, NULL },
-  { "Uogonek",                           722, NULL },
-  { "two",                               500, NULL },
-  { "summation",                         600, NULL },
-  { "Igrave",                            389, NULL },
-  { "Lacute",                            611, NULL },
-  { "ocircumflex",                       500, NULL },
-  { "oacute",                            500, NULL },
-  { "Uring",                             722, NULL },
-  { "Lcommaaccent",                      611, NULL },
-  { "tcaron",                            366, NULL },
-  { "eogonek",                           444, NULL },
-  { "Delta",                             612, NULL },
-  { "Ohungarumlaut",                     722, NULL },
-  { "asciicircum",                       570, NULL },
-  { "aring",                             500, NULL },
-  { "grave",                             333, NULL },
-  { "uogonek",                           556, NULL },
-  { "bracketright",                      333, NULL },
-  { "Iacute",                            389, NULL },
-  { "ampersand",                         778, NULL },
-  { "igrave",                            278, NULL },
-  { "lacute",                            278, NULL },
-  { "Ncaron",                            722, NULL },
-  { "plus",                              570, NULL },
-  { "uring",                             556, NULL },
-  { "quotesinglbase",                    333, NULL },
-  { "lcommaaccent",                      278, NULL },
-  { "Yacute",                            611, NULL },
-  { "ohungarumlaut",                     500, NULL },
-  { "threesuperior",                     300, NULL },
-  { "acute",                             333, NULL },
-  { "section",                           500, NULL },
-  { "dieresis",                          333, NULL },
-  { "iacute",                            278, NULL },
-  { "quotedblbase",                      500, NULL },
-  { "ncaron",                            556, NULL },
-  { "florin",                            500, NULL },
-  { "yacute",                            444, NULL },
-  { "Rcommaaccent",                      667, NULL },
-  { "fi",                                556, NULL },
-  { "fl",                                556, NULL },
-  { "Acircumflex",                       667, NULL },
-  { "Cacute",                            667, NULL },
-  { "Icircumflex",                       389, NULL },
-  { "guillemotleft",                     500, NULL },
-  { "germandbls",                        500, NULL },
-  { "Amacron",                           667, NULL },
-  { "seven",                             500, NULL },
-  { "Sacute",                            556, NULL },
-  { "ordmasculine",                      300, NULL },
-  { "dotlessi",                          278, NULL },
-  { "sterling",                          500, NULL },
-  { "notequal",                          549, NULL },
-  { "Imacron",                           389, NULL },
-  { "rcommaaccent",                      389, NULL },
-  { "Zdotaccent",                        611, NULL },
-  { "acircumflex",                       500, NULL },
-  { "cacute",                            444, NULL },
-  { "Ecaron",                            667, NULL },
-  { "icircumflex",                       278, NULL },
-  { "braceright",                        348, NULL },
-  { "quotedblright",                     500, NULL },
-  { "amacron",                           500, NULL },
-  { "sacute",                            389, NULL },
-  { "imacron",                           278, NULL },
-  { "cent",                              500, NULL },
-  { "currency",                          500, NULL },
-  { "logicalnot",                        606, NULL },
-  { "zdotaccent",                        389, NULL },
-  { "Atilde",                            667, NULL },
-  { "breve",                             333, NULL },
-  { "bar",                               220, NULL },
-  { "fraction",                          167, NULL },
-  { "less",                              570, NULL },
-  { "ecaron",                            444, NULL },
-  { "guilsinglleft",                     333, NULL },
-  { "exclam",                            389, NULL },
-  { "period",                            250, NULL },
-  { "Rcaron",                            667, NULL },
-  { "Kcommaaccent",                      667, NULL },
-  { "greater",                           570, NULL },
-  { "atilde",                            500, NULL },
-  { "brokenbar",                         220, NULL },
-  { "quoteleft",                         333, NULL },
-  { "Edotaccent",                        667, NULL },
-  { "onesuperior",                       300, NULL }
+  { "Ntilde",                            722, nullptr },
+  { "rcaron",                            389, nullptr },
+  { "kcommaaccent",                      500, nullptr },
+  { "Ncommaaccent",                      722, nullptr },
+  { "Zacute",                            611, nullptr },
+  { "comma",                             250, nullptr },
+  { "cedilla",                           333, nullptr },
+  { "plusminus",                         570, nullptr },
+  { "circumflex",                        333, nullptr },
+  { "dotaccent",                         333, nullptr },
+  { "edotaccent",                        444, nullptr },
+  { "asciitilde",                        570, nullptr },
+  { "colon",                             333, nullptr },
+  { "onehalf",                           750, nullptr },
+  { "dollar",                            500, nullptr },
+  { "Lcaron",                            611, nullptr },
+  { "ntilde",                            556, nullptr },
+  { "Aogonek",                           667, nullptr },
+  { "ncommaaccent",                      556, nullptr },
+  { "minus",                             606, nullptr },
+  { "Iogonek",                           389, nullptr },
+  { "zacute",                            389, nullptr },
+  { "yen",                               500, nullptr },
+  { "space",                             250, nullptr },
+  { "Omacron",                           722, nullptr },
+  { "questiondown",                      500, nullptr },
+  { "emdash",                           1000, nullptr },
+  { "Agrave",                            667, nullptr },
+  { "three",                             500, nullptr },
+  { "numbersign",                        500, nullptr },
+  { "lcaron",                            382, nullptr },
+  { "A",                                 667, nullptr },
+  { "B",                                 667, nullptr },
+  { "C",                                 667, nullptr },
+  { "aogonek",                           500, nullptr },
+  { "D",                                 722, nullptr },
+  { "E",                                 667, nullptr },
+  { "onequarter",                        750, nullptr },
+  { "F",                                 667, nullptr },
+  { "G",                                 722, nullptr },
+  { "H",                                 778, nullptr },
+  { "I",                                 389, nullptr },
+  { "J",                                 500, nullptr },
+  { "K",                                 667, nullptr },
+  { "iogonek",                           278, nullptr },
+  { "backslash",                         278, nullptr },
+  { "L",                                 611, nullptr },
+  { "periodcentered",                    250, nullptr },
+  { "M",                                 889, nullptr },
+  { "N",                                 722, nullptr },
+  { "omacron",                           500, nullptr },
+  { "Tcommaaccent",                      611, nullptr },
+  { "O",                                 722, nullptr },
+  { "P",                                 611, nullptr },
+  { "Q",                                 722, nullptr },
+  { "Uhungarumlaut",                     722, nullptr },
+  { "R",                                 667, nullptr },
+  { "Aacute",                            667, nullptr },
+  { "caron",                             333, nullptr },
+  { "S",                                 556, nullptr },
+  { "T",                                 611, nullptr },
+  { "U",                                 722, nullptr },
+  { "agrave",                            500, nullptr },
+  { "V",                                 667, nullptr },
+  { "W",                                 889, nullptr },
+  { "X",                                 667, nullptr },
+  { "question",                          500, nullptr },
+  { "equal",                             570, nullptr },
+  { "Y",                                 611, nullptr },
+  { "Z",                                 611, nullptr },
+  { "four",                              500, nullptr },
+  { "a",                                 500, nullptr },
+  { "Gcommaaccent",                      722, nullptr },
+  { "b",                                 500, nullptr },
+  { "c",                                 444, nullptr },
+  { "d",                                 500, nullptr },
+  { "e",                                 444, nullptr },
+  { "f",                                 333, nullptr },
+  { "g",                                 500, nullptr },
+  { "bullet",                            350, nullptr },
+  { "h",                                 556, nullptr },
+  { "i",                                 278, nullptr },
+  { "Oslash",                            722, nullptr },
+  { "dagger",                            500, nullptr },
+  { "j",                                 278, nullptr },
+  { "k",                                 500, nullptr },
+  { "l",                                 278, nullptr },
+  { "m",                                 778, nullptr },
+  { "n",                                 556, nullptr },
+  { "tcommaaccent",                      278, nullptr },
+  { "o",                                 500, nullptr },
+  { "ordfeminine",                       266, nullptr },
+  { "ring",                              333, nullptr },
+  { "p",                                 500, nullptr },
+  { "q",                                 500, nullptr },
+  { "uhungarumlaut",                     556, nullptr },
+  { "r",                                 389, nullptr },
+  { "twosuperior",                       300, nullptr },
+  { "aacute",                            500, nullptr },
+  { "s",                                 389, nullptr },
+  { "OE",                                944, nullptr },
+  { "t",                                 278, nullptr },
+  { "divide",                            570, nullptr },
+  { "u",                                 556, nullptr },
+  { "Ccaron",                            667, nullptr },
+  { "v",                                 444, nullptr },
+  { "w",                                 667, nullptr },
+  { "x",                                 500, nullptr },
+  { "y",                                 444, nullptr },
+  { "z",                                 389, nullptr },
+  { "Gbreve",                            722, nullptr },
+  { "commaaccent",                       250, nullptr },
+  { "hungarumlaut",                      333, nullptr },
+  { "Idotaccent",                        389, nullptr },
+  { "Nacute",                            722, nullptr },
+  { "quotedbl",                          555, nullptr },
+  { "gcommaaccent",                      500, nullptr },
+  { "mu",                                576, nullptr },
+  { "greaterequal",                      549, nullptr },
+  { "Scaron",                            556, nullptr },
+  { "Lslash",                            611, nullptr },
+  { "semicolon",                         333, nullptr },
+  { "oslash",                            500, nullptr },
+  { "lessequal",                         549, nullptr },
+  { "lozenge",                           494, nullptr },
+  { "parenright",                        333, nullptr },
+  { "ccaron",                            444, nullptr },
+  { "Ecircumflex",                       667, nullptr },
+  { "gbreve",                            500, nullptr },
+  { "trademark",                        1000, nullptr },
+  { "daggerdbl",                         500, nullptr },
+  { "nacute",                            556, nullptr },
+  { "macron",                            333, nullptr },
+  { "Otilde",                            722, nullptr },
+  { "Emacron",                           667, nullptr },
+  { "ellipsis",                         1000, nullptr },
+  { "scaron",                            389, nullptr },
+  { "AE",                                944, nullptr },
+  { "Ucircumflex",                       722, nullptr },
+  { "lslash",                            278, nullptr },
+  { "quotedblleft",                      500, nullptr },
+  { "guilsinglright",                    333, nullptr },
+  { "hyphen",                            333, nullptr },
+  { "quotesingle",                       278, nullptr },
+  { "eight",                             500, nullptr },
+  { "exclamdown",                        389, nullptr },
+  { "endash",                            500, nullptr },
+  { "oe",                                722, nullptr },
+  { "Abreve",                            667, nullptr },
+  { "Umacron",                           722, nullptr },
+  { "ecircumflex",                       444, nullptr },
+  { "Adieresis",                         667, nullptr },
+  { "copyright",                         747, nullptr },
+  { "Egrave",                            667, nullptr },
+  { "slash",                             278, nullptr },
+  { "Edieresis",                         667, nullptr },
+  { "otilde",                            500, nullptr },
+  { "Idieresis",                         389, nullptr },
+  { "parenleft",                         333, nullptr },
+  { "one",                               500, nullptr },
+  { "emacron",                           444, nullptr },
+  { "Odieresis",                         722, nullptr },
+  { "ucircumflex",                       556, nullptr },
+  { "bracketleft",                       333, nullptr },
+  { "Ugrave",                            722, nullptr },
+  { "quoteright",                        333, nullptr },
+  { "Udieresis",                         722, nullptr },
+  { "perthousand",                      1000, nullptr },
+  { "Ydieresis",                         611, nullptr },
+  { "umacron",                           556, nullptr },
+  { "abreve",                            500, nullptr },
+  { "Eacute",                            667, nullptr },
+  { "adieresis",                         500, nullptr },
+  { "egrave",                            444, nullptr },
+  { "edieresis",                         444, nullptr },
+  { "idieresis",                         278, nullptr },
+  { "Eth",                               722, nullptr },
+  { "ae",                                722, nullptr },
+  { "asterisk",                          500, nullptr },
+  { "odieresis",                         500, nullptr },
+  { "Uacute",                            722, nullptr },
+  { "ugrave",                            556, nullptr },
+  { "nine",                              500, nullptr },
+  { "five",                              500, nullptr },
+  { "udieresis",                         556, nullptr },
+  { "Zcaron",                            611, nullptr },
+  { "Scommaaccent",                      556, nullptr },
+  { "threequarters",                     750, nullptr },
+  { "guillemotright",                    500, nullptr },
+  { "Ccedilla",                          667, nullptr },
+  { "ydieresis",                         444, nullptr },
+  { "tilde",                             333, nullptr },
+  { "at",                                832, nullptr },
+  { "eacute",                            444, nullptr },
+  { "underscore",                        500, nullptr },
+  { "Euro",                              500, nullptr },
+  { "Dcroat",                            722, nullptr },
+  { "multiply",                          570, nullptr },
+  { "zero",                              500, nullptr },
+  { "eth",                               500, nullptr },
+  { "Scedilla",                          556, nullptr },
+  { "Ograve",                            722, nullptr },
+  { "Racute",                            667, nullptr },
+  { "partialdiff",                       494, nullptr },
+  { "uacute",                            556, nullptr },
+  { "braceleft",                         348, nullptr },
+  { "Thorn",                             611, nullptr },
+  { "zcaron",                            389, nullptr },
+  { "scommaaccent",                      389, nullptr },
+  { "ccedilla",                          444, nullptr },
+  { "Dcaron",                            722, nullptr },
+  { "dcroat",                            500, nullptr },
+  { "Ocircumflex",                       722, nullptr },
+  { "Oacute",                            722, nullptr },
+  { "scedilla",                          389, nullptr },
+  { "ogonek",                            333, nullptr },
+  { "ograve",                            500, nullptr },
+  { "racute",                            389, nullptr },
+  { "Tcaron",                            611, nullptr },
+  { "Eogonek",                           667, nullptr },
+  { "thorn",                             500, nullptr },
+  { "degree",                            400, nullptr },
+  { "registered",                        747, nullptr },
+  { "radical",                           549, nullptr },
+  { "Aring",                             667, nullptr },
+  { "percent",                           833, nullptr },
+  { "six",                               500, nullptr },
+  { "paragraph",                         500, nullptr },
+  { "dcaron",                            608, nullptr },
+  { "Uogonek",                           722, nullptr },
+  { "two",                               500, nullptr },
+  { "summation",                         600, nullptr },
+  { "Igrave",                            389, nullptr },
+  { "Lacute",                            611, nullptr },
+  { "ocircumflex",                       500, nullptr },
+  { "oacute",                            500, nullptr },
+  { "Uring",                             722, nullptr },
+  { "Lcommaaccent",                      611, nullptr },
+  { "tcaron",                            366, nullptr },
+  { "eogonek",                           444, nullptr },
+  { "Delta",                             612, nullptr },
+  { "Ohungarumlaut",                     722, nullptr },
+  { "asciicircum",                       570, nullptr },
+  { "aring",                             500, nullptr },
+  { "grave",                             333, nullptr },
+  { "uogonek",                           556, nullptr },
+  { "bracketright",                      333, nullptr },
+  { "Iacute",                            389, nullptr },
+  { "ampersand",                         778, nullptr },
+  { "igrave",                            278, nullptr },
+  { "lacute",                            278, nullptr },
+  { "Ncaron",                            722, nullptr },
+  { "plus",                              570, nullptr },
+  { "uring",                             556, nullptr },
+  { "quotesinglbase",                    333, nullptr },
+  { "lcommaaccent",                      278, nullptr },
+  { "Yacute",                            611, nullptr },
+  { "ohungarumlaut",                     500, nullptr },
+  { "threesuperior",                     300, nullptr },
+  { "acute",                             333, nullptr },
+  { "section",                           500, nullptr },
+  { "dieresis",                          333, nullptr },
+  { "iacute",                            278, nullptr },
+  { "quotedblbase",                      500, nullptr },
+  { "ncaron",                            556, nullptr },
+  { "florin",                            500, nullptr },
+  { "yacute",                            444, nullptr },
+  { "Rcommaaccent",                      667, nullptr },
+  { "fi",                                556, nullptr },
+  { "fl",                                556, nullptr },
+  { "Acircumflex",                       667, nullptr },
+  { "Cacute",                            667, nullptr },
+  { "Icircumflex",                       389, nullptr },
+  { "guillemotleft",                     500, nullptr },
+  { "germandbls",                        500, nullptr },
+  { "Amacron",                           667, nullptr },
+  { "seven",                             500, nullptr },
+  { "Sacute",                            556, nullptr },
+  { "ordmasculine",                      300, nullptr },
+  { "dotlessi",                          278, nullptr },
+  { "sterling",                          500, nullptr },
+  { "notequal",                          549, nullptr },
+  { "Imacron",                           389, nullptr },
+  { "rcommaaccent",                      389, nullptr },
+  { "Zdotaccent",                        611, nullptr },
+  { "acircumflex",                       500, nullptr },
+  { "cacute",                            444, nullptr },
+  { "Ecaron",                            667, nullptr },
+  { "icircumflex",                       278, nullptr },
+  { "braceright",                        348, nullptr },
+  { "quotedblright",                     500, nullptr },
+  { "amacron",                           500, nullptr },
+  { "sacute",                            389, nullptr },
+  { "imacron",                           278, nullptr },
+  { "cent",                              500, nullptr },
+  { "currency",                          500, nullptr },
+  { "logicalnot",                        606, nullptr },
+  { "zdotaccent",                        389, nullptr },
+  { "Atilde",                            667, nullptr },
+  { "breve",                             333, nullptr },
+  { "bar",                               220, nullptr },
+  { "fraction",                          167, nullptr },
+  { "less",                              570, nullptr },
+  { "ecaron",                            444, nullptr },
+  { "guilsinglleft",                     333, nullptr },
+  { "exclam",                            389, nullptr },
+  { "period",                            250, nullptr },
+  { "Rcaron",                            667, nullptr },
+  { "Kcommaaccent",                      667, nullptr },
+  { "greater",                           570, nullptr },
+  { "atilde",                            500, nullptr },
+  { "brokenbar",                         220, nullptr },
+  { "quoteleft",                         333, nullptr },
+  { "Edotaccent",                        667, nullptr },
+  { "onesuperior",                       300, nullptr }
 };
 
 static BuiltinFontWidth timesItalicWidthsTab[] = {
-  { "Ntilde",                            667, NULL },
-  { "rcaron",                            389, NULL },
-  { "kcommaaccent",                      444, NULL },
-  { "Ncommaaccent",                      667, NULL },
-  { "Zacute",                            556, NULL },
-  { "comma",                             250, NULL },
-  { "cedilla",                           333, NULL },
-  { "plusminus",                         675, NULL },
-  { "circumflex",                        333, NULL },
-  { "dotaccent",                         333, NULL },
-  { "edotaccent",                        444, NULL },
-  { "asciitilde",                        541, NULL },
-  { "colon",                             333, NULL },
-  { "onehalf",                           750, NULL },
-  { "dollar",                            500, NULL },
-  { "Lcaron",                            611, NULL },
-  { "ntilde",                            500, NULL },
-  { "Aogonek",                           611, NULL },
-  { "ncommaaccent",                      500, NULL },
-  { "minus",                             675, NULL },
-  { "Iogonek",                           333, NULL },
-  { "zacute",                            389, NULL },
-  { "yen",                               500, NULL },
-  { "space",                             250, NULL },
-  { "Omacron",                           722, NULL },
-  { "questiondown",                      500, NULL },
-  { "emdash",                            889, NULL },
-  { "Agrave",                            611, NULL },
-  { "three",                             500, NULL },
-  { "numbersign",                        500, NULL },
-  { "lcaron",                            300, NULL },
-  { "A",                                 611, NULL },
-  { "B",                                 611, NULL },
-  { "C",                                 667, NULL },
-  { "aogonek",                           500, NULL },
-  { "D",                                 722, NULL },
-  { "E",                                 611, NULL },
-  { "onequarter",                        750, NULL },
-  { "F",                                 611, NULL },
-  { "G",                                 722, NULL },
-  { "H",                                 722, NULL },
-  { "I",                                 333, NULL },
-  { "J",                                 444, NULL },
-  { "K",                                 667, NULL },
-  { "iogonek",                           278, NULL },
-  { "backslash",                         278, NULL },
-  { "L",                                 556, NULL },
-  { "periodcentered",                    250, NULL },
-  { "M",                                 833, NULL },
-  { "N",                                 667, NULL },
-  { "omacron",                           500, NULL },
-  { "Tcommaaccent",                      556, NULL },
-  { "O",                                 722, NULL },
-  { "P",                                 611, NULL },
-  { "Q",                                 722, NULL },
-  { "Uhungarumlaut",                     722, NULL },
-  { "R",                                 611, NULL },
-  { "Aacute",                            611, NULL },
-  { "caron",                             333, NULL },
-  { "S",                                 500, NULL },
-  { "T",                                 556, NULL },
-  { "U",                                 722, NULL },
-  { "agrave",                            500, NULL },
-  { "V",                                 611, NULL },
-  { "W",                                 833, NULL },
-  { "X",                                 611, NULL },
-  { "question",                          500, NULL },
-  { "equal",                             675, NULL },
-  { "Y",                                 556, NULL },
-  { "Z",                                 556, NULL },
-  { "four",                              500, NULL },
-  { "a",                                 500, NULL },
-  { "Gcommaaccent",                      722, NULL },
-  { "b",                                 500, NULL },
-  { "c",                                 444, NULL },
-  { "d",                                 500, NULL },
-  { "e",                                 444, NULL },
-  { "f",                                 278, NULL },
-  { "g",                                 500, NULL },
-  { "bullet",                            350, NULL },
-  { "h",                                 500, NULL },
-  { "i",                                 278, NULL },
-  { "Oslash",                            722, NULL },
-  { "dagger",                            500, NULL },
-  { "j",                                 278, NULL },
-  { "k",                                 444, NULL },
-  { "l",                                 278, NULL },
-  { "m",                                 722, NULL },
-  { "n",                                 500, NULL },
-  { "tcommaaccent",                      278, NULL },
-  { "o",                                 500, NULL },
-  { "ordfeminine",                       276, NULL },
-  { "ring",                              333, NULL },
-  { "p",                                 500, NULL },
-  { "q",                                 500, NULL },
-  { "uhungarumlaut",                     500, NULL },
-  { "r",                                 389, NULL },
-  { "twosuperior",                       300, NULL },
-  { "aacute",                            500, NULL },
-  { "s",                                 389, NULL },
-  { "OE",                                944, NULL },
-  { "t",                                 278, NULL },
-  { "divide",                            675, NULL },
-  { "u",                                 500, NULL },
-  { "Ccaron",                            667, NULL },
-  { "v",                                 444, NULL },
-  { "w",                                 667, NULL },
-  { "x",                                 444, NULL },
-  { "y",                                 444, NULL },
-  { "z",                                 389, NULL },
-  { "Gbreve",                            722, NULL },
-  { "commaaccent",                       250, NULL },
-  { "hungarumlaut",                      333, NULL },
-  { "Idotaccent",                        333, NULL },
-  { "Nacute",                            667, NULL },
-  { "quotedbl",                          420, NULL },
-  { "gcommaaccent",                      500, NULL },
-  { "mu",                                500, NULL },
-  { "greaterequal",                      549, NULL },
-  { "Scaron",                            500, NULL },
-  { "Lslash",                            556, NULL },
-  { "semicolon",                         333, NULL },
-  { "oslash",                            500, NULL },
-  { "lessequal",                         549, NULL },
-  { "lozenge",                           471, NULL },
-  { "parenright",                        333, NULL },
-  { "ccaron",                            444, NULL },
-  { "Ecircumflex",                       611, NULL },
-  { "gbreve",                            500, NULL },
-  { "trademark",                         980, NULL },
-  { "daggerdbl",                         500, NULL },
-  { "nacute",                            500, NULL },
-  { "macron",                            333, NULL },
-  { "Otilde",                            722, NULL },
-  { "Emacron",                           611, NULL },
-  { "ellipsis",                          889, NULL },
-  { "scaron",                            389, NULL },
-  { "AE",                                889, NULL },
-  { "Ucircumflex",                       722, NULL },
-  { "lslash",                            278, NULL },
-  { "quotedblleft",                      556, NULL },
-  { "guilsinglright",                    333, NULL },
-  { "hyphen",                            333, NULL },
-  { "quotesingle",                       214, NULL },
-  { "eight",                             500, NULL },
-  { "exclamdown",                        389, NULL },
-  { "endash",                            500, NULL },
-  { "oe",                                667, NULL },
-  { "Abreve",                            611, NULL },
-  { "Umacron",                           722, NULL },
-  { "ecircumflex",                       444, NULL },
-  { "Adieresis",                         611, NULL },
-  { "copyright",                         760, NULL },
-  { "Egrave",                            611, NULL },
-  { "slash",                             278, NULL },
-  { "Edieresis",                         611, NULL },
-  { "otilde",                            500, NULL },
-  { "Idieresis",                         333, NULL },
-  { "parenleft",                         333, NULL },
-  { "one",                               500, NULL },
-  { "emacron",                           444, NULL },
-  { "Odieresis",                         722, NULL },
-  { "ucircumflex",                       500, NULL },
-  { "bracketleft",                       389, NULL },
-  { "Ugrave",                            722, NULL },
-  { "quoteright",                        333, NULL },
-  { "Udieresis",                         722, NULL },
-  { "perthousand",                      1000, NULL },
-  { "Ydieresis",                         556, NULL },
-  { "umacron",                           500, NULL },
-  { "abreve",                            500, NULL },
-  { "Eacute",                            611, NULL },
-  { "adieresis",                         500, NULL },
-  { "egrave",                            444, NULL },
-  { "edieresis",                         444, NULL },
-  { "idieresis",                         278, NULL },
-  { "Eth",                               722, NULL },
-  { "ae",                                667, NULL },
-  { "asterisk",                          500, NULL },
-  { "odieresis",                         500, NULL },
-  { "Uacute",                            722, NULL },
-  { "ugrave",                            500, NULL },
-  { "nine",                              500, NULL },
-  { "five",                              500, NULL },
-  { "udieresis",                         500, NULL },
-  { "Zcaron",                            556, NULL },
-  { "Scommaaccent",                      500, NULL },
-  { "threequarters",                     750, NULL },
-  { "guillemotright",                    500, NULL },
-  { "Ccedilla",                          667, NULL },
-  { "ydieresis",                         444, NULL },
-  { "tilde",                             333, NULL },
-  { "at",                                920, NULL },
-  { "eacute",                            444, NULL },
-  { "underscore",                        500, NULL },
-  { "Euro",                              500, NULL },
-  { "Dcroat",                            722, NULL },
-  { "multiply",                          675, NULL },
-  { "zero",                              500, NULL },
-  { "eth",                               500, NULL },
-  { "Scedilla",                          500, NULL },
-  { "Ograve",                            722, NULL },
-  { "Racute",                            611, NULL },
-  { "partialdiff",                       476, NULL },
-  { "uacute",                            500, NULL },
-  { "braceleft",                         400, NULL },
-  { "Thorn",                             611, NULL },
-  { "zcaron",                            389, NULL },
-  { "scommaaccent",                      389, NULL },
-  { "ccedilla",                          444, NULL },
-  { "Dcaron",                            722, NULL },
-  { "dcroat",                            500, NULL },
-  { "Ocircumflex",                       722, NULL },
-  { "Oacute",                            722, NULL },
-  { "scedilla",                          389, NULL },
-  { "ogonek",                            333, NULL },
-  { "ograve",                            500, NULL },
-  { "racute",                            389, NULL },
-  { "Tcaron",                            556, NULL },
-  { "Eogonek",                           611, NULL },
-  { "thorn",                             500, NULL },
-  { "degree",                            400, NULL },
-  { "registered",                        760, NULL },
-  { "radical",                           453, NULL },
-  { "Aring",                             611, NULL },
-  { "percent",                           833, NULL },
-  { "six",                               500, NULL },
-  { "paragraph",                         523, NULL },
-  { "dcaron",                            544, NULL },
-  { "Uogonek",                           722, NULL },
-  { "two",                               500, NULL },
-  { "summation",                         600, NULL },
-  { "Igrave",                            333, NULL },
-  { "Lacute",                            556, NULL },
-  { "ocircumflex",                       500, NULL },
-  { "oacute",                            500, NULL },
-  { "Uring",                             722, NULL },
-  { "Lcommaaccent",                      556, NULL },
-  { "tcaron",                            300, NULL },
-  { "eogonek",                           444, NULL },
-  { "Delta",                             612, NULL },
-  { "Ohungarumlaut",                     722, NULL },
-  { "asciicircum",                       422, NULL },
-  { "aring",                             500, NULL },
-  { "grave",                             333, NULL },
-  { "uogonek",                           500, NULL },
-  { "bracketright",                      389, NULL },
-  { "Iacute",                            333, NULL },
-  { "ampersand",                         778, NULL },
-  { "igrave",                            278, NULL },
-  { "lacute",                            278, NULL },
-  { "Ncaron",                            667, NULL },
-  { "plus",                              675, NULL },
-  { "uring",                             500, NULL },
-  { "quotesinglbase",                    333, NULL },
-  { "lcommaaccent",                      278, NULL },
-  { "Yacute",                            556, NULL },
-  { "ohungarumlaut",                     500, NULL },
-  { "threesuperior",                     300, NULL },
-  { "acute",                             333, NULL },
-  { "section",                           500, NULL },
-  { "dieresis",                          333, NULL },
-  { "iacute",                            278, NULL },
-  { "quotedblbase",                      556, NULL },
-  { "ncaron",                            500, NULL },
-  { "florin",                            500, NULL },
-  { "yacute",                            444, NULL },
-  { "Rcommaaccent",                      611, NULL },
-  { "fi",                                500, NULL },
-  { "fl",                                500, NULL },
-  { "Acircumflex",                       611, NULL },
-  { "Cacute",                            667, NULL },
-  { "Icircumflex",                       333, NULL },
-  { "guillemotleft",                     500, NULL },
-  { "germandbls",                        500, NULL },
-  { "Amacron",                           611, NULL },
-  { "seven",                             500, NULL },
-  { "Sacute",                            500, NULL },
-  { "ordmasculine",                      310, NULL },
-  { "dotlessi",                          278, NULL },
-  { "sterling",                          500, NULL },
-  { "notequal",                          549, NULL },
-  { "Imacron",                           333, NULL },
-  { "rcommaaccent",                      389, NULL },
-  { "Zdotaccent",                        556, NULL },
-  { "acircumflex",                       500, NULL },
-  { "cacute",                            444, NULL },
-  { "Ecaron",                            611, NULL },
-  { "icircumflex",                       278, NULL },
-  { "braceright",                        400, NULL },
-  { "quotedblright",                     556, NULL },
-  { "amacron",                           500, NULL },
-  { "sacute",                            389, NULL },
-  { "imacron",                           278, NULL },
-  { "cent",                              500, NULL },
-  { "currency",                          500, NULL },
-  { "logicalnot",                        675, NULL },
-  { "zdotaccent",                        389, NULL },
-  { "Atilde",                            611, NULL },
-  { "breve",                             333, NULL },
-  { "bar",                               275, NULL },
-  { "fraction",                          167, NULL },
-  { "less",                              675, NULL },
-  { "ecaron",                            444, NULL },
-  { "guilsinglleft",                     333, NULL },
-  { "exclam",                            333, NULL },
-  { "period",                            250, NULL },
-  { "Rcaron",                            611, NULL },
-  { "Kcommaaccent",                      667, NULL },
-  { "greater",                           675, NULL },
-  { "atilde",                            500, NULL },
-  { "brokenbar",                         275, NULL },
-  { "quoteleft",                         333, NULL },
-  { "Edotaccent",                        611, NULL },
-  { "onesuperior",                       300, NULL }
+  { "Ntilde",                            667, nullptr },
+  { "rcaron",                            389, nullptr },
+  { "kcommaaccent",                      444, nullptr },
+  { "Ncommaaccent",                      667, nullptr },
+  { "Zacute",                            556, nullptr },
+  { "comma",                             250, nullptr },
+  { "cedilla",                           333, nullptr },
+  { "plusminus",                         675, nullptr },
+  { "circumflex",                        333, nullptr },
+  { "dotaccent",                         333, nullptr },
+  { "edotaccent",                        444, nullptr },
+  { "asciitilde",                        541, nullptr },
+  { "colon",                             333, nullptr },
+  { "onehalf",                           750, nullptr },
+  { "dollar",                            500, nullptr },
+  { "Lcaron",                            611, nullptr },
+  { "ntilde",                            500, nullptr },
+  { "Aogonek",                           611, nullptr },
+  { "ncommaaccent",                      500, nullptr },
+  { "minus",                             675, nullptr },
+  { "Iogonek",                           333, nullptr },
+  { "zacute",                            389, nullptr },
+  { "yen",                               500, nullptr },
+  { "space",                             250, nullptr },
+  { "Omacron",                           722, nullptr },
+  { "questiondown",                      500, nullptr },
+  { "emdash",                            889, nullptr },
+  { "Agrave",                            611, nullptr },
+  { "three",                             500, nullptr },
+  { "numbersign",                        500, nullptr },
+  { "lcaron",                            300, nullptr },
+  { "A",                                 611, nullptr },
+  { "B",                                 611, nullptr },
+  { "C",                                 667, nullptr },
+  { "aogonek",                           500, nullptr },
+  { "D",                                 722, nullptr },
+  { "E",                                 611, nullptr },
+  { "onequarter",                        750, nullptr },
+  { "F",                                 611, nullptr },
+  { "G",                                 722, nullptr },
+  { "H",                                 722, nullptr },
+  { "I",                                 333, nullptr },
+  { "J",                                 444, nullptr },
+  { "K",                                 667, nullptr },
+  { "iogonek",                           278, nullptr },
+  { "backslash",                         278, nullptr },
+  { "L",                                 556, nullptr },
+  { "periodcentered",                    250, nullptr },
+  { "M",                                 833, nullptr },
+  { "N",                                 667, nullptr },
+  { "omacron",                           500, nullptr },
+  { "Tcommaaccent",                      556, nullptr },
+  { "O",                                 722, nullptr },
+  { "P",                                 611, nullptr },
+  { "Q",                                 722, nullptr },
+  { "Uhungarumlaut",                     722, nullptr },
+  { "R",                                 611, nullptr },
+  { "Aacute",                            611, nullptr },
+  { "caron",                             333, nullptr },
+  { "S",                                 500, nullptr },
+  { "T",                                 556, nullptr },
+  { "U",                                 722, nullptr },
+  { "agrave",                            500, nullptr },
+  { "V",                                 611, nullptr },
+  { "W",                                 833, nullptr },
+  { "X",                                 611, nullptr },
+  { "question",                          500, nullptr },
+  { "equal",                             675, nullptr },
+  { "Y",                                 556, nullptr },
+  { "Z",                                 556, nullptr },
+  { "four",                              500, nullptr },
+  { "a",                                 500, nullptr },
+  { "Gcommaaccent",                      722, nullptr },
+  { "b",                                 500, nullptr },
+  { "c",                                 444, nullptr },
+  { "d",                                 500, nullptr },
+  { "e",                                 444, nullptr },
+  { "f",                                 278, nullptr },
+  { "g",                                 500, nullptr },
+  { "bullet",                            350, nullptr },
+  { "h",                                 500, nullptr },
+  { "i",                                 278, nullptr },
+  { "Oslash",                            722, nullptr },
+  { "dagger",                            500, nullptr },
+  { "j",                                 278, nullptr },
+  { "k",                                 444, nullptr },
+  { "l",                                 278, nullptr },
+  { "m",                                 722, nullptr },
+  { "n",                                 500, nullptr },
+  { "tcommaaccent",                      278, nullptr },
+  { "o",                                 500, nullptr },
+  { "ordfeminine",                       276, nullptr },
+  { "ring",                              333, nullptr },
+  { "p",                                 500, nullptr },
+  { "q",                                 500, nullptr },
+  { "uhungarumlaut",                     500, nullptr },
+  { "r",                                 389, nullptr },
+  { "twosuperior",                       300, nullptr },
+  { "aacute",                            500, nullptr },
+  { "s",                                 389, nullptr },
+  { "OE",                                944, nullptr },
+  { "t",                                 278, nullptr },
+  { "divide",                            675, nullptr },
+  { "u",                                 500, nullptr },
+  { "Ccaron",                            667, nullptr },
+  { "v",                                 444, nullptr },
+  { "w",                                 667, nullptr },
+  { "x",                                 444, nullptr },
+  { "y",                                 444, nullptr },
+  { "z",                                 389, nullptr },
+  { "Gbreve",                            722, nullptr },
+  { "commaaccent",                       250, nullptr },
+  { "hungarumlaut",                      333, nullptr },
+  { "Idotaccent",                        333, nullptr },
+  { "Nacute",                            667, nullptr },
+  { "quotedbl",                          420, nullptr },
+  { "gcommaaccent",                      500, nullptr },
+  { "mu",                                500, nullptr },
+  { "greaterequal",                      549, nullptr },
+  { "Scaron",                            500, nullptr },
+  { "Lslash",                            556, nullptr },
+  { "semicolon",                         333, nullptr },
+  { "oslash",                            500, nullptr },
+  { "lessequal",                         549, nullptr },
+  { "lozenge",                           471, nullptr },
+  { "parenright",                        333, nullptr },
+  { "ccaron",                            444, nullptr },
+  { "Ecircumflex",                       611, nullptr },
+  { "gbreve",                            500, nullptr },
+  { "trademark",                         980, nullptr },
+  { "daggerdbl",                         500, nullptr },
+  { "nacute",                            500, nullptr },
+  { "macron",                            333, nullptr },
+  { "Otilde",                            722, nullptr },
+  { "Emacron",                           611, nullptr },
+  { "ellipsis",                          889, nullptr },
+  { "scaron",                            389, nullptr },
+  { "AE",                                889, nullptr },
+  { "Ucircumflex",                       722, nullptr },
+  { "lslash",                            278, nullptr },
+  { "quotedblleft",                      556, nullptr },
+  { "guilsinglright",                    333, nullptr },
+  { "hyphen",                            333, nullptr },
+  { "quotesingle",                       214, nullptr },
+  { "eight",                             500, nullptr },
+  { "exclamdown",                        389, nullptr },
+  { "endash",                            500, nullptr },
+  { "oe",                                667, nullptr },
+  { "Abreve",                            611, nullptr },
+  { "Umacron",                           722, nullptr },
+  { "ecircumflex",                       444, nullptr },
+  { "Adieresis",                         611, nullptr },
+  { "copyright",                         760, nullptr },
+  { "Egrave",                            611, nullptr },
+  { "slash",                             278, nullptr },
+  { "Edieresis",                         611, nullptr },
+  { "otilde",                            500, nullptr },
+  { "Idieresis",                         333, nullptr },
+  { "parenleft",                         333, nullptr },
+  { "one",                               500, nullptr },
+  { "emacron",                           444, nullptr },
+  { "Odieresis",                         722, nullptr },
+  { "ucircumflex",                       500, nullptr },
+  { "bracketleft",                       389, nullptr },
+  { "Ugrave",                            722, nullptr },
+  { "quoteright",                        333, nullptr },
+  { "Udieresis",                         722, nullptr },
+  { "perthousand",                      1000, nullptr },
+  { "Ydieresis",                         556, nullptr },
+  { "umacron",                           500, nullptr },
+  { "abreve",                            500, nullptr },
+  { "Eacute",                            611, nullptr },
+  { "adieresis",                         500, nullptr },
+  { "egrave",                            444, nullptr },
+  { "edieresis",                         444, nullptr },
+  { "idieresis",                         278, nullptr },
+  { "Eth",                               722, nullptr },
+  { "ae",                                667, nullptr },
+  { "asterisk",                          500, nullptr },
+  { "odieresis",                         500, nullptr },
+  { "Uacute",                            722, nullptr },
+  { "ugrave",                            500, nullptr },
+  { "nine",                              500, nullptr },
+  { "five",                              500, nullptr },
+  { "udieresis",                         500, nullptr },
+  { "Zcaron",                            556, nullptr },
+  { "Scommaaccent",                      500, nullptr },
+  { "threequarters",                     750, nullptr },
+  { "guillemotright",                    500, nullptr },
+  { "Ccedilla",                          667, nullptr },
+  { "ydieresis",                         444, nullptr },
+  { "tilde",                             333, nullptr },
+  { "at",                                920, nullptr },
+  { "eacute",                            444, nullptr },
+  { "underscore",                        500, nullptr },
+  { "Euro",                              500, nullptr },
+  { "Dcroat",                            722, nullptr },
+  { "multiply",                          675, nullptr },
+  { "zero",                              500, nullptr },
+  { "eth",                               500, nullptr },
+  { "Scedilla",                          500, nullptr },
+  { "Ograve",                            722, nullptr },
+  { "Racute",                            611, nullptr },
+  { "partialdiff",                       476, nullptr },
+  { "uacute",                            500, nullptr },
+  { "braceleft",                         400, nullptr },
+  { "Thorn",                             611, nullptr },
+  { "zcaron",                            389, nullptr },
+  { "scommaaccent",                      389, nullptr },
+  { "ccedilla",                          444, nullptr },
+  { "Dcaron",                            722, nullptr },
+  { "dcroat",                            500, nullptr },
+  { "Ocircumflex",                       722, nullptr },
+  { "Oacute",                            722, nullptr },
+  { "scedilla",                          389, nullptr },
+  { "ogonek",                            333, nullptr },
+  { "ograve",                            500, nullptr },
+  { "racute",                            389, nullptr },
+  { "Tcaron",                            556, nullptr },
+  { "Eogonek",                           611, nullptr },
+  { "thorn",                             500, nullptr },
+  { "degree",                            400, nullptr },
+  { "registered",                        760, nullptr },
+  { "radical",                           453, nullptr },
+  { "Aring",                             611, nullptr },
+  { "percent",                           833, nullptr },
+  { "six",                               500, nullptr },
+  { "paragraph",                         523, nullptr },
+  { "dcaron",                            544, nullptr },
+  { "Uogonek",                           722, nullptr },
+  { "two",                               500, nullptr },
+  { "summation",                         600, nullptr },
+  { "Igrave",                            333, nullptr },
+  { "Lacute",                            556, nullptr },
+  { "ocircumflex",                       500, nullptr },
+  { "oacute",                            500, nullptr },
+  { "Uring",                             722, nullptr },
+  { "Lcommaaccent",                      556, nullptr },
+  { "tcaron",                            300, nullptr },
+  { "eogonek",                           444, nullptr },
+  { "Delta",                             612, nullptr },
+  { "Ohungarumlaut",                     722, nullptr },
+  { "asciicircum",                       422, nullptr },
+  { "aring",                             500, nullptr },
+  { "grave",                             333, nullptr },
+  { "uogonek",                           500, nullptr },
+  { "bracketright",                      389, nullptr },
+  { "Iacute",                            333, nullptr },
+  { "ampersand",                         778, nullptr },
+  { "igrave",                            278, nullptr },
+  { "lacute",                            278, nullptr },
+  { "Ncaron",                            667, nullptr },
+  { "plus",                              675, nullptr },
+  { "uring",                             500, nullptr },
+  { "quotesinglbase",                    333, nullptr },
+  { "lcommaaccent",                      278, nullptr },
+  { "Yacute",                            556, nullptr },
+  { "ohungarumlaut",                     500, nullptr },
+  { "threesuperior",                     300, nullptr },
+  { "acute",                             333, nullptr },
+  { "section",                           500, nullptr },
+  { "dieresis",                          333, nullptr },
+  { "iacute",                            278, nullptr },
+  { "quotedblbase",                      556, nullptr },
+  { "ncaron",                            500, nullptr },
+  { "florin",                            500, nullptr },
+  { "yacute",                            444, nullptr },
+  { "Rcommaaccent",                      611, nullptr },
+  { "fi",                                500, nullptr },
+  { "fl",                                500, nullptr },
+  { "Acircumflex",                       611, nullptr },
+  { "Cacute",                            667, nullptr },
+  { "Icircumflex",                       333, nullptr },
+  { "guillemotleft",                     500, nullptr },
+  { "germandbls",                        500, nullptr },
+  { "Amacron",                           611, nullptr },
+  { "seven",                             500, nullptr },
+  { "Sacute",                            500, nullptr },
+  { "ordmasculine",                      310, nullptr },
+  { "dotlessi",                          278, nullptr },
+  { "sterling",                          500, nullptr },
+  { "notequal",                          549, nullptr },
+  { "Imacron",                           333, nullptr },
+  { "rcommaaccent",                      389, nullptr },
+  { "Zdotaccent",                        556, nullptr },
+  { "acircumflex",                       500, nullptr },
+  { "cacute",                            444, nullptr },
+  { "Ecaron",                            611, nullptr },
+  { "icircumflex",                       278, nullptr },
+  { "braceright",                        400, nullptr },
+  { "quotedblright",                     556, nullptr },
+  { "amacron",                           500, nullptr },
+  { "sacute",                            389, nullptr },
+  { "imacron",                           278, nullptr },
+  { "cent",                              500, nullptr },
+  { "currency",                          500, nullptr },
+  { "logicalnot",                        675, nullptr },
+  { "zdotaccent",                        389, nullptr },
+  { "Atilde",                            611, nullptr },
+  { "breve",                             333, nullptr },
+  { "bar",                               275, nullptr },
+  { "fraction",                          167, nullptr },
+  { "less",                              675, nullptr },
+  { "ecaron",                            444, nullptr },
+  { "guilsinglleft",                     333, nullptr },
+  { "exclam",                            333, nullptr },
+  { "period",                            250, nullptr },
+  { "Rcaron",                            611, nullptr },
+  { "Kcommaaccent",                      667, nullptr },
+  { "greater",                           675, nullptr },
+  { "atilde",                            500, nullptr },
+  { "brokenbar",                         275, nullptr },
+  { "quoteleft",                         333, nullptr },
+  { "Edotaccent",                        611, nullptr },
+  { "onesuperior",                       300, nullptr }
 };
 
 static BuiltinFontWidth timesRomanWidthsTab[] = {
-  { "Ntilde",                            722, NULL },
-  { "rcaron",                            333, NULL },
-  { "kcommaaccent",                      500, NULL },
-  { "Ncommaaccent",                      722, NULL },
-  { "Zacute",                            611, NULL },
-  { "comma",                             250, NULL },
-  { "cedilla",                           333, NULL },
-  { "plusminus",                         564, NULL },
-  { "circumflex",                        333, NULL },
-  { "dotaccent",                         333, NULL },
-  { "edotaccent",                        444, NULL },
-  { "asciitilde",                        541, NULL },
-  { "colon",                             278, NULL },
-  { "onehalf",                           750, NULL },
-  { "dollar",                            500, NULL },
-  { "Lcaron",                            611, NULL },
-  { "ntilde",                            500, NULL },
-  { "Aogonek",                           722, NULL },
-  { "ncommaaccent",                      500, NULL },
-  { "minus",                             564, NULL },
-  { "Iogonek",                           333, NULL },
-  { "zacute",                            444, NULL },
-  { "yen",                               500, NULL },
-  { "space",                             250, NULL },
-  { "Omacron",                           722, NULL },
-  { "questiondown",                      444, NULL },
-  { "emdash",                           1000, NULL },
-  { "Agrave",                            722, NULL },
-  { "three",                             500, NULL },
-  { "numbersign",                        500, NULL },
-  { "lcaron",                            344, NULL },
-  { "A",                                 722, NULL },
-  { "B",                                 667, NULL },
-  { "C",                                 667, NULL },
-  { "aogonek",                           444, NULL },
-  { "D",                                 722, NULL },
-  { "E",                                 611, NULL },
-  { "onequarter",                        750, NULL },
-  { "F",                                 556, NULL },
-  { "G",                                 722, NULL },
-  { "H",                                 722, NULL },
-  { "I",                                 333, NULL },
-  { "J",                                 389, NULL },
-  { "K",                                 722, NULL },
-  { "iogonek",                           278, NULL },
-  { "backslash",                         278, NULL },
-  { "L",                                 611, NULL },
-  { "periodcentered",                    250, NULL },
-  { "M",                                 889, NULL },
-  { "N",                                 722, NULL },
-  { "omacron",                           500, NULL },
-  { "Tcommaaccent",                      611, NULL },
-  { "O",                                 722, NULL },
-  { "P",                                 556, NULL },
-  { "Q",                                 722, NULL },
-  { "Uhungarumlaut",                     722, NULL },
-  { "R",                                 667, NULL },
-  { "Aacute",                            722, NULL },
-  { "caron",                             333, NULL },
-  { "S",                                 556, NULL },
-  { "T",                                 611, NULL },
-  { "U",                                 722, NULL },
-  { "agrave",                            444, NULL },
-  { "V",                                 722, NULL },
-  { "W",                                 944, NULL },
-  { "X",                                 722, NULL },
-  { "question",                          444, NULL },
-  { "equal",                             564, NULL },
-  { "Y",                                 722, NULL },
-  { "Z",                                 611, NULL },
-  { "four",                              500, NULL },
-  { "a",                                 444, NULL },
-  { "Gcommaaccent",                      722, NULL },
-  { "b",                                 500, NULL },
-  { "c",                                 444, NULL },
-  { "d",                                 500, NULL },
-  { "e",                                 444, NULL },
-  { "f",                                 333, NULL },
-  { "g",                                 500, NULL },
-  { "bullet",                            350, NULL },
-  { "h",                                 500, NULL },
-  { "i",                                 278, NULL },
-  { "Oslash",                            722, NULL },
-  { "dagger",                            500, NULL },
-  { "j",                                 278, NULL },
-  { "k",                                 500, NULL },
-  { "l",                                 278, NULL },
-  { "m",                                 778, NULL },
-  { "n",                                 500, NULL },
-  { "tcommaaccent",                      278, NULL },
-  { "o",                                 500, NULL },
-  { "ordfeminine",                       276, NULL },
-  { "ring",                              333, NULL },
-  { "p",                                 500, NULL },
-  { "q",                                 500, NULL },
-  { "uhungarumlaut",                     500, NULL },
-  { "r",                                 333, NULL },
-  { "twosuperior",                       300, NULL },
-  { "aacute",                            444, NULL },
-  { "s",                                 389, NULL },
-  { "OE",                                889, NULL },
-  { "t",                                 278, NULL },
-  { "divide",                            564, NULL },
-  { "u",                                 500, NULL },
-  { "Ccaron",                            667, NULL },
-  { "v",                                 500, NULL },
-  { "w",                                 722, NULL },
-  { "x",                                 500, NULL },
-  { "y",                                 500, NULL },
-  { "z",                                 444, NULL },
-  { "Gbreve",                            722, NULL },
-  { "commaaccent",                       250, NULL },
-  { "hungarumlaut",                      333, NULL },
-  { "Idotaccent",                        333, NULL },
-  { "Nacute",                            722, NULL },
-  { "quotedbl",                          408, NULL },
-  { "gcommaaccent",                      500, NULL },
-  { "mu",                                500, NULL },
-  { "greaterequal",                      549, NULL },
-  { "Scaron",                            556, NULL },
-  { "Lslash",                            611, NULL },
-  { "semicolon",                         278, NULL },
-  { "oslash",                            500, NULL },
-  { "lessequal",                         549, NULL },
-  { "lozenge",                           471, NULL },
-  { "parenright",                        333, NULL },
-  { "ccaron",                            444, NULL },
-  { "Ecircumflex",                       611, NULL },
-  { "gbreve",                            500, NULL },
-  { "trademark",                         980, NULL },
-  { "daggerdbl",                         500, NULL },
-  { "nacute",                            500, NULL },
-  { "macron",                            333, NULL },
-  { "Otilde",                            722, NULL },
-  { "Emacron",                           611, NULL },
-  { "ellipsis",                         1000, NULL },
-  { "scaron",                            389, NULL },
-  { "AE",                                889, NULL },
-  { "Ucircumflex",                       722, NULL },
-  { "lslash",                            278, NULL },
-  { "quotedblleft",                      444, NULL },
-  { "guilsinglright",                    333, NULL },
-  { "hyphen",                            333, NULL },
-  { "quotesingle",                       180, NULL },
-  { "eight",                             500, NULL },
-  { "exclamdown",                        333, NULL },
-  { "endash",                            500, NULL },
-  { "oe",                                722, NULL },
-  { "Abreve",                            722, NULL },
-  { "Umacron",                           722, NULL },
-  { "ecircumflex",                       444, NULL },
-  { "Adieresis",                         722, NULL },
-  { "copyright",                         760, NULL },
-  { "Egrave",                            611, NULL },
-  { "slash",                             278, NULL },
-  { "Edieresis",                         611, NULL },
-  { "otilde",                            500, NULL },
-  { "Idieresis",                         333, NULL },
-  { "parenleft",                         333, NULL },
-  { "one",                               500, NULL },
-  { "emacron",                           444, NULL },
-  { "Odieresis",                         722, NULL },
-  { "ucircumflex",                       500, NULL },
-  { "bracketleft",                       333, NULL },
-  { "Ugrave",                            722, NULL },
-  { "quoteright",                        333, NULL },
-  { "Udieresis",                         722, NULL },
-  { "perthousand",                      1000, NULL },
-  { "Ydieresis",                         722, NULL },
-  { "umacron",                           500, NULL },
-  { "abreve",                            444, NULL },
-  { "Eacute",                            611, NULL },
-  { "adieresis",                         444, NULL },
-  { "egrave",                            444, NULL },
-  { "edieresis",                         444, NULL },
-  { "idieresis",                         278, NULL },
-  { "Eth",                               722, NULL },
-  { "ae",                                667, NULL },
-  { "asterisk",                          500, NULL },
-  { "odieresis",                         500, NULL },
-  { "Uacute",                            722, NULL },
-  { "ugrave",                            500, NULL },
-  { "nine",                              500, NULL },
-  { "five",                              500, NULL },
-  { "udieresis",                         500, NULL },
-  { "Zcaron",                            611, NULL },
-  { "Scommaaccent",                      556, NULL },
-  { "threequarters",                     750, NULL },
-  { "guillemotright",                    500, NULL },
-  { "Ccedilla",                          667, NULL },
-  { "ydieresis",                         500, NULL },
-  { "tilde",                             333, NULL },
-  { "at",                                921, NULL },
-  { "eacute",                            444, NULL },
-  { "underscore",                        500, NULL },
-  { "Euro",                              500, NULL },
-  { "Dcroat",                            722, NULL },
-  { "multiply",                          564, NULL },
-  { "zero",                              500, NULL },
-  { "eth",                               500, NULL },
-  { "Scedilla",                          556, NULL },
-  { "Ograve",                            722, NULL },
-  { "Racute",                            667, NULL },
-  { "partialdiff",                       476, NULL },
-  { "uacute",                            500, NULL },
-  { "braceleft",                         480, NULL },
-  { "Thorn",                             556, NULL },
-  { "zcaron",                            444, NULL },
-  { "scommaaccent",                      389, NULL },
-  { "ccedilla",                          444, NULL },
-  { "Dcaron",                            722, NULL },
-  { "dcroat",                            500, NULL },
-  { "Ocircumflex",                       722, NULL },
-  { "Oacute",                            722, NULL },
-  { "scedilla",                          389, NULL },
-  { "ogonek",                            333, NULL },
-  { "ograve",                            500, NULL },
-  { "racute",                            333, NULL },
-  { "Tcaron",                            611, NULL },
-  { "Eogonek",                           611, NULL },
-  { "thorn",                             500, NULL },
-  { "degree",                            400, NULL },
-  { "registered",                        760, NULL },
-  { "radical",                           453, NULL },
-  { "Aring",                             722, NULL },
-  { "percent",                           833, NULL },
-  { "six",                               500, NULL },
-  { "paragraph",                         453, NULL },
-  { "dcaron",                            588, NULL },
-  { "Uogonek",                           722, NULL },
-  { "two",                               500, NULL },
-  { "summation",                         600, NULL },
-  { "Igrave",                            333, NULL },
-  { "Lacute",                            611, NULL },
-  { "ocircumflex",                       500, NULL },
-  { "oacute",                            500, NULL },
-  { "Uring",                             722, NULL },
-  { "Lcommaaccent",                      611, NULL },
-  { "tcaron",                            326, NULL },
-  { "eogonek",                           444, NULL },
-  { "Delta",                             612, NULL },
-  { "Ohungarumlaut",                     722, NULL },
-  { "asciicircum",                       469, NULL },
-  { "aring",                             444, NULL },
-  { "grave",                             333, NULL },
-  { "uogonek",                           500, NULL },
-  { "bracketright",                      333, NULL },
-  { "Iacute",                            333, NULL },
-  { "ampersand",                         778, NULL },
-  { "igrave",                            278, NULL },
-  { "lacute",                            278, NULL },
-  { "Ncaron",                            722, NULL },
-  { "plus",                              564, NULL },
-  { "uring",                             500, NULL },
-  { "quotesinglbase",                    333, NULL },
-  { "lcommaaccent",                      278, NULL },
-  { "Yacute",                            722, NULL },
-  { "ohungarumlaut",                     500, NULL },
-  { "threesuperior",                     300, NULL },
-  { "acute",                             333, NULL },
-  { "section",                           500, NULL },
-  { "dieresis",                          333, NULL },
-  { "iacute",                            278, NULL },
-  { "quotedblbase",                      444, NULL },
-  { "ncaron",                            500, NULL },
-  { "florin",                            500, NULL },
-  { "yacute",                            500, NULL },
-  { "Rcommaaccent",                      667, NULL },
-  { "fi",                                556, NULL },
-  { "fl",                                556, NULL },
-  { "Acircumflex",                       722, NULL },
-  { "Cacute",                            667, NULL },
-  { "Icircumflex",                       333, NULL },
-  { "guillemotleft",                     500, NULL },
-  { "germandbls",                        500, NULL },
-  { "Amacron",                           722, NULL },
-  { "seven",                             500, NULL },
-  { "Sacute",                            556, NULL },
-  { "ordmasculine",                      310, NULL },
-  { "dotlessi",                          278, NULL },
-  { "sterling",                          500, NULL },
-  { "notequal",                          549, NULL },
-  { "Imacron",                           333, NULL },
-  { "rcommaaccent",                      333, NULL },
-  { "Zdotaccent",                        611, NULL },
-  { "acircumflex",                       444, NULL },
-  { "cacute",                            444, NULL },
-  { "Ecaron",                            611, NULL },
-  { "icircumflex",                       278, NULL },
-  { "braceright",                        480, NULL },
-  { "quotedblright",                     444, NULL },
-  { "amacron",                           444, NULL },
-  { "sacute",                            389, NULL },
-  { "imacron",                           278, NULL },
-  { "cent",                              500, NULL },
-  { "currency",                          500, NULL },
-  { "logicalnot",                        564, NULL },
-  { "zdotaccent",                        444, NULL },
-  { "Atilde",                            722, NULL },
-  { "breve",                             333, NULL },
-  { "bar",                               200, NULL },
-  { "fraction",                          167, NULL },
-  { "less",                              564, NULL },
-  { "ecaron",                            444, NULL },
-  { "guilsinglleft",                     333, NULL },
-  { "exclam",                            333, NULL },
-  { "period",                            250, NULL },
-  { "Rcaron",                            667, NULL },
-  { "Kcommaaccent",                      722, NULL },
-  { "greater",                           564, NULL },
-  { "atilde",                            444, NULL },
-  { "brokenbar",                         200, NULL },
-  { "quoteleft",                         333, NULL },
-  { "Edotaccent",                        611, NULL },
-  { "onesuperior",                       300, NULL }
+  { "Ntilde",                            722, nullptr },
+  { "rcaron",                            333, nullptr },
+  { "kcommaaccent",                      500, nullptr },
+  { "Ncommaaccent",                      722, nullptr },
+  { "Zacute",                            611, nullptr },
+  { "comma",                             250, nullptr },
+  { "cedilla",                           333, nullptr },
+  { "plusminus",                         564, nullptr },
+  { "circumflex",                        333, nullptr },
+  { "dotaccent",                         333, nullptr },
+  { "edotaccent",                        444, nullptr },
+  { "asciitilde",                        541, nullptr },
+  { "colon",                             278, nullptr },
+  { "onehalf",                           750, nullptr },
+  { "dollar",                            500, nullptr },
+  { "Lcaron",                            611, nullptr },
+  { "ntilde",                            500, nullptr },
+  { "Aogonek",                           722, nullptr },
+  { "ncommaaccent",                      500, nullptr },
+  { "minus",                             564, nullptr },
+  { "Iogonek",                           333, nullptr },
+  { "zacute",                            444, nullptr },
+  { "yen",                               500, nullptr },
+  { "space",                             250, nullptr },
+  { "Omacron",                           722, nullptr },
+  { "questiondown",                      444, nullptr },
+  { "emdash",                           1000, nullptr },
+  { "Agrave",                            722, nullptr },
+  { "three",                             500, nullptr },
+  { "numbersign",                        500, nullptr },
+  { "lcaron",                            344, nullptr },
+  { "A",                                 722, nullptr },
+  { "B",                                 667, nullptr },
+  { "C",                                 667, nullptr },
+  { "aogonek",                           444, nullptr },
+  { "D",                                 722, nullptr },
+  { "E",                                 611, nullptr },
+  { "onequarter",                        750, nullptr },
+  { "F",                                 556, nullptr },
+  { "G",                                 722, nullptr },
+  { "H",                                 722, nullptr },
+  { "I",                                 333, nullptr },
+  { "J",                                 389, nullptr },
+  { "K",                                 722, nullptr },
+  { "iogonek",                           278, nullptr },
+  { "backslash",                         278, nullptr },
+  { "L",                                 611, nullptr },
+  { "periodcentered",                    250, nullptr },
+  { "M",                                 889, nullptr },
+  { "N",                                 722, nullptr },
+  { "omacron",                           500, nullptr },
+  { "Tcommaaccent",                      611, nullptr },
+  { "O",                                 722, nullptr },
+  { "P",                                 556, nullptr },
+  { "Q",                                 722, nullptr },
+  { "Uhungarumlaut",                     722, nullptr },
+  { "R",                                 667, nullptr },
+  { "Aacute",                            722, nullptr },
+  { "caron",                             333, nullptr },
+  { "S",                                 556, nullptr },
+  { "T",                                 611, nullptr },
+  { "U",                                 722, nullptr },
+  { "agrave",                            444, nullptr },
+  { "V",                                 722, nullptr },
+  { "W",                                 944, nullptr },
+  { "X",                                 722, nullptr },
+  { "question",                          444, nullptr },
+  { "equal",                             564, nullptr },
+  { "Y",                                 722, nullptr },
+  { "Z",                                 611, nullptr },
+  { "four",                              500, nullptr },
+  { "a",                                 444, nullptr },
+  { "Gcommaaccent",                      722, nullptr },
+  { "b",                                 500, nullptr },
+  { "c",                                 444, nullptr },
+  { "d",                                 500, nullptr },
+  { "e",                                 444, nullptr },
+  { "f",                                 333, nullptr },
+  { "g",                                 500, nullptr },
+  { "bullet",                            350, nullptr },
+  { "h",                                 500, nullptr },
+  { "i",                                 278, nullptr },
+  { "Oslash",                            722, nullptr },
+  { "dagger",                            500, nullptr },
+  { "j",                                 278, nullptr },
+  { "k",                                 500, nullptr },
+  { "l",                                 278, nullptr },
+  { "m",                                 778, nullptr },
+  { "n",                                 500, nullptr },
+  { "tcommaaccent",                      278, nullptr },
+  { "o",                                 500, nullptr },
+  { "ordfeminine",                       276, nullptr },
+  { "ring",                              333, nullptr },
+  { "p",                                 500, nullptr },
+  { "q",                                 500, nullptr },
+  { "uhungarumlaut",                     500, nullptr },
+  { "r",                                 333, nullptr },
+  { "twosuperior",                       300, nullptr },
+  { "aacute",                            444, nullptr },
+  { "s",                                 389, nullptr },
+  { "OE",                                889, nullptr },
+  { "t",                                 278, nullptr },
+  { "divide",                            564, nullptr },
+  { "u",                                 500, nullptr },
+  { "Ccaron",                            667, nullptr },
+  { "v",                                 500, nullptr },
+  { "w",                                 722, nullptr },
+  { "x",                                 500, nullptr },
+  { "y",                                 500, nullptr },
+  { "z",                                 444, nullptr },
+  { "Gbreve",                            722, nullptr },
+  { "commaaccent",                       250, nullptr },
+  { "hungarumlaut",                      333, nullptr },
+  { "Idotaccent",                        333, nullptr },
+  { "Nacute",                            722, nullptr },
+  { "quotedbl",                          408, nullptr },
+  { "gcommaaccent",                      500, nullptr },
+  { "mu",                                500, nullptr },
+  { "greaterequal",                      549, nullptr },
+  { "Scaron",                            556, nullptr },
+  { "Lslash",                            611, nullptr },
+  { "semicolon",                         278, nullptr },
+  { "oslash",                            500, nullptr },
+  { "lessequal",                         549, nullptr },
+  { "lozenge",                           471, nullptr },
+  { "parenright",                        333, nullptr },
+  { "ccaron",                            444, nullptr },
+  { "Ecircumflex",                       611, nullptr },
+  { "gbreve",                            500, nullptr },
+  { "trademark",                         980, nullptr },
+  { "daggerdbl",                         500, nullptr },
+  { "nacute",                            500, nullptr },
+  { "macron",                            333, nullptr },
+  { "Otilde",                            722, nullptr },
+  { "Emacron",                           611, nullptr },
+  { "ellipsis",                         1000, nullptr },
+  { "scaron",                            389, nullptr },
+  { "AE",                                889, nullptr },
+  { "Ucircumflex",                       722, nullptr },
+  { "lslash",                            278, nullptr },
+  { "quotedblleft",                      444, nullptr },
+  { "guilsinglright",                    333, nullptr },
+  { "hyphen",                            333, nullptr },
+  { "quotesingle",                       180, nullptr },
+  { "eight",                             500, nullptr },
+  { "exclamdown",                        333, nullptr },
+  { "endash",                            500, nullptr },
+  { "oe",                                722, nullptr },
+  { "Abreve",                            722, nullptr },
+  { "Umacron",                           722, nullptr },
+  { "ecircumflex",                       444, nullptr },
+  { "Adieresis",                         722, nullptr },
+  { "copyright",                         760, nullptr },
+  { "Egrave",                            611, nullptr },
+  { "slash",                             278, nullptr },
+  { "Edieresis",                         611, nullptr },
+  { "otilde",                            500, nullptr },
+  { "Idieresis",                         333, nullptr },
+  { "parenleft",                         333, nullptr },
+  { "one",                               500, nullptr },
+  { "emacron",                           444, nullptr },
+  { "Odieresis",                         722, nullptr },
+  { "ucircumflex",                       500, nullptr },
+  { "bracketleft",                       333, nullptr },
+  { "Ugrave",                            722, nullptr },
+  { "quoteright",                        333, nullptr },
+  { "Udieresis",                         722, nullptr },
+  { "perthousand",                      1000, nullptr },
+  { "Ydieresis",                         722, nullptr },
+  { "umacron",                           500, nullptr },
+  { "abreve",                            444, nullptr },
+  { "Eacute",                            611, nullptr },
+  { "adieresis",                         444, nullptr },
+  { "egrave",                            444, nullptr },
+  { "edieresis",                         444, nullptr },
+  { "idieresis",                         278, nullptr },
+  { "Eth",                               722, nullptr },
+  { "ae",                                667, nullptr },
+  { "asterisk",                          500, nullptr },
+  { "odieresis",                         500, nullptr },
+  { "Uacute",                            722, nullptr },
+  { "ugrave",                            500, nullptr },
+  { "nine",                              500, nullptr },
+  { "five",                              500, nullptr },
+  { "udieresis",                         500, nullptr },
+  { "Zcaron",                            611, nullptr },
+  { "Scommaaccent",                      556, nullptr },
+  { "threequarters",                     750, nullptr },
+  { "guillemotright",                    500, nullptr },
+  { "Ccedilla",                          667, nullptr },
+  { "ydieresis",                         500, nullptr },
+  { "tilde",                             333, nullptr },
+  { "at",                                921, nullptr },
+  { "eacute",                            444, nullptr },
+  { "underscore",                        500, nullptr },
+  { "Euro",                              500, nullptr },
+  { "Dcroat",                            722, nullptr },
+  { "multiply",                          564, nullptr },
+  { "zero",                              500, nullptr },
+  { "eth",                               500, nullptr },
+  { "Scedilla",                          556, nullptr },
+  { "Ograve",                            722, nullptr },
+  { "Racute",                            667, nullptr },
+  { "partialdiff",                       476, nullptr },
+  { "uacute",                            500, nullptr },
+  { "braceleft",                         480, nullptr },
+  { "Thorn",                             556, nullptr },
+  { "zcaron",                            444, nullptr },
+  { "scommaaccent",                      389, nullptr },
+  { "ccedilla",                          444, nullptr },
+  { "Dcaron",                            722, nullptr },
+  { "dcroat",                            500, nullptr },
+  { "Ocircumflex",                       722, nullptr },
+  { "Oacute",                            722, nullptr },
+  { "scedilla",                          389, nullptr },
+  { "ogonek",                            333, nullptr },
+  { "ograve",                            500, nullptr },
+  { "racute",                            333, nullptr },
+  { "Tcaron",                            611, nullptr },
+  { "Eogonek",                           611, nullptr },
+  { "thorn",                             500, nullptr },
+  { "degree",                            400, nullptr },
+  { "registered",                        760, nullptr },
+  { "radical",                           453, nullptr },
+  { "Aring",                             722, nullptr },
+  { "percent",                           833, nullptr },
+  { "six",                               500, nullptr },
+  { "paragraph",                         453, nullptr },
+  { "dcaron",                            588, nullptr },
+  { "Uogonek",                           722, nullptr },
+  { "two",                               500, nullptr },
+  { "summation",                         600, nullptr },
+  { "Igrave",                            333, nullptr },
+  { "Lacute",                            611, nullptr },
+  { "ocircumflex",                       500, nullptr },
+  { "oacute",                            500, nullptr },
+  { "Uring",                             722, nullptr },
+  { "Lcommaaccent",                      611, nullptr },
+  { "tcaron",                            326, nullptr },
+  { "eogonek",                           444, nullptr },
+  { "Delta",                             612, nullptr },
+  { "Ohungarumlaut",                     722, nullptr },
+  { "asciicircum",                       469, nullptr },
+  { "aring",                             444, nullptr },
+  { "grave",                             333, nullptr },
+  { "uogonek",                           500, nullptr },
+  { "bracketright",                      333, nullptr },
+  { "Iacute",                            333, nullptr },
+  { "ampersand",                         778, nullptr },
+  { "igrave",                            278, nullptr },
+  { "lacute",                            278, nullptr },
+  { "Ncaron",                            722, nullptr },
+  { "plus",                              564, nullptr },
+  { "uring",                             500, nullptr },
+  { "quotesinglbase",                    333, nullptr },
+  { "lcommaaccent",                      278, nullptr },
+  { "Yacute",                            722, nullptr },
+  { "ohungarumlaut",                     500, nullptr },
+  { "threesuperior",                     300, nullptr },
+  { "acute",                             333, nullptr },
+  { "section",                           500, nullptr },
+  { "dieresis",                          333, nullptr },
+  { "iacute",                            278, nullptr },
+  { "quotedblbase",                      444, nullptr },
+  { "ncaron",                            500, nullptr },
+  { "florin",                            500, nullptr },
+  { "yacute",                            500, nullptr },
+  { "Rcommaaccent",                      667, nullptr },
+  { "fi",                                556, nullptr },
+  { "fl",                                556, nullptr },
+  { "Acircumflex",                       722, nullptr },
+  { "Cacute",                            667, nullptr },
+  { "Icircumflex",                       333, nullptr },
+  { "guillemotleft",                     500, nullptr },
+  { "germandbls",                        500, nullptr },
+  { "Amacron",                           722, nullptr },
+  { "seven",                             500, nullptr },
+  { "Sacute",                            556, nullptr },
+  { "ordmasculine",                      310, nullptr },
+  { "dotlessi",                          278, nullptr },
+  { "sterling",                          500, nullptr },
+  { "notequal",                          549, nullptr },
+  { "Imacron",                           333, nullptr },
+  { "rcommaaccent",                      333, nullptr },
+  { "Zdotaccent",                        611, nullptr },
+  { "acircumflex",                       444, nullptr },
+  { "cacute",                            444, nullptr },
+  { "Ecaron",                            611, nullptr },
+  { "icircumflex",                       278, nullptr },
+  { "braceright",                        480, nullptr },
+  { "quotedblright",                     444, nullptr },
+  { "amacron",                           444, nullptr },
+  { "sacute",                            389, nullptr },
+  { "imacron",