From commits+karl at tug.org Sun Apr 22 17:47:12 2018 From: commits+karl at tug.org (commits+karl at tug.org) Date: Sun, 22 Apr 2018 17:47:12 +0200 Subject: pdftex[796] branches/stable/source: sync for final pdftex 1.40.19 Message-ID: <201804221547.w3MFlCW0018210@tug.org> 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 . # # 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 . @@ -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 . # @@ -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 + + * 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 * 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 ## Copyright 2013-2015 Peter Breitenlohner ## 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 () 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 . +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 +. - 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 (). - The most up-to-date version of this documentation is on the Internet -at . + The most up-to-date version of this installer documentation is on the +Internet at . For the full documentation of TeX Live, see .  -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 (); 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 ; 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 - . + Of course a real hostname and its particular top-level CTAN + directory have to be specified. The list of CTAN mirrors is + available at . 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 - ). + 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 + . For general information + on building TeX Live, see . + *-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 ). 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., + + *-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 . + + +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 () 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, ) 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 . + 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 (), the 'sha512sum' program (from GNU +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 ). 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 . - -'--functionality' - - The "by-topic" categorization created by J\"urgen Fenn, as - specified at . - -'--characterization' - - Both the primary and secondary functionalities, as specified at - . - -'--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. has a list -of invocations for some distros. +The graphical user interface for 'tlmgr' requires Perl/Tk +. 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. 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 @@ ) 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 () 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 () 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 + + Import poppler-0.63.0. + * Makefile.am, version.ac: Adjust. + +2018-03-14 Luigi Scarso + + * 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 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 @@ -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 + + * patch-03-time: Adapted. + * patch-04-ctime: Removed. + +2018-03-20 Akira Kakuto + + * patch-05-w32: Added to compile gfile.cc on Windows. + +2018-03-18 Akira Kakuto + + * Import poppler-0.63.0. + 2018-01-15 Karl Berry * 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 + +-#ifdef _WIN32 +-# include +-#else ++#ifndef _WIN32 + # if defined(MACOS) + # include + # elif !defined(ACORN) +@@ -44,7 +42,6 @@ + # include + # include + # endif +-# include + # include + # include + # 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 + #include + #include ++#include + extern "C" { + #if defined(_WIN32) + # include +@@ -49,8 +50,6 @@ + # include + # endif + #elif defined(ACORN) +-#elif defined(MACOS) +-# include + #else + # include + # include +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 + #include ++#include + + 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 - #include -+#include - - 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 header file, and it defines `DIR'. @@ -28,7 +28,7 @@ /* Define to 1 if you have the 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 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 . # @@ -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 @@ -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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 +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 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 +// +// 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 +// Copyright (C) 2018 Albert Astals Cid // // 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 // Copyright (C) 2013 Thomas Freitag -// Copyright (C) 2013 Albert Astals Cid +// Copyright (C) 2013, 2018 Albert Astals Cid // Copyright (C) 2013 Adam Reichold // Copyright (C) 2014 Bogdan Cristea // Copyright (C) 2014 Peter Breitenlohner @@ -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 -// Copyright (C) 2009, 2011 Albert Astals Cid +// Copyright (C) 2009, 2011, 2018 Albert Astals Cid // Copyright (C) 2010 Adrian Johnson // Copyright (C) 2010 Brian Cameron // Copyright (C) 2011 Thomas Freitag @@ -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 // Copyright (C) 2008 Adam Batkin // Copyright (C) 2008, 2010, 2012, 2013 Hib Eris -// Copyright (C) 2009, 2012, 2014 Albert Astals Cid +// Copyright (C) 2009, 2012, 2014, 2017, 2018 Albert Astals Cid // Copyright (C) 2009 Kovid Goyal -// Copyright (C) 2013 Adam Reichold +// Copyright (C) 2013, 2018 Adam Reichold // Copyright (C) 2013, 2017 Adrian Johnson // Copyright (C) 2013 Peter Breitenlohner -// Copyright (C) 2013 Thomas Freitag +// Copyright (C) 2013, 2017 Thomas Freitag // Copyright (C) 2017 Christoph Cullmann // // To see a description of the changes please see the Changelog file that @@ -34,9 +34,7 @@ #include -#ifdef _WIN32 -# include -#else +#ifndef _WIN32 # if defined(MACOS) # include # elif !defined(ACORN) @@ -44,7 +42,6 @@ # include # include # endif -# include # include # include # 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 -// Copyright (C) 2009, 2011, 2012 Albert Astals Cid +// Copyright (C) 2009, 2011, 2012, 2017, 2018 Albert Astals Cid // Copyright (C) 2009 Kovid Goyal // Copyright (C) 2013 Adam Reichold // Copyright (C) 2013, 2017 Adrian Johnson @@ -23,6 +23,7 @@ // Copyright (C) 2014 Bogdan Cristea // Copyright (C) 2014 Peter Breitenlohner // Copyright (C) 2017 Christoph Cullmann +// Copyright (C) 2017 Thomas Freitag // // 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 #include #include +#include extern "C" { #if defined(_WIN32) # include @@ -48,8 +50,6 @@ # include # endif #elif defined(ACORN) -#elif defined(MACOS) -# include #else # include # include @@ -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 +// Copyright (C) 2017 Albert Astals Cid // //======================================================================== @@ -17,8 +18,6 @@ #include -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 // Copyright (C) 2012 Albert Astals Cid // Copyright (C) 2017 Adrian Johnson +// Copyright (C) 2017 Pekka Vuorela // // 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 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(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 // Copyright (C) 2008 Pino Toscano // Copyright (C) 2008 Tomas Are Haavet -// Copyright (C) 2009-2011, 2013, 2016, 2017 Albert Astals Cid +// Copyright (C) 2009-2011, 2013, 2016-2018 Albert Astals Cid // Copyright (C) 2012, 2013 Fabio D'Urso // Copyright (C) 2012, 2015 Tobias Koenig // Copyright (C) 2013 Thomas Freitag @@ -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 // Copyright (C) 2012 Fabio D'Urso // Copyright (C) 2013 Thomas Freitag -// Copyright (C) 2017 Albert Astals Cid +// Copyright (C) 2017, 2018 Albert Astals Cid // Copyright (C) 2017 Adrian Johnson // // 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 +// +// 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", 278, nullptr }, + { "cent", 500, nullptr }, + { "currency", 500, nullptr }, + { "logicalnot", 564, nullptr }, + { "zdotaccent", 444, nullptr }, + { "Atilde", 722, nullptr }, + { "breve", 333, nullptr }, + { "bar", 200, nullptr }, + { "fraction", 167, nullptr }, + { "less", 564, nullptr }, + { "ecaron", 444, nullptr }, + { "guilsinglleft", 333, nullptr }, + { "exclam", 333, nullptr }, + { "period", 250, nullptr }, + { "Rcaron", 667, nullptr }, + { "Kcommaaccent", 722, nullptr }, + { "greater", 564, nullptr }, + { "atilde", 444, nullptr }, + { "brokenbar", 200, nullptr }, + { "quoteleft", 333, nullptr }, + { "Edotaccent", 611, nullptr }, + { "onesuperior", 300, nullptr } }; static BuiltinFontWidth zapfDingbatsWidthsTab[] = { - { "a81", 438, NULL }, - { "a82", 138, NULL }, - { "a83", 277, NULL }, - { "a84", 415, NULL }, - { "a85", 509, NULL }, - { "a86", 410, NULL }, - { "a87", 234, NULL }, - { "a88", 234, NULL }, - { "a89", 390, NULL }, - { "a140", 788, NULL }, - { "a141", 788, NULL }, - { "a142", 788, NULL }, - { "a143", 788, NULL }, - { "a144", 788, NULL }, - { "a145", 788, NULL }, - { "a146", 788, NULL }, - { "a147", 788, NULL }, - { "a148", 788, NULL }, - { "a149", 788, NULL }, - { "a90", 390, NULL }, - { "a91", 276, NULL }, - { "a92", 276, NULL }, - { "space", 278, NULL }, - { "a93", 317, NULL }, - { "a94", 317, NULL }, - { "a95", 334, NULL }, - { "a96", 334, NULL }, - { "a97", 392, NULL }, - { "a98", 392, NULL }, - { "a99", 668, NULL }, - { "a150", 788, NULL }, - { "a151", 788, NULL }, - { "a152", 788, NULL }, - { "a153", 788, NULL }, - { "a154", 788, NULL }, - { "a155", 788, NULL }, - { "a156", 788, NULL }, - { "a157", 788, NULL }, - { "a158", 788, NULL }, - { "a159", 788, NULL }, - { "a160", 894, NULL }, - { "a161", 838, NULL }, - { "a162", 924, NULL }, - { "a163", 1016, NULL }, - { "a164", 458, NULL }, - { "a165", 924, NULL }, - { "a166", 918, NULL }, - { "a167", 927, NULL }, - { "a168", 928, NULL }, - { "a169", 928, NULL }, - { "a170", 834, NULL }, - { "a171", 873, NULL }, - { "a172", 828, NULL }, - { "a173", 924, NULL }, - { "a174", 917, NULL }, - { "a175", 930, NULL }, - { "a176", 931, NULL }, - { "a177", 463, NULL }, - { "a178", 883, NULL }, - { "a179", 836, NULL }, - { "a180", 867, NULL }, - { "a181", 696, NULL }, - { "a182", 874, NULL }, - { "a183", 760, NULL }, - { "a184", 946, NULL }, - { "a185", 865, NULL }, - { "a186", 967, NULL }, - { "a187", 831, NULL }, - { "a188", 873, NULL }, - { "a189", 927, NULL }, - { "a1", 974, NULL }, - { "a2", 961, NULL }, - { "a3", 980, NULL }, - { "a4", 719, NULL }, - { "a5", 789, NULL }, - { "a6", 494, NULL }, - { "a7", 552, NULL }, - { "a8", 537, NULL }, - { "a9", 577, NULL }, - { "a190", 970, NULL }, - { "a191", 918, NULL }, - { "a192", 748, NULL }, - { "a193", 836, NULL }, - { "a194", 771, NULL }, - { "a195", 888, NULL }, - { "a196", 748, NULL }, - { "a197", 771, NULL }, - { "a198", 888, NULL }, - { "a199", 867, NULL }, - { "a10", 692, NULL }, - { "a11", 960, NULL }, - { "a12", 939, NULL }, - { "a13", 549, NULL }, - { "a14", 855, NULL }, - { "a15", 911, NULL }, - { "a16", 933, NULL }, - { "a17", 945, NULL }, - { "a18", 974, NULL }, - { "a19", 755, NULL }, - { "a20", 846, NULL }, - { "a21", 762, NULL }, - { "a22", 761, NULL }, - { "a23", 571, NULL }, - { "a24", 677, NULL }, - { "a25", 763, NULL }, - { "a26", 760, NULL }, - { "a27", 759, NULL }, - { "a28", 754, NULL }, - { "a29", 786, NULL }, - { "a30", 788, NULL }, - { "a31", 788, NULL }, - { "a32", 790, NULL }, - { "a33", 793, NULL }, - { "a34", 794, NULL }, - { "a35", 816, NULL }, - { "a36", 823, NULL }, - { "a37", 789, NULL }, - { "a38", 841, NULL }, - { "a39", 823, NULL }, - { "a40", 833, NULL }, - { "a41", 816, NULL }, - { "a42", 831, NULL }, - { "a43", 923, NULL }, - { "a44", 744, NULL }, - { "a45", 723, NULL }, - { "a46", 749, NULL }, - { "a47", 790, NULL }, - { "a48", 792, NULL }, - { "a49", 695, NULL }, - { "a100", 668, NULL }, - { "a101", 732, NULL }, - { "a102", 544, NULL }, - { "a103", 544, NULL }, - { "a104", 910, NULL }, - { "a105", 911, NULL }, - { "a106", 667, NULL }, - { "a107", 760, NULL }, - { "a108", 760, NULL }, - { "a109", 626, NULL }, - { "a50", 776, NULL }, - { "a51", 768, NULL }, - { "a52", 792, NULL }, - { "a53", 759, NULL }, - { "a54", 707, NULL }, - { "a55", 708, NULL }, - { "a56", 682, NULL }, - { "a57", 701, NULL }, - { "a58", 826, NULL }, - { "a59", 815, NULL }, - { "a110", 694, NULL }, - { "a111", 595, NULL }, - { "a112", 776, NULL }, - { "a117", 690, NULL }, - { "a118", 791, NULL }, - { "a119", 790, NULL }, - { "a60", 789, NULL }, - { "a61", 789, NULL }, - { "a62", 707, NULL }, - { "a63", 687, NULL }, - { "a64", 696, NULL }, - { "a65", 689, NULL }, - { "a66", 786, NULL }, - { "a67", 787, NULL }, - { "a68", 713, NULL }, - { "a69", 791, NULL }, - { "a200", 696, NULL }, - { "a201", 874, NULL }, - { "a120", 788, NULL }, - { "a121", 788, NULL }, - { "a202", 974, NULL }, - { "a122", 788, NULL }, - { "a203", 762, NULL }, - { "a123", 788, NULL }, - { "a204", 759, NULL }, - { "a124", 788, NULL }, - { "a205", 509, NULL }, - { "a125", 788, NULL }, - { "a206", 410, NULL }, - { "a126", 788, NULL }, - { "a127", 788, NULL }, - { "a128", 788, NULL }, - { "a129", 788, NULL }, - { "a70", 785, NULL }, - { "a71", 791, NULL }, - { "a72", 873, NULL }, - { "a73", 761, NULL }, - { "a74", 762, NULL }, - { "a75", 759, NULL }, - { "a76", 892, NULL }, - { "a77", 892, NULL }, - { "a78", 788, NULL }, - { "a79", 784, NULL }, - { "a130", 788, NULL }, - { "a131", 788, NULL }, - { "a132", 788, NULL }, - { "a133", 788, NULL }, - { "a134", 788, NULL }, - { "a135", 788, NULL }, - { "a136", 788, NULL }, - { "a137", 788, NULL }, - { "a138", 788, NULL }, - { "a139", 788, NULL } + { "a81", 438, nullptr }, + { "a82", 138, nullptr }, + { "a83", 277, nullptr }, + { "a84", 415, nullptr }, + { "a85", 509, nullptr }, + { "a86", 410, nullptr }, + { "a87", 234, nullptr }, + { "a88", 234, nullptr }, + { "a89", 390, nullptr }, + { "a140", 788, nullptr }, + { "a141", 788, nullptr }, + { "a142", 788, nullptr }, + { "a143", 788, nullptr }, + { "a144", 788, nullptr }, + { "a145", 788, nullptr }, + { "a146", 788, nullptr }, + { "a147", 788, nullptr }, + { "a148", 788, nullptr }, + { "a149", 788, nullptr }, + { "a90", 390, nullptr }, + { "a91", 276, nullptr }, + { "a92", 276, nullptr }, + { "space", 278, nullptr }, + { "a93", 317, nullptr }, + { "a94", 317, nullptr }, + { "a95", 334, nullptr }, + { "a96", 334, nullptr }, + { "a97", 392, nullptr }, + { "a98", 392, nullptr }, + { "a99", 668, nullptr }, + { "a150", 788, nullptr }, + { "a151", 788, nullptr }, + { "a152", 788, nullptr }, + { "a153", 788, nullptr }, + { "a154", 788, nullptr }, + { "a155", 788, nullptr }, + { "a156", 788, nullptr }, + { "a157", 788, nullptr }, + { "a158", 788, nullptr }, + { "a159", 788, nullptr }, + { "a160", 894, nullptr }, + { "a161", 838, nullptr }, + { "a162", 924, nullptr }, + { "a163", 1016, nullptr }, + { "a164", 458, nullptr }, + { "a165", 924, nullptr }, + { "a166", 918, nullptr }, + { "a167", 927, nullptr }, + { "a168", 928, nullptr }, + { "a169", 928, nullptr }, + { "a170", 834, nullptr }, + { "a171", 873, nullptr }, + { "a172", 828, nullptr }, + { "a173", 924, nullptr }, + { "a174", 917, nullptr }, + { "a175", 930, nullptr }, + { "a176", 931, nullptr }, + { "a177", 463, nullptr }, + { "a178", 883, nullptr }, + { "a179", 836, nullptr }, + { "a180", 867, nullptr }, + { "a181", 696, nullptr }, + { "a182", 874, nullptr }, + { "a183", 760, nullptr }, + { "a184", 946, nullptr }, + { "a185", 865, nullptr }, + { "a186", 967, nullptr }, + { "a187", 831, nullptr }, + { "a188", 873, nullptr }, + { "a189", 927, nullptr }, + { "a1", 974, nullptr }, + { "a2", 961, nullptr }, + { "a3", 980, nullptr }, + { "a4", 719, nullptr }, + { "a5", 789, nullptr }, + { "a6", 494, nullptr }, + { "a7", 552, nullptr }, + { "a8", 537, nullptr }, + { "a9", 577, nullptr }, + { "a190", 970, nullptr }, + { "a191", 918, nullptr }, + { "a192", 748, nullptr }, + { "a193", 836, nullptr }, + { "a194", 771, nullptr }, + { "a195", 888, nullptr }, + { "a196", 748, nullptr }, + { "a197", 771, nullptr }, + { "a198", 888, nullptr }, + { "a199", 867, nullptr }, + { "a10", 692, nullptr }, + { "a11", 960, nullptr }, + { "a12", 939, nullptr }, + { "a13", 549, nullptr }, + { "a14", 855, nullptr }, + { "a15", 911, nullptr }, + { "a16", 933, nullptr }, + { "a17", 945, nullptr }, + { "a18", 974, nullptr }, + { "a19", 755, nullptr }, + { "a20", 846, nullptr }, + { "a21", 762, nullptr }, + { "a22", 761, nullptr }, + { "a23", 571, nullptr }, + { "a24", 677, nullptr }, + { "a25", 763, nullptr }, + { "a26", 760, nullptr }, + { "a27", 759, nullptr }, + { "a28", 754, nullptr }, + { "a29", 786, nullptr }, + { "a30", 788, nullptr }, + { "a31", 788, nullptr }, + { "a32", 790, nullptr }, + { "a33", 793, nullptr }, + { "a34", 794, nullptr }, + { "a35", 816, nullptr }, + { "a36", 823, nullptr }, + { "a37", 789, nullptr }, + { "a38", 841, nullptr }, + { "a39", 823, nullptr }, + { "a40", 833, nullptr }, + { "a41", 816, nullptr }, + { "a42", 831, nullptr }, + { "a43", 923, nullptr }, + { "a44", 744, nullptr }, + { "a45", 723, nullptr }, + { "a46", 749, nullptr }, + { "a47", 790, nullptr }, + { "a48", 792, nullptr }, + { "a49", 695, nullptr }, + { "a100", 668, nullptr }, + { "a101", 732, nullptr }, + { "a102", 544, nullptr }, + { "a103", 544, nullptr }, + { "a104", 910, nullptr }, + { "a105", 911, nullptr }, + { "a106", 667, nullptr }, + { "a107", 760, nullptr }, + { "a108", 760, nullptr }, + { "a109", 626, nullptr }, + { "a50", 776, nullptr }, + { "a51", 768, nullptr }, + { "a52", 792, nullptr }, + { "a53", 759, nullptr }, + { "a54", 707, nullptr }, + { "a55", 708, nullptr }, + { "a56", 682, nullptr }, + { "a57", 701, nullptr }, + { "a58", 826, nullptr }, + { "a59", 815, nullptr }, + { "a110", 694, nullptr }, + { "a111", 595, nullptr }, + { "a112", 776, nullptr }, + { "a117", 690, nullptr }, + { "a118", 791, nullptr }, + { "a119", 790, nullptr }, + { "a60", 789, nullptr }, + { "a61", 789, nullptr }, + { "a62", 707, nullptr }, + { "a63", 687, nullptr }, + { "a64", 696, nullptr }, + { "a65", 689, nullptr }, + { "a66", 786, nullptr }, + { "a67", 787, nullptr }, + { "a68", 713, nullptr }, + { "a69", 791, nullptr }, + { "a200", 696, nullptr }, + { "a201", 874, nullptr }, + { "a120", 788, nullptr }, + { "a121", 788, nullptr }, + { "a202", 974, nullptr }, + { "a122", 788, nullptr }, + { "a203", 762, nullptr }, + { "a123", 788, nullptr }, + { "a204", 759, nullptr }, + { "a124", 788, nullptr }, + { "a205", 509, nullptr }, + { "a125", 788, nullptr }, + { "a206", 410, nullptr }, + { "a126", 788, nullptr }, + { "a127", 788, nullptr }, + { "a128", 788, nullptr }, + { "a129", 788, nullptr }, + { "a70", 785, nullptr }, + { "a71", 791, nullptr }, + { "a72", 873, nullptr }, + { "a73", 761, nullptr }, + { "a74", 762, nullptr }, + { "a75", 759, nullptr }, + { "a76", 892, nullptr }, + { "a77", 892, nullptr }, + { "a78", 788, nullptr }, + { "a79", 784, nullptr }, + { "a130", 788, nullptr }, + { "a131", 788, nullptr }, + { "a132", 788, nullptr }, + { "a133", 788, nullptr }, + { "a134", 788, nullptr }, + { "a135", 788, nullptr }, + { "a136", 788, nullptr }, + { "a137", 788, nullptr }, + { "a138", 788, nullptr }, + { "a139", 788, nullptr } }; BuiltinFont builtinFonts[] = { - { "Courier", standardEncoding, 629, -157, { -23, -250, 715, 805}, NULL }, - { "Courier-Bold", standardEncoding, 629, -157, {-113, -250, 749, 801}, NULL }, - { "Courier-BoldOblique", standardEncoding, 629, -157, { -57, -250, 869, 801}, NULL }, - { "Courier-Oblique", standardEncoding, 629, -157, { -27, -250, 849, 805}, NULL }, - { "Helvetica", standardEncoding, 718, -207, {-166, -225, 1000, 931}, NULL }, - { "Helvetica-Bold", standardEncoding, 718, -207, {-170, -228, 1003, 962}, NULL }, - { "Helvetica-BoldOblique", standardEncoding, 718, -207, {-174, -228, 1114, 962}, NULL }, - { "Helvetica-Oblique", standardEncoding, 718, -207, {-170, -225, 1116, 931}, NULL }, - { "Symbol", symbolEncoding, 1010, -293, {-180, -293, 1090, 1010}, NULL }, - { "Times-Bold", standardEncoding, 683, -217, {-168, -218, 1000, 935}, NULL }, - { "Times-BoldItalic", standardEncoding, 683, -217, {-200, -218, 996, 921}, NULL }, - { "Times-Italic", standardEncoding, 683, -217, {-169, -217, 1010, 883}, NULL }, - { "Times-Roman", standardEncoding, 683, -217, {-168, -218, 1000, 898}, NULL }, - { "ZapfDingbats", zapfDingbatsEncoding, 820, -143, { -1, -143, 981, 820}, NULL } + { "Courier", standardEncoding, 629, -157, { -23, -250, 715, 805}, nullptr }, + { "Courier-Bold", standardEncoding, 629, -157, {-113, -250, 749, 801}, nullptr }, + { "Courier-BoldOblique", standardEncoding, 629, -157, { -57, -250, 869, 801}, nullptr }, + { "Courier-Oblique", standardEncoding, 629, -157, { -27, -250, 849, 805}, nullptr }, + { "Helvetica", standardEncoding, 718, -207, {-166, -225, 1000, 931}, nullptr }, + { "Helvetica-Bold", standardEncoding, 718, -207, {-170, -228, 1003, 962}, nullptr }, + { "Helvetica-BoldOblique", standardEncoding, 718, -207, {-174, -228, 1114, 962}, nullptr }, + { "Helvetica-Oblique", standardEncoding, 718, -207, {-170, -225, 1116, 931}, nullptr }, + { "Symbol", symbolEncoding, 1010, -293, {-180, -293, 1090, 1010}, nullptr }, + { "Times-Bold", standardEncoding, 683, -217, {-168, -218, 1000, 935}, nullptr }, + { "Times-BoldItalic", standardEncoding, 683, -217, {-200, -218, 996, 921}, nullptr }, + { "Times-Italic", standardEncoding, 683, -217, {-169, -217, 1010, 883}, nullptr }, + { "Times-Roman", standardEncoding, 683, -217, {-168, -218, 1000, 898}, nullptr }, + { "ZapfDingbats", zapfDingbatsEncoding, 820, -143, { -1, -143, 981, 820}, nullptr } }; BuiltinFont *builtinFontSubst[] = { Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/CMap.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/CMap.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/CMap.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -77,12 +77,12 @@ } delete cMapNameA; } else if (obj->isStream()) { - if (!(cMap = CMap::parse(NULL, collectionA, obj->getStream()))) { + if (!(cMap = CMap::parse(nullptr, collectionA, obj->getStream()))) { error(errSyntaxError, -1, "Invalid CMap in Type 0 font"); } } else { error(errSyntaxError, -1, "Invalid Encoding in Type 0 font"); - return NULL; + return nullptr; } return cMap; } @@ -105,7 +105,7 @@ error(errSyntaxError, -1, "Couldn't find '{0:t}' CMap file for '{1:t}' collection", cMapNameA, collectionA); - return NULL; + return nullptr; } cMap = new CMap(collectionA->copy(), cMapNameA->copy()); @@ -117,7 +117,7 @@ } CMap *CMap::parse(CMapCache *cache, GooString *collectionA, Stream *str) { - CMap *cMap = new CMap(collectionA->copy(), NULL); + CMap *cMap = new CMap(collectionA->copy(), nullptr); Object obj1 = str->getDict()->lookup("UseCMap"); if (!obj1.isNull()) { cMap->useCMap(cache, &obj1); @@ -131,7 +131,7 @@ CMap *CMap::parse(CMapCache *cache, GooString *collectionA, GooString *cMapNameA, Stream *stream) { - FILE *f = NULL; + FILE *f = nullptr; CMap *cmap; PSTokenizer *pst; char tok1[256], tok2[256], tok3[256]; @@ -154,7 +154,7 @@ error(errSyntaxError, -1, "Couldn't find '{0:t}' CMap file for '{1:t}' collection", cMapNameA, collectionA); - return NULL; + return nullptr; } pst = new PSTokenizer(&getCharFromFile, f); } @@ -323,7 +323,7 @@ cMapName = cMapNameA; isIdent = gTrue; wMode = wModeA; - vector = NULL; + vector = nullptr; refCnt = 1; #ifdef MULTITHREADED gInitMutex(&mutex); @@ -340,7 +340,7 @@ // GlobalParams::getCMap() in order to acqure the lock need to use // GlobalParams::getCMap if (cache) { - subCMap = cache->getCMap(collection, useNameStr, NULL); + subCMap = cache->getCMap(collection, useNameStr, nullptr); } else { subCMap = globalParams->getCMap(collection, useNameStr); } @@ -511,7 +511,7 @@ Guint *rmap, Guint rmapSize, Guint ncand) { int i; - if (vec == 0) return; + if (vec == nullptr) return; for (i = 0;i < 256;i++) { if (vec[i].isVector) { setReverseMapVector((startCode+i) << 8, @@ -547,7 +547,7 @@ int i; for (i = 0; i < cMapCacheSize; ++i) { - cache[i] = NULL; + cache[i] = nullptr; } } @@ -591,5 +591,5 @@ cmap->incRefCnt(); return cmap; } - return NULL; + return nullptr; } Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/CMap.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/CMap.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/CMap.h 2018-04-22 15:47:12 UTC (rev 796) @@ -14,7 +14,7 @@ // under GPL version 2 or later // // Copyright (C) 2008 Koji Otani -// Copyright (C) 2009 Albert Astals Cid +// Copyright (C) 2009, 2018 Albert Astals Cid // Copyright (C) 2012, 2017 Adrian Johnson // // To see a description of the changes please see the Changelog file that @@ -71,6 +71,9 @@ ~CMap(); + CMap(const CMap &) = delete; + CMap& operator=(const CMap &) = delete; + void incRefCnt(); void decRefCnt(); @@ -129,6 +132,9 @@ CMapCache(); ~CMapCache(); + CMapCache(const CMapCache &) = delete; + CMapCache& operator=(const CMapCache &) = delete; + // Get the CMap for the specified character collection. // Increments its reference count; there will be one reference for // the cache plus one for the caller of this function. Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/CachedFile.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/CachedFile.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/CachedFile.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -6,7 +6,7 @@ // // Copyright 2009 Stefan Thomas // Copyright 2010, 2011 Hib Eris -// Copyright 2010 Albert Astals Cid +// Copyright 2010, 2018 Albert Astals Cid // Copyright (C) 2013 Julien Nabet // //======================================================================== @@ -172,12 +172,12 @@ return bytes; } -int CachedFile::cache(size_t offset, size_t length) +int CachedFile::cache(size_t rangeOffset, size_t rangeLength) { std::vector r; ByteRange range; - range.offset = offset; - range.length = length; + range.offset = rangeOffset; + range.length = rangeLength; r.push_back(range); return cache(r); } Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/CachedFile.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/CachedFile.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/CachedFile.h 2018-04-22 15:47:12 UTC (rev 796) @@ -8,7 +8,7 @@ // // Copyright 2009 Stefan Thomas // Copyright 2010 Hib Eris -// Copyright 2010 Albert Astals Cid +// Copyright 2010, 2018 Albert Astals Cid // //======================================================================== @@ -47,6 +47,9 @@ CachedFile(CachedFileLoader *cacheLoader, GooString *uri); + CachedFile(const CachedFile &) = delete; + CachedFile& operator=(const CachedFile &) = delete; + Guint getLength() { return length; } long int tell(); int seek(long int offset, int origin); @@ -127,8 +130,12 @@ public: + CachedFileLoader() = default; virtual ~CachedFileLoader() {}; + CachedFileLoader(const CachedFileLoader &) = delete; + CachedFileLoader& operator=(const CachedFileLoader &) = delete; + // Initializes the file load. // Returns the length of the file. // The caller is responsible for deleting uri and cachedFile. Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/CairoFontEngine.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/CairoFontEngine.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/CairoFontEngine.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -17,7 +17,7 @@ // Copyright (C) 2005-2007 Jeff Muizelaar // Copyright (C) 2005, 2006 Kristian H?gsberg // Copyright (C) 2005 Martin Kretzschmar -// Copyright (C) 2005, 2009, 2012, 2013, 2015, 2017 Albert Astals Cid +// Copyright (C) 2005, 2009, 2012, 2013, 2015, 2017, 2018 Albert Astals Cid // Copyright (C) 2006, 2007, 2010, 2011 Carlos Garcia Campos // Copyright (C) 2007 Koji Otani // Copyright (C) 2008, 2009 Chris Wilson @@ -70,17 +70,17 @@ // CairoFont //------------------------------------------------------------------------ -CairoFont::CairoFont(Ref ref, - cairo_font_face_t *cairo_font_face, - int *codeToGID, - Guint codeToGIDLen, - GBool substitute, - GBool printing) : ref(ref), - cairo_font_face(cairo_font_face), - codeToGID(codeToGID), - codeToGIDLen(codeToGIDLen), - substitute(substitute), - printing(printing) { } +CairoFont::CairoFont(Ref refA, + cairo_font_face_t *cairo_font_faceA, + int *codeToGIDA, + Guint codeToGIDLenA, + GBool substituteA, + GBool printingA) : ref(refA), + cairo_font_face(cairo_font_faceA), + codeToGID(codeToGIDA), + codeToGIDLen(codeToGIDLenA), + substitute(substituteA), + printing(printingA) { } CairoFont::~CairoFont() { cairo_font_face_destroy (cairo_font_face); @@ -181,7 +181,7 @@ FT_Face face; cairo_font_face_t *font_face; - if (font_data == NULL) { + if (font_data == nullptr) { if (FT_New_Face (lib, filename, 0, &face)) return gFalse; } else { @@ -287,7 +287,7 @@ tmpl.fd = -1; - if (font_data == NULL) { + if (font_data == nullptr) { /* if we fail to mmap the file, just pass it to FreeType instead */ tmpl.fd = open (filename, O_RDONLY); if (tmpl.fd == -1) @@ -298,7 +298,7 @@ return _ft_new_face_uncached (lib, filename, font_data, font_data_len, face_out, font_face_out); } - tmpl.bytes = (unsigned char *) mmap (NULL, st.st_size, + tmpl.bytes = (unsigned char *) mmap (nullptr, st.st_size, PROT_READ, MAP_PRIVATE, tmpl.fd, 0); if (tmpl.bytes == MAP_FAILED) { @@ -352,7 +352,7 @@ l = (struct _ft_face_data *) gmallocn (1, sizeof (struct _ft_face_data)); *l = tmpl; - l->prev = NULL; + l->prev = nullptr; l->next = _ft_open_faces; if (_ft_open_faces) _ft_open_faces->prev = l; @@ -379,15 +379,15 @@ #define _ft_new_face _ft_new_face_uncached #endif -CairoFreeTypeFont::CairoFreeTypeFont(Ref ref, - cairo_font_face_t *cairo_font_face, - int *codeToGID, - Guint codeToGIDLen, - GBool substitute) : CairoFont(ref, - cairo_font_face, - codeToGID, - codeToGIDLen, - substitute, +CairoFreeTypeFont::CairoFreeTypeFont(Ref refA, + cairo_font_face_t *cairo_font_faceA, + int *codeToGIDA, + Guint codeToGIDLenA, + GBool substituteA) : CairoFont(refA, + cairo_font_faceA, + codeToGIDA, + codeToGIDLenA, + substituteA, gTrue) { } CairoFreeTypeFont::~CairoFreeTypeFont() { } @@ -394,7 +394,6 @@ CairoFreeTypeFont *CairoFreeTypeFont::create(GfxFont *gfxFont, XRef *xref, FT_Library lib, GBool useCIDs) { - Object refObj, strObj; GooString *fileName; char *fileNameC; char *font_data; @@ -413,12 +412,12 @@ int *codeToGID; Guint codeToGIDLen; - codeToGID = NULL; + codeToGID = nullptr; codeToGIDLen = 0; - font_data = NULL; + font_data = nullptr; font_data_len = 0; - fileName = NULL; - fileNameC = NULL; + fileName = nullptr; + fileNameC = nullptr; GBool substitute = gFalse; @@ -425,7 +424,7 @@ ref = *gfxFont->getID(); fontType = gfxFont->getType(); - if (!(fontLoc = gfxFont->locateFont(xref, NULL))) { + if (!(fontLoc = gfxFont->locateFont(xref, nullptr))) { error(errSyntaxError, -1, "Couldn't find a font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->getCString() : "(unnamed)"); @@ -435,7 +434,7 @@ // embedded font if (fontLoc->locType == gfxFontLocEmbedded) { font_data = gfxFont->readEmbFontFile(xref, &font_data_len); - if (NULL == font_data) + if (nullptr == font_data) goto err2; // external font @@ -445,7 +444,7 @@ substitute = gTrue; } - if (fileName != NULL) { + if (fileName != nullptr) { fileNameC = fileName->getCString(); } @@ -482,7 +481,7 @@ break; case fontCIDType2: case fontCIDType2OT: - codeToGID = NULL; + codeToGID = nullptr; n = 0; if (((GfxCIDFont *)gfxFont)->getCIDToGID()) { n = ((GfxCIDFont *)gfxFont)->getCIDToGIDLen(); @@ -492,7 +491,7 @@ n * sizeof(int)); } } else { - if (font_data != NULL) { + if (font_data != nullptr) { ff = FoFiTrueType::make(font_data, font_data_len); } else { ff = FoFiTrueType::load(fileNameC); @@ -506,7 +505,7 @@ /* Fall through */ case fontTrueType: case fontTrueTypeOT: - if (font_data != NULL) { + if (font_data != nullptr) { ff = FoFiTrueType::make(font_data, font_data_len); } else { ff = FoFiTrueType::load(fileNameC); @@ -530,12 +529,12 @@ case fontCIDType0: case fontCIDType0C: - codeToGID = NULL; + codeToGID = nullptr; codeToGIDLen = 0; if (!useCIDs) { - if (font_data != NULL) { + if (font_data != nullptr) { ff1c = FoFiType1C::make(font_data, font_data_len); } else { ff1c = FoFiType1C::load(fileNameC); @@ -553,7 +552,7 @@ break; case fontCIDType0COT: - codeToGID = NULL; + codeToGID = nullptr; n = 0; if (((GfxCIDFont *)gfxFont)->getCIDToGID()) { n = ((GfxCIDFont *)gfxFont)->getCIDToGIDLen(); @@ -567,7 +566,7 @@ if (!codeToGID) { if (!useCIDs) { - if (font_data != NULL) { + if (font_data != nullptr) { ff = FoFiTrueType::make(font_data, font_data_len); } else { ff = FoFiTrueType::load(fileNameC); @@ -604,7 +603,7 @@ gfree (codeToGID); gfree (font_data); fprintf (stderr, "some font thing failed\n"); - return NULL; + return nullptr; } //------------------------------------------------------------------------ @@ -704,7 +703,7 @@ box.y1 = mat[1]; box.x2 = mat[2]; box.y2 = mat[3]; - gfx = new Gfx(info->doc, output_dev, resDict, &box, NULL); + gfx = new Gfx(info->doc, output_dev, resDict, &box, nullptr); output_dev->startDoc(info->doc, info->fontEngine); output_dev->startPage (1, gfx->getState(), gfx->getXRef()); output_dev->setInType3Char(gTrue); @@ -736,7 +735,6 @@ CairoType3Font *CairoType3Font::create(GfxFont *gfxFont, PDFDoc *doc, CairoFontEngine *fontEngine, GBool printing, XRef *xref) { - Object refObj, strObj; type3_font_info_t *info; cairo_font_face_t *font_face; Ref ref; @@ -779,18 +777,18 @@ return new CairoType3Font(ref, doc, font_face, codeToGID, codeToGIDLen, printing, xref); } -CairoType3Font::CairoType3Font(Ref ref, - PDFDoc *doc, - cairo_font_face_t *cairo_font_face, - int *codeToGID, - Guint codeToGIDLen, - GBool printing, XRef *xref) : CairoFont(ref, - cairo_font_face, - codeToGID, - codeToGIDLen, +CairoType3Font::CairoType3Font(Ref refA, + PDFDoc *docA, + cairo_font_face_t *cairo_font_faceA, + int *codeToGIDA, + Guint codeToGIDLenA, + GBool printingA, XRef *xref) : CairoFont(refA, + cairo_font_faceA, + codeToGIDA, + codeToGIDLenA, gFalse, - printing), - doc(doc) { } + printingA), + doc(docA) { } CairoType3Font::~CairoType3Font() { } @@ -809,7 +807,7 @@ lib = libA; for (i = 0; i < cairoFontCacheSize; ++i) { - fontCache[i] = NULL; + fontCache[i] = nullptr; } FT_Int major, minor, patch; Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/CairoFontEngine.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/CairoFontEngine.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/CairoFontEngine.h 2018-04-22 15:47:12 UTC (rev 796) @@ -15,7 +15,7 @@ // under GPL version 2 or later // // Copyright (C) 2005, 2006 Kristian H?gsberg -// Copyright (C) 2005 Albert Astals Cid +// Copyright (C) 2005, 2018 Albert Astals Cid // Copyright (C) 2006, 2007 Jeff Muizelaar // Copyright (C) 2006, 2010 Carlos Garcia Campos // Copyright (C) 2008, 2017 Adrian Johnson @@ -51,6 +51,8 @@ GBool substitute, GBool printing); virtual ~CairoFont(); + CairoFont(const CairoFont &) = delete; + CairoFont& operator=(const CairoFont &other) = delete; virtual GBool matches(Ref &other, GBool printing); cairo_font_face_t *getFontFace(void); @@ -114,6 +116,8 @@ // Create a font engine. CairoFontEngine(FT_Library libA); ~CairoFontEngine(); + CairoFontEngine(const CairoFontEngine &) = delete; + CairoFontEngine& operator=(const CairoFontEngine &other) = delete; CairoFont *getFont(GfxFont *gfxFont, PDFDoc *doc, GBool printing, XRef *xref); Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/CairoOutputDev.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/CairoOutputDev.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/CairoOutputDev.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -16,9 +16,9 @@ // // Copyright (C) 2005-2008 Jeff Muizelaar // Copyright (C) 2005, 2006 Kristian H?gsberg -// Copyright (C) 2005, 2009, 2012, 2017 Albert Astals Cid +// Copyright (C) 2005, 2009, 2012, 2017, 2018 Albert Astals Cid // Copyright (C) 2005 Nickolay V. Shmyrev -// Copyright (C) 2006-2011, 2013, 2014, 2017 Carlos Garcia Campos +// Copyright (C) 2006-2011, 2013, 2014, 2017, 2018 Carlos Garcia Campos // Copyright (C) 2008 Carl Worth // Copyright (C) 2008-2017 Adrian Johnson // Copyright (C) 2008 Michael Vrable @@ -69,6 +69,11 @@ // #define LOG_CAIRO +// To limit memory usage and improve performance when printing, limit +// cairo images to this size. 8192 is sufficient for an A2 sized +// 300ppi image. +#define MAX_PRINT_IMAGE_SIZE 8192 + #ifdef LOG_CAIRO #define LOG(x) (x) #else @@ -91,7 +96,7 @@ //------------------------------------------------------------------------ CairoImage::CairoImage (double x1, double y1, double x2, double y2) { - this->image = NULL; + this->image = nullptr; this->x1 = x1; this->y1 = y1; this->x2 = x2; @@ -123,7 +128,7 @@ GBool CairoOutputDev::ft_lib_initialized = gFalse; CairoOutputDev::CairoOutputDev() { - doc = NULL; + doc = nullptr; if (!ft_lib_initialized) { FT_Init_FreeType(&ft_lib); @@ -130,19 +135,19 @@ ft_lib_initialized = gTrue; } - fontEngine = NULL; + fontEngine = nullptr; fontEngine_owner = gFalse; - glyphs = NULL; - fill_pattern = NULL; + glyphs = nullptr; + fill_pattern = nullptr; fill_color.r = fill_color.g = fill_color.b = 0; - stroke_pattern = NULL; + stroke_pattern = nullptr; stroke_color.r = stroke_color.g = stroke_color.b = 0; stroke_opacity = 1.0; fill_opacity = 1.0; - textClipPath = NULL; - strokePathClip = NULL; - cairo = NULL; - currentFont = NULL; + textClipPath = nullptr; + strokePathClip = nullptr; + cairo = nullptr; + currentFont = nullptr; #if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 14, 0) prescaleImages = gFalse; #else @@ -156,16 +161,16 @@ text_matrix_valid = gTrue; antialias = CAIRO_ANTIALIAS_DEFAULT; - groupColorSpaceStack = NULL; - maskStack = NULL; - group = NULL; - mask = NULL; - shape = NULL; - cairo_shape = NULL; + groupColorSpaceStack = nullptr; + maskStack = nullptr; + group = nullptr; + mask = nullptr; + shape = nullptr; + cairo_shape = nullptr; knockoutCount = 0; - text = NULL; - actualText = NULL; + text = nullptr; + actualText = nullptr; // the SA parameter supposedly defaults to false, but Acrobat // apparently hardwires it to true @@ -172,7 +177,7 @@ stroke_adjust = gTrue; align_stroke_coords = gFalse; adjusted_stroke_width = gFalse; - xref = NULL; + xref = nullptr; } CairoOutputDev::~CairoOutputDev() { @@ -198,7 +203,7 @@ void CairoOutputDev::setCairo(cairo_t *cairo) { - if (this->cairo != NULL) { + if (this->cairo != nullptr) { cairo_status_t status = cairo_status (this->cairo); if (status) { error(errInternal, -1, "cairo context error: {0:s}\n", cairo_status_to_string(status)); @@ -206,7 +211,7 @@ cairo_destroy (this->cairo); assert(!cairo_shape); } - if (cairo != NULL) { + if (cairo != nullptr) { this->cairo = cairo_reference (cairo); /* save the initial matrix so that we can use it for type3 fonts. */ //XXX: is this sufficient? could we miss changes to the matrix somehow? @@ -213,8 +218,8 @@ cairo_get_matrix(cairo, &orig_matrix); setContextAntialias(cairo, antialias); } else { - this->cairo = NULL; - this->cairo_shape = NULL; + this->cairo = nullptr; + this->cairo_shape = nullptr; } } @@ -229,8 +234,8 @@ this->text->incRefCnt(); actualText = new ActualText(text); } else { - this->text = NULL; - actualText = NULL; + this->text = nullptr; + actualText = nullptr; } } @@ -281,7 +286,7 @@ if (text) text->startPage(state); - if (xrefA != NULL) { + if (xrefA != nullptr) { xref = xrefA; } } @@ -340,7 +345,7 @@ if (strokePathClip->dashes) gfree (strokePathClip->dashes); gfree (strokePathClip); - strokePathClip = NULL; + strokePathClip = nullptr; } } @@ -950,11 +955,11 @@ cairo_translate (cairo, -box.x1, -box.y1); strokePathTmp = strokePathClip; - strokePathClip = NULL; + strokePathClip = nullptr; adjusted_stroke_width_tmp = adjusted_stroke_width; maskTmp = mask; - mask = NULL; - gfx = new Gfx(doc, this, resDict, &box, NULL, NULL, NULL, gfxA->getXRef()); + mask = nullptr; + gfx = new Gfx(doc, this, resDict, &box, nullptr, nullptr, nullptr, gfxA->getXRef()); if (paintType == 2) inUncoloredPattern = gTrue; gfx->display(str); @@ -1351,7 +1356,7 @@ strokePathClip->dashes = (double*) gmallocn (sizeof(double), strokePathClip->dash_count); cairo_get_dash (cairo, strokePathClip->dashes, &strokePathClip->dash_offset); } else { - strokePathClip->dashes = NULL; + strokePathClip->dashes = nullptr; } strokePathClip->cap = cairo_get_line_cap (cairo); strokePathClip->join = cairo_get_line_join (cairo); @@ -1503,12 +1508,12 @@ finish: gfree (glyphs); - glyphs = NULL; + glyphs = nullptr; if (use_show_text_glyphs) { gfree (clusters); - clusters = NULL; + clusters = nullptr; gfree (utf8); - utf8 = NULL; + utf8 = nullptr; } } @@ -1579,7 +1584,7 @@ cairo_clip (cairo_shape); } cairo_path_destroy (textClipPath); - textClipPath = NULL; + textClipPath = nullptr; } } @@ -1611,7 +1616,7 @@ cairo_surface_t *cairo_surface_create_similar_clip (cairo_t *cairo, cairo_content_t content) { cairo_pattern_t *pattern; - cairo_surface_t *surface = NULL; + cairo_surface_t *surface = nullptr; cairo_push_group_with_content (cairo, content); pattern = cairo_pop_group (cairo); @@ -1723,7 +1728,7 @@ cairo_paint_with_alpha (cairo, fill_opacity); } cairo_pattern_destroy(mask); - mask = NULL; + mask = nullptr; } if (shape) { @@ -1733,7 +1738,7 @@ cairo_set_source_rgb (cairo_shape, 0, 0, 0); } cairo_pattern_destroy (shape); - shape = NULL; + shape = nullptr; } popTransparencyGroup(); @@ -1881,7 +1886,7 @@ /* we don't need to track the shape anymore because * we are not above any knockout groups */ cairo_destroy(cairo_shape); - cairo_shape = NULL; + cairo_shape = nullptr; } } groupColorSpaceStack = css->next; @@ -1892,7 +1897,7 @@ void CairoOutputDev::clearSoftMask(GfxState * /*state*/) { if (mask) cairo_pattern_destroy(mask); - mask = NULL; + mask = nullptr; } /* Taken from cairo/doc/tutorial/src/singular.c */ @@ -1965,7 +1970,7 @@ GBool interpolate) { if (interpolate) - return CAIRO_FILTER_BEST; + return CAIRO_FILTER_GOOD; int orig_width = cairo_image_surface_get_width (image); int orig_height = cairo_image_surface_get_height (image); @@ -1985,7 +1990,7 @@ if (scaled_width / orig_width >= 4 || scaled_height / orig_height >= 4) return CAIRO_FILTER_NEAREST; - return CAIRO_FILTER_BEST; + return CAIRO_FILTER_GOOD; } void CairoOutputDev::drawImageMask(GfxState *state, Object *ref, Stream *str, @@ -2453,7 +2458,7 @@ * cairo doesn't yet do minifaction filtering causing scaled down * images with CAIRO_FILTER_NEAREST to look really bad */ cairo_pattern_set_filter (pattern, - interpolate ? CAIRO_FILTER_BEST : CAIRO_FILTER_FAST); + interpolate ? CAIRO_FILTER_GOOD : CAIRO_FILTER_FAST); if (state->getFillColorSpace()->getMode() == csPattern) { cairo_matrix_init_translate (&matrix, 0, scaledHeight); @@ -2761,7 +2766,7 @@ cairo_surface_mark_dirty (image); - setMimeData(state, str, ref, colorMap, image); + setMimeData(state, str, ref, colorMap, image, height); pattern = cairo_pattern_create_for_surface (image); cairo_surface_destroy (image); @@ -2915,7 +2920,7 @@ if (!globalsStr->isStream()) return gTrue; - if (setMimeIdFromRef(image, CAIRO_MIME_TYPE_JBIG2_GLOBAL_ID, NULL, + if (setMimeIdFromRef(image, CAIRO_MIME_TYPE_JBIG2_GLOBAL_ID, nullptr, jb2Str->getGlobalsStreamRef())) return gFalse; @@ -2935,8 +2940,38 @@ } #endif +#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 15, 10) +GBool CairoOutputDev::setMimeDataForCCITTParams(Stream *str, + cairo_surface_t *image, int height) +{ + CCITTFaxStream *ccittStr = static_cast(str); + + GooString params; + params.appendf("Columns={0:d}", ccittStr->getColumns()); + params.appendf(" Rows={0:d}", height); + params.appendf(" K={0:d}", ccittStr->getEncoding()); + params.appendf(" EndOfLine={0:d}", ccittStr->getEndOfLine() ? 1 : 0); + params.appendf(" EncodedByteAlign={0:d}", ccittStr->getEncodedByteAlign() ? 1 : 0); + params.appendf(" EndOfBlock={0:d}", ccittStr->getEndOfBlock() ? 1 : 0); + params.appendf(" BlackIs1={0:d}", ccittStr->getBlackIs1() ? 1 : 0); + params.appendf(" DamagedRowsBeforeError={0:d}", ccittStr->getDamagedRowsBeforeError()); + + char *p = strdup(params.getCString()); + if (cairo_surface_set_mime_data (image, CAIRO_MIME_TYPE_CCITT_FAX_PARAMS, + (const unsigned char*)p, + params.getLength(), + gfree, (void*)p)) + { + gfree (p); + return gFalse; + } + + return gTrue; +} +#endif + void CairoOutputDev::setMimeData(GfxState *state, Stream *str, Object *ref, - GfxImageColorMap *colorMap, cairo_surface_t *image) + GfxImageColorMap *colorMap, cairo_surface_t *image, int height) { char *strBuffer; int len; @@ -2960,12 +2995,17 @@ mime_type = CAIRO_MIME_TYPE_JBIG2; break; #endif +#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 15, 10) + case strCCITTFax: + mime_type = CAIRO_MIME_TYPE_CCITT_FAX; + break; +#endif default: return; } obj = str->getDict()->lookup("ColorSpace"); - colorSpace = GfxColorSpace::parse(NULL, &obj, this, state); + colorSpace = GfxColorSpace::parse(nullptr, &obj, this, state); // colorspace in stream dict may be different from colorspace in jpx // data @@ -3002,6 +3042,11 @@ return; #endif +#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 15, 10) + if (strKind == strCCITTFax && !setMimeDataForCCITTParams(str, image, height)) + return; +#endif + if (getStreamData (str->getNextStream(), &strBuffer, &len)) { cairo_status_t status = CAIRO_STATUS_SUCCESS; @@ -3039,10 +3084,10 @@ GBool printing, GfxImageColorMap *colorMapA, int *maskColorsA) { - cairo_surface_t *image = NULL; + cairo_surface_t *image = nullptr; int i; - lookup = NULL; + lookup = nullptr; colorMap = colorMapA; maskColors = maskColorsA; width = widthA; @@ -3085,7 +3130,22 @@ bool needsCustomDownscaling = true; #endif - if (!needsCustomDownscaling || printing || scaledWidth >= width || scaledHeight >= height) { + if (printing) { + if (width > MAX_PRINT_IMAGE_SIZE || height > MAX_PRINT_IMAGE_SIZE) { + if (width > height) { + scaledWidth = MAX_PRINT_IMAGE_SIZE; + scaledHeight = MAX_PRINT_IMAGE_SIZE * (double)height/width; + } else { + scaledHeight = MAX_PRINT_IMAGE_SIZE; + scaledWidth = MAX_PRINT_IMAGE_SIZE * (double)width/height; + } + needsCustomDownscaling = true; + } else { + needsCustomDownscaling = false; + } + } + + if (!needsCustomDownscaling || scaledWidth >= width || scaledHeight >= height) { // No downscaling. Create cairo image containing the source image data. unsigned char *buffer; ptrdiff_t stride; @@ -3133,7 +3193,6 @@ } void getRow(int row_num, uint32_t *row_data) override { - int i; Guchar *pix; if (row_num <= current_row) @@ -3144,7 +3203,7 @@ current_row++; } - if (unlikely(pix == NULL)) { + if (unlikely(pix == nullptr)) { memset(row_data, 0, width*4); if (!imageError) { error(errInternal, -1, "Bad image stream"); @@ -3154,7 +3213,7 @@ Guchar *p = pix; GfxRGB rgb; - for (i = 0; i < width; i++) { + for (int i = 0; i < width; i++) { rgb = lookup[*p]; row_data[i] = ((int) colToByte(rgb.r) << 16) | @@ -3199,7 +3258,7 @@ cairo_matrix_t matrix; int width, height; int scaledWidth, scaledHeight; - cairo_filter_t filter = CAIRO_FILTER_BEST; + cairo_filter_t filter = CAIRO_FILTER_GOOD; RescaleDrawImage rescale; LOG (printf ("drawImage %dx%d\n", widthA, heightA)); @@ -3215,8 +3274,17 @@ if (width == widthA && height == heightA) filter = getFilterForSurface (image, interpolate); - if (!inlineImg) /* don't read stream twice if it is an inline image */ - setMimeData(state, str, ref, colorMap, image); + if (!inlineImg) { /* don't read stream twice if it is an inline image */ + // cairo 1.15.10 allows mime image data to have different size to cairo image + // mime image size will be scaled to same size as cairo image +#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 15, 10) + bool requireSameSize = false; +#else + bool requireSameSize = true; +#endif + if (!requireSameSize || (width == widthA && height == heightA)) + setMimeData(state, str, ref, colorMap, image, heightA); + } pattern = cairo_pattern_create_for_surface (image); cairo_surface_destroy (image); @@ -3241,7 +3309,7 @@ } else if (mask) { maskPattern = cairo_pattern_reference (mask); } else { - maskPattern = NULL; + maskPattern = nullptr; } cairo_save (cairo); @@ -3286,11 +3354,11 @@ CairoImageOutputDev::CairoImageOutputDev() { - images = NULL; + images = nullptr; numImages = 0; size = 0; - imgDrawCbk = NULL; - imgDrawCbkData = NULL; + imgDrawCbk = nullptr; + imgDrawCbkData = nullptr; } CairoImageOutputDev::~CairoImageOutputDev() @@ -3363,7 +3431,7 @@ CairoOutputDev::drawImageMask(state, ref, str, width, height, invert, interpolate, inlineImg); image->setImage (surface); - setCairo (NULL); + setCairo (nullptr); cairo_surface_destroy (surface); cairo_destroy (cr); } @@ -3396,7 +3464,7 @@ } image->setImage (surface); - setCairo (NULL); + setCairo (nullptr); cairo_surface_destroy (surface); cairo_destroy (cr); } @@ -3426,7 +3494,7 @@ CairoOutputDev::drawImage(state, ref, str, width, height, colorMap, interpolate, maskColors, inlineImg); image->setImage (surface); - setCairo (NULL); + setCairo (nullptr); cairo_surface_destroy (surface); cairo_destroy (cr); } @@ -3462,7 +3530,7 @@ maskStr, maskWidth, maskHeight, maskColorMap, maskInterpolate); image->setImage (surface); - setCairo (NULL); + setCairo (nullptr); cairo_surface_destroy (surface); cairo_destroy (cr); } @@ -3497,7 +3565,7 @@ maskStr, maskWidth, maskHeight, maskInvert, maskInterpolate); image->setImage (surface); - setCairo (NULL); + setCairo (nullptr); cairo_surface_destroy (surface); cairo_destroy (cr); } Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/CairoOutputDev.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/CairoOutputDev.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/CairoOutputDev.h 2018-04-22 15:47:12 UTC (rev 796) @@ -18,11 +18,12 @@ // Copyright (C) 2005, 2006 Kristian H?gsberg // Copyright (C) 2005 Nickolay V. Shmyrev // Copyright (C) 2006-2011, 2013 Carlos Garcia Campos -// Copyright (C) 2008, 2009, 2011-2016 Adrian Johnson +// Copyright (C) 2008, 2009, 2011-2017 Adrian Johnson // Copyright (C) 2008 Michael Vrable // Copyright (C) 2010-2013 Thomas Freitag // Copyright (C) 2015 Suzuki Toshiya // Copyright (C) 2016 Jason Crain +// Copyright (C) 2018 Albert Astals Cid // // 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 @@ -63,6 +64,9 @@ // Destructor. ~CairoImage (); + CairoImage(const CairoImage &) = delete; + CairoImage& operator=(const CairoImage &) = delete; + // Set the image cairo surface void setImage (cairo_surface_t *image); @@ -265,10 +269,10 @@ void setCairo (cairo_t *cr); void setTextPage (TextPage *text); - void setPrinting (GBool printing) { this->printing = printing; needFontUpdate = gTrue; } + void setPrinting (GBool printingA) { printing = printingA; needFontUpdate = gTrue; } void setAntialias(cairo_antialias_t antialias); - void setInType3Char(GBool inType3Char) { this->inType3Char = inType3Char; } + void setInType3Char(GBool inType3CharA) { inType3Char = inType3CharA; } void getType3GlyphWidth (double *wx, double *wy) { *wx = t3_glyph_wx; *wy = t3_glyph_wy; } GBool hasType3GlyphBBox () { return t3_glyph_has_bbox; } double *getType3GlyphBBox () { return t3_glyph_bbox; } @@ -283,12 +287,15 @@ GBool interpolate); GBool getStreamData (Stream *str, char **buffer, int *length); void setMimeData(GfxState *state, Stream *str, Object *ref, - GfxImageColorMap *colorMap, cairo_surface_t *image); + GfxImageColorMap *colorMap, cairo_surface_t *image, int height); void fillToStrokePathClip(GfxState *state); void alignStrokeCoords(GfxSubpath *subpath, int i, double *x, double *y); #if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 14, 0) GBool setMimeDataForJBIG2Globals (Stream *str, cairo_surface_t *image); #endif +#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 15, 10) + GBool setMimeDataForCCITTParams(Stream *str, cairo_surface_t *image, int height); +#endif static void setContextAntialias(cairo_t *cr, cairo_antialias_t antialias); GfxRGB fill_color, stroke_color; @@ -328,7 +335,6 @@ GBool printing; GBool use_show_text_glyphs; GBool text_matrix_valid; - cairo_surface_t *surface; cairo_glyph_t *glyphs; int glyphCount; cairo_text_cluster_t *clusters; @@ -352,7 +358,6 @@ cairo_pattern_t *shape; cairo_pattern_t *mask; cairo_matrix_t mask_matrix; - cairo_surface_t *cairo_shape_surface; cairo_t *cairo_shape; int knockoutCount; struct ColorSpaceStack { Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/CairoRescaleBox.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/CairoRescaleBox.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/CairoRescaleBox.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -271,9 +271,9 @@ int dest_y; int src_y = 0; uint32_t *scanline; - int *x_coverage = NULL; - int *y_coverage = NULL; - uint32_t *temp_buf = NULL; + int *x_coverage = nullptr; + int *y_coverage = nullptr; + uint32_t *temp_buf = nullptr; GBool retval = gFalse; unsigned int *dest; int dst_stride; Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/CairoRescaleBox.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/CairoRescaleBox.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/CairoRescaleBox.h 2018-04-22 15:47:12 UTC (rev 796) @@ -30,6 +30,7 @@ // under GPL version 2 or later // // Copyright (C) 2012 Adrian Johnson +// Copyright (C) 2018 Albert Astals Cid // // 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 @@ -48,6 +49,9 @@ CairoRescaleBox() {}; virtual ~CairoRescaleBox() {}; + CairoRescaleBox(const CairoRescaleBox &) = delete; + CairoRescaleBox& operator=(const CairoRescaleBox &) = delete; + virtual GBool downScaleImage(unsigned orig_width, unsigned orig_height, signed scaled_width, signed scaled_height, unsigned short int start_column, unsigned short int start_row, Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/Catalog.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/Catalog.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/Catalog.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -80,26 +80,26 @@ ok = gTrue; doc = docA; xref = doc->getXRef(); - pages = NULL; - pageRefs = NULL; + pages = nullptr; + pageRefs = nullptr; numPages = -1; pagesSize = 0; - baseURI = NULL; - pageLabelInfo = NULL; - form = NULL; - optContent = NULL; + baseURI = nullptr; + pageLabelInfo = nullptr; + form = nullptr; + optContent = nullptr; pageMode = pageModeNull; pageLayout = pageLayoutNull; - destNameTree = NULL; - embeddedFileNameTree = NULL; - jsNameTree = NULL; - viewerPrefs = NULL; - structTreeRoot = NULL; + destNameTree = nullptr; + embeddedFileNameTree = nullptr; + jsNameTree = nullptr; + viewerPrefs = nullptr; + structTreeRoot = nullptr; - pagesList = NULL; - pagesRefList = NULL; - attrsList = NULL; - kidsIdxList = NULL; + pagesList = nullptr; + pagesRefList = nullptr; + attrsList = nullptr; + kidsIdxList = nullptr; lastCachedPage = 0; markInfo = markInfoNull; @@ -127,7 +127,7 @@ optContent = new OCGs(&optContentProps, xref); if (!optContent->isOk ()) { delete optContent; - optContent = NULL; + optContent = nullptr; } } @@ -202,13 +202,13 @@ Page *Catalog::getPage(int i) { - if (i < 1) return NULL; + if (i < 1) return nullptr; catalogLocker(); if (i > lastCachedPage) { GBool cached = cachePageTree(i); if ( cached == gFalse) { - return NULL; + return nullptr; } } return pages[i-1]; @@ -216,13 +216,13 @@ Ref *Catalog::getPageRef(int i) { - if (i < 1) return NULL; + if (i < 1) return nullptr; catalogLocker(); if (i > lastCachedPage) { GBool cached = cachePageTree(i); if ( cached == gFalse) { - return NULL; + return nullptr; } } return &pageRefs[i-1]; @@ -230,7 +230,7 @@ GBool Catalog::cachePageTree(int page) { - if (pagesList == NULL) { + if (pagesList == nullptr) { Ref pagesRef; @@ -262,19 +262,19 @@ pagesSize = getNumPages(); pages = (Page **)gmallocn_checkoverflow(pagesSize, sizeof(Page *)); pageRefs = (Ref *)gmallocn_checkoverflow(pagesSize, sizeof(Ref)); - if (pages == NULL || pageRefs == NULL ) { + if (pages == nullptr || pageRefs == nullptr ) { error(errSyntaxError, -1, "Cannot allocate page cache"); pagesSize = 0; return gFalse; } for (int i = 0; i < pagesSize; ++i) { - pages[i] = NULL; + pages[i] = nullptr; pageRefs[i].num = -1; pageRefs[i].gen = -1; } attrsList = new std::vector(); - attrsList->push_back(new PageAttrs(NULL, obj.getDict())); + attrsList->push_back(new PageAttrs(nullptr, obj.getDict())); pagesList = new std::vector(); pagesList->push_back(std::move(obj)); pagesRefList = new std::vector(); @@ -343,6 +343,7 @@ if (lastCachedPage >= numPages) { error(errSyntaxError, -1, "Page count in top-level pages object is incorrect"); + delete p; return gFalse; } @@ -375,7 +376,7 @@ for (i = 0; i < getNumPages(); ++i) { Ref *ref = getPageRef(i+1); - if (ref != NULL && ref->num == num && ref->gen == gen) + if (ref != nullptr && ref->num == num && ref->gen == gen) return i + 1; } return 0; @@ -409,7 +410,7 @@ } if (dest && !dest->isOk()) { delete dest; - dest = NULL; + dest = nullptr; } return dest; @@ -432,7 +433,7 @@ obj= getDests(); if (!obj->isDict()) { - return NULL; + return nullptr; } return obj->dictGetKey(i); } @@ -441,7 +442,7 @@ { Object *obj = getDests(); if (!obj->isDict()) { - return NULL; + return nullptr; } Object obj1 = obj->dictGetVal(i); return createLinkDest(&obj1); @@ -461,10 +462,9 @@ FileSpec *Catalog::embeddedFile(int i) { - Object efDict; catalogLocker(); Object *obj = getEmbeddedFileNameTree()->getValue(i); - FileSpec *embeddedFile = 0; + FileSpec *embeddedFile = nullptr; if (obj->isRef()) { Object fsDict = obj->fetch(xref); embeddedFile = new FileSpec(&fsDict); @@ -580,7 +580,7 @@ { size = 0; length = 0; - entries = NULL; + entries = nullptr; } NameTree::~NameTree() @@ -690,7 +690,7 @@ entry = (Entry **) bsearch(name, entries, length, sizeof(Entry *), Entry::cmp); - if (entry != NULL) { + if (entry != nullptr) { return (*entry)->value.fetch(xref); } else { error(errSyntaxError, -1, "failed to look up ({0:s})", name->getCString()); @@ -712,7 +712,7 @@ if (index < length) { return &entries[index]->name; } else { - return NULL; + return nullptr; } } @@ -721,7 +721,7 @@ char *end; PageLabelInfo *pli = getPageLabelInfo(); - if (pli != NULL) { + if (pli != nullptr) { if (!pli->labelToIndex(label, index)) return gFalse; } else { @@ -744,7 +744,7 @@ return gFalse; PageLabelInfo *pli = getPageLabelInfo(); - if (pli != NULL) { + if (pli != nullptr) { return pli->indexToLabel(index, label); } else { snprintf(buffer, sizeof (buffer), "%d", index + 1); @@ -784,7 +784,7 @@ Dict *pageDict = pagesDict.getDict(); if (pageRootRef.isRef()) { const Ref pageRef = pageRootRef.getRef(); - Page *p = new Page(doc, 1, &pagesDict, pageRef, new PageAttrs(NULL, pageDict), form); + Page *p = new Page(doc, 1, &pagesDict, pageRef, new PageAttrs(nullptr, pageDict), form); if (p->isOk()) { pages = (Page **)gmallocn(1, sizeof(Page *)); pageRefs = (Ref *)gmallocn(1, sizeof(Ref)); @@ -853,7 +853,7 @@ Object catalog = xref->getCatalog(); if (!catalog.isDict()) { error(errSyntaxError, -1, "Catalog object is wrong type ({0:s})", catalog.getTypeName()); - return NULL; + return nullptr; } Object root = catalog.dictLookup("StructTreeRoot"); @@ -1051,7 +1051,7 @@ type == actionSaveDocumentStart ? "WS" : type == actionSaveDocumentFinish ? "DS" : type == actionPrintDocumentStart ? "WP" : - type == actionPrintDocumentFinish ? "DP" : NULL); + type == actionPrintDocumentFinish ? "DP" : nullptr); Object actionObject = additionalActionsObject.dictLookup(key); if (actionObject.isDict()) Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/Catalog.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/Catalog.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/Catalog.h 2018-04-22 15:47:12 UTC (rev 796) @@ -14,7 +14,7 @@ // under GPL version 2 or later // // Copyright (C) 2005 Kristian H?gsberg -// Copyright (C) 2005, 2007, 2009-2011, 2013, 2017 Albert Astals Cid +// Copyright (C) 2005, 2007, 2009-2011, 2013, 2017, 2018 Albert Astals Cid // Copyright (C) 2005 Jonathan Blandford // Copyright (C) 2005, 2006, 2008 Brad Hards // Copyright (C) 2007 Julien Rebetez @@ -68,6 +68,10 @@ public: NameTree(); ~NameTree(); + + NameTree(const NameTree &) = delete; + NameTree& operator=(const NameTree &) = delete; + void init(XRef *xref, Object *tree); Object lookup(GooString *name); int numEntries() { return length; }; @@ -110,6 +114,9 @@ // Destructor. ~Catalog(); + Catalog(const Catalog &) = delete; + Catalog& operator=(const Catalog &) = delete; + // Is catalog valid? GBool isOk() { return ok; } Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/CharCodeToUnicode.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/CharCodeToUnicode.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/CharCodeToUnicode.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -137,7 +137,7 @@ if (!(f = openFile(fileName->getCString(), "r"))) { error(errIO, -1, "Couldn't open cidToUnicode file '{0:t}'", fileName); - return NULL; + return nullptr; } size = 32768; @@ -161,7 +161,7 @@ fclose(f); ctu = new CharCodeToUnicode(collection->copy(), mapA, mapLenA, gTrue, - NULL, 0, 0); + nullptr, 0, 0); gfree(mapA); return ctu; } @@ -185,7 +185,7 @@ gfree(uBuf); error(errIO, -1, "Couldn't open unicodeToUnicode file '{0:t}'", fileName); - return NULL; + return nullptr; } size = 4096; @@ -192,7 +192,7 @@ mapA = (Unicode *)gmallocn(size, sizeof(Unicode)); memset(mapA, 0, size * sizeof(Unicode)); len = 0; - sMapA = NULL; + sMapA = nullptr; sMapSizeA = sMapLenA = 0; line = 0; @@ -205,7 +205,7 @@ continue; } n = 0; - while ((tok = strtok_r(NULL, " \t\r\n", &tokptr))) { + while ((tok = strtok_r(nullptr, " \t\r\n", &tokptr))) { if (n >= uBufSize) { uBufSize += 8; @@ -262,7 +262,7 @@ } CharCodeToUnicode *CharCodeToUnicode::make8BitToUnicode(Unicode *toUnicode) { - return new CharCodeToUnicode(NULL, toUnicode, 256, gTrue, NULL, 0, 0); + return new CharCodeToUnicode(nullptr, toUnicode, 256, gTrue, nullptr, 0, 0); } CharCodeToUnicode *CharCodeToUnicode::parseCMap(GooString *buf, int nBits) { @@ -269,7 +269,7 @@ CharCodeToUnicode *ctu; char *p; - ctu = new CharCodeToUnicode(NULL); + ctu = new CharCodeToUnicode(nullptr); p = buf->getCString(); ctu->parseCMap1(&getCharFromString, &p, nBits); return ctu; @@ -280,7 +280,7 @@ CharCodeToUnicode *ctu; FILE *f; - ctu = new CharCodeToUnicode(NULL); + ctu = new CharCodeToUnicode(nullptr); if ((f = globalParams->findToUnicodeFile(fileName))) { ctu->parseCMap1(&getCharFromFile, f, nBits); fclose(f); @@ -479,10 +479,10 @@ } CharCodeToUnicode::CharCodeToUnicode() { - tag = NULL; - map = NULL; + tag = nullptr; + map = nullptr; mapLen = 0; - sMap = NULL; + sMap = nullptr; sMapLen = sMapSize = 0; refCnt = 1; isIdentity = gFalse; @@ -500,7 +500,7 @@ for (i = 0; i < mapLen; ++i) { map[i] = 0; } - sMap = NULL; + sMap = nullptr; sMapLen = sMapSize = 0; refCnt = 1; isIdentity = gFalse; @@ -681,7 +681,7 @@ size = sizeA; cache = (CharCodeToUnicode **)gmallocn(size, sizeof(CharCodeToUnicode *)); for (i = 0; i < size; ++i) { - cache[i] = NULL; + cache[i] = nullptr; } } @@ -715,7 +715,7 @@ return ctu; } } - return NULL; + return nullptr; } void CharCodeToUnicodeCache::add(CharCodeToUnicode *ctu) { Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/CharCodeToUnicode.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/CharCodeToUnicode.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/CharCodeToUnicode.h 2018-04-22 15:47:12 UTC (rev 796) @@ -17,7 +17,7 @@ // // Copyright (C) 2007 Julien Rebetez // Copyright (C) 2007 Koji Otani -// Copyright (C) 2008, 2011, 2012 Albert Astals Cid +// Copyright (C) 2008, 2011, 2012, 2018 Albert Astals Cid // Copyright (C) 2017 Adrian Johnson // // To see a description of the changes please see the Changelog file that @@ -78,6 +78,9 @@ ~CharCodeToUnicode(); + CharCodeToUnicode(const CharCodeToUnicode &) = delete; + CharCodeToUnicode& operator=(const CharCodeToUnicode &) = delete; + void incRefCnt(); void decRefCnt(); @@ -130,6 +133,9 @@ CharCodeToUnicodeCache(int sizeA); ~CharCodeToUnicodeCache(); + CharCodeToUnicodeCache(const CharCodeToUnicodeCache &) = delete; + CharCodeToUnicodeCache& operator=(const CharCodeToUnicodeCache &) = delete; + // Get the CharCodeToUnicode object for . Increments its // reference count; there will be one reference for the cache plus // one for the caller of this function. Returns NULL on failure. Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/CurlCachedFile.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/CurlCachedFile.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/CurlCachedFile.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -20,9 +20,9 @@ CurlCachedFileLoader::CurlCachedFileLoader() { - url = NULL; - cachedFile = NULL; - curl = NULL; + url = nullptr; + cachedFile = nullptr; + curl = nullptr; } CurlCachedFileLoader::~CurlCachedFileLoader() { Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/DCTStream.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/DCTStream.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/DCTStream.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -64,7 +64,7 @@ DCTStream::DCTStream(Stream *strA, int colorXformA, Dict *dict, int recursion) : FilterStream(strA) { colorXform = colorXformA; - if (dict != NULL) { + if (dict != nullptr) { Object obj = dict->lookup("Width", recursion); err.width = (obj.isInt() && obj.getInt() <= JPEG_MAX_DIMENSION) ? obj.getInt() : 0; obj = dict->lookup("Height", recursion); @@ -100,11 +100,11 @@ src.pub.resync_to_restart = jpeg_resync_to_restart; src.pub.term_source = str_term_source; src.pub.bytes_in_buffer = 0; - src.pub.next_input_byte = NULL; + src.pub.next_input_byte = nullptr; src.str = str; src.index = 0; - current = NULL; - limit = NULL; + current = nullptr; + limit = nullptr; cinfo.err = &err.pub; if (!setjmp(err.setjmp_buffer)) { @@ -111,7 +111,7 @@ jpeg_create_decompress(&cinfo); cinfo.src = (jpeg_source_mgr *)&src; } - row_buffer = NULL; + row_buffer = nullptr; } void DCTStream::reset() { @@ -241,7 +241,7 @@ } int DCTStream::lookChar() { - if (unlikely(current == NULL)) { + if (unlikely(current == nullptr)) { return EOF; } return *current; @@ -251,10 +251,10 @@ GooString *s; if (psLevel < 2) { - return NULL; + return nullptr; } if (!(s = str->getPSFilter(psLevel, indent))) { - return NULL; + return nullptr; } s->append(indent)->append("<< >> /DCTDecode filter\n"); return s; Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/DateInfo.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/DateInfo.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/DateInfo.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -32,7 +32,7 @@ /* See PDF Reference 1.3, Section 3.8.2 for PDF Date representation */ GBool parseDateString(const char *dateString, int *year, int *month, int *day, int *hour, int *minute, int *second, char *tz, int *tzHour, int *tzMinute) { - if ( dateString == NULL ) return gFalse; + if ( dateString == nullptr ) return gFalse; if ( strlen(dateString) < 2 ) return gFalse; if ( dateString[0] == 'D' && dateString[1] == ':' ) @@ -82,7 +82,7 @@ char s[5]; struct tm *gt; size_t len; - time_t timep = timet ? *timet : time(NULL); + time_t timep = timet ? *timet : time(nullptr); struct tm t; gt = gmtime_r (&timep, &t); Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/Decrypt.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/Decrypt.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/Decrypt.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -14,7 +14,7 @@ // under GPL version 2 or later // // Copyright (C) 2008 Julien Rebetez -// Copyright (C) 2008, 2010, 2016, 2017 Albert Astals Cid +// Copyright (C) 2008, 2010, 2016-2018 Albert Astals Cid // Copyright (C) 2009 Matthias Franz // Copyright (C) 2009 David Benjamin // Copyright (C) 2012 Fabio D'Urso @@ -143,7 +143,7 @@ if(encRevision == 6) { // test contains the initial SHA-256 hash input K. // user key is not used in checking user password. - revision6Hash(userPassword, test, NULL); + revision6Hash(userPassword, test, nullptr); } if (!memcmp(test, userKey->getCString(), 32)) { @@ -154,7 +154,7 @@ if(encRevision == 6) { //test contains the initial SHA-256 hash input K. //user key is not used in computing intermediate user key. - revision6Hash(userPassword, test, NULL); + revision6Hash(userPassword, test, nullptr); } aes256KeyExpansion(&state, test, 32, gTrue); for (i = 0; i < 16; ++i) { @@ -1454,7 +1454,7 @@ // SHA-512 hash (see FIPS 180-4) //------------------------------------------------------------------------ // SHA 384 and SHA 512 use the same sequence of eighty constant 64 bit words. -static const uint64_t K[80] = { +static const uint64_t shaK[80] = { 0x428a2f98d728ae22ull, 0x7137449123ef65cdull, 0xb5c0fbcfec4d3b2full, 0xe9b5dba58189dbbcull, 0x3956c25bf348b538ull, 0x59f111f1b605d019ull, 0x923f82a4af194f9bull, 0xab1c5ed5da6d8118ull, 0xd807aa98a3030242ull, 0x12835b0145706fbeull, 0x243185be4ee4b28cull, 0x550c7dc3d5ffb4e2ull, 0x72be5d74f27b896full, 0x80deb1fe3b1696b1ull, 0x9bdc06a725c71235ull, @@ -1531,7 +1531,7 @@ // 3. for (t = 0; t < 80; ++t) { - T1 = h + sha512Sigma1(e) + sha512Ch(e,f,g) + K[t] + W[t]; + T1 = h + sha512Sigma1(e) + sha512Ch(e,f,g) + shaK[t] + W[t]; T2 = sha512Sigma0(a) + sha512Maj(a,b,c); h = g; g = f; Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/Dict.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/Dict.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/Dict.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -78,7 +78,7 @@ Dict::Dict(XRef *xrefA) { xref = xrefA; - entries = NULL; + entries = nullptr; size = length = 0; ref = 1; sorted = gFalse; @@ -185,11 +185,11 @@ return &entries[i]; } } - return NULL; + return nullptr; } GBool Dict::hasKey(const char *key) const { - return find(key) != NULL; + return find(key) != nullptr; } void Dict::remove(const char *key) { @@ -270,7 +270,7 @@ { GBool success = gFalse; Object obj1 = lookup ((char *) key); - if (obj1.isNull () && alt_key != NULL) { + if (obj1.isNull () && alt_key != nullptr) { obj1.free (); obj1 = lookup ((char *) alt_key); } Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/Dict.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/Dict.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/Dict.h 2018-04-22 15:47:12 UTC (rev 796) @@ -16,7 +16,7 @@ // Copyright (C) 2005 Kristian H?gsberg // Copyright (C) 2006 Krzysztof Kowalczyk // Copyright (C) 2007-2008 Julien Rebetez -// Copyright (C) 2010, 2017 Albert Astals Cid +// Copyright (C) 2010, 2017, 2018 Albert Astals Cid // Copyright (C) 2010 Pawe? Wiejacha // Copyright (C) 2013 Thomas Freitag // Copyright (C) 2017 Adrian Johnson @@ -57,6 +57,9 @@ // Destructor. ~Dict(); + Dict(const Dict &) = delete; + Dict& operator=(const Dict &) = delete; + // Get number of entries. int getLength() const { return length; } Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/Error.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/Error.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/Error.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -50,8 +50,8 @@ }; static void (*errorCbk)(void *data, ErrorCategory category, - Goffset pos, char *msg) = NULL; -static void *errorCbkData = NULL; + Goffset pos, char *msg) = nullptr; +static void *errorCbkData = nullptr; void setErrorCallback(void (*cbk)(void *data, ErrorCategory category, Goffset pos, char *msg), Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/ErrorCodes.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/ErrorCodes.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/ErrorCodes.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) 2017 Albert Astals Cid +// +// 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 ERRORCODES_H #define ERRORCODES_H @@ -33,4 +47,6 @@ #define errFileIO 10 // file I/O error +#define errFileChangedSinceOpen 11 // file has changed since opening and save can't be done + #endif Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/FileSpec.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/FileSpec.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/FileSpec.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -30,10 +30,10 @@ EmbFile::EmbFile(Object *efStream) { m_size = -1; - m_createDate = NULL; - m_modDate = NULL; - m_checksum = NULL; - m_mimetype = NULL; + m_createDate = nullptr; + m_modDate = nullptr; + m_checksum = nullptr; + m_mimetype = nullptr; m_objStr = efStream->copy(); @@ -102,10 +102,10 @@ FileSpec::FileSpec(Object *fileSpecA) { ok = gTrue; - fileName = NULL; - platformFileName = NULL; - embFile = NULL; - desc = NULL; + fileName = nullptr; + platformFileName = nullptr; + embFile = nullptr; + desc = nullptr; fileSpec = fileSpecA->copy(); Object obj1 = getFileSpecName(fileSpecA); @@ -146,7 +146,7 @@ EmbFile *FileSpec::getEmbeddedFile() { if(!ok) - return NULL; + return nullptr; if (embFile) return embFile; Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/FileSpec.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/FileSpec.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/FileSpec.h 2018-04-22 15:47:12 UTC (rev 796) @@ -6,7 +6,7 @@ // under GPL version 2 or later // // Copyright (C) 2008 Carlos Garcia Campos -// Copyright (C) 2017 Albert Astals Cid +// Copyright (C) 2017, 2018 Albert Astals Cid // // 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 @@ -27,6 +27,9 @@ EmbFile(Object *efStream); ~EmbFile(); + EmbFile(const EmbFile &) = delete; + EmbFile& operator=(const EmbFile &) = delete; + int size() { return m_size; } GooString *modDate() { return m_modDate; } GooString *createDate() { return m_createDate; } @@ -53,6 +56,9 @@ FileSpec(Object *fileSpec); ~FileSpec(); + FileSpec(const FileSpec &) = delete; + FileSpec& operator=(const FileSpec &) = delete; + GBool isOk() { return ok; } GooString *getFileName() const { return fileName; } Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/FontEncodingTables.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/FontEncodingTables.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/FontEncodingTables.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -11,38 +11,38 @@ #include "FontEncodingTables.h" const char *macRomanEncoding[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", @@ -138,7 +138,7 @@ "bar", "braceright", "asciitilde", - NULL, + nullptr, "Adieresis", "Aring", "Ccedilla", @@ -270,38 +270,38 @@ }; const char *macExpertEncoding[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", @@ -330,17 +330,17 @@ "nineoldstyle", "colon", "semicolon", - NULL, + nullptr, "threequartersemdash", - NULL, + nullptr, "questionsmall", - NULL, - NULL, - NULL, - NULL, + nullptr, + nullptr, + nullptr, + nullptr, "Ethsmall", - NULL, - NULL, + nullptr, + nullptr, "onequarter", "onehalf", "threequarters", @@ -350,12 +350,12 @@ "seveneighths", "onethird", "twothirds", - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, "ff", "fi", "fl", @@ -362,7 +362,7 @@ "ffi", "ffl", "parenleftinferior", - NULL, + nullptr, "parenrightinferior", "Circumflexsmall", "hypheninferior", @@ -397,14 +397,14 @@ "onefitted", "rupiah", "Tildesmall", - NULL, - NULL, + nullptr, + nullptr, "asuperior", "centsuperior", - NULL, - NULL, - NULL, - NULL, + nullptr, + nullptr, + nullptr, + nullptr, "Aacutesmall", "Agravesmall", "Acircumflexsmall", @@ -430,7 +430,7 @@ "Ugravesmall", "Ucircumflexsmall", "Udieresissmall", - NULL, + nullptr, "eightsuperior", "fourinferior", "threeinferior", @@ -438,25 +438,25 @@ "eightinferior", "seveninferior", "Scaronsmall", - NULL, + nullptr, "centinferior", "twoinferior", - NULL, + nullptr, "Dieresissmall", - NULL, + nullptr, "Caronsmall", "osuperior", "fiveinferior", - NULL, + nullptr, "commainferior", "periodinferior", "Yacutesmall", - NULL, + nullptr, "dollarinferior", - NULL, - NULL, + nullptr, + nullptr, "Thornsmall", - NULL, + nullptr, "nineinferior", "zeroinferior", "Zcaronsmall", @@ -465,29 +465,29 @@ "questiondownsmall", "oneinferior", "Lslashsmall", - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, "Cedillasmall", - NULL, - NULL, - NULL, - NULL, - NULL, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, "OEsmall", "figuredash", "hyphensuperior", - NULL, - NULL, - NULL, - NULL, + nullptr, + nullptr, + nullptr, + nullptr, "exclamdownsmall", - NULL, + nullptr, "Ydieresissmall", - NULL, + nullptr, "onesuperior", "twosuperior", "threesuperior", @@ -497,20 +497,20 @@ "sevensuperior", "ninesuperior", "zerosuperior", - NULL, + nullptr, "esuperior", "rsuperior", "tsuperior", - NULL, - NULL, + nullptr, + nullptr, "isuperior", "ssuperior", "dsuperior", - NULL, - NULL, - NULL, - NULL, - NULL, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, "lsuperior", "Ogoneksmall", "Brevesmall", @@ -522,45 +522,45 @@ "periodsuperior", "Dotaccentsmall", "Ringsmall", - NULL, - NULL, - NULL, - NULL + nullptr, + nullptr, + nullptr, + nullptr }; const char *winAnsiEncoding[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", @@ -788,38 +788,38 @@ }; const char *standardEncoding[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", @@ -915,40 +915,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", @@ -964,12 +964,12 @@ "guilsinglright", "fi", "fl", - NULL, + nullptr, "endash", "dagger", "daggerdbl", "periodcentered", - NULL, + nullptr, "paragraph", "bullet", "quotesinglbase", @@ -978,9 +978,9 @@ "guillemotright", "ellipsis", "perthousand", - NULL, + nullptr, "questiondown", - NULL, + nullptr, "grave", "acute", "circumflex", @@ -989,100 +989,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 *expertEncoding[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", @@ -1111,28 +1111,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", @@ -1139,7 +1139,7 @@ "ffi", "ffl", "parenleftinferior", - NULL, + nullptr, "parenrightinferior", "Circumflexsmall", "hyphensuperior", @@ -1174,67 +1174,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", @@ -1245,8 +1245,8 @@ "seveneighths", "onethird", "twothirds", - NULL, - NULL, + nullptr, + nullptr, "zerosuperior", "onesuperior", "twosuperior", @@ -1306,38 +1306,38 @@ }; const char *symbolEncoding[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", "universal", @@ -1433,40 +1433,40 @@ "bar", "braceright", "similar", - 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, "Upsilon1", "minute", "lessequal", @@ -1546,7 +1546,7 @@ "braceleftmid", "braceleftbt", "braceex", - NULL, + nullptr, "angleright", "integral", "integraltp", @@ -1561,42 +1561,42 @@ "bracerighttp", "bracerightmid", "bracerightbt", - NULL + nullptr }; const char *zapfDingbatsEncoding[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", "a1", "a2", @@ -1692,40 +1692,40 @@ "a98", "a99", "a100", - 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, "a101", "a102", "a103", @@ -1805,7 +1805,7 @@ "a181", "a200", "a182", - NULL, + nullptr, "a201", "a183", "a184", @@ -1820,5 +1820,5 @@ "a189", "a190", "a191", - NULL + nullptr }; Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/FontInfo.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/FontInfo.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/FontInfo.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -3,7 +3,7 @@ // FontInfo.cc // // Copyright (C) 2005, 2006 Kristian H?gsberg -// Copyright (C) 2005-2008, 2010, 2017 Albert Astals Cid +// Copyright (C) 2005-2008, 2010, 2017, 2018 Albert Astals Cid // Copyright (C) 2005 Brad Hards // Copyright (C) 2006 Kouhei Sutou // Copyright (C) 2009 Pino Toscano @@ -57,7 +57,7 @@ int lastPage; if (currentPage > doc->getNumPages()) { - return NULL; + return nullptr; } result = new GooList(); @@ -92,21 +92,20 @@ } void FontInfoScanner::scanFonts(XRef *xrefA, Dict *resDict, GooList *fontsList) { - Ref r; GfxFontDict *gfxFontDict; GfxFont *font; // scan the fonts in this resource dictionary - gfxFontDict = NULL; + gfxFontDict = nullptr; Object obj1 = resDict->lookupNF("Font"); if (obj1.isRef()) { Object obj2 = obj1.fetch(xrefA); if (obj2.isDict()) { - r = obj1.getRef(); + Ref r = obj1.getRef(); gfxFontDict = new GfxFontDict(xrefA, &r, obj2.getDict()); } } else if (obj1.isDict()) { - gfxFontDict = new GfxFontDict(xrefA, NULL, obj1.getDict()); + gfxFontDict = new GfxFontDict(xrefA, nullptr, obj1.getDict()); } if (gfxFontDict) { for (int i = 0; i < gfxFontDict->getNumFonts(); ++i) { @@ -160,10 +159,10 @@ // font name origName = font->getName(); - if (origName != NULL) { + if (origName != nullptr) { name = font->getName()->copy(); } else { - name = NULL; + name = nullptr; } // font type @@ -176,8 +175,8 @@ emb = font->getEmbeddedFontID(&embRef); } - file = NULL; - substituteName = NULL; + file = nullptr; + substituteName = nullptr; if (!emb) { SysFontType dummy; @@ -211,10 +210,10 @@ } FontInfo::FontInfo(FontInfo& f) { - name = f.name ? f.name->copy() : NULL; - file = f.file ? f.file->copy() : NULL; - encoding = f.encoding ? f.encoding->copy() : NULL; - substituteName = f.substituteName ? f.substituteName->copy() : NULL; + name = f.name ? f.name->copy() : nullptr; + file = f.file ? f.file->copy() : nullptr; + encoding = f.encoding ? f.encoding->copy() : nullptr; + substituteName = f.substituteName ? f.substituteName->copy() : nullptr; type = f.type; emb = f.emb; subset = f.subset; Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/FontInfo.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/FontInfo.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/FontInfo.h 2018-04-22 15:47:12 UTC (rev 796) @@ -3,7 +3,7 @@ // FontInfo.h // // Copyright (C) 2005 Kristian H?gsberg -// Copyright (C) 2005-2008, 2010, 2011 Albert Astals Cid +// Copyright (C) 2005-2008, 2010, 2011, 2018 Albert Astals Cid // Copyright (C) 2005 Brad Hards // Copyright (C) 2009 Pino Toscano // Copyright (C) 2012 Adrian Johnson @@ -56,6 +56,8 @@ // Destructor. ~FontInfo(); + FontInfo& operator=(const FontInfo &) = delete; + GooString *getName() { return name; }; GooString *getSubstituteName() { return substituteName; }; GooString *getFile() { return file; }; Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/Form.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/Form.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/Form.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -94,7 +94,7 @@ obj = aobj->copy(); type = formUndef; field = fieldA; - widget = NULL; + widget = nullptr; } FormWidget::~FormWidget() @@ -168,11 +168,11 @@ } LinkAction *FormWidget::getActivationAction() { - return widget ? widget->getAction() : NULL; + return widget ? widget->getAction() : nullptr; } LinkAction *FormWidget::getAdditionalAction(Annot::FormAdditionalActionsType type) { - return widget ? widget->getFormAdditionalAction(type) : NULL; + return widget ? widget->getFormAdditionalAction(type) : nullptr; } FormWidgetButton::FormWidgetButton (PDFDoc *docA, Object *aobj, unsigned num, Ref ref, FormField *p) : @@ -179,7 +179,7 @@ FormWidget(docA, aobj, num, ref, p) { type = formButton; - onStr = NULL; + onStr = nullptr; // Find the name of the ON state in the AP dictionnary // The reference say the Off state, if it existe, _must_ be stored in the AP dict under the name /Off @@ -205,7 +205,7 @@ // 12.7.4.2.3 Check Boxes // Yes should be used as the name for the on state - return parent()->getButtonType() == formButtonCheck ? (char *)"Yes" : NULL; + return parent()->getButtonType() == formButtonCheck ? (char *)"Yes" : nullptr; } FormWidgetButton::~FormWidgetButton () @@ -376,7 +376,7 @@ { if (!hasEdit()) { error(errInternal, -1, "FormFieldChoice::getEditChoice called on a non-editable choice\n"); - return NULL; + return nullptr; } return parent()->getEditChoice(); } @@ -618,12 +618,12 @@ type = ty; parent = parentA; numChildren = 0; - children = NULL; + children = nullptr; terminal = false; - widgets = NULL; + widgets = nullptr; readOnly = false; - defaultAppearance = NULL; - fullyQualifiedName = NULL; + defaultAppearance = nullptr; + fullyQualifiedName = nullptr; quadding = quaddingLeftJustified; hasQuadding = gFalse; @@ -715,7 +715,7 @@ if (obj1.isString()) { partialName = obj1.getString()->copy(); } else { - partialName = NULL; + partialName = nullptr; } obj1 = dict->lookup("TU"); @@ -722,7 +722,7 @@ if (obj1.isString()) { alternateUiName = obj1.getString()->copy(); } else { - alternateUiName = NULL; + alternateUiName = nullptr; } obj1 = dict->lookup("TM"); @@ -729,7 +729,7 @@ if(obj1.isString()) { mappingName = obj1.getString()->copy(); } else { - mappingName = NULL; + mappingName = nullptr; } } @@ -841,7 +841,7 @@ if(result) return result; } } - return NULL; + return nullptr; } GooString* FormField::getFullyQualifiedName() { @@ -948,7 +948,7 @@ Dict* dict = obj.getDict(); active_child = -1; noAllOff = false; - siblings = NULL; + siblings = nullptr; numSiblings = 0; appearanceState.setToNull(); @@ -1011,7 +1011,7 @@ if (!terminal) { for(int i=0; i(children[i]); - if (child != NULL) { + if (child != nullptr) { // Fill the siblings of this node childs child->setNumSiblings(numChildren-1); for(int j=0, counter=0; jcopy(); @@ -1286,8 +1286,8 @@ : FormField(docA, aobj, ref, parent, usedParents, formChoice) { numChoices = 0; - choices = NULL; - editedChoice = NULL; + choices = nullptr; + editedChoice = nullptr; topIdx = 0; Dict* dict = obj.getDict(); @@ -1433,7 +1433,7 @@ #endif void FormFieldChoice::updateSelection() { - Object objV, obj1; + Object objV; Object objI(objNull); if (edit && editedChoice) { @@ -1501,7 +1501,7 @@ void FormFieldChoice::deselectAll () { delete editedChoice; - editedChoice = NULL; + editedChoice = nullptr; unselectAll(); updateSelection(); @@ -1510,7 +1510,7 @@ void FormFieldChoice::toggle (int i) { delete editedChoice; - editedChoice = NULL; + editedChoice = nullptr; choices[i].selected = !choices[i].selected; updateSelection(); @@ -1519,7 +1519,7 @@ void FormFieldChoice::select (int i) { delete editedChoice; - editedChoice = NULL; + editedChoice = nullptr; if (!multiselect) unselectAll(); @@ -1531,7 +1531,7 @@ void FormFieldChoice::setEditChoice (GooString* new_content) { delete editedChoice; - editedChoice = NULL; + editedChoice = nullptr; unselectAll(); @@ -1570,7 +1570,7 @@ return choices[i].optionName; } - return NULL; + return nullptr; } //------------------------------------------------------------------------ @@ -1581,7 +1581,7 @@ signature_type(adbe_pkcs7_detached), signature(nullptr), signature_info(nullptr) { - signature = NULL; + signature = nullptr; signature_info = new SignatureInfo(); parseInfo(); @@ -1677,7 +1677,7 @@ return signature_info; } - if (signature == NULL) { + if (signature == nullptr) { error(errSyntaxError, 0, "Invalid or missing Signature string"); return signature_info; } @@ -1766,10 +1766,10 @@ size = 0; numFields = 0; - rootFields = NULL; + rootFields = nullptr; quadding = quaddingLeftJustified; - defaultAppearance = NULL; - defaultResources = NULL; + defaultAppearance = nullptr; + defaultResources = nullptr; obj1 = acroForm->dictLookup("NeedAppearances"); needAppearances = (obj1.isBool() && obj1.getBool()); @@ -1787,7 +1787,7 @@ // At a minimum, this dictionary shall contain a Font entry obj1 = resDict.dictLookup("Font"); if (obj1.isDict()) - defaultResources = new GfxResources(xref, resDict.getDict(), NULL); + defaultResources = new GfxResources(xref, resDict.getDict(), nullptr); } if (!defaultResources) { resDict.setToNull(); @@ -1815,7 +1815,7 @@ } std::set usedParents; - rootFields[numFields++] = createFieldFromDict (&obj2, doc, oref.getRef(), NULL, &usedParents); + rootFields[numFields++] = createFieldFromDict (&obj2, doc, oref.getRef(), nullptr, &usedParents); } } else { @@ -1918,7 +1918,7 @@ FormWidget *result = rootFields[i]->findWidgetByRef(aref); if(result) return result; } - return NULL; + return nullptr; } //------------------------------------------------------------------------ @@ -1928,7 +1928,7 @@ FormPageWidgets::FormPageWidgets (Annots *annots, unsigned int page, Form *form) { numWidgets = 0; - widgets = NULL; + widgets = nullptr; if (annots && annots->getNumAnnots() > 0 && form) { size = annots->getNumAnnots(); Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/Form.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/Form.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/Form.h 2018-04-22 15:47:12 UTC (rev 796) @@ -6,7 +6,7 @@ // // Copyright 2006 Julien Rebetez // Copyright 2007, 2008, 2011 Carlos Garcia Campos -// Copyright 2007-2010, 2012, 2015-2017 Albert Astals Cid +// Copyright 2007-2010, 2012, 2015-2018 Albert Astals Cid // Copyright 2010 Mark Riedesel // Copyright 2011 Pino Toscano // Copyright 2012 Fabio D'Urso @@ -29,6 +29,8 @@ #include "Object.h" #include "Annot.h" +#include + #include #include #include @@ -564,6 +566,9 @@ ~Form(); + Form(const Form &) = delete; + Form& operator=(const Form &) = delete; + // Look up an inheritable field dictionary entry. static Object fieldLookup(Dict *field, const char *key); @@ -612,6 +617,9 @@ FormPageWidgets (Annots* annots, unsigned int page, Form *form); ~FormPageWidgets(); + FormPageWidgets(const FormPageWidgets &) = delete; + FormPageWidgets& operator=(const FormPageWidgets &) = delete; + int getNumWidgets() const { return numWidgets; } FormWidget* getWidget(int i) const { return widgets[i]; } Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/Function.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/Function.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/Function.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -76,7 +76,7 @@ return new IdentityFunction(); } else { error(errSyntaxError, -1, "Expected function dictionary or stream"); - return NULL; + return nullptr; } Object obj1 = dict->lookup("FunctionType"); @@ -96,11 +96,11 @@ func = new PostScriptFunction(funcObj, dict); } else { error(errSyntaxError, -1, "Unimplemented function type ({0:d})", funcType); - return NULL; + return nullptr; } if (!func->isOk()) { delete func; - return NULL; + return nullptr; } return func; @@ -222,9 +222,9 @@ double in[funcMaxInputs]; int i, j, t, bit, idx; - idxOffset = NULL; - samples = NULL; - sBuf = NULL; + idxOffset = nullptr; + samples = nullptr; + sBuf = nullptr; ok = gFalse; //----- initialize the generic stuff @@ -651,10 +651,10 @@ int i; ok = gFalse; - funcs = NULL; - bounds = NULL; - encode = NULL; - scale = NULL; + funcs = nullptr; + bounds = nullptr; + encode = nullptr; + scale = nullptr; //----- initialize the generic stuff if (!init(dict)) { @@ -677,7 +677,7 @@ encode = (double *)gmallocn(2 * k, sizeof(double)); scale = (double *)gmallocn(k, sizeof(double)); for (i = 0; i < k; ++i) { - funcs[i] = NULL; + funcs[i] = nullptr; } for (i = 0; i < k; ++i) { std::set usedParentsAux = *usedParents; @@ -1131,8 +1131,8 @@ double in[funcMaxInputs]; int i; - code = NULL; - codeString = NULL; + code = nullptr; + codeString = nullptr; codeSize = 0; ok = gFalse; Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/Function.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/Function.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/Function.h 2018-04-22 15:47:12 UTC (rev 796) @@ -13,7 +13,7 @@ // All changes made under the Poppler project to this file are licensed // under GPL version 2 or later // -// Copyright (C) 2009, 2010 Albert Astals Cid +// Copyright (C) 2009, 2010, 2018 Albert Astals Cid // Copyright (C) 2010 Christian Feuers?nger // Copyright (C) 2011 Andrea Canciani // Copyright (C) 2012 Thomas Freitag @@ -56,6 +56,9 @@ virtual ~Function(); + Function(const Function &) = delete; + Function& operator=(const Function &other) = delete; + // Construct a function. Returns NULL if unsuccessful. static Function *parse(Object *funcObj); Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/Gfx.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/Gfx.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/Gfx.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -14,7 +14,7 @@ // under GPL version 2 or later // // Copyright (C) 2005 Jonathan Blandford -// Copyright (C) 2005-2013, 2015-2017 Albert Astals Cid +// Copyright (C) 2005-2013, 2015-2018 Albert Astals Cid // Copyright (C) 2006 Thorkild Stray // Copyright (C) 2006 Kristian H?gsberg // Copyright (C) 2006-2011 Carlos Garcia Campos @@ -38,6 +38,7 @@ // Copyright (C) 2012, 2013 Fabio D'Urso // Copyright (C) 2012 Lu Wang // Copyright (C) 2014 Jason Crain +// Copyright (C) 2017 Klar?lvdalens Datakonsult AB, a KDAB Group company, . Work sponsored by the LiMux project of the city of Munich // // 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 @@ -326,7 +327,7 @@ // build font dictionary Dict *resDict = resDictA->copy(xref); - fonts = NULL; + fonts = nullptr; obj1 = resDict->lookupNF("Font"); if (obj1.isRef()) { obj2 = obj1.fetch(xref); @@ -335,7 +336,7 @@ fonts = new GfxFontDict(xref, &r, obj2.getDict()); } } else if (obj1.isDict()) { - fonts = new GfxFontDict(xref, NULL, obj1.getDict()); + fonts = new GfxFontDict(xref, nullptr, obj1.getDict()); } // get XObject dictionary @@ -358,7 +359,7 @@ delete resDict; } else { - fonts = NULL; + fonts = nullptr; xObjDict.setToNull(); colorSpaceDict.setToNull(); patternDict.setToNull(); @@ -385,7 +386,7 @@ } } error(errSyntaxError, -1, "Unknown font tag '{0:s}'", name); - return NULL; + return nullptr; } Object GfxResources::lookupXObject(char *name) { @@ -464,7 +465,7 @@ } } error(errSyntaxError, -1, "Unknown pattern '{0:s}'", name); - return NULL; + return nullptr; } GfxShading *GfxResources::lookupShading(char *name, OutputDev *out, GfxState *state) { @@ -481,7 +482,7 @@ } } error(errSyntaxError, -1, "ExtGState '{0:s}' is unknown", name); - return NULL; + return nullptr; } Object GfxResources::lookupGState(char *name) { @@ -529,16 +530,16 @@ int i; doc = docA; - xref = (xrefA == NULL) ? doc->getXRef() : xrefA; + xref = (xrefA == nullptr) ? doc->getXRef() : xrefA; catalog = doc->getCatalog(); subPage = gFalse; printCommands = globalParams->getPrintCommands(); profileCommands = globalParams->getProfileCommands(); - mcStack = NULL; - parser = NULL; + mcStack = nullptr; + parser = nullptr; // start the resource stack - res = new GfxResources(xref, resDict, NULL); + res = new GfxResources(xref, resDict, nullptr); // initialize out = outA; @@ -556,7 +557,7 @@ } formDepth = 0; ocState = gTrue; - parser = NULL; + parser = nullptr; abortCheckCbk = abortCheckCbkA; abortCheckCbkData = abortCheckCbkDataA; @@ -584,16 +585,16 @@ int i; doc = docA; - xref = (xrefA == NULL) ? doc->getXRef() : xrefA; + xref = (xrefA == nullptr) ? doc->getXRef() : xrefA; catalog = doc->getCatalog(); subPage = gTrue; printCommands = globalParams->getPrintCommands(); profileCommands = globalParams->getProfileCommands(); - mcStack = NULL; - parser = NULL; + mcStack = nullptr; + parser = nullptr; // start the resource stack - res = new GfxResources(xref, resDict, NULL); + res = new GfxResources(xref, resDict, nullptr); // initialize out = outA; @@ -608,7 +609,7 @@ } formDepth = 0; ocState = gTrue; - parser = NULL; + parser = nullptr; abortCheckCbk = abortCheckCbkA; abortCheckCbkData = abortCheckCbkDataA; @@ -645,7 +646,7 @@ int length = 0; Guchar *profBuf = iccStream->toUnsignedChars(&length, 65536, 65536); cmsHPROFILE hp = cmsOpenProfileFromMem(profBuf,length); - if (hp == 0) { + if (hp == nullptr) { error(errSyntaxWarning, -1, "read ICCBased color space profile error"); } else { state->setDisplayProfile(hp); @@ -698,7 +699,7 @@ parser = new Parser(xref, new Lexer(xref, obj), gFalse); go(topLevel); delete parser; - parser = NULL; + parser = nullptr; } void Gfx::go(GBool topLevel) { @@ -747,7 +748,7 @@ cmd_g = new GooString (obj.getCmd()); data_p = (ProfileData *)hash->lookup (cmd_g); - if (data_p == NULL) { + if (data_p == nullptr) { data_p = new ProfileData(); hash->add (cmd_g, data_p); } @@ -764,6 +765,7 @@ if (++updateLevel >= 20000) { out->dump(); updateLevel = 0; + lastAbortCheck = 0; } // did the command throw an exception @@ -891,7 +893,7 @@ a = b = m; } if (cmp != 0) - return NULL; + return nullptr; return &opTab[a]; } @@ -945,7 +947,7 @@ a = args[0].getArray(); length = a->getLength(); if (length == 0) { - dash = NULL; + dash = nullptr; } else { dash = (double *)gmallocn(length, sizeof(double)); for (i = 0; i < length; ++i) { @@ -1113,7 +1115,7 @@ } if (obj2.isName("Default") || obj2.isName("Identity")) { - funcs[0] = funcs[1] = funcs[2] = funcs[3] = NULL; + funcs[0] = funcs[1] = funcs[2] = funcs[3] = nullptr; state->setTransfer(funcs); out->updateTransfer(state); } else if (obj2.isArray() && obj2.arrayGetLength() == 4) { @@ -1130,7 +1132,7 @@ } } else if (obj2.isName() || obj2.isDict() || obj2.isStream()) { if ((funcs[0] = Function::parse(&obj2))) { - funcs[1] = funcs[2] = funcs[3] = NULL; + funcs[1] = funcs[2] = funcs[3] = nullptr; state->setTransfer(funcs); out->updateTransfer(state); } @@ -1164,21 +1166,21 @@ } else { // "Luminosity" alpha = gFalse; } - funcs[0] = NULL; + funcs[0] = nullptr; obj3 = obj2.dictLookup("TR"); if (!obj3.isNull()) { if (obj3.isName("Default") || obj3.isName("Identity")) { - funcs[0] = NULL; + funcs[0] = nullptr; } else { funcs[0] = Function::parse(&obj3); - if (funcs[0] == NULL || + if (funcs[0] == nullptr || funcs[0]->getInputSize() != 1 || funcs[0]->getOutputSize() != 1) { error(errSyntaxError, getPos(), "Invalid transfer function in soft mask in ExtGState"); delete funcs[0]; - funcs[0] = NULL; + funcs[0] = nullptr; } } } @@ -1198,7 +1200,7 @@ if (obj3.isStream()) { Object obj4 = obj3.streamGetDict()->lookup("Group"); if (obj4.isDict()) { - blendingColorSpace = NULL; + blendingColorSpace = nullptr; isolated = knockout = gFalse; Object obj5 = obj4.dictLookup("CS"); if (!obj5.isNull()) { @@ -1350,7 +1352,7 @@ // get resources obj1 = dict->lookup("Resources"); - resDict = obj1.isDict() ? obj1.getDict() : (Dict *)NULL; + resDict = obj1.isDict() ? obj1.getDict() : (Dict *)nullptr; // draw it ++formDepth; @@ -1374,14 +1376,14 @@ void Gfx::opSetFillGray(Object args[], int numArgs) { GfxColor color; - GfxColorSpace *colorSpace = NULL; + GfxColorSpace *colorSpace = nullptr; - state->setFillPattern(NULL); + state->setFillPattern(nullptr); Object obj = res->lookupColorSpace("DefaultGray"); if (!obj.isNull()) { colorSpace = GfxColorSpace::parse(res, &obj, out, state); } - if (colorSpace == NULL) { + if (colorSpace == nullptr) { colorSpace = new GfxDeviceGrayColorSpace(); } state->setFillColorSpace(colorSpace); @@ -1393,14 +1395,14 @@ void Gfx::opSetStrokeGray(Object args[], int numArgs) { GfxColor color; - GfxColorSpace *colorSpace = NULL; + GfxColorSpace *colorSpace = nullptr; - state->setStrokePattern(NULL); + state->setStrokePattern(nullptr); Object obj = res->lookupColorSpace("DefaultGray"); if (!obj.isNull()) { colorSpace = GfxColorSpace::parse(res, &obj, out, state); } - if (colorSpace == NULL) { + if (colorSpace == nullptr) { colorSpace = new GfxDeviceGrayColorSpace(); } state->setStrokeColorSpace(colorSpace); @@ -1412,7 +1414,7 @@ void Gfx::opSetFillCMYKColor(Object args[], int numArgs) { GfxColor color; - GfxColorSpace *colorSpace = NULL; + GfxColorSpace *colorSpace = nullptr; int i; Object obj = res->lookupColorSpace("DefaultCMYK"); @@ -1419,10 +1421,10 @@ if (!obj.isNull()) { colorSpace = GfxColorSpace::parse(res, &obj, out, state); } - if (colorSpace == NULL) { + if (colorSpace == nullptr) { colorSpace = new GfxDeviceCMYKColorSpace(); } - state->setFillPattern(NULL); + state->setFillPattern(nullptr); state->setFillColorSpace(colorSpace); out->updateFillColorSpace(state); for (i = 0; i < 4; ++i) { @@ -1434,15 +1436,15 @@ void Gfx::opSetStrokeCMYKColor(Object args[], int numArgs) { GfxColor color; - GfxColorSpace *colorSpace = NULL; + GfxColorSpace *colorSpace = nullptr; int i; - state->setStrokePattern(NULL); + state->setStrokePattern(nullptr); Object obj = res->lookupColorSpace("DefaultCMYK"); if (!obj.isNull()) { colorSpace = GfxColorSpace::parse(res, &obj, out, state); } - if (colorSpace == NULL) { + if (colorSpace == nullptr) { colorSpace = new GfxDeviceCMYKColorSpace(); } state->setStrokeColorSpace(colorSpace); @@ -1455,16 +1457,16 @@ } void Gfx::opSetFillRGBColor(Object args[], int numArgs) { - GfxColorSpace *colorSpace = NULL; + GfxColorSpace *colorSpace = nullptr; GfxColor color; int i; - state->setFillPattern(NULL); + state->setFillPattern(nullptr); Object obj = res->lookupColorSpace("DefaultRGB"); if (!obj.isNull()) { colorSpace = GfxColorSpace::parse(res, &obj, out, state); } - if (colorSpace == NULL) { + if (colorSpace == nullptr) { colorSpace = new GfxDeviceRGBColorSpace(); } state->setFillColorSpace(colorSpace); @@ -1477,16 +1479,16 @@ } void Gfx::opSetStrokeRGBColor(Object args[], int numArgs) { - GfxColorSpace *colorSpace = NULL; + GfxColorSpace *colorSpace = nullptr; GfxColor color; int i; - state->setStrokePattern(NULL); + state->setStrokePattern(nullptr); Object obj = res->lookupColorSpace("DefaultRGB"); if (!obj.isNull()) { colorSpace = GfxColorSpace::parse(res, &obj, out, state); } - if (colorSpace == NULL) { + if (colorSpace == nullptr) { colorSpace = new GfxDeviceRGBColorSpace(); } state->setStrokeColorSpace(colorSpace); @@ -1509,7 +1511,7 @@ colorSpace = GfxColorSpace::parse(res, &obj, out, state); } if (colorSpace) { - state->setFillPattern(NULL); + state->setFillPattern(nullptr); state->setFillColorSpace(colorSpace); out->updateFillColorSpace(state); colorSpace->getDefaultColor(&color); @@ -1524,7 +1526,7 @@ GfxColorSpace *colorSpace; GfxColor color; - state->setStrokePattern(NULL); + state->setStrokePattern(nullptr); Object obj = res->lookupColorSpace(args[0].getName()); if (obj.isNull()) { colorSpace = GfxColorSpace::parse(res, &args[0], out, state); @@ -1550,7 +1552,7 @@ error(errSyntaxError, getPos(), "Incorrect number of arguments in 'sc' command"); return; } - state->setFillPattern(NULL); + state->setFillPattern(nullptr); for (i = 0; i < numArgs; ++i) { color.c[i] = dblToCol(args[i].getNum()); } @@ -1566,7 +1568,7 @@ error(errSyntaxError, getPos(), "Incorrect number of arguments in 'SC' command"); return; } - state->setStrokePattern(NULL); + state->setStrokePattern(nullptr); for (i = 0; i < numArgs; ++i) { color.c[i] = dblToCol(args[i].getNum()); } @@ -1609,7 +1611,7 @@ error(errSyntaxError, getPos(), "Incorrect number of arguments in 'scn' command"); return; } - state->setFillPattern(NULL); + state->setFillPattern(nullptr); for (i = 0; i < numArgs && i < gfxColorMaxComps; ++i) { if (args[i].isNum()) { color.c[i] = dblToCol(args[i].getNum()); @@ -1660,7 +1662,7 @@ error(errSyntaxError, getPos(), "Incorrect number of arguments in 'SCN' command"); return; } - state->setStrokePattern(NULL); + state->setStrokePattern(nullptr); for (i = 0; i < numArgs && i < gfxColorMaxComps; ++i) { if (args[i].isNum()) { color.c[i] = dblToCol(args[i].getNum()); @@ -2097,8 +2099,8 @@ // set underlying color space (for uncolored tiling patterns); set // various other parameters (stroke color, line width) to match // Adobe's behavior - state->setFillPattern(NULL); - state->setStrokePattern(NULL); + state->setFillPattern(nullptr); + state->setStrokePattern(nullptr); if (tPat->getPaintType() == 2 && (cs = patCS->getUnder())) { state->setFillColorSpace(cs->copy()); out->updateFillColorSpace(state); @@ -3663,7 +3665,7 @@ if (!(font = res->lookupFont(args[0].getName()))) { // unsetting the font (drawing no text) is better than using the // previous one and drawing random glyphs from it - state->setFont(NULL, args[1].getNum()); + state->setFont(nullptr, args[1].getNum()); fontChanged = gTrue; return; } @@ -3873,7 +3875,7 @@ int wMode; double riseX, riseY; CharCode code; - Unicode *u = NULL; + Unicode *u = nullptr; double x, y, dx, dy, dx2, dy2, curX, curY, tdx, tdy, ddx, ddy; double originX, originY, tOriginX, tOriginY; double x0, y0, x1, y1; @@ -4184,7 +4186,7 @@ } else if (obj2.isName("PS")) { Object obj3 = obj1.streamGetDict()->lookup("Level1"); out->psXObject(obj1.getStream(), - obj3.isStream() ? obj3.getStream() : (Stream *)NULL); + obj3.isStream() ? obj3.getStream() : (Stream *)nullptr); } else if (obj2.isName()) { error(errSyntaxError, getPos(), "Unknown XObject subtype '{0:s}'", obj2.getName()); } else { @@ -4349,11 +4351,11 @@ } } if (!obj1.isNull()) { - char *tempIntent = NULL; + char *tempIntent = nullptr; Object objIntent = dict->lookup("Intent"); if (objIntent.isName()) { tempIntent = state->getRenderingIntent(); - if (tempIntent != NULL) { + if (tempIntent != nullptr) { tempIntent = strdup(tempIntent); } state->setRenderingIntent(objIntent.getName()); @@ -4385,7 +4387,7 @@ colorSpace = GfxColorSpace::parse(res, &objCS, out, state); } } else { - colorSpace = NULL; + colorSpace = nullptr; } if (!colorSpace) { goto err1; @@ -4401,7 +4403,7 @@ // get the mask haveColorKeyMask = haveExplicitMask = haveSoftMask = gFalse; - maskStr = NULL; // make gcc happy + maskStr = nullptr; // make gcc happy maskWidth = maskHeight = 0; // make gcc happy maskInvert = gFalse; // make gcc happy std::unique_ptr maskColorMap; @@ -4456,7 +4458,7 @@ obj1 = std::move(obj2); } } - maskColorSpace = GfxColorSpace::parse(NULL, &obj1, out, state); + maskColorSpace = GfxColorSpace::parse(nullptr, &obj1, out, state); if (!maskColorSpace || maskColorSpace->getMode() != csDeviceGray) { goto err1; } @@ -4587,7 +4589,7 @@ maskStr, maskWidth, maskHeight, maskInvert, maskInterpolate); } else { out->drawImage(state, ref, str, width, height, &colorMap, interpolate, - haveColorKeyMask ? maskColors : (int *)NULL, inlineImg); + haveColorKeyMask ? maskColors : (int *)nullptr, inlineImg); } } } @@ -4609,7 +4611,7 @@ GBool transpGroup = gFalse; double opac; - if (resDict == NULL) + if (resDict == nullptr) return gFalse; pushResources(resDict); Object extGStates = resDict->lookup("ExtGState"); @@ -4730,11 +4732,11 @@ // get resources Object resObj = dict->lookup("Resources"); - resDict = resObj.isDict() ? resObj.getDict() : (Dict *)NULL; + resDict = resObj.isDict() ? resObj.getDict() : (Dict *)nullptr; // check for a transparency group transpGroup = isolated = knockout = gFalse; - blendingColorSpace = NULL; + blendingColorSpace = nullptr; obj1 = dict->lookup("Group"); if (obj1.isDict()) { Object obj2 = obj1.dictLookup("S"); @@ -4890,7 +4892,7 @@ // display the image if (str) { - doImage(NULL, str, gTrue); + doImage(nullptr, str, gTrue); // skip 'EI' tag c1 = str->getUndecodedStream()->getChar(); @@ -4926,7 +4928,7 @@ } if (obj.isEOF()) { error(errSyntaxError, getPos(), "End of file in inline image"); - return NULL; + return nullptr; } // make stream @@ -4934,7 +4936,7 @@ str = new EmbedStream(parser->getStream(), std::move(dict), gFalse, 0, gTrue); str = str->addFilters(str->getDict()); } else { - str = NULL; + str = nullptr; } return str; @@ -5023,19 +5025,20 @@ char* name0 = args[0].getName(); if ( strncmp( name0, "OC", 2) == 0 && contentConfig) { if ( numArgs >= 2 ) { - if (!args[1].isName()) { + if (args[1].isName()) { + char* name1 = args[1].getName(); + MarkedContentStack *mc = mcStack; + mc->kind = gfxMCOptionalContent; + Object markedContent = res->lookupMarkedContentNF( name1 ); + if (!markedContent.isNull()) { + bool visible = contentConfig->optContentIsVisible(&markedContent); + mc->ocSuppressed = !(visible); + } else { + error(errSyntaxError, getPos(), "DID NOT find {0:s}", name1); + } + } else { error(errSyntaxError, getPos(), "Unexpected MC Type: {0:d}", args[1].getType()); } - char* name1 = args[1].getName(); - MarkedContentStack *mc = mcStack; - mc->kind = gfxMCOptionalContent; - Object markedContent = res->lookupMarkedContentNF( name1 ); - if (!markedContent.isNull()) { - bool visible = contentConfig->optContentIsVisible(&markedContent); - mc->ocSuppressed = !(visible); - } else { - error(errSyntaxError, getPos(), "DID NOT find {0:s}", name1); - } } else { error(errSyntaxError, getPos(), "insufficient arguments for Marked Content"); } @@ -5060,7 +5063,7 @@ if (numArgs == 2 && args[1].isDict()) { out->beginMarkedContent(args[0].getName(), args[1].getDict()); } else if(numArgs == 1) { - out->beginMarkedContent(args[0].getName(), NULL); + out->beginMarkedContent(args[0].getName(), nullptr); } } @@ -5105,7 +5108,7 @@ //------------------------------------------------------------------------ struct GfxStackStateSaver { - GfxStackStateSaver(Gfx *gfx) : gfx(gfx) { + GfxStackStateSaver(Gfx *gfxA) : gfx(gfxA) { gfx->saveState(); } @@ -5113,6 +5116,9 @@ gfx->restoreState(); } + GfxStackStateSaver(const GfxStackStateSaver &) = delete; + GfxStackStateSaver& operator=(const GfxStackStateSaver &) = delete; + Gfx * const gfx; }; @@ -5271,7 +5277,7 @@ // get the resources Object resObj = dict->lookup("Resources"); - resDict = resObj.isDict() ? resObj.getDict() : (Dict *)NULL; + resDict = resObj.isDict() ? resObj.getDict() : (Dict *)nullptr; // draw it drawForm(str, resDict, m, bbox); @@ -5280,7 +5286,7 @@ // draw the border if (border && border->getWidth() > 0) { if (state->getStrokeColorSpace()->getMode() != csDeviceRGB) { - state->setStrokePattern(NULL); + state->setStrokePattern(nullptr); state->setStrokeColorSpace(new GfxDeviceRGBColorSpace()); out->updateStrokeColorSpace(state); } Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/Gfx.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/Gfx.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/Gfx.h 2018-04-22 15:47:12 UTC (rev 796) @@ -17,7 +17,7 @@ // Copyright (C) 2007 I?igo Mart?nez // Copyright (C) 2008 Brad Hards // Copyright (C) 2008, 2010 Carlos Garcia Campos -// Copyright (C) 2009-2013, 2017 Albert Astals Cid +// Copyright (C) 2009-2013, 2017, 2018 Albert Astals Cid // Copyright (C) 2009, 2010, 2012, 2013 Thomas Freitag // Copyright (C) 2010 David Benjamin // Copyright (C) 2010 Christian Feuers?nger @@ -112,6 +112,9 @@ GfxResources(XRef *xref, Dict *resDict, GfxResources *nextA); ~GfxResources(); + GfxResources(const GfxResources &) = delete; + GfxResources& operator=(const GfxResources &other) = delete; + GfxFont *lookupFont(char *name); Object lookupXObject(char *name); Object lookupXObjectNF(char *name); @@ -161,6 +164,9 @@ #endif ~Gfx(); + Gfx(const Gfx &) = delete; + Gfx& operator=(const Gfx &other) = delete; + XRef *getXRef() { return xref; } // Interpret a stream or array of streams. Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/GfxFont.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/GfxFont.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/GfxFont.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -13,7 +13,7 @@ // All changes made under the Poppler project to this file are licensed // under GPL version 2 or later // -// Copyright (C) 2005, 2006, 2008-2010, 2012, 2014, 2015, 2017 Albert Astals Cid +// Copyright (C) 2005, 2006, 2008-2010, 2012, 2014, 2015, 2017, 2018 Albert Astals Cid // Copyright (C) 2005, 2006 Kristian H?gsberg // Copyright (C) 2006 Takashi Iwai // Copyright (C) 2007 Julien Rebetez @@ -30,7 +30,7 @@ // Copyright (C) 2012 Yi Yang // Copyright (C) 2012 Suzuki Toshiya // Copyright (C) 2012, 2017 Thomas Freitag -// Copyright (C) 2013-2016 Jason Crain +// Copyright (C) 2013-2016, 2018 Jason Crain // Copyright (C) 2014 Olly Betts // // To see a description of the changes please see the Changelog file that @@ -186,9 +186,9 @@ //------------------------------------------------------------------------ GfxFontLoc::GfxFontLoc() { - path = NULL; + path = nullptr; fontNum = 0; - encoding = NULL; + encoding = nullptr; substIdx = -1; } @@ -212,7 +212,7 @@ GfxFont *font; // get base font name - nameA = NULL; + nameA = nullptr; Object obj1 = fontDict->lookup("BaseFont"); if (obj1.isName()) { nameA = new GooString(obj1.getName()); @@ -222,7 +222,7 @@ typeA = getFontType(xref, fontDict, &embFontIDA); // create the font object - font = NULL; + font = nullptr; if (typeA < fontCIDType0) { font = new Gfx8BitFont(xref, tagA, idA, nameA, typeA, embFontIDA, fontDict); @@ -242,8 +242,8 @@ name = nameA; type = typeA; embFontID = embFontIDA; - embFontName = NULL; - family = NULL; + embFontName = nullptr; + family = nullptr; stretch = StretchNotDefined; weight = WeightNotDefined; refCnt = 1; @@ -480,7 +480,7 @@ if (obj2.isName()) { embFontName = new GooString(obj2.getName()); } - if (embFontName == NULL) { + if (embFontName == nullptr) { // get name with typo obj2 = obj1.dictLookup("Fontname"); if (obj2.isName()) { @@ -575,7 +575,7 @@ Object obj1 = fontDict->lookup("ToUnicode"); if (!obj1.isStream()) { - return NULL; + return nullptr; } buf = new GooString(); obj1.getStream()->fillGooString(buf); @@ -598,7 +598,7 @@ GBool embed; if (type == fontType3) { - return NULL; + return nullptr; } //----- embedded font @@ -753,11 +753,11 @@ } // failed to find a substitute font - return NULL; + return nullptr; } // failed to find a substitute font - return NULL; + return nullptr; } GfxFontLoc *GfxFont::locateBase14Font(GooString *base14Name) { @@ -765,7 +765,7 @@ path = globalParams->findFontFile(base14Name); if (!path) { - return NULL; + return nullptr; } return getExternalFont(path, gFalse); } @@ -807,7 +807,7 @@ (cid ? (fontType < fontCIDType0) : (fontType >= fontCIDType0))) { delete path; - return NULL; + return nullptr; } fontLoc = new GfxFontLoc(); fontLoc->locType = gfxFontLocExternal; @@ -826,7 +826,7 @@ error(errSyntaxError, -1, "Embedded font file is not a stream"); embFontID.num = -1; *len = 0; - return NULL; + return nullptr; } str = obj2.getStream(); @@ -849,7 +849,7 @@ { "ff", "f_f" }, { "ffi", "f_f_i" }, { "ffl", "f_f_l" }, - { 0, 0 } + { nullptr, nullptr } }; const char *GfxFont::getAlternateName(const char *name) { @@ -860,7 +860,7 @@ } map++; } - return 0; + return nullptr; } //------------------------------------------------------------------------ @@ -933,7 +933,7 @@ numeric = gFalse; } else if (obj.isName()) { // All character names must sucessfully parse. - if (!parseNumericName(obj.getName(), hex, NULL)) + if (!parseNumericName(obj.getName(), hex, nullptr)) numeric = gFalse; } else { numeric = gFalse; @@ -968,11 +968,11 @@ int n, i, a, b, m; refCnt = 1; - ctu = NULL; + ctu = nullptr; // do font name substitution for various aliases of the Base 14 font // names - base14 = NULL; + base14 = nullptr; if (name) { name2 = name->copy(); i = 0; @@ -1001,7 +1001,7 @@ } // is it a built-in font? - builtinFont = NULL; + builtinFont = nullptr; if (base14) { for (i = 0; i < nBuiltinFonts; ++i) { if (!strcmp(base14->base14Name, builtinFonts[i].name)) { @@ -1092,7 +1092,7 @@ // check FontDict for base encoding hasEncoding = gFalse; usesMacRomanEnc = gFalse; - baseEnc = NULL; + baseEnc = nullptr; baseEncFromFontFile = gFalse; obj1 = fontDict->lookup("Encoding"); if (obj1.isDict()) { @@ -1123,9 +1123,9 @@ // check embedded font file for base encoding // (only for Type 1 fonts - trying to get an encoding out of a // TrueType font is a losing proposition) - ffT1 = NULL; - ffT1C = NULL; - buf = NULL; + ffT1 = nullptr; + ffT1C = nullptr; + buf = nullptr; if (type == fontType1 && embFontID.num >= 0) { if ((buf = readEmbFontFile(xref, &len))) { if ((ffT1 = FoFiType1::make(buf, len))) { @@ -1288,7 +1288,7 @@ // block (eg "fi", "ffi") to normal form for (code = 0; code < 256; ++code) { if (unicodeIsAlphabeticPresentationForm(toUnicode[code])) { - Unicode *normalized = unicodeNormalizeNFKC(&toUnicode[code], 1, &len, NULL); + Unicode *normalized = unicodeNormalizeNFKC(&toUnicode[code], 1, &len, nullptr); if (len > 1) ctu->setMapping((CharCode)code, normalized, len); gfree(normalized); @@ -1458,7 +1458,7 @@ char *var_part = strchr(charName, '.'); if (var_part == charName) { return 0; // .notdef or similar - } else if (var_part != NULL) { + } else if (var_part != nullptr) { // parse names of the form 7.oldstyle, P.swash, s.sc, etc. char *main_part = gstrndup(charName, var_part - charName); GBool namesRecurse = gTrue, variantsRecurse = gFalse; @@ -1696,7 +1696,7 @@ } Dict *Gfx8BitFont::getCharProcs() { - return charProcs.isDict() ? charProcs.getDict() : (Dict *)NULL; + return charProcs.isDict() ? charProcs.getDict() : (Dict *)nullptr; } Object Gfx8BitFont::getCharProc(int code) { @@ -1716,7 +1716,7 @@ } Dict *Gfx8BitFont::getResources() { - return resources.isDict() ? resources.getDict() : (Dict *)NULL; + return resources.isDict() ? resources.getDict() : (Dict *)nullptr; } //------------------------------------------------------------------------ @@ -1748,24 +1748,24 @@ CharCode c; Unicode *uBuf; int c1, c2; - int excepsSize, i, j, k, n; + int excepsSize, j, k, n; refCnt = 1; ascent = 0.95; descent = -0.35; fontBBox[0] = fontBBox[1] = fontBBox[2] = fontBBox[3] = 0; - collection = NULL; - cMap = NULL; - ctu = NULL; + collection = nullptr; + cMap = nullptr; + ctu = nullptr; ctuUsesCharCode = gTrue; widths.defWidth = 1.0; widths.defHeight = -1.0; widths.defVY = 0.880; - widths.exceps = NULL; + widths.exceps = nullptr; widths.nExceps = 0; - widths.excepsV = NULL; + widths.excepsV = nullptr; widths.nExcepsV = 0; - cidToGID = NULL; + cidToGID = nullptr; cidToGIDLen = 0; // get the descendant font @@ -1801,7 +1801,7 @@ collection = obj2.getString()->copy()->append('-')->append(obj3.getString()); // look for a ToUnicode CMap - if (!(ctu = readToUnicodeCMap(fontDict, 16, NULL))) { + if (!(ctu = readToUnicodeCMap(fontDict, 16, nullptr))) { ctuUsesCharCode = gFalse; // use an identity mapping for the "Adobe-Identity" and @@ -1862,7 +1862,7 @@ error(errSyntaxError, -1, "Missing Encoding entry in Type 0 font"); return; } - if (!(cMap = CMap::parse(NULL, collection, &obj1))) { + if (!(cMap = CMap::parse(nullptr, collection, &obj1))) { return; } if (cMap->getCMapName()) { @@ -1876,7 +1876,7 @@ obj1 = desFontDict->lookup("CIDToGIDMap"); if (obj1.isStream()) { cidToGIDLen = 0; - i = 64; + int i = 64; cidToGID = (int *)gmallocn(i, sizeof(int)); obj1.streamReset(); while ((c1 = obj1.streamGetChar()) != EOF && @@ -1904,7 +1904,7 @@ obj1 = desFontDict->lookup("W"); if (obj1.isArray()) { excepsSize = 0; - i = 0; + int i = 0; while (i + 1 < obj1.arrayGetLength()) { obj2 = obj1.arrayGet(i); obj3 = obj1.arrayGet(i + 1); @@ -1973,7 +1973,7 @@ obj1 = desFontDict->lookup("W2"); if (obj1.isArray()) { excepsSize = 0; - i = 0; + int i = 0; while (i + 1 < obj1.arrayGetLength()) { obj2 = obj1.arrayGet(i); obj3 = obj1.arrayGet(i+ 1); @@ -2055,7 +2055,7 @@ Unicode **u, int *uLen, double *dx, double *dy, double *ox, double *oy) { CID cid; - CharCode c; + CharCode dummy; double w, h, vx, vy; int n, a, b, m; @@ -2066,7 +2066,7 @@ return 1; } - *code = (CharCode)(cid = cMap->getCID(s, len, &c, &n)); + *code = (CharCode)(cid = cMap->getCID(s, len, &dummy, &n)); if (ctu) { if (hasToUnicode) { int i = 0, c = 0; @@ -2133,7 +2133,7 @@ } GooString *GfxCIDFont::getCollection() { - return cMap ? cMap->getCollection() : (GooString *)NULL; + return cMap ? cMap->getCollection() : (GooString *)nullptr; } int GfxCIDFont::mapCodeToGID(FoFiTrueType *ff, int cmapi, @@ -2159,7 +2159,7 @@ "UniCNS-UCS2-V", "UniCNS-UTF32-H", "UniCNS-UCS2-H", - 0 + nullptr }; static const char *adobe_gb1_cmaps[] = { "UniGB-UTF32-V", @@ -2166,7 +2166,7 @@ "UniGB-UCS2-V", "UniGB-UTF32-H", "UniGB-UCS2-H", - 0 + nullptr }; static const char *adobe_japan1_cmaps[] = { "UniJIS-UTF32-V", @@ -2173,7 +2173,7 @@ "UniJIS-UCS2-V", "UniJIS-UTF32-H", "UniJIS-UCS2-H", - 0 + nullptr }; static const char *adobe_japan2_cmaps[] = { "UniHojo-UTF32-V", @@ -2180,7 +2180,7 @@ "UniHojo-UCS2-V", "UniHojo-UTF32-H", "UniHojo-UCS2-H", - 0 + nullptr }; static const char *adobe_korea1_cmaps[] = { "UniKS-UTF32-V", @@ -2187,7 +2187,7 @@ "UniKS-UCS2-V", "UniKS-UTF32-H", "UniKS-UCS2-H", - 0 + nullptr }; static struct CMapListEntry { const char *collection; @@ -2226,12 +2226,12 @@ "Adobe-Korea1-UCS2", adobe_korea1_cmaps, }, - {0, 0, 0, 0} + {nullptr, nullptr, nullptr, nullptr, nullptr} }; - Unicode *humap = 0; - Unicode *vumap = 0; - Unicode *tumap = 0; - int *codeToGID = 0; + Unicode *humap = nullptr; + Unicode *vumap = nullptr; + Unicode *tumap = nullptr; + int *codeToGID = nullptr; unsigned long n; int i; unsigned long code; @@ -2244,8 +2244,8 @@ Ref embID; *mapsizep = 0; - if (!ctu || !getCollection()) return NULL; - if (getCollection()->cmp("Adobe-Identity") == 0) return NULL; + if (!ctu || !getCollection()) return nullptr; + if (getCollection()->cmp("Adobe-Identity") == 0) return nullptr; if (getEmbeddedFontID(&embID)) { /* if this font is embedded font, * CIDToGIDMap should be embedded in PDF file @@ -2273,10 +2273,10 @@ } } if (cmap < 0) - return NULL; + return nullptr; wmode = getWMode(); - for (lp = CMapList;lp->collection != 0;lp++) { + for (lp = CMapList;lp->collection != nullptr;lp++) { if (strcmp(lp->collection,getCollection()->getCString()) == 0) { break; } @@ -2285,11 +2285,11 @@ tumap = new Unicode[n]; humap = new Unicode[n*N_UCS_CANDIDATES]; memset(humap,0,sizeof(Unicode)*n*N_UCS_CANDIDATES); - if (lp->collection != 0) { + if (lp->collection != nullptr) { CharCodeToUnicode *tctu; GooString tname(lp->toUnicodeMap); - if ((tctu = CharCodeToUnicode::parseCMapFromFile(&tname,16)) != 0) { + if ((tctu = CharCodeToUnicode::parseCMapFromFile(&tname,16)) != nullptr) { CharCode cid; for (cid = 0;cid < n ;cid++) { int len; @@ -2307,11 +2307,11 @@ } vumap = new Unicode[n]; memset(vumap,0,sizeof(Unicode)*n); - for (cmapName = lp->CMaps;*cmapName != 0;cmapName++) { + for (cmapName = lp->CMaps;*cmapName != nullptr;cmapName++) { GooString cname(*cmapName); if ((cMap = globalParams->getCMap(getCollection(),&cname)) - != 0) { + != nullptr) { if (cMap->getWMode()) { cMap->setReverseMap(vumap,n,1); } else { @@ -2324,7 +2324,7 @@ } else { error(errSyntaxError, -1, "Unknown character collection {0:t}\n", getCollection()); - if ((ctu = getToUnicode()) != 0) { + if ((ctu = getToUnicode()) != nullptr) { CharCode cid; for (cid = 0;cid < n ;cid++) { Unicode *ucode; @@ -2348,17 +2348,17 @@ unicode = 0; gid = 0; - if (humap != 0) { + if (humap != nullptr) { for (i = 0;i < N_UCS_CANDIDATES && gid == 0 && (unicode = humap[code*N_UCS_CANDIDATES+i]) != 0;i++) { gid = mapCodeToGID(ff,cmap,unicode,gFalse); } } - if (gid == 0 && vumap != 0) { + if (gid == 0 && vumap != nullptr) { unicode = vumap[code]; if (unicode != 0) { gid = mapCodeToGID(ff,cmap,unicode,gTrue); - if (gid == 0 && tumap != 0) { + if (gid == 0 && tumap != nullptr) { if ((unicode = tumap[code]) != 0) { gid = mapCodeToGID(ff,cmap,unicode,gTrue); } @@ -2365,7 +2365,7 @@ } } } - if (gid == 0 && tumap != 0) { + if (gid == 0 && tumap != nullptr) { if ((unicode = tumap[code]) != 0) { gid = mapCodeToGID(ff,cmap,unicode,gFalse); } @@ -2374,7 +2374,7 @@ /* special handling space characters */ const unsigned long *p; - if (humap != 0) unicode = humap[code]; + if (humap != nullptr) unicode = humap[code]; if (unicode != 0) { /* check if code is space character , so map code to 0x0020 */ for (p = spaces;*p != 0;p++) { @@ -2389,9 +2389,9 @@ codeToGID[code] = gid; } *mapsizep = n; - if (humap != 0) delete[] humap; - if (tumap != 0) delete[] tumap; - if (vumap != 0) delete[] vumap; + if (humap != nullptr) delete[] humap; + if (tumap != nullptr) delete[] tumap; + if (vumap != nullptr) delete[] vumap; return codeToGID; } @@ -2443,16 +2443,16 @@ if (obj2.isDict()) { if (obj1.isRef()) { r = obj1.getRef(); + } else if (fontDictRef) { + // legal generation numbers are five digits, so we use a + // 6-digit number here + r.gen = 100000 + fontDictRef->num; + r.num = i; } else { - // no indirect reference for this font, so invent a unique one - // (legal generation numbers are five digits, so any 6-digit - // number would be safe) - r.num = i; - if (fontDictRef) { - r.gen = 100000 + fontDictRef->num; - } else { - r.gen = 999999; - } + // no indirect reference for this font, or for the containing + // font dict, so hash the font and use that + r.gen = 100000; + r.num = hashFontObject(&obj2); } fonts[i] = GfxFont::makeFont(xref, fontDict->getKey(i), r, obj2.getDict()); @@ -2462,11 +2462,11 @@ // we can tell the difference between a missing font // and a font that is just !isOk() fonts[i]->decRefCnt(); - fonts[i] = NULL; + fonts[i] = nullptr; } } else { error(errSyntaxError, -1, "font resource is not a dictionary"); - fonts[i] = NULL; + fonts[i] = nullptr; } } } @@ -2490,5 +2490,112 @@ return fonts[i]; } } - return NULL; + return nullptr; } + +// FNV-1a hash +class FNVHash { +public: + + FNVHash() { + h = 2166136261U; + } + + void hash(char c) { + h ^= c & 0xff; + h *= 16777619; + } + + void hash(char *p, int n) { + int i; + for (i = 0; i < n; ++i) { + hash(p[i]); + } + } + + int get31() { + return (h ^ (h >> 31)) & 0x7fffffff; + } + +private: + + Guint h; +}; + +int GfxFontDict::hashFontObject(Object *obj) { + FNVHash h; + + hashFontObject1(obj, &h); + return h.get31(); +} + +void GfxFontDict::hashFontObject1(Object *obj, FNVHash *h) { + Object obj2; + GooString *s; + char *p; + double r; + int n, i; + + switch (obj->getType()) { + case objBool: + h->hash('b'); + h->hash(obj->getBool() ? 1 : 0); + break; + case objInt: + h->hash('i'); + n = obj->getInt(); + h->hash((char *)&n, sizeof(int)); + break; + case objReal: + h->hash('r'); + r = obj->getReal(); + h->hash((char *)&r, sizeof(double)); + break; + case objString: + h->hash('s'); + s = obj->getString(); + h->hash(s->getCString(), s->getLength()); + break; + case objName: + h->hash('n'); + p = obj->getName(); + h->hash(p, (int)strlen(p)); + break; + case objNull: + h->hash('z'); + break; + case objArray: + h->hash('a'); + n = obj->arrayGetLength(); + h->hash((char *)&n, sizeof(int)); + for (i = 0; i < n; ++i) { + obj2 = obj->arrayGetNF(i); + hashFontObject1(&obj2, h); + } + break; + case objDict: + h->hash('d'); + n = obj->dictGetLength(); + h->hash((char *)&n, sizeof(int)); + for (i = 0; i < n; ++i) { + p = obj->dictGetKey(i); + h->hash(p, (int)strlen(p)); + obj2 = obj->dictGetValNF(i); + hashFontObject1(&obj2, h); + } + break; + case objStream: + // this should never happen - streams must be indirect refs + break; + case objRef: + h->hash('f'); + n = obj->getRefNum(); + h->hash((char *)&n, sizeof(int)); + n = obj->getRefGen(); + h->hash((char *)&n, sizeof(int)); + break; + default: + h->hash('u'); + break; + } +} Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/GfxFont.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/GfxFont.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/GfxFont.h 2018-04-22 15:47:12 UTC (rev 796) @@ -13,7 +13,7 @@ // All changes made under the Poppler project to this file are licensed // under GPL version 2 or later // -// Copyright (C) 2005, 2008, 2015, 2017 Albert Astals Cid +// Copyright (C) 2005, 2008, 2015, 2017, 2018 Albert Astals Cid // Copyright (C) 2006 Takashi Iwai // Copyright (C) 2006 Kristian H?gsberg // Copyright (C) 2007 Julien Rebetez @@ -21,7 +21,7 @@ // Copyright (C) 2007 Koji Otani // Copyright (C) 2011 Axel Str?bing // Copyright (C) 2011, 2012, 2014 Adrian Johnson -// Copyright (C) 2015 Jason Crain +// Copyright (C) 2015, 2018 Jason Crain // Copyright (C) 2015 Thomas Freitag // // To see a description of the changes please see the Changelog file that @@ -48,6 +48,7 @@ class PSOutputDev; struct GfxFontCIDWidths; struct Base14FontMapEntry; +class FNVHash; //------------------------------------------------------------------------ // GfxFontType @@ -114,6 +115,9 @@ GfxFontLoc(); ~GfxFontLoc(); + GfxFontLoc(const GfxFontLoc &) = delete; + GfxFontLoc& operator=(const GfxFontLoc &) = delete; + GfxFontLocType locType; GfxFontType fontType; Ref embFontID; // embedded stream obj ID @@ -176,6 +180,9 @@ GfxFont(const char *tagA, Ref idA, GooString *nameA, GfxFontType typeA, Ref embFontIDA); + GfxFont(const GfxFont &) = delete; + GfxFont& operator=(const GfxFont &other) = delete; + GBool isOk() { return ok; } void incRefCnt(); @@ -440,6 +447,9 @@ // Destructor. ~GfxFontDict(); + GfxFontDict(const GfxFontDict &) = delete; + GfxFontDict& operator=(const GfxFontDict &) = delete; + // Get the specified font. GfxFont *lookup(char *tag); @@ -449,6 +459,9 @@ private: + int hashFontObject(Object *obj); + void hashFontObject1(Object *obj, FNVHash *h); + GfxFont **fonts; // list of fonts int numFonts; // number of fonts }; Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/GfxState.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/GfxState.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/GfxState.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -16,7 +16,7 @@ // Copyright (C) 2005 Kristian H?gsberg // Copyright (C) 2006, 2007 Jeff Muizelaar // Copyright (C) 2006, 2010 Carlos Garcia Campos -// Copyright (C) 2006-2017 Albert Astals Cid +// Copyright (C) 2006-2018 Albert Astals Cid // Copyright (C) 2009, 2012 Koji Otani // Copyright (C) 2009, 2011-2016 Thomas Freitag // Copyright (C) 2009 Christian Persch @@ -210,11 +210,11 @@ return --refCount; } -static cmsHPROFILE RGBProfile = NULL; -static GooString *displayProfileName = NULL; // display profile file Name -static cmsHPROFILE displayProfile = NULL; // display profile +static cmsHPROFILE RGBProfile = nullptr; +static GooString *displayProfileName = nullptr; // display profile file Name +static cmsHPROFILE displayProfile = nullptr; // display profile static unsigned int displayPixelType = 0; -static GfxColorTransform *XYZ2DisplayTransform = NULL; +static GfxColorTransform *XYZ2DisplayTransform = nullptr; // convert color space signature to cmsColor type static unsigned int getCMSColorSpaceType(cmsColorSpaceSignature cs); @@ -223,7 +223,7 @@ void GfxColorSpace::setDisplayProfile(void *displayProfileA) { displayProfile = displayProfileA; - if (displayProfile != NULL) { + if (displayProfile != nullptr) { cmsHTRANSFORM transform; unsigned int nChannels; @@ -235,7 +235,7 @@ displayProfile, COLORSPACE_SH(displayPixelType) | CHANNELS_SH(nChannels) | BYTES_SH(1), - INTENT_RELATIVE_COLORIMETRIC,LCMS_FLAGS)) == 0) { + INTENT_RELATIVE_COLORIMETRIC,LCMS_FLAGS)) == nullptr) { error(errSyntaxWarning, -1, "Can't create Lab transform"); } else { XYZ2DisplayTransform = new GfxColorTransform(transform, INTENT_RELATIVE_COLORIMETRIC, PT_XYZ, displayPixelType); @@ -264,7 +264,7 @@ GfxColorSpace::GfxColorSpace() { overprintMask = 0x0f; - mapping = NULL; + mapping = nullptr; } GfxColorSpace::~GfxColorSpace() { @@ -276,46 +276,46 @@ if (recursion > colorSpaceRecursionLimit) { error(errSyntaxError, -1, "Loop detected in color space objects"); - return NULL; + return nullptr; } - cs = NULL; + cs = nullptr; if (csObj->isName()) { if (csObj->isName("DeviceGray") || csObj->isName("G")) { - if (res != NULL) { + if (res != nullptr) { Object objCS = res->lookupColorSpace("DefaultGray"); if (objCS.isNull()) { cs = new GfxDeviceGrayColorSpace(); } else { - cs = GfxColorSpace::parse(NULL, &objCS, out, state); + cs = GfxColorSpace::parse(nullptr, &objCS, out, state); } } else { cs = new GfxDeviceGrayColorSpace(); } } else if (csObj->isName("DeviceRGB") || csObj->isName("RGB")) { - if (res != NULL) { + if (res != nullptr) { Object objCS = res->lookupColorSpace("DefaultRGB"); if (objCS.isNull()) { cs = new GfxDeviceRGBColorSpace(); } else { - cs = GfxColorSpace::parse(NULL, &objCS, out, state); + cs = GfxColorSpace::parse(nullptr, &objCS, out, state); } } else { cs = new GfxDeviceRGBColorSpace(); } } else if (csObj->isName("DeviceCMYK") || csObj->isName("CMYK")) { - if (res != NULL) { + if (res != nullptr) { Object objCS = res->lookupColorSpace("DefaultCMYK"); if (objCS.isNull()) { cs = new GfxDeviceCMYKColorSpace(); } else { - cs = GfxColorSpace::parse(NULL, &objCS, out, state); + cs = GfxColorSpace::parse(nullptr, &objCS, out, state); } } else { cs = new GfxDeviceCMYKColorSpace(); } } else if (csObj->isName("Pattern")) { - cs = new GfxPatternColorSpace(NULL); + cs = new GfxPatternColorSpace(nullptr); } else { error(errSyntaxWarning, -1, "Bad color space '{0:s}'", csObj->getName()); } @@ -322,34 +322,34 @@ } else if (csObj->isArray() && csObj->arrayGetLength() > 0) { obj1 = csObj->arrayGet(0); if (obj1.isName("DeviceGray") || obj1.isName("G")) { - if (res != NULL) { + if (res != nullptr) { Object objCS = res->lookupColorSpace("DefaultGray"); if (objCS.isNull()) { cs = new GfxDeviceGrayColorSpace(); } else { - cs = GfxColorSpace::parse(NULL, &objCS, out, state); + cs = GfxColorSpace::parse(nullptr, &objCS, out, state); } } else { cs = new GfxDeviceGrayColorSpace(); } } else if (obj1.isName("DeviceRGB") || obj1.isName("RGB")) { - if (res != NULL) { + if (res != nullptr) { Object objCS = res->lookupColorSpace("DefaultRGB"); if (objCS.isNull()) { cs = new GfxDeviceRGBColorSpace(); } else { - cs = GfxColorSpace::parse(NULL, &objCS, out, state); + cs = GfxColorSpace::parse(nullptr, &objCS, out, state); } } else { cs = new GfxDeviceRGBColorSpace(); } } else if (obj1.isName("DeviceCMYK") || obj1.isName("CMYK")) { - if (res != NULL) { + if (res != nullptr) { Object objCS = res->lookupColorSpace("DefaultCMYK"); if (objCS.isNull()) { cs = new GfxDeviceCMYKColorSpace(); } else { - cs = GfxColorSpace::parse(NULL, &objCS, out, state); + cs = GfxColorSpace::parse(nullptr, &objCS, out, state); } } else { cs = new GfxDeviceCMYKColorSpace(); @@ -376,34 +376,34 @@ } else if (csObj->isDict()) { obj1 = csObj->dictLookup("ColorSpace"); if (obj1.isName("DeviceGray")) { - if (res != NULL) { + if (res != nullptr) { Object objCS = res->lookupColorSpace("DefaultGray"); if (objCS.isNull()) { cs = new GfxDeviceGrayColorSpace(); } else { - cs = GfxColorSpace::parse(NULL, &objCS, out, state); + cs = GfxColorSpace::parse(nullptr, &objCS, out, state); } } else { cs = new GfxDeviceGrayColorSpace(); } } else if (obj1.isName("DeviceRGB")) { - if (res != NULL) { + if (res != nullptr) { Object objCS = res->lookupColorSpace("DefaultRGB"); if (objCS.isNull()) { cs = new GfxDeviceRGBColorSpace(); } else { - cs = GfxColorSpace::parse(NULL, &objCS, out, state); + cs = GfxColorSpace::parse(nullptr, &objCS, out, state); } } else { cs = new GfxDeviceRGBColorSpace(); } } else if (obj1.isName("DeviceCMYK")) { - if (res != NULL) { + if (res != nullptr) { Object objCS = res->lookupColorSpace("DefaultCMYK"); if (objCS.isNull()) { cs = new GfxDeviceCMYKColorSpace(); } else { - cs = GfxColorSpace::parse(NULL, &objCS, out, state); + cs = GfxColorSpace::parse(nullptr, &objCS, out, state); } } else { cs = new GfxDeviceCMYKColorSpace(); @@ -442,13 +442,13 @@ #ifdef USE_CMS cmsHPROFILE loadColorProfile(const char *fileName) { - cmsHPROFILE hp = NULL; + cmsHPROFILE hp = nullptr; FILE *fp; if (fileName[0] == '/') { // full path // check if open the file - if ((fp = fopen(fileName,"r")) != NULL) { + if ((fp = fopen(fileName,"r")) != nullptr) { fclose(fp); hp = cmsOpenProfileFromFile(fileName,"r"); } @@ -458,7 +458,7 @@ GooString *path = new GooString(GLOBAL_COLOR_PROFILE_DIR); path->append(fileName); // check if open the file - if ((fp = fopen(path->getCString(),"r")) != NULL) { + if ((fp = fopen(path->getCString(),"r")) != nullptr) { fclose(fp); hp = cmsOpenProfileFromFile(path->getCString(),"r"); } @@ -484,9 +484,9 @@ // set error handlor cmsSetLogErrorHandler(CMSError); - if (displayProfile == NULL) { + if (displayProfile == nullptr) { // load display profile if it was not already loaded. - if (displayProfileName == NULL) { + if (displayProfileName == nullptr) { displayProfile = loadColorProfile("display.icc"); } else if (displayProfileName->getLength() > 0) { displayProfile = loadColorProfile(displayProfileName->getCString()); @@ -494,12 +494,12 @@ } // load RGB profile RGBProfile = loadColorProfile("RGB.icc"); - if (RGBProfile == NULL) { + if (RGBProfile == nullptr) { /* use built in sRGB profile */ RGBProfile = cmsCreate_sRGBProfile(); } // create transforms - if (displayProfile != NULL) { + if (displayProfile != nullptr) { displayPixelType = getCMSColorSpaceType(cmsGetColorSpace(displayProfile)); nChannels = getCMSNChannels(cmsGetColorSpace(displayProfile)); // create transform from XYZ @@ -508,7 +508,7 @@ displayProfile, COLORSPACE_SH(displayPixelType) | CHANNELS_SH(nChannels) | BYTES_SH(1), - INTENT_RELATIVE_COLORIMETRIC,LCMS_FLAGS)) == 0) { + INTENT_RELATIVE_COLORIMETRIC,LCMS_FLAGS)) == nullptr) { error(errSyntaxWarning, -1, "Can't create Lab transform"); } else { XYZ2DisplayTransform = new GfxColorTransform(transform, INTENT_RELATIVE_COLORIMETRIC, PT_XYZ, displayPixelType); @@ -734,7 +734,7 @@ GfxCalGrayColorSpace::~GfxCalGrayColorSpace() { #ifdef USE_CMS - if (transform != NULL) { + if (transform != nullptr) { if (transform->unref() == 0) delete transform; } #endif @@ -756,7 +756,7 @@ cs->kb = kb; #ifdef USE_CMS cs->transform = transform; - if (transform != NULL) transform->ref(); + if (transform != nullptr) transform->ref(); #endif return cs; } @@ -776,7 +776,7 @@ obj1 = arr->get(1); if (!obj1.isDict()) { error(errSyntaxWarning, -1, "Bad CalGray color space"); - return NULL; + return nullptr; } cs = new GfxCalGrayColorSpace(); obj2 = obj1.dictLookup("WhitePoint"); @@ -818,8 +818,8 @@ xyzrgb[2][1] * cs->whiteY + xyzrgb[2][2] * cs->whiteZ); #ifdef USE_CMS - cs->transform = (state != NULL) ? state->getXYZ2DisplayTransform() : XYZ2DisplayTransform; - if (cs->transform != NULL) cs->transform->ref(); + cs->transform = (state != nullptr) ? state->getXYZ2DisplayTransform() : XYZ2DisplayTransform; + if (cs->transform != nullptr) cs->transform->ref(); #endif return cs; } @@ -839,7 +839,7 @@ GfxRGB rgb; #ifdef USE_CMS - if (transform != NULL && transform->getTransformPixelType() == PT_GRAY) { + if (transform != nullptr && transform->getTransformPixelType() == PT_GRAY) { Guchar out[gfxColorMaxComps]; double in[gfxColorMaxComps]; double X, Y, Z; @@ -865,7 +865,7 @@ getXYZ(color,&X,&Y,&Z); #ifdef USE_CMS - if (transform != NULL && transform->getTransformPixelType() == PT_RGB) { + if (transform != nullptr && transform->getTransformPixelType() == PT_RGB) { Guchar out[gfxColorMaxComps]; double in[gfxColorMaxComps]; @@ -896,7 +896,7 @@ GfxColorComp c, m, y, k; #ifdef USE_CMS - if (transform != NULL && transform->getTransformPixelType() == PT_CMYK) { + if (transform != nullptr && transform->getTransformPixelType() == PT_CMYK) { double in[gfxColorMaxComps]; Guchar out[gfxColorMaxComps]; double X, Y, Z; @@ -1105,7 +1105,7 @@ GfxCalRGBColorSpace::~GfxCalRGBColorSpace() { #ifdef USE_CMS - if (transform != NULL) { + if (transform != nullptr) { if (transform->unref() == 0) delete transform; } #endif @@ -1133,7 +1133,7 @@ } #ifdef USE_CMS cs->transform = transform; - if (transform != NULL) transform->ref(); + if (transform != nullptr) transform->ref(); #endif return cs; } @@ -1146,7 +1146,7 @@ obj1 = arr->get(1); if (!obj1.isDict()) { error(errSyntaxWarning, -1, "Bad CalRGB color space"); - return NULL; + return nullptr; } cs = new GfxCalRGBColorSpace(); obj2 = obj1.dictLookup("WhitePoint"); @@ -1205,8 +1205,8 @@ xyzrgb[2][2] * cs->whiteZ); #ifdef USE_CMS - cs->transform = (state != NULL) ? state->getXYZ2DisplayTransform() : XYZ2DisplayTransform; - if (cs->transform != NULL) cs->transform->ref(); + cs->transform = (state != nullptr) ? state->getXYZ2DisplayTransform() : XYZ2DisplayTransform; + if (cs->transform != nullptr) cs->transform->ref(); #endif return cs; } @@ -1228,7 +1228,7 @@ GfxRGB rgb; #ifdef USE_CMS - if (transform != NULL && transform->getTransformPixelType() == PT_GRAY) { + if (transform != nullptr && transform->getTransformPixelType() == PT_GRAY) { Guchar out[gfxColorMaxComps]; double in[gfxColorMaxComps]; double X, Y, Z; @@ -1254,7 +1254,7 @@ getXYZ(color,&X,&Y,&Z); #ifdef USE_CMS - if (transform != NULL && transform->getTransformPixelType() == PT_RGB) { + if (transform != nullptr && transform->getTransformPixelType() == PT_RGB) { Guchar out[gfxColorMaxComps]; double in[gfxColorMaxComps]; @@ -1282,7 +1282,7 @@ GfxColorComp c, m, y, k; #ifdef USE_CMS - if (transform != NULL && transform->getTransformPixelType() == PT_CMYK) { + if (transform != nullptr && transform->getTransformPixelType() == PT_CMYK) { double in[gfxColorMaxComps]; Guchar out[gfxColorMaxComps]; double X, Y, Z; @@ -1479,7 +1479,7 @@ GfxLabColorSpace::~GfxLabColorSpace() { #ifdef USE_CMS - if (transform != NULL) { + if (transform != nullptr) { if (transform->unref() == 0) delete transform; } #endif @@ -1504,7 +1504,7 @@ cs->kb = kb; #ifdef USE_CMS cs->transform = transform; - if (transform != NULL) transform->ref(); + if (transform != nullptr) transform->ref(); #endif return cs; } @@ -1516,7 +1516,7 @@ obj1 = arr->get(1); if (!obj1.isDict()) { error(errSyntaxWarning, -1, "Bad Lab color space"); - return NULL; + return nullptr; } cs = new GfxLabColorSpace(); bool ok = true; @@ -1570,8 +1570,8 @@ xyzrgb[2][2] * cs->whiteZ); #ifdef USE_CMS - cs->transform = (state != NULL) ? state->getXYZ2DisplayTransform() : XYZ2DisplayTransform; - if (cs->transform != NULL) cs->transform->ref(); + cs->transform = (state != nullptr) ? state->getXYZ2DisplayTransform() : XYZ2DisplayTransform; + if (cs->transform != nullptr) cs->transform->ref(); #endif return cs; } @@ -1580,7 +1580,7 @@ GfxRGB rgb; #ifdef USE_CMS - if (transform != NULL && transform->getTransformPixelType() == PT_GRAY) { + if (transform != nullptr && transform->getTransformPixelType() == PT_GRAY) { Guchar out[gfxColorMaxComps]; double in[gfxColorMaxComps]; @@ -1628,11 +1628,10 @@ void GfxLabColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) { double X, Y, Z; - double r, g, b; getXYZ(color, &X, &Y, &Z); #ifdef USE_CMS - if (transform != NULL && transform->getTransformPixelType() == PT_RGB) { + if (transform != nullptr && transform->getTransformPixelType() == PT_RGB) { Guchar out[gfxColorMaxComps]; double in[gfxColorMaxComps]; @@ -1644,7 +1643,7 @@ rgb->g = byteToCol(out[1]); rgb->b = byteToCol(out[2]); return; - } else if (transform != NULL && transform->getTransformPixelType() == PT_CMYK) { + } else if (transform != nullptr && transform->getTransformPixelType() == PT_CMYK) { Guchar out[gfxColorMaxComps]; double in[gfxColorMaxComps]; double c, m, y, k, c1, m1, y1, k1, r, g, b; @@ -1672,9 +1671,9 @@ Y *= whiteY; Z *= whiteZ; // convert XYZ to RGB, including gamut mapping and gamma correction - r = xyzrgb[0][0] * X + xyzrgb[0][1] * Y + xyzrgb[0][2] * Z; - g = xyzrgb[1][0] * X + xyzrgb[1][1] * Y + xyzrgb[1][2] * Z; - b = xyzrgb[2][0] * X + xyzrgb[2][1] * Y + xyzrgb[2][2] * Z; + const double r = xyzrgb[0][0] * X + xyzrgb[0][1] * Y + xyzrgb[0][2] * Z; + const double g = xyzrgb[1][0] * X + xyzrgb[1][1] * Y + xyzrgb[1][2] * Z; + const double b = xyzrgb[2][0] * X + xyzrgb[2][1] * Y + xyzrgb[2][2] * Z; rgb->r = dblToCol(sqrt(clip01(r * kr))); rgb->g = dblToCol(sqrt(clip01(g * kg))); rgb->b = dblToCol(sqrt(clip01(b * kb))); @@ -1685,7 +1684,7 @@ GfxColorComp c, m, y, k; #ifdef USE_CMS - if (transform != NULL && transform->getTransformPixelType() == PT_CMYK) { + if (transform != nullptr && transform->getTransformPixelType() == PT_CMYK) { double in[gfxColorMaxComps]; Guchar out[gfxColorMaxComps]; @@ -1798,8 +1797,8 @@ rangeMin[0] = rangeMin[1] = rangeMin[2] = rangeMin[3] = 0; rangeMax[0] = rangeMax[1] = rangeMax[2] = rangeMax[3] = 1; #ifdef USE_CMS - transform = NULL; - lineTransform = NULL; + transform = nullptr; + lineTransform = nullptr; #endif } @@ -1806,10 +1805,10 @@ GfxICCBasedColorSpace::~GfxICCBasedColorSpace() { delete alt; #ifdef USE_CMS - if (transform != NULL) { + if (transform != nullptr) { if (transform->unref() == 0) delete transform; } - if (lineTransform != NULL) { + if (lineTransform != nullptr) { if (lineTransform->unref() == 0) delete lineTransform; } #endif @@ -1826,9 +1825,9 @@ } #ifdef USE_CMS cs->transform = transform; - if (transform != NULL) transform->ref(); + if (transform != nullptr) transform->ref(); cs->lineTransform = lineTransform; - if (lineTransform != NULL) lineTransform->ref(); + if (lineTransform != nullptr) lineTransform->ref(); #endif return cs; } @@ -1844,7 +1843,7 @@ if (arr->getLength() < 2) { error(errSyntaxError, -1, "Bad ICCBased color space"); - return NULL; + return nullptr; } obj1 = arr->getNF(1); if (obj1.isRef()) { @@ -1858,14 +1857,14 @@ if (out && iccProfileStreamA.num > 0) { GfxICCBasedColorSpaceKey k(iccProfileStreamA.num, iccProfileStreamA.gen); GfxICCBasedColorSpaceItem *item = static_cast(out->getIccColorSpaceCache()->lookup(k)); - if (item != NULL) + if (item != nullptr) { cs = static_cast(item->cs->copy()); int transformIntent = cs->getIntent(); int cmsIntent = INTENT_RELATIVE_COLORIMETRIC; - if (state != NULL) { + if (state != nullptr) { const char *intent = state->getRenderingIntent(); - if (intent != NULL) { + if (intent != nullptr) { if (strcmp(intent, "AbsoluteColorimetric") == 0) { cmsIntent = INTENT_ABSOLUTE_COLORIMETRIC; } else if (strcmp(intent, "Saturation") == 0) { @@ -1885,7 +1884,7 @@ obj1 = arr->get(1); if (!obj1.isStream()) { error(errSyntaxWarning, -1, "Bad ICCBased color space (stream)"); - return NULL; + return nullptr; } dict = obj1.streamGetDict(); obj2 = dict->lookup("N"); @@ -1902,7 +1901,7 @@ } obj2 = dict->lookup("Alternate"); if (obj2.isNull() || - !(altA = GfxColorSpace::parse(NULL, &obj2, out, state, recursion + 1))) { + !(altA = GfxColorSpace::parse(nullptr, &obj2, out, state, recursion + 1))) { switch (nCompsA) { case 1: altA = new GfxDeviceGrayColorSpace(); @@ -1915,13 +1914,13 @@ break; default: error(errSyntaxWarning, -1, "Bad ICCBased color space - invalid N"); - return NULL; + return nullptr; } } if (altA->getNComps() != nCompsA) { error(errSyntaxWarning, -1, "Bad ICCBased color space - N doesn't match alt color space"); delete altA; - return NULL; + return nullptr; } cs = new GfxICCBasedColorSpace(nCompsA, altA, &iccProfileStreamA); obj2 = dict->lookup("Range"); @@ -1946,12 +1945,12 @@ profBuf = iccStream->toUnsignedChars(&length, 65536, 65536); cmsHPROFILE hp = cmsOpenProfileFromMem(profBuf,length); gfree(profBuf); - if (hp == 0) { + if (hp == nullptr) { error(errSyntaxWarning, -1, "read ICCBased color space profile error"); } else { - cmsHPROFILE dhp = (state != NULL && state->getDisplayProfile() != NULL) ? state->getDisplayProfile() : displayProfile; - if (dhp == NULL) { - if (unlikely(RGBProfile == NULL)) { + cmsHPROFILE dhp = (state != nullptr && state->getDisplayProfile() != nullptr) ? state->getDisplayProfile() : displayProfile; + if (dhp == nullptr) { + if (unlikely(RGBProfile == nullptr)) { GfxColorSpace::setupColorProfiles(); } dhp = RGBProfile; @@ -1962,9 +1961,9 @@ cmsHTRANSFORM transform; int cmsIntent = INTENT_RELATIVE_COLORIMETRIC; - if (state != NULL) { + if (state != nullptr) { const char *intent = state->getRenderingIntent(); - if (intent != NULL) { + if (intent != nullptr) { if (strcmp(intent, "AbsoluteColorimetric") == 0) { cmsIntent = INTENT_ABSOLUTE_COLORIMETRIC; } else if (strcmp(intent, "Saturation") == 0) { @@ -1979,9 +1978,9 @@ dhp, COLORSPACE_SH(dcst) | CHANNELS_SH(dNChannels) | BYTES_SH(1), - cmsIntent, LCMS_FLAGS)) == 0) { + cmsIntent, LCMS_FLAGS)) == nullptr) { error(errSyntaxWarning, -1, "Can't create transform"); - cs->transform = NULL; + cs->transform = nullptr; } else { cs->transform = new GfxColorTransform(transform, cmsIntent, cst, dcst); } @@ -1989,9 +1988,9 @@ // create line transform only when the display is RGB type color space if ((transform = cmsCreateTransform(hp, CHANNELS_SH(nCompsA) | BYTES_SH(1),dhp, - (dcst == PT_RGB) ? TYPE_RGB_8 : TYPE_CMYK_8, cmsIntent, LCMS_FLAGS)) == 0) { + (dcst == PT_RGB) ? TYPE_RGB_8 : TYPE_CMYK_8, cmsIntent, LCMS_FLAGS)) == nullptr) { error(errSyntaxWarning, -1, "Can't create transform"); - cs->lineTransform = NULL; + cs->lineTransform = nullptr; } else { cs->lineTransform = new GfxColorTransform(transform, cmsIntent, cst, dcst); } @@ -2010,7 +2009,7 @@ void GfxICCBasedColorSpace::getGray(GfxColor *color, GfxGray *gray) { #ifdef USE_CMS - if (transform != 0 && transform->getTransformPixelType() == PT_GRAY) { + if (transform != nullptr && transform->getTransformPixelType() == PT_GRAY) { Guchar in[gfxColorMaxComps]; Guchar out[gfxColorMaxComps]; @@ -2059,7 +2058,7 @@ void GfxICCBasedColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) { #ifdef USE_CMS - if (transform != 0 && transform->getTransformPixelType() == PT_RGB) { + if (transform != nullptr && transform->getTransformPixelType() == PT_RGB) { Guchar in[gfxColorMaxComps]; Guchar out[gfxColorMaxComps]; @@ -2098,7 +2097,7 @@ unsigned int value = (out[0] << 16) + (out[1] << 8) + out[2]; cmsCache.insert(std::pair(key, value)); } - } else if (transform != NULL && transform->getTransformPixelType() == PT_CMYK) { + } else if (transform != nullptr && transform->getTransformPixelType() == PT_CMYK) { Guchar in[gfxColorMaxComps]; Guchar out[gfxColorMaxComps]; double c, m, y, k, c1, m1, y1, k1, r, g, b; @@ -2158,7 +2157,7 @@ void GfxICCBasedColorSpace::getRGBLine(Guchar *in, unsigned int *out, int length) { #ifdef USE_CMS - if (lineTransform != 0 && lineTransform->getTransformPixelType() == PT_RGB) { + if (lineTransform != nullptr && lineTransform->getTransformPixelType() == PT_RGB) { Guchar* tmp = (Guchar *)gmallocn(3 * length, sizeof(Guchar)); lineTransform->doTransform(in, tmp, length); for (int i = 0; i < length; ++i) { @@ -2176,7 +2175,7 @@ void GfxICCBasedColorSpace::getRGBLine(Guchar *in, Guchar *out, int length) { #ifdef USE_CMS - if (lineTransform != 0 && lineTransform->getTransformPixelType() == PT_RGB) { + if (lineTransform != nullptr && lineTransform->getTransformPixelType() == PT_RGB) { Guchar* tmp = (Guchar *)gmallocn(3 * length, sizeof(Guchar)); lineTransform->doTransform(in, tmp, length); Guchar *current = tmp; @@ -2186,7 +2185,7 @@ *out++ = *current++; } gfree(tmp); - } else if (lineTransform != NULL && lineTransform->getTransformPixelType() == PT_CMYK) { + } else if (lineTransform != nullptr && lineTransform->getTransformPixelType() == PT_CMYK) { Guchar* tmp = (Guchar *)gmallocn(4 * length, sizeof(Guchar)); lineTransform->doTransform(in, tmp, length); Guchar *current = tmp; @@ -2216,7 +2215,7 @@ void GfxICCBasedColorSpace::getRGBXLine(Guchar *in, Guchar *out, int length) { #ifdef USE_CMS - if (lineTransform != 0 && lineTransform->getTransformPixelType() == PT_RGB) { + if (lineTransform != nullptr && lineTransform->getTransformPixelType() == PT_RGB) { Guchar* tmp = (Guchar *)gmallocn(3 * length, sizeof(Guchar)); lineTransform->doTransform(in, tmp, length); Guchar *current = tmp; @@ -2237,9 +2236,9 @@ void GfxICCBasedColorSpace::getCMYKLine(Guchar *in, Guchar *out, int length) { #ifdef USE_CMS - if (lineTransform != NULL && lineTransform->getTransformPixelType() == PT_CMYK) { + if (lineTransform != nullptr && lineTransform->getTransformPixelType() == PT_CMYK) { transform->doTransform(in,out,length); - } else if (lineTransform != NULL && nComps != 4) { + } else if (lineTransform != nullptr && nComps != 4) { GfxColorComp c, m, y, k; Guchar* tmp = (Guchar *)gmallocn(3 * length, sizeof(Guchar)); getRGBLine(in, tmp, length); @@ -2271,7 +2270,7 @@ void GfxICCBasedColorSpace::getDeviceNLine(Guchar *in, Guchar *out, int length) { #ifdef USE_CMS - if (lineTransform != NULL && lineTransform->getTransformPixelType() == PT_CMYK) { + if (lineTransform != nullptr && lineTransform->getTransformPixelType() == PT_CMYK) { Guchar* tmp = (Guchar *)gmallocn(4 * length, sizeof(Guchar)); transform->doTransform(in,tmp,length); Guchar *p = tmp; @@ -2282,7 +2281,7 @@ *out++ = 0; } gfree(tmp); - } else if (lineTransform != NULL && nComps != 4) { + } else if (lineTransform != nullptr && nComps != 4) { GfxColorComp c, m, y, k; Guchar* tmp = (Guchar *)gmallocn(3 * length, sizeof(Guchar)); getRGBLine(in, tmp, length); @@ -2317,7 +2316,7 @@ void GfxICCBasedColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) { #ifdef USE_CMS - if (transform != NULL && transform->getTransformPixelType() == PT_CMYK) { + if (transform != nullptr && transform->getTransformPixelType() == PT_CMYK) { Guchar in[gfxColorMaxComps]; Guchar out[gfxColorMaxComps]; @@ -2358,7 +2357,7 @@ unsigned int value = (out[0] << 24) + (out[1] << 16) + (out[2] << 8) + out[3]; cmsCache.insert(std::pair(key, value)); } - } else if (nComps != 4 && transform != NULL && transform->getTransformPixelType() == PT_RGB) { + } else if (nComps != 4 && transform != nullptr && transform->getTransformPixelType() == PT_RGB) { GfxRGB rgb; GfxColorComp c, m, y, k; @@ -2387,7 +2386,7 @@ GBool GfxICCBasedColorSpace::useGetRGBLine() { #ifdef USE_CMS - return lineTransform != NULL || alt->useGetRGBLine(); + return lineTransform != nullptr || alt->useGetRGBLine(); #else return alt->useGetRGBLine(); #endif @@ -2395,7 +2394,7 @@ GBool GfxICCBasedColorSpace::useGetCMYKLine() { #ifdef USE_CMS - return lineTransform != NULL || alt->useGetCMYKLine(); + return lineTransform != nullptr || alt->useGetCMYKLine(); #else return alt->useGetCMYKLine(); #endif @@ -2403,7 +2402,7 @@ GBool GfxICCBasedColorSpace::useGetDeviceNLine() { #ifdef USE_CMS - return lineTransform != NULL || alt->useGetDeviceNLine(); + return lineTransform != nullptr || alt->useGetDeviceNLine(); #else return alt->useGetDeviceNLine(); #endif @@ -2722,13 +2721,13 @@ delete name; delete alt; delete func; - if (mapping != NULL) + if (mapping != nullptr) gfree(mapping); } GfxColorSpace *GfxSeparationColorSpace::copy() { - int *mappingA = NULL; - if (mapping != NULL) { + int *mappingA = nullptr; + if (mapping != nullptr) { mappingA = (int *) gmalloc(sizeof(int)); *mappingA = *mapping; } @@ -2857,7 +2856,7 @@ void GfxSeparationColorSpace::getDeviceN(GfxColor *color, GfxColor *deviceN) { for (int i = 0; i < gfxColorMaxComps; i++) deviceN->c[i] = 0; - if (mapping == NULL || mapping[0] == -1) { + if (mapping == nullptr || mapping[0] == -1) { GfxCMYK cmyk; getCMYK(color, &cmyk); @@ -2900,7 +2899,7 @@ error(errSyntaxWarning, -1, "Different functions found for '{0:t}', convert immediately", name); gfree(mapping); - mapping = NULL; + mapping = nullptr; return; } *mapping = i+4; @@ -2913,7 +2912,7 @@ error(errSyntaxWarning, -1, "Too many ({0:d}) spots, convert '{1:t}' immediately", maxSepComps, name); gfree(mapping); - mapping = NULL; + mapping = nullptr; return; } *mapping = separationList->getLength() + 4; @@ -2940,7 +2939,7 @@ sepsCS = sepsCSA; nonMarking = gTrue; overprintMask = 0; - mapping = NULL; + mapping = nullptr; for (i = 0; i < nComps; ++i) { names[i] = namesA[i]; if (names[i]->cmp("None")) { @@ -2993,22 +2992,22 @@ delete alt; delete func; deleteGooList(sepsCS, GfxSeparationColorSpace); - if (mapping != NULL) + if (mapping != nullptr) gfree(mapping); } GfxColorSpace *GfxDeviceNColorSpace::copy() { int i; - int *mappingA = NULL; + int *mappingA = nullptr; GooList *sepsCSA = new GooList(sepsCS->getLength()); for (i = 0; i < sepsCS->getLength(); i++) { GfxSeparationColorSpace *scs = (GfxSeparationColorSpace *) sepsCS->get(i); - if (likely(scs != NULL)) { + if (likely(scs != nullptr)) { sepsCSA->append(scs->copy()); } } - if (mapping != NULL) { + if (mapping != nullptr) { mappingA = (int *)gmalloc(sizeof(int) * nComps); for (i = 0; i < nComps; i++) mappingA[i] = mapping[i]; @@ -3092,7 +3091,7 @@ } err1: delete separationList; - return NULL; + return nullptr; } void GfxDeviceNColorSpace::getGray(GfxColor *color, GfxGray *gray) { @@ -3143,7 +3142,7 @@ void GfxDeviceNColorSpace::getDeviceN(GfxColor *color, GfxColor *deviceN) { for (int i = 0; i < gfxColorMaxComps; i++) deviceN->c[i] = 0; - if (mapping == NULL) { + if (mapping == nullptr) { GfxCMYK cmyk; getCMYK(color, &cmyk); @@ -3189,7 +3188,7 @@ } else { Guint startOverprintMask = 0x10; GBool found = gFalse; - Function *sepFunc = NULL; + Function *sepFunc = nullptr; if (nComps == 1) sepFunc = func; else { @@ -3204,11 +3203,11 @@ for (int j = 0; j < separationList->getLength(); j++) { GfxSeparationColorSpace *sepCS = (GfxSeparationColorSpace *)separationList->get(j); if (!sepCS->getName()->cmp(names[i])) { - if (sepFunc != NULL && sepCS->getFunc()->hasDifferentResultSet(sepFunc)) { + if (sepFunc != nullptr && sepCS->getFunc()->hasDifferentResultSet(sepFunc)) { error(errSyntaxWarning, -1, "Different functions found for '{0:t}', convert immediately", names[i]); gfree(mapping); - mapping = NULL; + mapping = nullptr; overprintMask = 0xffffffff; return; } @@ -3224,7 +3223,7 @@ error(errSyntaxWarning, -1, "Too many ({0:d}) spots, convert '{1:t}' immediately", maxSepComps, names[i]); gfree(mapping); - mapping = NULL; + mapping = nullptr; overprintMask = 0xffffffff; return; } @@ -3244,7 +3243,7 @@ if(!found) { error(errSyntaxWarning, -1, "DeviceN has no suitable colorant"); gfree(mapping); - mapping = NULL; + mapping = nullptr; overprintMask = 0xffffffff; return; } @@ -3271,7 +3270,7 @@ GfxColorSpace *GfxPatternColorSpace::copy() { return new GfxPatternColorSpace(under ? under->copy() : - (GfxColorSpace *)NULL); + (GfxColorSpace *)nullptr); } GfxColorSpace *GfxPatternColorSpace::parse(GfxResources *res, Array *arr, OutputDev *out, GfxState *state, int recursion) { @@ -3281,14 +3280,14 @@ if (arr->getLength() != 1 && arr->getLength() != 2) { error(errSyntaxWarning, -1, "Bad Pattern color space"); - return NULL; + return nullptr; } - underA = NULL; + underA = nullptr; if (arr->getLength() == 2) { obj1 = arr->get(1); if (!(underA = GfxColorSpace::parse(res, &obj1, out, state, recursion + 1))) { error(errSyntaxWarning, -1, "Bad Pattern color space (underlying color space)"); - return NULL; + return nullptr; } } cs = new GfxPatternColorSpace(underA); @@ -3343,7 +3342,7 @@ } else { return nullptr; } - pattern = NULL; + pattern = nullptr; if (obj1.isInt() && obj1.getInt() == 1) { pattern = GfxTilingPattern::parse(obj, patternRefNum); } else if (obj1.isInt() && obj1.getInt() == 2) { @@ -3366,7 +3365,7 @@ int i; if (!patObj->isStream()) { - return NULL; + return nullptr; } dict = patObj->streamGetDict(); @@ -3474,7 +3473,7 @@ int i; if (!patObj->isDict()) { - return NULL; + return nullptr; } dict = patObj->getDict(); @@ -3481,7 +3480,7 @@ obj1 = dict->lookup("Shading"); shadingA = GfxShading::parse(res, &obj1, out, state); if (!shadingA) { - return NULL; + return nullptr; } matrixA[0] = 1; matrixA[1] = 0; @@ -3525,7 +3524,7 @@ GfxShading::GfxShading(int typeA) { type = typeA; - colorSpace = NULL; + colorSpace = nullptr; } GfxShading::GfxShading(GfxShading *shading) { @@ -3561,13 +3560,13 @@ } else if (obj->isStream()) { dict = obj->streamGetDict(); } else { - return NULL; + return nullptr; } obj1 = dict->lookup("ShadingType"); if (!obj1.isInt()) { error(errSyntaxWarning, -1, "Invalid ShadingType in shading dictionary"); - return NULL; + return nullptr; } typeA = obj1.getInt(); @@ -3621,7 +3620,7 @@ return shading; err1: - return NULL; + return nullptr; } GBool GfxShading::init(GfxResources *res, Dict *dict, OutputDev *out, GfxState *state) { @@ -3742,11 +3741,17 @@ x1A = y1A = 1; obj1 = dict->lookup("Domain"); if (obj1.isArray() && obj1.arrayGetLength() == 4) { + bool decodeOk = true; Object obj2; - x0A = (obj2 = obj1.arrayGet(0), obj2.getNum()); - x1A = (obj2 = obj1.arrayGet(1), obj2.getNum()); - y0A = (obj2 = obj1.arrayGet(2), obj2.getNum()); - y1A = (obj2 = obj1.arrayGet(3), obj2.getNum()); + x0A = (obj2 = obj1.arrayGet(0), obj2.getNum(&decodeOk)); + x1A = (obj2 = obj1.arrayGet(1), obj2.getNum(&decodeOk)); + y0A = (obj2 = obj1.arrayGet(2), obj2.getNum(&decodeOk)); + y1A = (obj2 = obj1.arrayGet(3), obj2.getNum(&decodeOk)); + + if (!decodeOk) { + error(errSyntaxWarning, -1, "Invalid Domain array in function shading dictionary"); + return nullptr; + } } matrixA[0] = 1; matrixA[1] = 0; @@ -3754,13 +3759,19 @@ matrixA[4] = 0; matrixA[5] = 0; obj1 = dict->lookup("Matrix"); if (obj1.isArray() && obj1.arrayGetLength() == 6) { + bool decodeOk = true; Object obj2; - matrixA[0] = (obj2 = obj1.arrayGet(0), obj2.getNum()); - matrixA[1] = (obj2 = obj1.arrayGet(1), obj2.getNum()); - matrixA[2] = (obj2 = obj1.arrayGet(2), obj2.getNum()); - matrixA[3] = (obj2 = obj1.arrayGet(3), obj2.getNum()); - matrixA[4] = (obj2 = obj1.arrayGet(4), obj2.getNum()); - matrixA[5] = (obj2 = obj1.arrayGet(5), obj2.getNum()); + matrixA[0] = (obj2 = obj1.arrayGet(0), obj2.getNum(&decodeOk)); + matrixA[1] = (obj2 = obj1.arrayGet(1), obj2.getNum(&decodeOk)); + matrixA[2] = (obj2 = obj1.arrayGet(2), obj2.getNum(&decodeOk)); + matrixA[3] = (obj2 = obj1.arrayGet(3), obj2.getNum(&decodeOk)); + matrixA[4] = (obj2 = obj1.arrayGet(4), obj2.getNum(&decodeOk)); + matrixA[5] = (obj2 = obj1.arrayGet(5), obj2.getNum(&decodeOk)); + + if (!decodeOk) { + error(errSyntaxWarning, -1, "Invalid Matrix array in function shading dictionary"); + return nullptr; + } } obj1 = dict->lookup("Function"); @@ -3787,7 +3798,7 @@ funcsA, nFuncsA); if (!shading->init(res, dict, out, state)) { delete shading; - return NULL; + return nullptr; } return shading; } @@ -3838,9 +3849,9 @@ cacheSize = 0; lastMatch = 0; - cacheBounds = NULL; - cacheCoeff = NULL; - cacheValues = NULL; + cacheBounds = nullptr; + cacheCoeff = nullptr; + cacheValues = nullptr; } GfxUnivariateShading::GfxUnivariateShading(GfxUnivariateShading *shading): @@ -3859,9 +3870,9 @@ cacheSize = 0; lastMatch = 0; - cacheBounds = NULL; - cacheCoeff = NULL; - cacheValues = NULL; + cacheBounds = nullptr; + cacheCoeff = nullptr; + cacheValues = nullptr; } GfxUnivariateShading::~GfxUnivariateShading() { @@ -3876,7 +3887,6 @@ void GfxUnivariateShading::getColor(double t, GfxColor *color) { double out[gfxColorMaxComps]; - int i; // NB: there can be one function with n outputs or n functions with // one output each (where n = number of color components) @@ -3906,14 +3916,14 @@ u = cacheValues + lastMatch * nComps; l = u - nComps; - for (i = 0; i < nComps; ++i) { + for (int i = 0; i < nComps; ++i) { out[i] = ix * l[i] + x * u[i]; } } else { - for (i = 0; i < nComps; ++i) { + for (int i = 0; i < nComps; ++i) { out[i] = 0; } - for (i = 0; i < nFuncs; ++i) { + for (int i = 0; i < nFuncs; ++i) { if (funcs[i]->getInputSize() != 1) { error(errSyntaxWarning, -1, "Invalid shading function (input != 1)"); break; @@ -3922,7 +3932,7 @@ } } - for (i = 0; i < nComps; ++i) { + for (int i = 0; i < nComps; ++i) { color->c[i] = dblToCol(out[i]); } } @@ -3934,7 +3944,7 @@ int i, j, nComps, maxSize; gfree (cacheBounds); - cacheBounds = NULL; + cacheBounds = nullptr; cacheSize = 0; if (unlikely(nFuncs < 1)) @@ -4240,12 +4250,13 @@ obj1 = dict->lookup("Coords"); if (obj1.isArray() && obj1.arrayGetLength() == 6) { Object obj2; - x0A = (obj2 = obj1.arrayGet(0), obj2.getNum()); - y0A = (obj2 = obj1.arrayGet(1), obj2.getNum()); - r0A = (obj2 = obj1.arrayGet(2), obj2.getNum()); - x1A = (obj2 = obj1.arrayGet(3), obj2.getNum()); - y1A = (obj2 = obj1.arrayGet(4), obj2.getNum()); - r1A = (obj2 = obj1.arrayGet(5), obj2.getNum()); + bool dummy; // just so that we can use the getNum that returns 0 on obj2 not being a num instead of aborting + x0A = (obj2 = obj1.arrayGet(0), obj2.getNum(&dummy)); + y0A = (obj2 = obj1.arrayGet(1), obj2.getNum(&dummy)); + r0A = (obj2 = obj1.arrayGet(2), obj2.getNum(&dummy)); + x1A = (obj2 = obj1.arrayGet(3), obj2.getNum(&dummy)); + y1A = (obj2 = obj1.arrayGet(4), obj2.getNum(&dummy)); + r1A = (obj2 = obj1.arrayGet(5), obj2.getNum(&dummy)); } else { error(errSyntaxWarning, -1, "Missing or invalid Coords in shading dictionary"); return nullptr; @@ -4256,8 +4267,8 @@ obj1 = dict->lookup("Domain"); if (obj1.isArray() && obj1.arrayGetLength() == 2) { Object obj2; - t0A = (obj2 = obj1.arrayGet(0), obj2.getNum()); - t1A = (obj2 = obj1.arrayGet(1), obj2.getNum()); + t0A = (obj2 = obj1.arrayGet(0), obj2.isNum() ? obj2.getNum() : 0); + t1A = (obj2 = obj1.arrayGet(1), obj2.isNum() ? obj2.getNum() : 1); } obj1 = dict->lookup("Function"); @@ -4284,8 +4295,8 @@ obj1 = dict->lookup("Extend"); if (obj1.isArray() && obj1.arrayGetLength() == 2) { Object obj2; - extend0A = (obj2 = obj1.arrayGet(0), obj2.getBool()); - extend1A = (obj2 = obj1.arrayGet(1), obj2.getBool()); + extend0A = (obj2 = obj1.arrayGet(0), obj2.isBool() ? obj2.getBool() : gFalse); + extend1A = (obj2 = obj1.arrayGet(1), obj2.isBool() ? obj2.getBool() : gFalse); } shading = new GfxRadialShading(x0A, y0A, r0A, x1A, y1A, r1A, t0A, t1A, @@ -4292,7 +4303,7 @@ funcsA, nFuncsA, extend0A, extend1A); if (!shading->init(res, dict, out, state)) { delete shading; - return NULL; + return nullptr; } return shading; } @@ -4619,6 +4630,8 @@ GfxShadingBitBuf(Stream *strA); ~GfxShadingBitBuf(); + GfxShadingBitBuf(const GfxShadingBitBuf &) = delete; + GfxShadingBitBuf& operator=(const GfxShadingBitBuf &) = delete; GBool getBits(int n, Guint *val); void flushBits(); @@ -4784,18 +4797,24 @@ obj1 = dict->lookup("Decode"); if (obj1.isArray() && obj1.arrayGetLength() >= 6) { Object obj2; - xMin = (obj2 = obj1.arrayGet(0), obj2.getNum()); - xMax = (obj2 = obj1.arrayGet(1), obj2.getNum()); + bool decodeOk = true; + xMin = (obj2 = obj1.arrayGet(0), obj2.getNum(&decodeOk)); + xMax = (obj2 = obj1.arrayGet(1), obj2.getNum(&decodeOk)); xMul = (xMax - xMin) / (pow(2.0, coordBits) - 1); - yMin = (obj2 = obj1.arrayGet(2), obj2.getNum()); - yMax = (obj2 = obj1.arrayGet(3), obj2.getNum()); + yMin = (obj2 = obj1.arrayGet(2), obj2.getNum(&decodeOk)); + yMax = (obj2 = obj1.arrayGet(3), obj2.getNum(&decodeOk)); yMul = (yMax - yMin) / (pow(2.0, coordBits) - 1); for (i = 0; 5 + 2*i < obj1.arrayGetLength() && i < gfxColorMaxComps; ++i) { - cMin[i] = (obj2 = obj1.arrayGet(4 + 2*i), obj2.getNum()); - cMax[i] = (obj2 = obj1.arrayGet(5 + 2*i), obj2.getNum()); + cMin[i] = (obj2 = obj1.arrayGet(4 + 2*i), obj2.getNum(&decodeOk)); + cMax[i] = (obj2 = obj1.arrayGet(5 + 2*i), obj2.getNum(&decodeOk)); cMul[i] = (cMax[i] - cMin[i]) / (double)((1 << compBits) - 1); } nComps = i; + + if (!decodeOk) { + error(errSyntaxWarning, -1, "Missing or invalid Decode array in shading dictionary"); + return nullptr; + } } else { error(errSyntaxWarning, -1, "Missing or invalid Decode array in shading dictionary"); return nullptr; @@ -4826,8 +4845,8 @@ } nVerticesA = nTrianglesA = 0; - verticesA = NULL; - trianglesA = NULL; + verticesA = nullptr; + trianglesA = nullptr; vertSize = triSize = 0; state = 0; flag = 0; // make gcc happy @@ -4919,7 +4938,7 @@ funcsA, nFuncsA); if (!shading->init(res, dict, out, gfxState)) { delete shading; - return NULL; + return nullptr; } return shading; } @@ -5157,7 +5176,7 @@ } nPatchesA = 0; - patchesA = NULL; + patchesA = nullptr; patchesSize = 0; bitBuf = new GfxShadingBitBuf(str); while (1) { @@ -5640,10 +5659,10 @@ // initialize for (k = 0; k < gfxColorMaxComps; ++k) { - lookup[k] = NULL; - lookup2[k] = NULL; + lookup[k] = nullptr; + lookup2[k] = nullptr; } - byte_lookup = NULL; + byte_lookup = nullptr; // get decode map if (decode->isNull()) { @@ -5689,7 +5708,7 @@ // Optimization: for Indexed and Separation color spaces (which have // only one component), we pre-compute a second lookup table with // color values - colorSpace2 = NULL; + colorSpace2 = nullptr; nComps2 = 0; useByteLookup = gFalse; switch (colorSpace->getMode()) { @@ -5786,9 +5805,9 @@ nComps2 = colorMap->nComps2; useMatte = colorMap->useMatte; matteColor = colorMap->matteColor; - colorSpace2 = NULL; + colorSpace2 = nullptr; for (k = 0; k < gfxColorMaxComps; ++k) { - lookup[k] = NULL; + lookup[k] = nullptr; } n = 1 << bits; if (colorSpace->getMode() == csIndexed) { @@ -6090,7 +6109,6 @@ } void GfxImageColorMap::getDeviceNLine(Guchar *in, Guchar *out, int length) { - int i, j; Guchar *inp, *tmp_line; if (!useDeviceNLine()) { @@ -6097,7 +6115,7 @@ GfxColor deviceN; inp = in; - for (i = 0; i < length; i++) { + for (int i = 0; i < length; i++) { getDeviceN (inp, &deviceN); for (int j = 0; j < SPOT_NCOMPS+4; j++) *out++ = deviceN.c[j]; @@ -6110,8 +6128,8 @@ case csIndexed: case csSeparation: tmp_line = (Guchar *) gmallocn (length, nComps2); - for (i = 0; i < length; i++) { - for (j = 0; j < nComps2; j++) { + for (int i = 0; i < length; i++) { + for (int j = 0; j < nComps2; j++) { tmp_line[i * nComps2 + j] = byte_lookup[in[i] * nComps2 + j]; } } @@ -6121,8 +6139,8 @@ default: inp = in; - for (j = 0; j < length; j++) - for (i = 0; i < nComps; i++) { + for (int j = 0; j < length; j++) + for (int i = 0; i < nComps; i++) { *inp = byte_lookup[*inp * nComps + i]; inp++; } @@ -6375,12 +6393,12 @@ //------------------------------------------------------------------------ // //------------------------------------------------------------------------ -GfxState::ReusablePathIterator::ReusablePathIterator(GfxPath *path) - : path(path), +GfxState::ReusablePathIterator::ReusablePathIterator(GfxPath *pathA) + : path(pathA), subPathOff(0), coordOff(0), numCoords(0), - curSubPath(NULL) + curSubPath(nullptr) { if( path->getNumSubpaths() ) { curSubPath = path->getSubpath(subPathOff); @@ -6471,8 +6489,8 @@ strokeColorSpace = new GfxDeviceGrayColorSpace(); fillColor.c[0] = 0; strokeColor.c[0] = 0; - fillPattern = NULL; - strokePattern = NULL; + fillPattern = nullptr; + strokePattern = nullptr; blendMode = gfxBlendNormal; fillOpacity = 1; strokeOpacity = 1; @@ -6479,10 +6497,10 @@ fillOverprint = gFalse; strokeOverprint = gFalse; overprintMode = 0; - transfer[0] = transfer[1] = transfer[2] = transfer[3] = NULL; + transfer[0] = transfer[1] = transfer[2] = transfer[3] = nullptr; lineWidth = 1; - lineDash = NULL; + lineDash = nullptr; lineDashLength = 0; lineDashStart = 0; flatness = 1; @@ -6493,7 +6511,7 @@ alphaIsShape = gFalse; textKnockout = gFalse; - font = NULL; + font = nullptr; fontSize = 0; textMat[0] = 1; textMat[1] = 0; textMat[2] = 0; textMat[3] = 1; @@ -6516,14 +6534,14 @@ renderingIntent[0] = 0; - saved = NULL; + saved = nullptr; #ifdef USE_CMS GfxColorSpace::setupColorProfiles(); - XYZ2DisplayTransformRelCol = NULL; - XYZ2DisplayTransformAbsCol = NULL; - XYZ2DisplayTransformSat = NULL; - XYZ2DisplayTransformPerc = NULL; - localDisplayProfile = NULL; + XYZ2DisplayTransformRelCol = nullptr; + XYZ2DisplayTransformAbsCol = nullptr; + XYZ2DisplayTransformSat = nullptr; + XYZ2DisplayTransformPerc = nullptr; + localDisplayProfile = nullptr; displayProfileRef = 0; #endif } @@ -6573,7 +6591,7 @@ if (XYZ2DisplayTransformPerc->unref() == 0) delete XYZ2DisplayTransformPerc; } - if (--displayProfileRef == 0 && localDisplayProfile != NULL) { + if (--displayProfileRef == 0 && localDisplayProfile != nullptr) { cmsCloseProfile(localDisplayProfile); } #endif @@ -6611,7 +6629,7 @@ if (copyPath) { path = state->path->copy(); } - saved = NULL; + saved = nullptr; #ifdef USE_CMS if (XYZ2DisplayTransformRelCol) { XYZ2DisplayTransformRelCol->ref(); @@ -6633,11 +6651,11 @@ #ifdef USE_CMS void GfxState::setDisplayProfile(cmsHPROFILE localDisplayProfileA) { - if (localDisplayProfile != NULL) { + if (localDisplayProfile != nullptr) { cmsCloseProfile(localDisplayProfile); } localDisplayProfile = localDisplayProfileA; - if (localDisplayProfileA != NULL) { + if (localDisplayProfileA != nullptr) { cmsHTRANSFORM transform; unsigned int nChannels; unsigned int localDisplayPixelType; @@ -6651,7 +6669,7 @@ localDisplayProfile, COLORSPACE_SH(localDisplayPixelType) | CHANNELS_SH(nChannels) | BYTES_SH(1), - INTENT_RELATIVE_COLORIMETRIC,LCMS_FLAGS)) == 0) { + INTENT_RELATIVE_COLORIMETRIC,LCMS_FLAGS)) == nullptr) { error(errSyntaxWarning, -1, "Can't create Lab transform"); } else { XYZ2DisplayTransformRelCol = new GfxColorTransform(transform, INTENT_RELATIVE_COLORIMETRIC, PT_XYZ, localDisplayPixelType); @@ -6660,7 +6678,7 @@ localDisplayProfile, COLORSPACE_SH(localDisplayPixelType) | CHANNELS_SH(nChannels) | BYTES_SH(1), - INTENT_ABSOLUTE_COLORIMETRIC,LCMS_FLAGS)) == 0) { + INTENT_ABSOLUTE_COLORIMETRIC,LCMS_FLAGS)) == nullptr) { error(errSyntaxWarning, -1, "Can't create Lab transform"); } else { XYZ2DisplayTransformAbsCol = new GfxColorTransform(transform, INTENT_ABSOLUTE_COLORIMETRIC, PT_XYZ, localDisplayPixelType); @@ -6669,7 +6687,7 @@ localDisplayProfile, COLORSPACE_SH(localDisplayPixelType) | CHANNELS_SH(nChannels) | BYTES_SH(1), - INTENT_SATURATION,LCMS_FLAGS)) == 0) { + INTENT_SATURATION,LCMS_FLAGS)) == nullptr) { error(errSyntaxWarning, -1, "Can't create Lab transform"); } else { XYZ2DisplayTransformSat = new GfxColorTransform(transform, INTENT_SATURATION, PT_XYZ, localDisplayPixelType); @@ -6678,7 +6696,7 @@ localDisplayProfile, COLORSPACE_SH(localDisplayPixelType) | CHANNELS_SH(nChannels) | BYTES_SH(1), - INTENT_PERCEPTUAL,LCMS_FLAGS)) == 0) { + INTENT_PERCEPTUAL,LCMS_FLAGS)) == nullptr) { error(errSyntaxWarning, -1, "Can't create Lab transform"); } else { XYZ2DisplayTransformPerc = new GfxColorTransform(transform, INTENT_PERCEPTUAL, PT_XYZ, localDisplayPixelType); @@ -6698,7 +6716,7 @@ } else if (strcmp(renderingIntent, "Perceptual") == 0) { transform = XYZ2DisplayTransformPerc; } - if (transform == NULL) { + if (transform == nullptr) { transform = XYZ2DisplayTransform; } return transform; @@ -7084,8 +7102,8 @@ oldState->lineX = lineX; oldState->lineY = lineY; - path = NULL; - saved = NULL; + path = nullptr; + saved = nullptr; delete this; } else { Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/GfxState.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/GfxState.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/GfxState.h 2018-04-22 15:47:12 UTC (rev 796) @@ -17,7 +17,7 @@ // Copyright (C) 2006, 2007 Jeff Muizelaar // Copyright (C) 2006 Carlos Garcia Campos // Copyright (C) 2009 Koji Otani -// Copyright (C) 2009-2011, 2013, 2016, 2017 Albert Astals Cid +// Copyright (C) 2009-2011, 2013, 2016-2018 Albert Astals Cid // Copyright (C) 2010 Christian Feuers?nger // Copyright (C) 2011 Andrea Canciani // Copyright (C) 2011-2014, 2016 Thomas Freitag @@ -196,6 +196,8 @@ // transformA should be a cmsHTRANSFORM GfxColorTransform(void *transformA, int cmsIntent, unsigned int inputPixelType, unsigned int transformPixelType); ~GfxColorTransform(); + GfxColorTransform(const GfxColorTransform &) = delete; + GfxColorTransform& operator=(const GfxColorTransform &) = delete; int getIntent() { return cmsIntent; } int getInputPixelType() { return inputPixelType; } int getTransformPixelType() { return transformPixelType; } @@ -215,6 +217,10 @@ GfxColorSpace(); virtual ~GfxColorSpace(); + + GfxColorSpace(const GfxColorSpace &) = delete; + GfxColorSpace& operator=(const GfxColorSpace &other) = delete; + virtual GfxColorSpace *copy() = 0; virtual GfxColorSpaceMode getMode() = 0; @@ -766,6 +772,9 @@ GfxPattern(int typeA, int patternRefNumA); virtual ~GfxPattern(); + GfxPattern(const GfxPattern &) = delete; + GfxPattern& operator=(const GfxPattern &other) = delete; + static GfxPattern *parse(GfxResources *res, Object *obj, OutputDev *out, GfxState *state, int patternRefNum); virtual GfxPattern *copy() = 0; @@ -852,6 +861,9 @@ GfxShading(GfxShading *shading); virtual ~GfxShading(); + GfxShading(const GfxShading &) = delete; + GfxShading& operator=(const GfxShading &other) = delete; + static GfxShading *parse(GfxResources *res, Object *obj, OutputDev *out, GfxState *state); virtual GfxShading *copy() = 0; @@ -1175,6 +1187,9 @@ // Destructor. ~GfxImageColorMap(); + GfxImageColorMap(const GfxImageColorMap &) = delete; + GfxImageColorMap& operator=(const GfxImageColorMap &) = delete; + // Return a copy of this color map. GfxImageColorMap *copy() { return new GfxImageColorMap(this); } @@ -1248,6 +1263,9 @@ // Destructor. ~GfxSubpath(); + GfxSubpath(const GfxSubpath &) = delete; + GfxSubpath& operator=(const GfxSubpath &) = delete; + // Copy. GfxSubpath *copy() { return new GfxSubpath(this); } @@ -1299,6 +1317,9 @@ // Destructor. ~GfxPath(); + GfxPath(const GfxPath &) = delete; + GfxPath& operator=(const GfxPath &) = delete; + // Copy. GfxPath *copy() { return new GfxPath(justMoved, firstX, firstY, subpaths, n, size); } @@ -1419,6 +1440,9 @@ // Destructor. ~GfxState(); + GfxState(const GfxState &) = delete; + GfxState& operator=(const GfxState &) = delete; + // Copy. GfxState *copy(GBool copyPath = gFalse) { return new GfxState(this, copyPath); } Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/GlobalParams.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/GlobalParams.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/GlobalParams.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -15,7 +15,7 @@ // // Copyright (C) 2005 Martin Kretzschmar // Copyright (C) 2005, 2006 Kristian H?gsberg -// Copyright (C) 2005, 2007-2010, 2012, 2015, 2017 Albert Astals Cid +// Copyright (C) 2005, 2007-2010, 2012, 2015, 2017, 2018 Albert Astals Cid // Copyright (C) 2005 Jonathan Blandford // Copyright (C) 2006, 2007 Jeff Muizelaar // Copyright (C) 2006 Takashi Iwai @@ -127,7 +127,7 @@ //------------------------------------------------------------------------ -GlobalParams *globalParams = NULL; +GlobalParams *globalParams = nullptr; #if defined(ENABLE_RELOCATABLE) && defined(_WIN32) @@ -210,6 +210,8 @@ SysFontInfo(GooString *nameA, GBool boldA, GBool italicA, GBool obliqueA, GBool fixedWidthA, GooString *pathA, SysFontType typeA, int fontNumA, GooString *substituteNameA); ~SysFontInfo(); + SysFontInfo(const SysFontInfo &) = delete; + SysFontInfo& operator=(const SysFontInfo&) = delete; GBool match(SysFontInfo *fi); GBool match(GooString *nameA, GBool boldA, GBool italicA, GBool obliqueA, GBool fixedWidthA); GBool match(GooString *nameA, GBool boldA, GBool italicA); @@ -258,6 +260,8 @@ SysFontList(); ~SysFontList(); + SysFontList(const SysFontList &) = delete; + SysFontList& operator=(const SysFontList &) = delete; SysFontInfo *find(GooString *name, GBool isFixedWidth, GBool exact); #ifdef _WIN32 @@ -363,13 +367,13 @@ } // search for the font - fi = NULL; + fi = nullptr; for (i = 0; i < fonts->getLength(); ++i) { fi = (SysFontInfo *)fonts->get(i); if (fi->match(name2, bold, italic, oblique, fixedWidth)) { break; } - fi = NULL; + fi = nullptr; } if (!fi && !exact && bold) { // try ignoring the bold flag @@ -378,7 +382,7 @@ if (fi->match(name2, gFalse, italic)) { break; } - fi = NULL; + fi = nullptr; } } if (!fi && !exact && (bold || italic)) { @@ -388,7 +392,7 @@ if (fi->match(name2, gFalse, gFalse)) { break; } - fi = NULL; + fi = nullptr; } } @@ -648,7 +652,7 @@ snprintf(dataPathBuffer, bufSize, "%s/nameToUnicode", dataRoot); dir = new GDir(dataPathBuffer, gTrue); - while (entry = dir->getNextEntry(), entry != NULL) { + while (entry = dir->getNextEntry(), entry != nullptr) { if (!entry->isDir()) { parseNameToUnicode(entry->getFullPath()); } @@ -658,7 +662,7 @@ snprintf(dataPathBuffer, bufSize, "%s/cidToUnicode", dataRoot); dir = new GDir(dataPathBuffer, gFalse); - while (entry = dir->getNextEntry(), entry != NULL) { + while (entry = dir->getNextEntry(), entry != nullptr) { addCIDToUnicode(entry->getName(), entry->getFullPath()); delete entry; } @@ -666,7 +670,7 @@ snprintf(dataPathBuffer, bufSize, "%s/unicodeMap", dataRoot); dir = new GDir(dataPathBuffer, gFalse); - while (entry = dir->getNextEntry(), entry != NULL) { + while (entry = dir->getNextEntry(), entry != nullptr) { addUnicodeMap(entry->getName(), entry->getFullPath()); delete entry; } @@ -674,7 +678,7 @@ snprintf(dataPathBuffer, bufSize, "%s/cMap", dataRoot); dir = new GDir(dataPathBuffer, gFalse); - while (entry = dir->getNextEntry(), entry != NULL) { + while (entry = dir->getNextEntry(), entry != nullptr) { addCMapDir(entry->getName(), entry->getFullPath()); toUnicodeDirs->append(entry->getFullPath()->copy()); delete entry; @@ -700,7 +704,7 @@ line = 1; while (getLine(buf, sizeof(buf), f)) { tok1 = strtok_r(buf, " \t\r\n", &tokptr); - tok2 = strtok_r(NULL, " \t\r\n", &tokptr); + tok2 = strtok_r(nullptr, " \t\r\n", &tokptr); if (tok1 && tok2) { sscanf(tok1, "%x", &u); nameToUnicodeText->add(tok2, u); @@ -842,7 +846,7 @@ if ((fileName = (GooString *)unicodeMaps->lookup(encodingName))) { f = openFile(fileName->getCString(), "r"); } else { - f = NULL; + f = nullptr; } unlockGlobalParams; return f; @@ -858,7 +862,7 @@ lockGlobalParams; if (!(list = (GooList *)cMapDirs->lookup(collection))) { unlockGlobalParams; - return NULL; + return nullptr; } for (i = 0; i < list->getLength(); ++i) { dir = (GooString *)list->get(i); @@ -871,7 +875,7 @@ } } unlockGlobalParams; - return NULL; + return nullptr; } FILE *GlobalParams::findToUnicodeFile(GooString *name) { @@ -891,7 +895,7 @@ } } unlockGlobalParams; - return NULL; + return nullptr; } #ifdef WITH_FONTCONFIGURATION_FONTCONFIG @@ -899,12 +903,12 @@ { const char *match; - if (name == NULL) + if (name == nullptr) return gFalse; match = strstr(name, modifier); if (match) { - if (*start == NULL || match < *start) + if (*start == nullptr || match < *start) *start = match; return gTrue; } @@ -961,10 +965,10 @@ FcPattern *p; // this is all heuristics will be overwritten if font had proper info - name = (base14Name == NULL) ? font->getName()->getCString() : base14Name->getCString(); + name = (base14Name == nullptr) ? font->getName()->getCString() : base14Name->getCString(); modifiers = strchr (name, ','); - if (modifiers == NULL) + if (modifiers == nullptr) modifiers = strchr (name, '-'); // remove the - from the names, for some reason, Fontconfig does not @@ -973,7 +977,7 @@ for (int i = 0; i < len; i++) name[i] = (name[i] == '-' ? ' ' : name[i]); - start = NULL; + start = nullptr; findModifier(modifiers, "Regular", &start); findModifier(modifiers, "Roman", &start); @@ -1052,7 +1056,7 @@ const char *lang = getFontLang(font); - p = FcPatternBuild(NULL, + p = FcPatternBuild(nullptr, FC_FAMILY, FcTypeString, family, FC_LANG, FcTypeString, lang, NULL); @@ -1070,7 +1074,7 @@ GooString *GlobalParams::findFontFile(GooString *fontName) { GooString *path; - setupBaseFonts(NULL); + setupBaseFonts(nullptr); lockGlobalParams; if ((path = (GooString *)fontFiles->lookup(fontName))) { path = path->copy(); @@ -1078,7 +1082,7 @@ return path; } unlockGlobalParams; - return NULL; + return nullptr; } /* if you can't or don't want to use Fontconfig, you need to implement @@ -1093,18 +1097,18 @@ SysFontType type; int fontNum; - return findSystemFontFile(font, &type, &fontNum, NULL, base14Name); + return findSystemFontFile(font, &type, &fontNum, nullptr, base14Name); } GooString *GlobalParams::findSystemFontFile(GfxFont *font, SysFontType *type, int *fontNum, GooString *substituteFontName, GooString *base14Name) { - SysFontInfo *fi = NULL; - FcPattern *p=0; - GooString *path = NULL; + SysFontInfo *fi = nullptr; + FcPattern *p=nullptr; + GooString *path = nullptr; GooString *fontName = font->getName(); GooString substituteName; - if (!fontName) return NULL; + if (!fontName) return nullptr; lockGlobalParams; if ((fi = sysFonts->find(fontName, font->isFixedWidth(), gTrue))) { @@ -1118,14 +1122,14 @@ FcResult res; FcFontSet *set; int i; - FcLangSet *lb = NULL; + FcLangSet *lb = nullptr; p = buildFcPattern(font, base14Name); if (!p) goto fin; - FcConfigSubstitute(NULL, p, FcMatchPattern); + FcConfigSubstitute(nullptr, p, FcMatchPattern); FcDefaultSubstitute(p); - set = FcFontSort(NULL, p, FcFalse, NULL, &res); + set = FcFontSort(nullptr, p, FcFalse, nullptr, &res); if (!set) goto fin; @@ -1141,7 +1145,7 @@ first: fonts support the language second: all fonts (fall back) */ - while (fi == NULL) + while (fi == nullptr) { for (i = 0; i < set->nfont; ++i) { @@ -1148,7 +1152,7 @@ res = FcPatternGetString(set->fonts[i], FC_FILE, 0, &s); if (res != FcResultMatch || !s) continue; - if (lb != NULL) { + if (lb != nullptr) { FcLangSet *l; res = FcPatternGetLangSet(set->fonts[i], FC_LANG, 0, &l); if (res != FcResultMatch || !FcLangSetContains(l,lb)) { @@ -1233,9 +1237,9 @@ continue; break; } - if (lb != NULL) { + if (lb != nullptr) { FcLangSetDestroy(lb); - lb = NULL; + lb = nullptr; } else { /* scan all fonts of the list */ break; @@ -1243,7 +1247,7 @@ } FcFontSetDestroy(set); } - if (path == NULL && (fi = sysFonts->find(fontName, font->isFixedWidth(), gFalse))) { + if (path == nullptr && (fi = sysFonts->find(fontName, font->isFixedWidth(), gFalse))) { path = fi->path->copy(); *type = fi->type; *fontNum = fi->fontNum; @@ -1467,7 +1471,7 @@ lockGlobalParams; GooHashIter *iter; unicodeToUnicodes->startIter(&iter); - GooString *fileName = NULL; + GooString *fileName = nullptr; GooString *fontPattern; void *val; while (!fileName && unicodeToUnicodes->getNext(&iter, &fontPattern, &val)) { @@ -1476,7 +1480,7 @@ fileName = (GooString*)val; } } - CharCodeToUnicode *ctu = NULL; + CharCodeToUnicode *ctu = nullptr; if (fileName) { ctu = unicodeToUnicodeCache->getCharCodeToUnicode(fileName); if (!ctu) { @@ -1666,7 +1670,7 @@ (void)name; #endif - return NULL; + return nullptr; } #ifdef ENABLE_PLUGINS Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/GlobalParams.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/GlobalParams.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/GlobalParams.h 2018-04-22 15:47:12 UTC (rev 796) @@ -13,7 +13,7 @@ // All changes made under the Poppler project to this file are licensed // under GPL version 2 or later // -// Copyright (C) 2005, 2007-2010, 2012, 2015, 2017 Albert Astals Cid +// Copyright (C) 2005, 2007-2010, 2012, 2015, 2017, 2018 Albert Astals Cid // Copyright (C) 2005 Jonathan Blandford // Copyright (C) 2006 Takashi Iwai // Copyright (C) 2006 Kristian H?gsberg @@ -108,6 +108,9 @@ ~GlobalParams(); + GlobalParams(const GlobalParams &) = delete; + GlobalParams& operator=(const GlobalParams &) = delete; + void setupBaseFonts(char *dir); //----- accessors Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/GlobalParamsWin.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/GlobalParamsWin.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/GlobalParamsWin.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -9,7 +9,7 @@ // Copyright (C) 2013 Adam Reichold // Copyright (C) 2013 Dmytro Morgun // Copyright (C) 2017 Christoph Cullmann - // Copyright (C) 2017 Albert Astals Cid + // Copyright (C) 2017, 2018 Albert Astals Cid TODO: instead of a fixed mapping defined in displayFontTab, it could scan the whole fonts directory, parse TTF files and build font @@ -103,78 +103,78 @@ // those seem to be frequently accessed by PDF files and I kind of guess // which font file do the refer to - {"Palatino", NULL, "pala.ttf", gTrue}, - {"Palatino-Roman", NULL, "pala.ttf", gTrue}, - {"Palatino-Bold", NULL, "palab.ttf", gTrue}, - {"Palatino-Italic", NULL, "palai.ttf", gTrue}, - {"Palatino,Italic", NULL, "palai.ttf", gTrue}, - {"Palatino-BoldItalic", NULL, "palabi.ttf", gTrue}, + {"Palatino", nullptr, "pala.ttf", gTrue}, + {"Palatino-Roman", nullptr, "pala.ttf", gTrue}, + {"Palatino-Bold", nullptr, "palab.ttf", gTrue}, + {"Palatino-Italic", nullptr, "palai.ttf", gTrue}, + {"Palatino,Italic", nullptr, "palai.ttf", gTrue}, + {"Palatino-BoldItalic", nullptr, "palabi.ttf", gTrue}, - {"ArialBlack", NULL, "arialbd.ttf", gTrue}, + {"ArialBlack", nullptr, "arialbd.ttf", gTrue}, - {"ArialNarrow", NULL, "arialn.ttf", gTrue}, - {"ArialNarrow,Bold", NULL, "arialnb.ttf", gTrue}, - {"ArialNarrow,Italic", NULL, "arialni.ttf", gTrue}, - {"ArialNarrow,BoldItalic", NULL, "arialnbi.ttf", gTrue}, - {"ArialNarrow-Bold", NULL, "arialnb.ttf", gTrue}, - {"ArialNarrow-Italic", NULL, "arialni.ttf", gTrue}, - {"ArialNarrow-BoldItalic", NULL, "arialnbi.ttf", gTrue}, + {"ArialNarrow", nullptr, "arialn.ttf", gTrue}, + {"ArialNarrow,Bold", nullptr, "arialnb.ttf", gTrue}, + {"ArialNarrow,Italic", nullptr, "arialni.ttf", gTrue}, + {"ArialNarrow,BoldItalic", nullptr, "arialnbi.ttf", gTrue}, + {"ArialNarrow-Bold", nullptr, "arialnb.ttf", gTrue}, + {"ArialNarrow-Italic", nullptr, "arialni.ttf", gTrue}, + {"ArialNarrow-BoldItalic", nullptr, "arialnbi.ttf", gTrue}, - {"HelveticaNarrow", NULL, "arialn.ttf", gTrue}, - {"HelveticaNarrow,Bold", NULL, "arialnb.ttf", gTrue}, - {"HelveticaNarrow,Italic", NULL, "arialni.ttf", gTrue}, - {"HelveticaNarrow,BoldItalic", NULL, "arialnbi.ttf", gTrue}, - {"HelveticaNarrow-Bold", NULL, "arialnb.ttf", gTrue}, - {"HelveticaNarrow-Italic", NULL, "arialni.ttf", gTrue}, - {"HelveticaNarrow-BoldItalic", NULL, "arialnbi.ttf", gTrue}, + {"HelveticaNarrow", nullptr, "arialn.ttf", gTrue}, + {"HelveticaNarrow,Bold", nullptr, "arialnb.ttf", gTrue}, + {"HelveticaNarrow,Italic", nullptr, "arialni.ttf", gTrue}, + {"HelveticaNarrow,BoldItalic", nullptr, "arialnbi.ttf", gTrue}, + {"HelveticaNarrow-Bold", nullptr, "arialnb.ttf", gTrue}, + {"HelveticaNarrow-Italic", nullptr, "arialni.ttf", gTrue}, + {"HelveticaNarrow-BoldItalic", nullptr, "arialnbi.ttf", gTrue}, - {"BookAntiqua", NULL, "bkant.ttf", gTrue}, - {"BookAntiqua,Bold", NULL, "bkant.ttf", gTrue}, - {"BookAntiqua,Italic", NULL, "bkant.ttf", gTrue}, - {"BookAntiqua,BoldItalic", NULL, "bkant.ttf", gTrue}, - {"BookAntiqua-Bold", NULL, "bkant.ttf", gTrue}, - {"BookAntiqua-Italic", NULL, "bkant.ttf", gTrue}, - {"BookAntiqua-BoldItalic", NULL, "bkant.ttf", gTrue}, + {"BookAntiqua", nullptr, "bkant.ttf", gTrue}, + {"BookAntiqua,Bold", nullptr, "bkant.ttf", gTrue}, + {"BookAntiqua,Italic", nullptr, "bkant.ttf", gTrue}, + {"BookAntiqua,BoldItalic", nullptr, "bkant.ttf", gTrue}, + {"BookAntiqua-Bold", nullptr, "bkant.ttf", gTrue}, + {"BookAntiqua-Italic", nullptr, "bkant.ttf", gTrue}, + {"BookAntiqua-BoldItalic", nullptr, "bkant.ttf", gTrue}, - {"Verdana", NULL, "verdana.ttf", gTrue}, - {"Verdana,Bold", NULL, "verdanab.ttf", gTrue}, - {"Verdana,Italic", NULL, "verdanai.ttf", gTrue}, - {"Verdana,BoldItalic", NULL, "verdanaz.ttf", gTrue}, - {"Verdana-Bold", NULL, "verdanab.ttf", gTrue}, - {"Verdana-Italic", NULL, "verdanai.ttf", gTrue}, - {"Verdana-BoldItalic", NULL, "verdanaz.ttf", gTrue}, + {"Verdana", nullptr, "verdana.ttf", gTrue}, + {"Verdana,Bold", nullptr, "verdanab.ttf", gTrue}, + {"Verdana,Italic", nullptr, "verdanai.ttf", gTrue}, + {"Verdana,BoldItalic", nullptr, "verdanaz.ttf", gTrue}, + {"Verdana-Bold", nullptr, "verdanab.ttf", gTrue}, + {"Verdana-Italic", nullptr, "verdanai.ttf", gTrue}, + {"Verdana-BoldItalic", nullptr, "verdanaz.ttf", gTrue}, - {"Tahoma", NULL, "tahoma.ttf", gTrue}, - {"Tahoma,Bold", NULL, "tahomabd.ttf", gTrue}, - {"Tahoma,Italic", NULL, "tahoma.ttf", gTrue}, - {"Tahoma,BoldItalic", NULL, "tahomabd.ttf", gTrue}, - {"Tahoma-Bold", NULL, "tahomabd.ttf", gTrue}, - {"Tahoma-Italic", NULL, "tahoma.ttf", gTrue}, - {"Tahoma-BoldItalic", NULL, "tahomabd.ttf", gTrue}, + {"Tahoma", nullptr, "tahoma.ttf", gTrue}, + {"Tahoma,Bold", nullptr, "tahomabd.ttf", gTrue}, + {"Tahoma,Italic", nullptr, "tahoma.ttf", gTrue}, + {"Tahoma,BoldItalic", nullptr, "tahomabd.ttf", gTrue}, + {"Tahoma-Bold", nullptr, "tahomabd.ttf", gTrue}, + {"Tahoma-Italic", nullptr, "tahoma.ttf", gTrue}, + {"Tahoma-BoldItalic", nullptr, "tahomabd.ttf", gTrue}, - {"CCRIKH+Verdana", NULL, "verdana.ttf", gTrue}, - {"CCRIKH+Verdana,Bold", NULL, "verdanab.ttf", gTrue}, - {"CCRIKH+Verdana,Italic", NULL, "verdanai.ttf", gTrue}, - {"CCRIKH+Verdana,BoldItalic", NULL, "verdanaz.ttf", gTrue}, - {"CCRIKH+Verdana-Bold", NULL, "verdanab.ttf", gTrue}, - {"CCRIKH+Verdana-Italic", NULL, "verdanai.ttf", gTrue}, - {"CCRIKH+Verdana-BoldItalic", NULL, "verdanaz.ttf", gTrue}, + {"CCRIKH+Verdana", nullptr, "verdana.ttf", gTrue}, + {"CCRIKH+Verdana,Bold", nullptr, "verdanab.ttf", gTrue}, + {"CCRIKH+Verdana,Italic", nullptr, "verdanai.ttf", gTrue}, + {"CCRIKH+Verdana,BoldItalic", nullptr, "verdanaz.ttf", gTrue}, + {"CCRIKH+Verdana-Bold", nullptr, "verdanab.ttf", gTrue}, + {"CCRIKH+Verdana-Italic", nullptr, "verdanai.ttf", gTrue}, + {"CCRIKH+Verdana-BoldItalic", nullptr, "verdanaz.ttf", gTrue}, - {"Georgia", NULL, "georgia.ttf", gTrue}, - {"Georgia,Bold", NULL, "georgiab.ttf", gTrue}, - {"Georgia,Italic", NULL, "georgiai.ttf", gTrue}, - {"Georgia,BoldItalic", NULL, "georgiaz.ttf", gTrue}, - {"Georgia-Bold", NULL, "georgiab.ttf", gTrue}, - {"Georgia-Italic", NULL, "georgiai.ttf", gTrue}, - {"Georgia-BoldItalic", NULL, "georgiaz.ttf", gTrue}, + {"Georgia", nullptr, "georgia.ttf", gTrue}, + {"Georgia,Bold", nullptr, "georgiab.ttf", gTrue}, + {"Georgia,Italic", nullptr, "georgiai.ttf", gTrue}, + {"Georgia,BoldItalic", nullptr, "georgiaz.ttf", gTrue}, + {"Georgia-Bold", nullptr, "georgiab.ttf", gTrue}, + {"Georgia-Italic", nullptr, "georgiai.ttf", gTrue}, + {"Georgia-BoldItalic", nullptr, "georgiaz.ttf", gTrue}, // fallback for Adobe CID fonts: - {"MingLiU", NULL, "mingliu.ttf", gFalse}, - {"SimSun", NULL, "simsun.ttf", gFalse}, - {"MS-Mincho", NULL, "msmincho.ttf", gFalse}, - {"Batang", NULL, "batang.ttf", gFalse}, - {"ArialUnicode", NULL, "arialuni.ttf", gTrue}, - {NULL} + {"MingLiU", nullptr, "mingliu.ttf", gFalse}, + {"SimSun", nullptr, "simsun.ttf", gFalse}, + {"MS-Mincho", nullptr, "msmincho.ttf", gFalse}, + {"Batang", nullptr, "batang.ttf", gFalse}, + {"ArialUnicode", nullptr, "arialuni.ttf", gTrue}, + { } }; #define FONTS_SUBDIR "\\fonts" @@ -200,7 +200,7 @@ SHGetFolderPathFunc = (HRESULT (__stdcall *)(HWND, int, HANDLE, DWORD, LPSTR)) GetProcAddress(hLib, "SHGetFolderPathA"); if (SHGetFolderPathFunc) - (*SHGetFolderPathFunc)(NULL, CSIDL_FONTS, NULL, SHGFP_TYPE_CURRENT, winFontDir); + (*SHGetFolderPathFunc)(nullptr, CSIDL_FONTS, nullptr, SHGFP_TYPE_CURRENT, winFontDir); if (!winFontDir[0]) { // Try an older function @@ -207,7 +207,7 @@ SHGetSpecialFolderPathFunc = (BOOL (__stdcall *)(HWND, LPSTR, int, BOOL)) GetProcAddress(hLib, "SHGetSpecialFolderPathA"); if (SHGetSpecialFolderPathFunc) - (*SHGetSpecialFolderPathFunc)(NULL, winFontDir, CSIDL_FONTS, FALSE); + (*SHGetSpecialFolderPathFunc)(nullptr, winFontDir, CSIDL_FONTS, FALSE); } FreeLibrary(hLib); } @@ -220,7 +220,7 @@ SHGetFolderPathFunc = (HRESULT (__stdcall *)(HWND, int, HANDLE, DWORD, LPSTR)) GetProcAddress(hLib, "SHGetFolderPathA"); if (SHGetFolderPathFunc) - (*SHGetFolderPathFunc)(NULL, CSIDL_FONTS, NULL, SHGFP_TYPE_CURRENT, winFontDir); + (*SHGetFolderPathFunc)(nullptr, CSIDL_FONTS, nullptr, SHGFP_TYPE_CURRENT, winFontDir); FreeLibrary(hLib); } if (winFontDir[0]) @@ -268,7 +268,7 @@ while (1) { valNameLen = sizeof(valName) - 1; dataLen = sizeof(data) - 1; - if (RegEnumValueA(regKey, idx, valName, &valNameLen, NULL, + if (RegEnumValueA(regKey, idx, valName, &valNameLen, nullptr, &type, (LPBYTE)data, &dataLen) != ERROR_SUCCESS) { break; } @@ -411,7 +411,7 @@ void GlobalParams::setupBaseFonts(char * dir) { const char *dataRoot = popplerDataDir ? popplerDataDir : POPPLER_DATADIR; - GooString *fileName = NULL; + GooString *fileName = nullptr; GooFile *file; if (baseFontsInitialized) @@ -462,10 +462,10 @@ // try to open file file = GooFile::open(fileName); - if (file != NULL) { + if (file != nullptr) { Parser *parser; - parser = new Parser(NULL, - new Lexer(NULL, + parser = new Parser(nullptr, + new Lexer(nullptr, new FileStream(file, 0, gFalse, file->size(), Object(objNull))), gTrue); Object obj1 = parser->getObj(); @@ -501,7 +501,7 @@ const char *origName) { assert(origName); - if (!origName) return NULL; + if (!origName) return nullptr; GooString *name2 = new GooString(origName); int n = strlen(origName); // remove trailing "-Identity-H" @@ -515,7 +515,7 @@ n -= 11; } GooString *substName = (GooString *)substFiles->lookup(name2); - if (substName != NULL) { + if (substName != nullptr) { delete name2; return substName->getCString(); } @@ -525,7 +525,7 @@ if (font->isCIDFont()) { GooString *collection = ((GfxCIDFont *)font)->getCollection(); - const char* name3 = NULL; + const char* name3 = nullptr; if ( !collection->cmp("Adobe-CNS1") ) name3 = DEFAULT_CID_FONT_AC1_MSWIN; else if ( !collection->cmp("Adobe-GB1") ) @@ -552,11 +552,11 @@ int *fontNum, GooString *substituteFontName, GooString *base14Name) { SysFontInfo *fi; - GooString *path = NULL; + GooString *path = nullptr; GooString *fontName = font->getName(); - if (!fontName) return NULL; + if (!fontName) return nullptr; lockGlobalParams; - setupBaseFonts(NULL); + setupBaseFonts(nullptr); // TODO: base14Name should be changed? // In the system using FontConfig, findSystemFontFile() uses @@ -572,7 +572,7 @@ GooString *substFontName = new GooString(findSubstituteName(font, fontFiles, substFiles, fontName->getCString())); - GooString *path2 = NULL; + GooString *path2 = nullptr; error(errSyntaxError, -1, "Couldn't find a font for '{0:t}', subst is '{1:t}'", fontName, substFontName); if ((path2 = (GooString *)fontFiles->lookup(substFontName))) { path = new GooString(path2); Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/Hints.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/Hints.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/Hints.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -141,11 +141,11 @@ memset(numSharedObject, 0, nPages * sizeof(Guint)); memset(pageObjectNum, 0, nPages * sizeof(int)); - groupLength = NULL; - groupOffset = NULL; - groupHasSignature = NULL; - groupNumObjects = NULL; - groupXRefOffset = NULL; + groupLength = nullptr; + groupOffset = nullptr; + groupHasSignature = nullptr; + groupNumObjects = nullptr; + groupXRefOffset = nullptr; ok = gTrue; readTables(str, linearization, xref, secHdlr); @@ -209,7 +209,7 @@ (num = obj.getInt(), obj = parser->getObj(), obj.isInt()) && (gen = obj.getInt(), obj = parser->getObj(), obj.isCmd("obj")) && (obj = parser->getObj(gFalse, - secHdlr ? secHdlr->getFileKey() : (Guchar *)NULL, + secHdlr ? secHdlr->getFileKey() : (Guchar *)nullptr, secHdlr ? secHdlr->getEncAlgorithm() : cryptRC4, secHdlr ? secHdlr->getFileKeyLength() : 0, num, gen, 0, gTrue), obj.isStream())) { @@ -217,7 +217,7 @@ Dict *hintsDict = obj.streamGetDict(); int sharedStreamOffset = 0; - if (hintsDict->lookupInt("S", NULL, &sharedStreamOffset) && + if (hintsDict->lookupInt("S", nullptr, &sharedStreamOffset) && sharedStreamOffset > 0) { hintsStream->reset(); @@ -307,7 +307,7 @@ sbr.resetInputBits(); // reset on byte boundary. Not in specs! numSharedObject[0] = sbr.readBits(nBitsNumShared); numSharedObject[0] = 0; // Do not trust the read value to be 0. - sharedObjectId[0] = NULL; + sharedObjectId[0] = nullptr; for (int i = 1; i < nPages && !sbr.atEOF(); i++) { numSharedObject[i] = sbr.readBits(nBitsNumShared); if (numSharedObject[i] >= INT_MAX / (int)sizeof(Guint)) { @@ -457,7 +457,7 @@ std::vector* Hints::getPageRanges(int page) { - if ((page < 1) || (page > nPages)) return NULL; + if ((page < 1) || (page > nPages)) return nullptr; int idx; if (page-1 > pageFirst) Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/Hints.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/Hints.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/Hints.h 2018-04-22 15:47:12 UTC (rev 796) @@ -5,7 +5,7 @@ // This file is licensed under the GPLv2 or later // // Copyright 2010 Hib Eris -// Copyright 2010, 2013, 2016 Albert Astals Cid +// Copyright 2010, 2013, 2016, 2018 Albert Astals Cid // Copyright 2013 Adrian Johnson // //======================================================================== @@ -33,6 +33,9 @@ Hints(BaseStream *str, Linearization *linearization, XRef *xref, SecurityHandler *secHdlr); ~Hints(); + Hints(const Hints &) = delete; + Hints& operator=(const Hints &) = delete; + GBool isOk() const; int getPageObjectNum(int page); Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/JArithmeticDecoder.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/JArithmeticDecoder.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/JArithmeticDecoder.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -88,7 +88,7 @@ }; JArithmeticDecoder::JArithmeticDecoder() { - str = NULL; + str = nullptr; dataLen = 0; limitStream = gFalse; nBytesRead = 0; Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/JArithmeticDecoder.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/JArithmeticDecoder.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/JArithmeticDecoder.h 2018-04-22 15:47:12 UTC (rev 796) @@ -8,6 +8,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 +// +// 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 JARITHMETICDECODER_H #define JARITHMETICDECODER_H @@ -28,6 +42,8 @@ JArithmeticDecoderStats(int contextSizeA); ~JArithmeticDecoderStats(); + JArithmeticDecoderStats(const JArithmeticDecoderStats &) = delete; + JArithmeticDecoderStats& operator=(const JArithmeticDecoderStats &) = delete; JArithmeticDecoderStats *copy(); void reset(); int getContextSize() { return contextSize; } @@ -51,6 +67,8 @@ JArithmeticDecoder(); ~JArithmeticDecoder(); + JArithmeticDecoder(const JArithmeticDecoder &) = delete; + JArithmeticDecoder& operator=(const JArithmeticDecoder &) = delete; void setStream(Stream *strA) { str = strA; dataLen = 0; limitStream = gFalse; } Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/JBIG2Stream.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/JBIG2Stream.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/JBIG2Stream.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -15,7 +15,7 @@ // // Copyright (C) 2006 Raj Kumar // Copyright (C) 2006 Paul Walmsley -// Copyright (C) 2006-2010, 2012, 2014-2017 Albert Astals Cid +// Copyright (C) 2006-2010, 2012, 2014-2018 Albert Astals Cid // Copyright (C) 2009 David Benjamin // Copyright (C) 2011 Edward Jiang // Copyright (C) 2012 William Bader @@ -339,7 +339,7 @@ }; JBIG2HuffmanDecoder::JBIG2HuffmanDecoder() { - str = NULL; + str = nullptr; reset(); } @@ -482,7 +482,7 @@ }; JBIG2MMRDecoder::JBIG2MMRDecoder() { - str = NULL; + str = nullptr; reset(); } @@ -651,6 +651,8 @@ JBIG2Segment(Guint segNumA) { segNum = segNumA; } virtual ~JBIG2Segment() {} + JBIG2Segment(const JBIG2Segment &) = delete; + JBIG2Segment& operator=(const JBIG2Segment &) = delete; void setSegNum(Guint segNumA) { segNum = segNumA; } Guint getSegNum() { return segNum; } virtual JBIG2SegmentType getType() = 0; @@ -697,7 +699,7 @@ void combine(JBIG2Bitmap *bitmap, int x, int y, Guint combOp); Guchar *getDataPtr() { return data; } int getDataSize() { return h * line; } - GBool isOk() { return data != NULL; } + GBool isOk() { return data != nullptr; } private: @@ -716,12 +718,12 @@ if (w <= 0 || h <= 0 || line <= 0 || h >= (INT_MAX - 1) / line) { error(errSyntaxError, -1, "invalid width/height"); - data = NULL; + data = nullptr; return; } // need to allocate one extra guard byte for use in combine() data = (Guchar *)gmalloc_checkoverflow(h * line + 1); - if (data != NULL) { + if (data != nullptr) { data[h * line] = 0; } } @@ -729,10 +731,10 @@ JBIG2Bitmap::JBIG2Bitmap(Guint segNumA, JBIG2Bitmap *bitmap): JBIG2Segment(segNumA) { - if (unlikely(bitmap == NULL)) { + if (unlikely(bitmap == nullptr)) { error(errSyntaxError, -1, "NULL bitmap in JBIG2Bitmap"); w = h = line = 0; - data = NULL; + data = nullptr; return; } @@ -742,7 +744,7 @@ if (w <= 0 || h <= 0 || line <= 0 || h >= (INT_MAX - 1) / line) { error(errSyntaxError, -1, "invalid width/height"); - data = NULL; + data = nullptr; return; } // need to allocate one extra guard byte for use in combine() @@ -776,7 +778,7 @@ } } else { delete slice; - slice = NULL; + slice = nullptr; } return slice; } @@ -785,7 +787,7 @@ if (newH <= h || line <= 0 || newH >= (INT_MAX - 1) / line) { error(errSyntaxError, -1, "invalid width/height"); gfree(data); - data = NULL; + data = nullptr; return; } // need to allocate one extra guard byte for use in combine() @@ -809,7 +811,7 @@ inline void JBIG2Bitmap::getPixelPtr(int x, int y, JBIG2BitmapPtr *ptr) { if (y < 0 || y >= h || x >= w) { - ptr->p = NULL; + ptr->p = nullptr; ptr->shift = 0; // make gcc happy ptr->x = 0; // make gcc happy } else if (x < 0) { @@ -834,7 +836,7 @@ } else { pix = (*ptr->p >> ptr->shift) & 1; if (++ptr->x == w) { - ptr->p = NULL; + ptr->p = nullptr; } else if (ptr->shift == 0) { ++ptr->p; ptr->shift = 7; @@ -1055,7 +1057,7 @@ Guint getSize() { return size; } void setBitmap(Guint idx, JBIG2Bitmap *bitmap) { bitmaps[idx] = bitmap; } JBIG2Bitmap *getBitmap(Guint idx) { return bitmaps[idx]; } - GBool isOk() { return bitmaps != NULL; } + GBool isOk() { return bitmaps != nullptr; } void setGenericRegionStats(JArithmeticDecoderStats *stats) { genericRegionStats = stats; } void setRefinementRegionStats(JArithmeticDecoderStats *stats) @@ -1082,10 +1084,10 @@ bitmaps = (JBIG2Bitmap **)gmallocn_checkoverflow(size, sizeof(JBIG2Bitmap *)); if (!bitmaps) size = 0; for (i = 0; i < size; ++i) { - bitmaps[i] = NULL; + bitmaps[i] = nullptr; } - genericRegionStats = NULL; - refinementRegionStats = NULL; + genericRegionStats = nullptr; + refinementRegionStats = nullptr; } JBIG2SymbolDict::~JBIG2SymbolDict() { @@ -1115,7 +1117,7 @@ JBIG2SegmentType getType() override { return jbig2SegPatternDict; } Guint getSize() { return size; } void setBitmap(Guint idx, JBIG2Bitmap *bitmap) { if (likely(idx < size)) bitmaps[idx] = bitmap; } - JBIG2Bitmap *getBitmap(Guint idx) { return (idx < size) ? bitmaps[idx] : NULL; } + JBIG2Bitmap *getBitmap(Guint idx) { return (idx < size) ? bitmaps[idx] : nullptr; } private: @@ -1178,7 +1180,7 @@ JBIG2Stream::JBIG2Stream(Stream *strA, Object *globalsStreamA, Object *globalsStreamRefA): FilterStream(strA) { - pageBitmap = NULL; + pageBitmap = nullptr; arithDecoder = new JArithmeticDecoder(); genericRegionStats = new JArithmeticDecoderStats(1 << 1); @@ -1206,9 +1208,9 @@ globalsStreamRef = globalsStreamRefA->getRef(); } - segments = globalSegments = NULL; - curStr = NULL; - dataPtr = dataEnd = NULL; + segments = globalSegments = nullptr; + curStr = nullptr; + dataPtr = dataEnd = nullptr; } JBIG2Stream::~JBIG2Stream() { @@ -1262,7 +1264,7 @@ dataPtr = pageBitmap->getDataPtr(); dataEnd = dataPtr + pageBitmap->getDataSize(); } else { - dataPtr = dataEnd = NULL; + dataPtr = dataEnd = nullptr; } } @@ -1269,17 +1271,17 @@ void JBIG2Stream::close() { if (pageBitmap) { delete pageBitmap; - pageBitmap = NULL; + pageBitmap = nullptr; } if (segments) { deleteGooList(segments, JBIG2Segment); - segments = NULL; + segments = nullptr; } if (globalSegments) { deleteGooList(globalSegments, JBIG2Segment); - globalSegments = NULL; + globalSegments = nullptr; } - dataPtr = dataEnd = NULL; + dataPtr = dataEnd = nullptr; FilterStream::close(); } @@ -1298,7 +1300,7 @@ } Goffset JBIG2Stream::getPos() { - if (pageBitmap == NULL) { + if (pageBitmap == nullptr) { return 0; } return dataPtr - pageBitmap->getDataPtr(); @@ -1322,7 +1324,7 @@ } GooString *JBIG2Stream::getPSFilter(int psLevel, const char *indent) { - return NULL; + return nullptr; } GBool JBIG2Stream::isBinary(GBool last) { @@ -1335,7 +1337,6 @@ Guint *refSegs; Goffset segDataPos; int c1, c2, c3; - Guint i; while (readULong(&segNum)) { @@ -1358,7 +1359,7 @@ } refFlags = (refFlags << 24) | (c1 << 16) | (c2 << 8) | c3; nRefSegs = refFlags & 0x1fffffff; - for (i = 0; i < (nRefSegs + 9) >> 3; ++i) { + for (Guint i = 0; i < (nRefSegs + 9) >> 3; ++i) { if ((c1 = curStr->getChar()) == EOF) { goto eofError1; } @@ -1368,19 +1369,19 @@ // referred-to segment numbers refSegs = (Guint *)gmallocn(nRefSegs, sizeof(Guint)); if (segNum <= 256) { - for (i = 0; i < nRefSegs; ++i) { + for (Guint i = 0; i < nRefSegs; ++i) { if (!readUByte(&refSegs[i])) { goto eofError2; } } } else if (segNum <= 65536) { - for (i = 0; i < nRefSegs; ++i) { + for (Guint i = 0; i < nRefSegs; ++i) { if (!readUWord(&refSegs[i])) { goto eofError2; } } } else { - for (i = 0; i < nRefSegs; ++i) { + for (Guint i = 0; i < nRefSegs; ++i) { if (!readULong(&refSegs[i])) { goto eofError2; } @@ -1482,7 +1483,7 @@ break; default: error(errSyntaxError, curStr->getPos(), "Unknown segment type in JBIG2 stream"); - for (i = 0; i < segLength; ++i) { + for (Guint i = 0; i < segLength; ++i) { if ((c1 = curStr->getChar()) == EOF) { goto eofError2; } @@ -1567,7 +1568,7 @@ Guint i, j, k; Guchar *p; - symWidths = NULL; + symWidths = nullptr; // symbol dictionary flags if (!readUWord(&flags)) { @@ -1674,13 +1675,13 @@ goto eofError; } for (i = 0; i < numInputSyms + numNewSyms; ++i) { - bitmaps[i] = NULL; + bitmaps[i] = nullptr; } k = 0; - inputSymbolDict = NULL; + inputSymbolDict = nullptr; for (i = 0; i < nRefSegs; ++i) { seg = findSegment(refSegs[i]); - if (seg != NULL && seg->getType() == jbig2SegSymbolDict) { + if (seg != nullptr && seg->getType() == jbig2SegSymbolDict) { inputSymbolDict = (JBIG2SymbolDict *)seg; for (j = 0; j < inputSymbolDict->getSize(); ++j) { bitmaps[k++] = inputSymbolDict->getBitmap(j); @@ -1689,8 +1690,8 @@ } // get the Huffman tables - huffDHTable = huffDWTable = NULL; // make gcc happy - huffBMSizeTable = huffAggInstTable = NULL; // make gcc happy + huffDHTable = huffDWTable = nullptr; // make gcc happy + huffBMSizeTable = huffAggInstTable = nullptr; // make gcc happy i = 0; if (huff) { if (huffDH == 0) { @@ -1743,7 +1744,7 @@ if (contextUsed && inputSymbolDict) { resetGenericStats(sdTemplate, inputSymbolDict->getGenericRegionStats()); } else { - resetGenericStats(sdTemplate, NULL); + resetGenericStats(sdTemplate, nullptr); } resetIntStats(symCodeLen); arithDecoder->start(); @@ -1755,7 +1756,7 @@ resetRefinementStats(sdrTemplate, inputSymbolDict->getRefinementRegionStats()); } else { - resetRefinementStats(sdrTemplate, NULL); + resetRefinementStats(sdrTemplate, nullptr); } } @@ -1850,7 +1851,7 @@ goto syntaxError; } refBitmap = bitmaps[symID]; - if (unlikely(refBitmap == NULL)) { + if (unlikely(refBitmap == nullptr)) { error(errSyntaxError, curStr->getPos(), "Invalid ref bitmap for symbol ID {0:ud} in JBIG2 symbol dictionary", symID); goto syntaxError; } @@ -1863,7 +1864,7 @@ } else { bitmaps[numInputSyms + i] = readTextRegion(huff, gTrue, symWidth, symHeight, - refAggNum, 0, numInputSyms + i, NULL, + refAggNum, 0, numInputSyms + i, nullptr, symCodeLen, bitmaps, 0, 0, 0, 1, 0, huffTableF, huffTableH, huffTableK, huffTableO, huffTableO, huffTableO, huffTableO, huffTableA, @@ -1874,7 +1875,7 @@ } else { bitmaps[numInputSyms + i] = readGenericBitmap(gFalse, symWidth, symHeight, - sdTemplate, gFalse, gFalse, NULL, + sdTemplate, gFalse, gFalse, nullptr, sdATX, sdATY, 0); } @@ -1889,7 +1890,7 @@ collBitmap = new JBIG2Bitmap(0, totalWidth, symHeight); bmSize = symHeight * ((totalWidth + 7) >> 3); p = collBitmap->getDataPtr(); - if (unlikely(p == NULL)) { + if (unlikely(p == nullptr)) { delete collBitmap; goto syntaxError; } @@ -1901,10 +1902,10 @@ } } else { collBitmap = readGenericBitmap(gTrue, totalWidth, symHeight, - 0, gFalse, gFalse, NULL, NULL, NULL, + 0, gFalse, gFalse, nullptr, nullptr, nullptr, bmSize); } - if (likely(collBitmap != NULL)) { + if (likely(collBitmap != nullptr)) { x = 0; for (; j < i; ++j) { bitmaps[numInputSyms + j] = @@ -1938,7 +1939,7 @@ if (i + run > numInputSyms + numNewSyms || (ex && j + run > numExSyms)) { error(errSyntaxError, curStr->getPos(), "Too many exported symbols in JBIG2 symbol dictionary"); - for ( ; j < numExSyms; ++j) symbolDict->setBitmap(j, NULL); + for ( ; j < numExSyms; ++j) symbolDict->setBitmap(j, nullptr); delete symbolDict; goto syntaxError; } @@ -1953,7 +1954,7 @@ } if (j != numExSyms) { error(errSyntaxError, curStr->getPos(), "Too few symbols in JBIG2 symbol dictionary"); - for ( ; j < numExSyms; ++j) symbolDict->setBitmap(j, NULL); + for ( ; j < numExSyms; ++j) symbolDict->setBitmap(j, nullptr); delete symbolDict; goto syntaxError; } @@ -2117,9 +2118,9 @@ } // get the Huffman tables - huffFSTable = huffDSTable = huffDTTable = NULL; // make gcc happy - huffRDWTable = huffRDHTable = NULL; // make gcc happy - huffRDXTable = huffRDYTable = huffRSizeTable = NULL; // make gcc happy + huffFSTable = huffDSTable = huffDTTable = nullptr; // make gcc happy + huffRDWTable = huffRDHTable = nullptr; // make gcc happy + huffRDXTable = huffRDYTable = huffRSizeTable = nullptr; // make gcc happy i = 0; if (huff) { if (huffFS == 0) { @@ -2258,12 +2259,12 @@ // set up the arithmetic decoder } else { - symCodeTab = NULL; + symCodeTab = nullptr; resetIntStats(symCodeLen); arithDecoder->start(); } if (refine) { - resetRefinementStats(templ, NULL); + resetRefinementStats(templ, nullptr); } bitmap = readTextRegion(huff, refine, w, h, numInstances, @@ -2344,7 +2345,7 @@ bitmap = new JBIG2Bitmap(0, w, h); if (!bitmap->isOk()) { delete bitmap; - return NULL; + return nullptr; } if (defPixel) { bitmap->clearToOne(); @@ -2413,12 +2414,12 @@ if (unlikely(numInstances - inst > 0x800)) { // don't loop too often with damaged JBIg2 streams delete bitmap; - return NULL; + return nullptr; } } else { // get the symbol bitmap - symbolBitmap = NULL; + symbolBitmap = nullptr; if (refine) { if (huff) { ri = (int)huffDecoder->readBit(); @@ -2472,7 +2473,7 @@ delete symbolBitmap; } delete bitmap; - return NULL; + return nullptr; } bh = symbolBitmap->getHeight() - 1; if (transposed) { @@ -2482,7 +2483,7 @@ delete symbolBitmap; } delete bitmap; - return NULL; + return nullptr; } switch (refCorner) { case 0: // bottom left @@ -2508,7 +2509,7 @@ delete symbolBitmap; } delete bitmap; - return NULL; + return nullptr; } bitmap->combine(symbolBitmap, s, tt - bh, combOp); break; @@ -2519,7 +2520,7 @@ delete symbolBitmap; } delete bitmap; - return NULL; + return nullptr; } bitmap->combine(symbolBitmap, s, tt, combOp); break; @@ -2530,7 +2531,7 @@ delete symbolBitmap; } delete bitmap; - return NULL; + return nullptr; } bitmap->combine(symbolBitmap, s, tt - bh, combOp); break; @@ -2541,7 +2542,7 @@ delete symbolBitmap; } delete bitmap; - return NULL; + return nullptr; } bitmap->combine(symbolBitmap, s, tt, combOp); break; @@ -2554,7 +2555,7 @@ } else { // NULL symbolBitmap only happens on error delete bitmap; - return NULL; + return nullptr; } } @@ -2597,7 +2598,7 @@ // set up the arithmetic decoder if (!mmr) { - resetGenericStats(templ, NULL); + resetGenericStats(templ, nullptr); arithDecoder->start(); } @@ -2607,7 +2608,7 @@ atx[2] = 2; aty[2] = -2; atx[3] = -2; aty[3] = -2; bitmap = readGenericBitmap(mmr, (grayMax + 1) * patternW, patternH, - templ, gFalse, gFalse, NULL, + templ, gFalse, gFalse, nullptr, atx, aty, length - 7); if (!bitmap) @@ -2688,7 +2689,7 @@ return; } seg = findSegment(refSegs[0]); - if (seg == NULL || seg->getType() != jbig2SegPatternDict) { + if (seg == nullptr || seg->getType() != jbig2SegPatternDict) { error(errSyntaxError, curStr->getPos(), "Bad symbol dictionary reference in JBIG2 halftone segment"); return; } @@ -2707,7 +2708,7 @@ } } patternBitmap = patternDict->getBitmap(0); - if (unlikely(patternBitmap == NULL)) { + if (unlikely(patternBitmap == nullptr)) { error(errSyntaxError, curStr->getPos(), "Bad pattern bitmap"); return; } @@ -2716,7 +2717,7 @@ // set up the arithmetic decoder if (!mmr) { - resetGenericStats(templ, NULL); + resetGenericStats(templ, nullptr); arithDecoder->start(); } @@ -2729,7 +2730,7 @@ } // compute the skip bitmap - skipBitmap = NULL; + skipBitmap = nullptr; if (enableSkip) { skipBitmap = new JBIG2Bitmap(0, gridW, gridH); skipBitmap->clearToZero(); @@ -2774,7 +2775,7 @@ for (n = 0; n < gridW; ++n) { if (!(enableSkip && skipBitmap->getPixel(n, m))) { patternBitmap = patternDict->getBitmap(grayImg[i]); - if (unlikely(patternBitmap == NULL)) { + if (unlikely(patternBitmap == nullptr)) { delete skipBitmap; delete bitmap; gfree(grayImg); @@ -2859,13 +2860,13 @@ // set up the arithmetic decoder if (!mmr) { - resetGenericStats(templ, NULL); + resetGenericStats(templ, nullptr); arithDecoder->start(); } // read the bitmap bitmap = readGenericBitmap(mmr, w, h, templ, tpgdOn, gFalse, - NULL, atx, aty, mmr ? length - 18 : 0); + nullptr, atx, aty, mmr ? length - 18 : 0); if (!bitmap) return; @@ -2953,7 +2954,7 @@ bitmap = new JBIG2Bitmap(0, w, h); if (!bitmap->isOk()) { delete bitmap; - return NULL; + return nullptr; } bitmap->clearToZero(); @@ -2965,7 +2966,7 @@ if (w > INT_MAX - 2) { error(errSyntaxError, curStr->getPos(), "Bad width in JBIG2 generic bitmap"); delete bitmap; - return NULL; + return nullptr; } // 0 <= codingLine[0] < codingLine[1] < ... < codingLine[n] = w // ---> max codingLine size = w + 1 @@ -3224,11 +3225,11 @@ p0 = bitmap->getDataPtr() + (y - 2) * bitmap->getLineSize(); buf0 = *p0++ << 8; } else { - p0 = NULL; + p0 = nullptr; buf0 = 0; } } else { - p1 = p0 = NULL; + p1 = p0 = nullptr; buf1 = buf0 = 0; } @@ -3241,7 +3242,7 @@ atP0 = bitmap->getDataPtr() + (y + aty[0]) * bitmap->getLineSize(); atBuf0 = *atP0++ << 8; } else { - atP0 = NULL; + atP0 = nullptr; atBuf0 = 0; } atShift0 = 15 - atx[0]; @@ -3249,7 +3250,7 @@ atP1 = bitmap->getDataPtr() + (y + aty[1]) * bitmap->getLineSize(); atBuf1 = *atP1++ << 8; } else { - atP1 = NULL; + atP1 = nullptr; atBuf1 = 0; } atShift1 = 15 - atx[1]; @@ -3257,7 +3258,7 @@ atP2 = bitmap->getDataPtr() + (y + aty[2]) * bitmap->getLineSize(); atBuf2 = *atP2++ << 8; } else { - atP2 = NULL; + atP2 = nullptr; atBuf2 = 0; } atShift2 = 15 - atx[2]; @@ -3265,7 +3266,7 @@ atP3 = bitmap->getDataPtr() + (y + aty[3]) * bitmap->getLineSize(); atBuf3 = *atP3++ << 8; } else { - atP3 = NULL; + atP3 = nullptr; atBuf3 = 0; } atShift3 = 15 - atx[3]; @@ -3393,11 +3394,11 @@ p0 = bitmap->getDataPtr() + (y - 2) * bitmap->getLineSize(); buf0 = *p0++ << 8; } else { - p0 = NULL; + p0 = nullptr; buf0 = 0; } } else { - p1 = p0 = NULL; + p1 = p0 = nullptr; buf1 = buf0 = 0; } @@ -3408,7 +3409,7 @@ atP0 = bitmap->getDataPtr() + atY * bitmap->getLineSize(); atBuf0 = *atP0++ << 8; } else { - atP0 = NULL; + atP0 = nullptr; atBuf0 = 0; } atShift0 = 15 - atx[0]; @@ -3509,11 +3510,11 @@ p0 = bitmap->getDataPtr() + (y - 2) * bitmap->getLineSize(); buf0 = *p0++ << 8; } else { - p0 = NULL; + p0 = nullptr; buf0 = 0; } } else { - p1 = p0 = NULL; + p1 = p0 = nullptr; buf1 = buf0 = 0; } @@ -3524,7 +3525,7 @@ atP0 = bitmap->getDataPtr() + atY * bitmap->getLineSize(); atBuf0 = *atP0++ << 8; } else { - atP0 = NULL; + atP0 = nullptr; atBuf0 = 0; } atShift0 = 15 - atx[0]; @@ -3622,7 +3623,7 @@ p1 = bitmap->getDataPtr() + (y - 1) * bitmap->getLineSize(); buf1 = *p1++ << 8; } else { - p1 = NULL; + p1 = nullptr; buf1 = 0; } @@ -3633,7 +3634,7 @@ atP0 = bitmap->getDataPtr() + atY * bitmap->getLineSize(); atBuf0 = *atP0++ << 8; } else { - atP0 = NULL; + atP0 = nullptr; atBuf0 = 0; } atShift0 = 15 - atx[0]; @@ -3765,7 +3766,7 @@ } if (nRefSegs == 1) { seg = findSegment(refSegs[0]); - if (seg == NULL || seg->getType() != jbig2SegBitmap) { + if (seg == nullptr || seg->getType() != jbig2SegBitmap) { error(errSyntaxError, curStr->getPos(), "Bad bitmap reference in JBIG2 generic refinement segment"); return; } @@ -3775,7 +3776,7 @@ } // set up the arithmetic decoder - resetRefinementStats(templ, NULL); + resetRefinementStats(templ, nullptr); arithDecoder->start(); // read @@ -3818,16 +3819,16 @@ JBIG2Bitmap *bitmap; GBool ltp; Guint ltpCX, cx, cx0, cx2, cx3, cx4, tpgrCX0, tpgrCX1, tpgrCX2; - JBIG2BitmapPtr cxPtr0 = {0}; - JBIG2BitmapPtr cxPtr1 = {0}; - JBIG2BitmapPtr cxPtr2 = {0}; - JBIG2BitmapPtr cxPtr3 = {0}; - JBIG2BitmapPtr cxPtr4 = {0}; - JBIG2BitmapPtr cxPtr5 = {0}; - JBIG2BitmapPtr cxPtr6 = {0}; - JBIG2BitmapPtr tpgrCXPtr0 = {0}; - JBIG2BitmapPtr tpgrCXPtr1 = {0}; - JBIG2BitmapPtr tpgrCXPtr2 = {0}; + JBIG2BitmapPtr cxPtr0 = {nullptr, 0, 0}; + JBIG2BitmapPtr cxPtr1 = {nullptr, 0, 0}; + JBIG2BitmapPtr cxPtr2 = {nullptr, 0, 0}; + JBIG2BitmapPtr cxPtr3 = {nullptr, 0, 0}; + JBIG2BitmapPtr cxPtr4 = {nullptr, 0, 0}; + JBIG2BitmapPtr cxPtr5 = {nullptr, 0, 0}; + JBIG2BitmapPtr cxPtr6 = {nullptr, 0, 0}; + JBIG2BitmapPtr tpgrCXPtr0 = {nullptr, 0, 0}; + JBIG2BitmapPtr tpgrCXPtr1 = {nullptr, 0, 0}; + JBIG2BitmapPtr tpgrCXPtr2 = {nullptr, 0, 0}; int x, y, pix; if (!refBitmap) { @@ -3838,7 +3839,7 @@ if (!bitmap->isOk()) { delete bitmap; - return NULL; + return nullptr; } bitmap->clearToZero(); @@ -3881,7 +3882,7 @@ tpgrCX2 = (tpgrCX2 << 1) | refBitmap->nextPixel(&tpgrCXPtr2); tpgrCX2 = (tpgrCX2 << 1) | refBitmap->nextPixel(&tpgrCXPtr2); } else { - tpgrCXPtr0.p = tpgrCXPtr1.p = tpgrCXPtr2.p = NULL; // make gcc happy + tpgrCXPtr0.p = tpgrCXPtr1.p = tpgrCXPtr2.p = nullptr; // make gcc happy tpgrCXPtr0.shift = tpgrCXPtr1.shift = tpgrCXPtr2.shift = 0; tpgrCXPtr0.x = tpgrCXPtr1.x = tpgrCXPtr2.x = 0; } @@ -3956,7 +3957,7 @@ tpgrCX2 = (tpgrCX2 << 1) | refBitmap->nextPixel(&tpgrCXPtr2); tpgrCX2 = (tpgrCX2 << 1) | refBitmap->nextPixel(&tpgrCXPtr2); } else { - tpgrCXPtr0.p = tpgrCXPtr1.p = tpgrCXPtr2.p = NULL; // make gcc happy + tpgrCXPtr0.p = tpgrCXPtr1.p = tpgrCXPtr2.p = nullptr; // make gcc happy tpgrCXPtr0.shift = tpgrCXPtr1.shift = tpgrCXPtr2.shift = 0; tpgrCXPtr0.x = tpgrCXPtr1.x = tpgrCXPtr2.x = 0; } @@ -4026,7 +4027,7 @@ if (!pageBitmap->isOk()) { delete pageBitmap; - pageBitmap = NULL; + pageBitmap = nullptr; return; } @@ -4156,7 +4157,7 @@ return seg; } } - return NULL; + return nullptr; } void JBIG2Stream::discardSegment(Guint segNum) { Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/JPEG2000Stream.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/JPEG2000Stream.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/JPEG2000Stream.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -78,7 +78,7 @@ JPXStream::JPXStream(Stream *strA) : FilterStream(strA) { priv = new JPXStreamPrivate; priv->inited = gFalse; - priv->image = NULL; + priv->image = nullptr; priv->npixels = 0; priv->ncomps = 0; priv->indexed = gFalse; @@ -96,9 +96,9 @@ } void JPXStream::close() { - if (priv->image != NULL) { + if (priv->image != nullptr) { opj_image_destroy(priv->image); - priv->image = NULL; + priv->image = nullptr; priv->npixels = 0; } } @@ -131,7 +131,7 @@ } GooString *JPXStream::getPSFilter(int psLevel, const char *indent) { - return NULL; + return nullptr; } GBool JPXStream::isBinary(GBool last) { @@ -250,7 +250,7 @@ priv->ncomps = priv->image->numcomps; if (alpha == 1 && priv->smaskInData == 0) priv->ncomps--; for (int component = 0; component < priv->ncomps; component++) { - if (priv->image->comps[component].data == NULL) { + if (priv->image->comps[component].data == nullptr) { close(); break; } @@ -289,7 +289,7 @@ stream = opj_stream_default_create(OPJ_TRUE); #if OPENJPEG_VERSION >= OPENJPEG_VERSION_ENCODE(2, 1, 0) - opj_stream_set_user_data (stream, &jpxData, NULL); + opj_stream_set_user_data (stream, &jpxData, nullptr); #else opj_stream_set_user_data (stream, &jpxData); #endif @@ -310,14 +310,14 @@ /* Get the decoder handle of the format */ decoder = opj_create_decompress(format); - if (decoder == NULL) { + if (decoder == nullptr) { error(errSyntaxWarning, -1, "Unable to create decoder"); goto error; } /* Catch events using our callbacks */ - opj_set_warning_handler(decoder, libopenjpeg_warning_callback, NULL); - opj_set_error_handler(decoder, libopenjpeg_error_callback, NULL); + opj_set_warning_handler(decoder, libopenjpeg_warning_callback, nullptr); + opj_set_error_handler(decoder, libopenjpeg_error_callback, nullptr); /* Setup the decoder decoding parameters */ if (!opj_setup_decoder(decoder, ¶meters)) { @@ -326,7 +326,7 @@ } /* Decode the stream and fill the image structure */ - image = NULL; + image = nullptr; if (!opj_read_header(stream, decoder, &image)) { error(errSyntaxWarning, -1, "Unable to read header"); goto error; @@ -348,7 +348,7 @@ opj_destroy_codec(decoder); opj_stream_destroy(stream); - if (image != NULL) + if (image != nullptr) return; error: Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/Lexer.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/Lexer.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/Lexer.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -13,7 +13,7 @@ // All changes made under the Poppler project to this file are licensed // under GPL version 2 or later // -// Copyright (C) 2006-2010, 2012-2014, 2017 Albert Astals Cid +// Copyright (C) 2006-2010, 2012-2014, 2017, 2018 Albert Astals Cid // Copyright (C) 2006 Krzysztof Kowalczyk // Copyright (C) 2010 Carlos Garcia Campos // Copyright (C) 2012, 2013 Adrian Johnson @@ -86,7 +86,6 @@ xref = xrefA; if (obj->isStream()) { - Object obj2; streams = new Array(xref); freeArray = gTrue; streams->add(obj->copy()); @@ -97,12 +96,14 @@ strPtr = 0; if (streams->getLength() > 0) { curStr = streams->get(strPtr); - curStr.streamReset(); + if (curStr.isStream()) { + curStr.streamReset(); + } } } Lexer::~Lexer() { - if (!curStr.isNone()) { + if (curStr.isStream()) { curStr.streamClose(); } if (freeArray) { @@ -120,7 +121,7 @@ } c = EOF; - while (!curStr.isNone() && (c = curStr.streamGetChar()) == EOF) { + while (curStr.isStream() && (c = curStr.streamGetChar()) == EOF) { if (comesFromLook == gTrue) { return EOF; } else { @@ -128,8 +129,10 @@ curStr = Object(); ++strPtr; if (strPtr < streams->getLength()) { - curStr = streams->get(strPtr); - curStr.streamReset(); + curStr = streams->get(strPtr); + if (curStr.isStream()) { + curStr.streamReset(); + } } } } @@ -279,7 +282,7 @@ n = 0; numParen = 1; done = gFalse; - s = NULL; + s = nullptr; do { c2 = EOF; switch (c = getChar()) { @@ -376,7 +379,7 @@ n = 0; // we are growing see if the document is not malformed and we are growing too much - if (objNum > 0 && xref != NULL) + if (objNum > 0 && xref != nullptr) { int newObjNum = xref->getNumEntry(curStr.streamGetPos()); if (newObjNum != objNum) @@ -407,7 +410,7 @@ case '/': p = tokBuf; n = 0; - s = NULL; + s = nullptr; while ((c = lookChar()) != EOF && !specialChars[c]) { getChar(); if (c == '#') { @@ -483,7 +486,7 @@ p = tokBuf; m = n = 0; c2 = 0; - s = NULL; + s = nullptr; while (1) { c = getChar(); if (c == '>') { Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/Lexer.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/Lexer.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/Lexer.h 2018-04-22 15:47:12 UTC (rev 796) @@ -13,7 +13,7 @@ // All changes made under the Poppler project to this file are licensed // under GPL version 2 or later // -// Copyright (C) 2006, 2007, 2010, 2013, 2017 Albert Astals Cid +// Copyright (C) 2006, 2007, 2010, 2013, 2017, 2018 Albert Astals Cid // Copyright (C) 2006 Krzysztof Kowalczyk // Copyright (C) 2013 Adrian Johnson // Copyright (C) 2013 Thomas Freitag @@ -55,6 +55,9 @@ // Destructor. ~Lexer(); + Lexer(const Lexer &) = delete; + Lexer& operator=(const Lexer &) = delete; + // Get the next object from the input stream. Object getObj(int objNum = -1); Object getObj(const char *cmdA, int objNum); Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/Linearization.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/Linearization.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/Linearization.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -23,8 +23,8 @@ Parser *parser; str->reset(); - parser = new Parser(NULL, - new Lexer(NULL, str->makeSubStream(str->getStart(), gFalse, 0, Object(objNull))), + parser = new Parser(nullptr, + new Lexer(nullptr, str->makeSubStream(str->getStart(), gFalse, 0, Object(objNull))), gFalse); Object obj1 = parser->getObj(); Object obj2 = parser->getObj(); @@ -48,7 +48,7 @@ if (!linDict.isDict()) return 0; int length; - if (linDict.getDict()->lookupInt("L", NULL, &length) && + if (linDict.getDict()->lookupInt("L", nullptr, &length) && length > 0) { return length; } else { @@ -139,7 +139,7 @@ { int objectNumberFirst = 0; if (linDict.isDict() && - linDict.getDict()->lookupInt("O", NULL, &objectNumberFirst) && + linDict.getDict()->lookupInt("O", nullptr, &objectNumberFirst) && objectNumberFirst > 0) { return objectNumberFirst; } else { @@ -152,7 +152,7 @@ { int pageEndFirst = 0; if (linDict.isDict() && - linDict.getDict()->lookupInt("E", NULL, &pageEndFirst) && + linDict.getDict()->lookupInt("E", nullptr, &pageEndFirst) && pageEndFirst > 0) { return pageEndFirst; } else { @@ -165,7 +165,7 @@ { int numPages = 0; if (linDict.isDict() && - linDict.getDict()->lookupInt("N", NULL, &numPages) && + linDict.getDict()->lookupInt("N", nullptr, &numPages) && numPages > 0) { return numPages; } else { @@ -178,7 +178,7 @@ { int mainXRefEntriesOffset = 0; if (linDict.isDict() && - linDict.getDict()->lookupInt("T", NULL, &mainXRefEntriesOffset) && + linDict.getDict()->lookupInt("T", nullptr, &mainXRefEntriesOffset) && mainXRefEntriesOffset > 0) { return mainXRefEntriesOffset; } else { @@ -192,7 +192,7 @@ int pageFirst = 0; // Optional, defaults to 0. if (linDict.isDict()) { - linDict.getDict()->lookupInt("P", NULL, &pageFirst); + linDict.getDict()->lookupInt("P", nullptr, &pageFirst); } if ((pageFirst < 0) || (pageFirst >= getNumPages())) { Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/Link.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/Link.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/Link.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -57,7 +57,7 @@ action = new LinkGoTo(obj); if (!action->isOk()) { delete action; - return NULL; + return nullptr; } return action; } @@ -68,7 +68,7 @@ if (!obj->isDict()) { error(errSyntaxWarning, -1, "parseAction: Bad annotation action for URI '{0:s}'", baseURI ? baseURI->getCString() : "NULL"); - return NULL; + return nullptr; } Object obj2 = obj->dictLookup("S"); @@ -127,12 +127,12 @@ } else { error(errSyntaxWarning, -1, "parseAction: Unknown annotation action object: URI = '{0:s}'", baseURI ? baseURI->getCString() : "NULL"); - action = NULL; + action = nullptr; } if (action && !action->isOk()) { delete action; - return NULL; + return nullptr; } return action; } @@ -362,8 +362,8 @@ //------------------------------------------------------------------------ LinkGoTo::LinkGoTo(Object *destObj) { - dest = NULL; - namedDest = NULL; + dest = nullptr; + namedDest = nullptr; // named destination if (destObj->isName()) { @@ -376,7 +376,7 @@ dest = new LinkDest(destObj->getArray()); if (!dest->isOk()) { delete dest; - dest = NULL; + dest = nullptr; } // error @@ -397,9 +397,9 @@ //------------------------------------------------------------------------ LinkGoToR::LinkGoToR(Object *fileSpecObj, Object *destObj) { - fileName = NULL; - dest = NULL; - namedDest = NULL; + fileName = nullptr; + dest = nullptr; + namedDest = nullptr; // get file name Object obj1 = getFileSpecNameForPlatform (fileSpecObj); @@ -418,7 +418,7 @@ dest = new LinkDest(destObj->getArray()); if (!dest->isOk()) { delete dest; - dest = NULL; + dest = nullptr; } // error @@ -443,8 +443,8 @@ LinkLaunch::LinkLaunch(Object *actionObj) { - fileName = NULL; - params = NULL; + fileName = nullptr; + params = nullptr; if (actionObj->isDict()) { Object obj1 = actionObj->dictLookup("F"); @@ -494,7 +494,7 @@ int n; char c; - uri = NULL; + uri = nullptr; if (uriObj->isString()) { uri2 = uriObj->getString(); n = (int)strcspn(uri2->getCString(), "/:"); @@ -539,7 +539,7 @@ //------------------------------------------------------------------------ LinkNamed::LinkNamed(Object *nameObj) { - name = NULL; + name = nullptr; if (nameObj->isName()) { name = new GooString(nameObj->getName()); } @@ -557,7 +557,7 @@ LinkMovie::LinkMovie(Object *obj) { annotRef.num = -1; - annotTitle = NULL; + annotTitle = nullptr; Object tmp = obj->dictLookupNF("Annotation"); if (tmp.isRef()) { @@ -569,7 +569,7 @@ annotTitle = tmp.getString()->copy(); } - if ((annotTitle == NULL) && (annotRef.num == -1)) { + if ((annotTitle == nullptr) && (annotRef.num == -1)) { error(errSyntaxError, -1, "Movie action is missing both the Annot and T keys"); } @@ -608,7 +608,7 @@ sync = gFalse; repeat = gFalse; mix = gFalse; - sound = NULL; + sound = nullptr; if (soundObj->isDict()) { // volume @@ -647,8 +647,8 @@ LinkRendition::LinkRendition(Object *obj) { operation = NoRendition; - media = NULL; - js = NULL; + media = nullptr; + js = nullptr; int operationCode = -1; if (obj->isDict()) { @@ -671,8 +671,6 @@ if (!js && (operationCode < 0 || operationCode > 4)) { error(errSyntaxWarning, -1, "Invalid Rendition Action: unrecognized operation valued: {0:d}", operationCode); } else { - Object obj1; - // retrieve rendition object renditionObj = obj->dictLookup("R"); if (renditionObj.isDict()) { @@ -723,7 +721,7 @@ //------------------------------------------------------------------------ LinkJavaScript::LinkJavaScript(Object *jsObj) { - js = NULL; + js = nullptr; if (jsObj->isString()) { js = new GooString(jsObj->getString()); @@ -750,7 +748,7 @@ Object obj1 = obj->dictLookup("State"); if (obj1.isArray()) { - StateList *stList = NULL; + StateList *stList = nullptr; for (int i = 0; i < obj1.arrayGetLength(); ++i) { Object obj2 = obj1.arrayGetNF(i); @@ -770,7 +768,7 @@ } else { error(errSyntaxWarning, -1, "Invalid name '{0:s}' in OCG Action state array", name); delete stList; - stList = NULL; + stList = nullptr; } } else if (obj2.isRef()) { if (stList) { @@ -792,7 +790,7 @@ } else { error(errSyntaxWarning, -1, "Invalid OCGState action"); delete stateList; - stateList = NULL; + stateList = nullptr; } obj1 = obj->dictLookup("PreserveRB"); @@ -831,7 +829,7 @@ int size; int i; - links = NULL; + links = nullptr; size = 0; numLinks = 0; @@ -870,7 +868,7 @@ return links[i]->getAction(); } } - return NULL; + return nullptr; } GBool Links::onLink(double x, double y) const { Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/Link.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/Link.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/Link.h 2018-04-22 15:47:12 UTC (rev 796) @@ -17,6 +17,7 @@ // Copyright (C) 2008 Hugo Mercier // Copyright (C) 2010, 2011 Carlos Garcia Campos // Copyright (C) 2012 Tobias Koening +// Copyright (C) 2018 Albert Astals Cid // // 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 @@ -62,6 +63,10 @@ class LinkAction { public: + LinkAction() = default; + LinkAction(const LinkAction &) = delete; + LinkAction& operator=(const LinkAction &other) = delete; + // Destructor. virtual ~LinkAction() {} @@ -429,8 +434,10 @@ enum State { On, Off, Toggle}; struct StateList { - StateList() { list = NULL; } + StateList() { list = nullptr; } ~StateList(); + StateList(const StateList &) = delete; + StateList& operator=(const StateList &) = delete; State st; GooList *list; }; @@ -481,6 +488,9 @@ // Destructor. ~Links(); + Links(const Links &) = delete; + Links& operator=(const Links &) = delete; + // Iterate through list of links. int getNumLinks() const { return numLinks; } AnnotLink *getLink(int i) const { return links[i]; } Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/MarkedContentOutputDev.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/MarkedContentOutputDev.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/MarkedContentOutputDev.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -18,12 +18,12 @@ MarkedContentOutputDev::MarkedContentOutputDev(int mcidA): - currentFont(NULL), - currentText(NULL), + currentFont(nullptr), + currentText(nullptr), mcid(mcidA), pageWidth(0.0), pageHeight(0.0), - unicodeMap(NULL) + unicodeMap(nullptr) { currentColor.r = currentColor.g = currentColor.b = 0; } @@ -48,7 +48,7 @@ currentFont, currentColor)); } - currentText = NULL; + currentText = nullptr; } @@ -73,7 +73,7 @@ { int id = -1; if (properties) - properties->lookupInt("MCID", NULL, &id); + properties->lookupInt("MCID", nullptr, &id); if (id == -1) return; @@ -102,9 +102,9 @@ return gFalse; if (!currentFont) - return font != NULL && font->isOk(); + return font != nullptr && font->isOk(); - if (font == NULL) + if (font == nullptr) return gTrue; // Two non-null valid fonts are the same if they point to the same Ref @@ -154,11 +154,11 @@ currentColor = color; if (fontChange) { - if (currentFont != NULL) { + if (currentFont != nullptr) { currentFont->decRefCnt(); - currentFont = NULL; + currentFont = nullptr; } - if (state->getFont() != NULL) { + if (state->getFont() != nullptr) { currentFont = state->getFont(); currentFont->incRefCnt(); } @@ -197,7 +197,7 @@ char buf[8]; int n = unicodeMap->mapUnicode(u[i], buf, sizeof(buf)); if (n > 0) { - if (currentText == NULL) + if (currentText == nullptr) currentText = new GooString(); currentText->append(buf, n); } Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/MarkedContentOutputDev.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/MarkedContentOutputDev.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/MarkedContentOutputDev.h 2018-04-22 15:47:12 UTC (rev 796) @@ -5,6 +5,7 @@ // This file is licensed under the GPLv2 or later // // Copyright 2013 Igalia S.L. +// Copyright 2018 Albert Astals Cid // //======================================================================== @@ -72,6 +73,9 @@ font->decRefCnt(); delete text; } + + Data(const Data &) = delete; + Data& operator=(const Data &) = delete; }; Data *data; Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/Movie.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/Movie.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/Movie.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -173,7 +173,7 @@ } void Movie::parseMovie (Object *movieDict) { - fileName = NULL; + fileName = nullptr; rotationAngle = 0; width = -1; height = -1; Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/Movie.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/Movie.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/Movie.h 2018-04-22 15:47:12 UTC (rev 796) @@ -5,7 +5,7 @@ //--------------------------------------------------------------------------------- // Hugo Mercier (c) 2008 // Carlos Garcia Campos (c) 2010 -// Albert Astals Cid (c) 2017 +// Albert Astals Cid (c) 2017, 2018 // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -74,6 +74,7 @@ Movie(Object *objMovie); Movie(const Movie &movie); ~Movie(); + Movie& operator=(const Movie &) = delete; GBool isOk() { return ok; } MovieActivationParameters* getActivationParameters() { return &MA; } Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/NameToCharCode.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/NameToCharCode.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/NameToCharCode.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -32,7 +32,7 @@ len = 0; tab = (NameToCharCodeEntry *)gmallocn(size, sizeof(NameToCharCodeEntry)); for (i = 0; i < size; ++i) { - tab[i].name = NULL; + tab[i].name = nullptr; } } @@ -58,7 +58,7 @@ size = 2*size + 1; tab = (NameToCharCodeEntry *)gmallocn(size, sizeof(NameToCharCodeEntry)); for (h = 0; h < size; ++h) { - tab[h].name = NULL; + tab[h].name = nullptr; } for (i = 0; i < oldSize; ++i) { if (oldTab[i].name) { Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/NameToCharCode.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/NameToCharCode.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/NameToCharCode.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 +// +// 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 NAMETOCHARCODE_H #define NAMETOCHARCODE_H @@ -25,6 +39,9 @@ NameToCharCode(); ~NameToCharCode(); + NameToCharCode(const NameToCharCode &) = delete; + NameToCharCode& operator=(const NameToCharCode &) = delete; + void add(const char *name, CharCode c); CharCode lookup(const char *name); Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/NameToUnicodeTable.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/NameToUnicodeTable.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/NameToUnicodeTable.h 2018-04-22 15:47:12 UTC (rev 796) @@ -4274,7 +4274,7 @@ {0x007c, "|"}, {0x007d, "}"}, {0x007e, "~"}, - { 0, NULL } + { 0, nullptr } }; // map ZapfDingbats names to Unicode @@ -4480,5 +4480,5 @@ {0x275c, "a98"}, {0x275d, "a99"}, {0x2720, "a9"}, - { 0, NULL } + { 0, nullptr } }; Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/Object.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/Object.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/Object.h 2018-04-22 15:47:12 UTC (rev 796) @@ -19,7 +19,7 @@ // Copyright (C) 2009 Jakub Wilk // Copyright (C) 2012 Fabio D'Urso // Copyright (C) 2013 Thomas Freitag -// Copyright (C) 2013, 2017 Adrian Johnson +// Copyright (C) 2013, 2017, 2018 Adrian Johnson // Copyright (C) 2013 Adrian Perez de Castro // Copyright (C) 2016 Jakub Alba // @@ -86,6 +86,14 @@ int gen; // generation number }; +struct RefCompare { + bool operator() (const Ref& lhs, const Ref& rhs) const { + if (lhs.num != rhs.num) + return lhs.num < rhs.num; + return lhs.gen < rhs.gen; + } +}; + //------------------------------------------------------------------------ // object types //------------------------------------------------------------------------ @@ -137,7 +145,7 @@ class Object { public: // clear the anonymous union as best we can -- clear at least a pointer - void zeroUnion() { this->cString = NULL; } + void zeroUnion() { this->cString = nullptr; } // Default constructor. Object(): @@ -232,7 +240,7 @@ // After takeString() the only method that should be called for the object is free() // because the object it's not expected to have a NULL string. GooString *takeString() { - OBJECT_TYPE_CHECK(objString); GooString *s = string; string = NULL; return s; } + OBJECT_TYPE_CHECK(objString); GooString *s = string; string = nullptr; return s; } char *getName() const { OBJECT_TYPE_CHECK(objName); return cString; } Array *getArray() const { OBJECT_TYPE_CHECK(objArray); return array; } Dict *getDict() const { OBJECT_TYPE_CHECK(objDict); return dict; } Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/OptionalContent.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/OptionalContent.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/OptionalContent.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -41,7 +41,7 @@ // we need to parse the dictionary here, and build optionalContentGroups ok = gTrue; optionalContentGroups = new GooList(); - display = NULL; + display = nullptr; Object ocgList = ocgObject->dictLookup("OCGs"); if (!ocgList.isArray()) { @@ -141,7 +141,7 @@ OptionalContentGroup* OCGs::findOcgByRef( const Ref &ref) { //TODO: make this more efficient - OptionalContentGroup *ocg = NULL; + OptionalContentGroup *ocg = nullptr; for (int i=0; i < optionalContentGroups->getLength(); ++i) { ocg = (OptionalContentGroup*)optionalContentGroups->get(i); if ( (ocg->getRef().num == ref.num) && (ocg->getRef().gen == ref.gen) ) { @@ -150,7 +150,7 @@ } // not found - return NULL; + return nullptr; } OCDisplayNode *OCGs::getDisplayRoot() @@ -331,7 +331,7 @@ //------------------------------------------------------------------------ -OptionalContentGroup::OptionalContentGroup(Dict *ocgDict) : m_name(NULL) +OptionalContentGroup::OptionalContentGroup(Dict *ocgDict) : m_name(nullptr) { Object ocgName = ocgDict->lookup("Name"); if (!ocgName.isString()) { @@ -404,7 +404,7 @@ if (recursion > displayNodeRecursionLimit) { error(errSyntaxError, -1, "Loop detected in optional content order"); - return NULL; + return nullptr; } if (obj->isRef()) { if ((ocgA = oc->findOcgByRef(obj->getRef()))) { @@ -413,7 +413,7 @@ } Object obj2 = obj->fetch(xref); if (!obj2.isArray()) { - return NULL; + return nullptr; } i = 0; if (obj2.arrayGetLength() >= 1) { @@ -442,21 +442,21 @@ } OCDisplayNode::OCDisplayNode() { - name = NULL; - ocg = NULL; - children = NULL; + name = nullptr; + ocg = nullptr; + children = nullptr; } OCDisplayNode::OCDisplayNode(GooString *nameA) { name = new GooString(nameA); - ocg = NULL; - children = NULL; + ocg = nullptr; + children = nullptr; } OCDisplayNode::OCDisplayNode(OptionalContentGroup *ocgA) { - name = (ocgA->getName()) ? ocgA->getName()->copy() : NULL; + name = (ocgA->getName()) ? ocgA->getName()->copy() : nullptr; ocg = ocgA; - children = NULL; + children = nullptr; } void OCDisplayNode::addChild(OCDisplayNode *child) { @@ -478,7 +478,7 @@ GooList *childrenA; childrenA = children; - children = NULL; + children = nullptr; return childrenA; } Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/OptionalContent.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/OptionalContent.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/OptionalContent.h 2018-04-22 15:47:12 UTC (rev 796) @@ -4,7 +4,7 @@ // // Copyright 2007 Brad Hards // Copyright 2008 Carlos Garcia Campos -// Copyright 2013 Albert Astals Cid +// Copyright 2013, 2018 Albert Astals Cid // // Released under the GPL (version 2, or later, at your option) // @@ -35,6 +35,9 @@ OCGs(Object *ocgObject, XRef *xref); ~OCGs(); + OCGs(const OCGs &) = delete; + OCGs& operator=(const OCGs &) = delete; + // Is OCGS valid? GBool isOk() { return ok; } @@ -90,6 +93,9 @@ ~OptionalContentGroup(); + OptionalContentGroup(const OptionalContentGroup &) = delete; + OptionalContentGroup& operator=(const OptionalContentGroup &) = delete; + GooString* getName() const; Ref getRef() const; @@ -118,6 +124,9 @@ OCDisplayNode(); ~OCDisplayNode(); + OCDisplayNode(const OCDisplayNode &) = delete; + OCDisplayNode& operator=(const OCDisplayNode &) = delete; + GooString *getName() { return name; } OptionalContentGroup *getOCG() { return ocg; } int getNumChildren(); Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/Outline.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/Outline.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/Outline.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -47,7 +47,7 @@ return; } Object first = outlineObj->dictLookupNF("First"); - items = OutlineItem::readItemList(&first, xref); + items = OutlineItem::readItemList(nullptr, &first, xref); } Outline::~Outline() { @@ -58,13 +58,15 @@ //------------------------------------------------------------------------ -OutlineItem::OutlineItem(Dict *dict, XRef *xrefA) { +OutlineItem::OutlineItem(Dict *dict, int refNumA, OutlineItem *parentA, XRef *xrefA) { Object obj1; + refNum = refNumA; + parent = parentA; xref = xrefA; - title = NULL; - action = NULL; - kids = NULL; + title = nullptr; + action = nullptr; + kids = nullptr; obj1 = dict->lookup("Title"); @@ -108,21 +110,22 @@ } } -GooList *OutlineItem::readItemList(Object *firstItemRef, XRef *xrefA) { - GooList *items; - char* alreadyRead; - OutlineItem *item; - Object *p; +GooList *OutlineItem::readItemList(OutlineItem *parent, Object *firstItemRef, XRef *xrefA) { + GooList *items = new GooList(); - items = new GooList(); - - alreadyRead = (char *)gmalloc(xrefA->getNumObjects()); + char* alreadyRead = (char *)gmalloc(xrefA->getNumObjects()); memset(alreadyRead, 0, xrefA->getNumObjects()); - p = firstItemRef; + OutlineItem *parentO = parent; + while (parentO) { + alreadyRead[parentO->refNum] = 1; + parentO = parentO->parent; + } + + Object *p = firstItemRef; while (p->isRef() && (p->getRefNum() >= 0) && - (p->getRefNum() < xrefA->getNumObjects()) && + (p->getRefNum() < xrefA->getNumObjects()) && !alreadyRead[p->getRefNum()]) { Object obj = p->fetch(xrefA); if (!obj.isDict()) { @@ -129,7 +132,7 @@ break; } alreadyRead[p->getRefNum()] = 1; - item = new OutlineItem(obj.getDict(), xrefA); + OutlineItem *item = new OutlineItem(obj.getDict(), p->getRefNum(), parent, xrefA); items->append(item); p = &item->nextRef; } @@ -138,7 +141,7 @@ if (!items->getLength()) { delete items; - items = NULL; + items = nullptr; } return items; @@ -146,7 +149,7 @@ void OutlineItem::open() { if (!kids) { - kids = readItemList(&firstRef, xref); + kids = readItemList(this, &firstRef, xref); } } @@ -153,6 +156,6 @@ void OutlineItem::close() { if (kids) { deleteGooList(kids, OutlineItem); - kids = NULL; + kids = nullptr; } } Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/Outline.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/Outline.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/Outline.h 2018-04-22 15:47:12 UTC (rev 796) @@ -14,7 +14,7 @@ // under GPL version 2 or later // // Copyright (C) 2005 Marco Pesenti Gritti -// Copyright (C) 2016 Albert Astals Cid +// Copyright (C) 2016, 2018 Albert Astals Cid // // 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 @@ -44,6 +44,9 @@ Outline(Object *outlineObj, XRef *xref); ~Outline(); + Outline(const Outline &) = delete; + Outline& operator=(const Outline &) = delete; + GooList *getItems() { return items; } private: @@ -57,11 +60,14 @@ class OutlineItem { public: - OutlineItem(Dict *dict, XRef *xrefA); + OutlineItem(Dict *dict, int refNumA, OutlineItem *parentA, XRef *xrefA); ~OutlineItem(); - static GooList *readItemList(Object *firstItemRef, XRef *xrefA); + OutlineItem(const OutlineItem &) = delete; + OutlineItem& operator=(const OutlineItem &) = delete; + static GooList *readItemList(OutlineItem *parent, Object *firstItemRef, XRef *xrefA); + void open(); void close(); @@ -74,6 +80,8 @@ private: + int refNum; + OutlineItem *parent; XRef *xref; Unicode *title; int titleLen; Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/OutputDev.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/OutputDev.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/OutputDev.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -143,7 +143,7 @@ int maskWidth, int maskHeight, GBool maskInvert, GBool maskInterpolate) { - drawImage(state, ref, str, width, height, colorMap, interpolate, NULL, gFalse); + drawImage(state, ref, str, width, height, colorMap, interpolate, nullptr, gFalse); } void OutputDev::drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str, @@ -154,7 +154,7 @@ int maskWidth, int maskHeight, GfxImageColorMap *maskColorMap, GBool maskInterpolate) { - drawImage(state, ref, str, width, height, colorMap, interpolate, NULL, gFalse); + drawImage(state, ref, str, width, height, colorMap, interpolate, nullptr, gFalse); } void OutputDev::endMarkedContent(GfxState *state) { @@ -188,7 +188,7 @@ GooHash *OutputDev::endProfile() { GooHash *profile = profileHash; - profileHash = NULL; + profileHash = nullptr; return profile; } Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/OutputDev.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/OutputDev.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/OutputDev.h 2018-04-22 15:47:12 UTC (rev 796) @@ -79,7 +79,7 @@ : iccColorSpaceCache(5) #endif { - profileHash = NULL; + profileHash = nullptr; } // Destructor. Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/PDFDoc.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/PDFDoc.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/PDFDoc.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -14,7 +14,7 @@ // under GPL version 2 or later // // Copyright (C) 2005, 2006, 2008 Brad Hards -// Copyright (C) 2005, 2007-2009, 2011-2017 Albert Astals Cid +// Copyright (C) 2005, 2007-2009, 2011-2018 Albert Astals Cid // Copyright (C) 2008 Julien Rebetez // Copyright (C) 2008, 2010 Pino Toscano // Copyright (C) 2008, 2010, 2011 Carlos Garcia Campos @@ -36,6 +36,8 @@ // Copyright (C) 2015 Andr? Esser // Copyright (C) 2016 Jakub Alba // Copyright (C) 2017 Jean Ghali +// Copyright (C) 2017 Fredrik Fornwall +// Copyright (C) 2018 Ben Timby // // 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 @@ -115,19 +117,19 @@ #endif ok = gFalse; errCode = errNone; - fileName = NULL; - file = NULL; - str = NULL; - xref = NULL; - linearization = NULL; - catalog = NULL; - hints = NULL; + fileName = nullptr; + file = nullptr; + str = nullptr; + xref = nullptr; + linearization = nullptr; + catalog = nullptr; + hints = nullptr; #ifndef DISABLE_OUTLINE - outline = NULL; + outline = nullptr; #endif startXRefPos = -1; - secHdlr = NULL; - pageCache = NULL; + secHdlr = nullptr; + pageCache = nullptr; } PDFDoc::PDFDoc() @@ -162,7 +164,7 @@ #else file = GooFile::open(fileName); #endif - if (file == NULL) { + if (file == nullptr) { // fopen() has failed. // Keep a copy of the errno returned by fopen so that it can be // referred to later. @@ -238,7 +240,7 @@ fileNameU[n] = L'\0'; #endif } else { - fileName = NULL; + fileName = nullptr; #ifdef _WIN32 fileNameU = NULL; #endif @@ -249,6 +251,13 @@ GBool PDFDoc::setup(GooString *ownerPassword, GooString *userPassword) { pdfdocLocker(); + + if (str->getLength() <= 0) + { + error(errSyntaxError, -1, "Document stream is empty"); + return gFalse; + } + str->setPos(0, -1); if (str->getPos() < 0) { @@ -296,7 +305,7 @@ // try one more time to contruct the Catalog, maybe the problem is damaged XRef delete catalog; delete xref; - xref = new XRef(str, 0, 0, NULL, true); + xref = new XRef(str, 0, 0, nullptr, true); catalog = new Catalog(this); } @@ -400,11 +409,16 @@ char *p; char *tokptr; int i; + int c; pdfMajorVersion = 0; pdfMinorVersion = 0; for (i = 0; i < headerSearchSize; ++i) { - hdrBuf[i] = str->getChar(); + if ((c = str->getChar()) == EOF) { + error(errSyntaxWarning, -1, "EOF while reading header (continuing anyway)"); + return; + } + hdrBuf[i] = c; } hdrBuf[headerSearchSize] = '\0'; for (i = 0; i < headerSearchSize - 5; ++i) { @@ -463,7 +477,7 @@ std::vector PDFDoc::getSignatureWidgets() { int num_pages = getNumPages(); - FormPageWidgets *page_widgets = NULL; + FormPageWidgets *page_widgets = nullptr; std::vector widget_vector; for (int i = 1; i <= num_pages; i++) { @@ -470,7 +484,7 @@ Page *p = getCatalog()->getPage(i); if (p) { page_widgets = p->getFormWidgets(); - for (int j = 0; page_widgets != NULL && j < page_widgets->getNumWidgets(); j++) { + for (int j = 0; page_widgets != nullptr && j < page_widgets->getNumWidgets(); j++) { if (page_widgets->getWidget(j)->getType() == formSignature) { widget_vector.push_back(static_cast(page_widgets->getWidget(j))); } @@ -536,7 +550,7 @@ Links *PDFDoc::getLinks(int page) { Page *p = getPage(page); if (!p) { - return new Links (NULL); + return new Links (nullptr); } return p->getLinks(); } @@ -556,7 +570,7 @@ } GBool PDFDoc::checkLinearization() { - if (linearization == NULL) + if (linearization == nullptr) return gFalse; if (linearizationState == 1) return gTrue; @@ -645,7 +659,7 @@ GooString *PDFDoc::getDocInfoStringEntry(const char *key) { Object infoObj = getDocInfo(); if (!infoObj.isDict()) { - return NULL; + return nullptr; } Object entryObj = infoObj.dictLookup(key); @@ -655,7 +669,7 @@ if (entryObj.isString()) { result = entryObj.takeString(); } else { - result = NULL; + result = nullptr; } return result; @@ -730,6 +744,11 @@ FILE *f; OutStream *outStr; XRef *yRef, *countRef; + + if (file && file->modificationTimeChangedSinceOpen()) + return errFileChangedSinceOpen; + + int rootNum = getXRef()->getNumObjects() + 1; // Make sure that special flags are set, because we are going to read @@ -745,7 +764,7 @@ error(errInternal, -1, "Illegal pageNo: {0:d}({1:d})", pageNo, getNumPages() ); return errOpenFile; } - PDFRectangle *cropBox = NULL; + PDFRectangle *cropBox = nullptr; if (getCatalog()->getPage(pageNo)->isCropped()) { cropBox = getCatalog()->getPage(pageNo)->getCropBox(); } @@ -764,7 +783,7 @@ yRef = new XRef(getXRef()->getTrailerDict()); - if (secHdlr != NULL && !secHdlr->isUnencrypted()) { + if (secHdlr != nullptr && !secHdlr->isUnencrypted()) { yRef->setEncryption(secHdlr->getPermissionFlags(), secHdlr->getOwnerPasswordOk(), fileKey, keyLength, secHdlr->getEncVersion(), secHdlr->getEncRevision(), encAlgorithm); } @@ -835,7 +854,7 @@ if (j > 0) outStr->printf(" "); Object value = catDict->getValNF(j); outStr->printf("/%s ", key); - writeObject(&value, outStr, getXRef(), 0, NULL, cryptRC4, 0, 0, 0); + writeObject(&value, outStr, getXRef(), 0, nullptr, cryptRC4, 0, 0, 0); } } outStr->printf(">>\nendobj\n"); @@ -845,7 +864,7 @@ outStr->printf("<< /Type /Pages /Kids [ %d 0 R ] /Count 1 ", rootNum + 2); if (resourcesObj.isDict()) { outStr->printf("/Resources "); - writeObject(&resourcesObj, outStr, getXRef(), 0, NULL, cryptRC4, 0, 0, 0); + writeObject(&resourcesObj, outStr, getXRef(), 0, nullptr, cryptRC4, 0, 0, 0); } outStr->printf(">>\n"); outStr->printf("endobj\n"); @@ -861,7 +880,7 @@ outStr->printf("/Parent %d 0 R", rootNum + 1); } else { outStr->printf("/%s ", key); - writeObject(&value, outStr, getXRef(), 0, NULL, cryptRC4, 0, 0, 0); + writeObject(&value, outStr, getXRef(), 0, nullptr, cryptRC4, 0, 0, 0); } } outStr->printf(" >>\nendobj\n"); @@ -901,6 +920,9 @@ } int PDFDoc::saveAs(OutStream *outStr, PDFWriteMode mode) { + if (file && file->modificationTimeChangedSinceOpen()) + return errFileChangedSinceOpen; + if (!xref->isModified() && mode == writeStandard) { // simply copy the original file saveWithoutChangesAs (outStr); @@ -934,6 +956,9 @@ int PDFDoc::saveWithoutChangesAs(OutStream *outStr) { int c; + + if (file && file->modificationTimeChangedSinceOpen()) + return errFileChangedSinceOpen; BaseStream *copyStr = str->copy(); copyStr->reset(); @@ -997,7 +1022,7 @@ Goffset uxrefOffset = outStr->getPos(); int numobjects = xref->getNumObjects(); - const char *fileNameA = fileName ? fileName->getCString() : NULL; + const char *fileNameA = fileName ? fileName->getCString() : nullptr; Ref rootRef, uxrefStreamRef; rootRef.num = getXRef()->getRootNum(); rootRef.gen = getXRef()->getRootGen(); @@ -1059,7 +1084,7 @@ Goffset offset = writeObjectHeader(&ref, outStr); // Write unencrypted objects in unencrypted form if (xref->getEntry(i)->getFlag(XRefEntry::Unencrypted)) { - writeObject(&obj1, outStr, NULL, cryptRC4, 0, 0, 0); + writeObject(&obj1, outStr, nullptr, cryptRC4, 0, 0, 0); } else { writeObject(&obj1, outStr, fileKey, encAlgorithm, keyLength, ref.num, ref.gen); } @@ -1157,7 +1182,7 @@ CryptAlgorithm encAlgorithm, int keyLength, int objNum, int objGen) { // Encrypt string if encryption is enabled - GooString *sEnc = NULL; + GooString *sEnc = nullptr; if (fileKey) { EncryptStream *enc = new EncryptStream(new MemStream(s->getCString(), 0, s->getLength(), Object(objNull)), fileKey, encAlgorithm, keyLength, objNum, objGen); @@ -1272,7 +1297,7 @@ //we write the stream unencoded => TODO: write stream encoder // Encrypt stream - EncryptStream *encStream = NULL; + EncryptStream *encStream = nullptr; GBool removeFilter = gTrue; if (stream->getKind() == strWeird && fileKey) { Object filter = stream->getDict()->lookup("Filter"); @@ -1298,7 +1323,7 @@ } else { removeFilter = gFalse; } - } else if (fileKey != NULL) { // Encrypt stream + } else if (fileKey != nullptr) { // Encrypt stream encStream = new EncryptStream(stream, fileKey, encAlgorithm, keyLength, objNum, objGen); encStream->setAutoDelete(gFalse); stream = encStream; @@ -1378,7 +1403,7 @@ // - values of entry in information dictionnary GooString message; char buffer[256]; - sprintf(buffer, "%i", (int)time(NULL)); + sprintf(buffer, "%i", (int)time(nullptr)); message.append(buffer); if (fileName) @@ -1455,7 +1480,7 @@ { uxref->writeTableToFile( outStr, writeAllEntries ); outStr->printf( "trailer\r\n"); - writeDictionnary(trailerDict.getDict(), outStr, xRef, 0, NULL, cryptRC4, 0, 0, 0, nullptr); + writeDictionnary(trailerDict.getDict(), outStr, xRef, 0, nullptr, cryptRC4, 0, 0, 0, nullptr); outStr->printf( "\r\nstartxref\r\n"); outStr->printf( "%lli\r\n", uxrefOffset); outStr->printf( "%%%%EOF\r\n"); @@ -1472,7 +1497,7 @@ MemStream *mStream = new MemStream( stmData.getCString(), 0, stmData.getLength(), std::move(trailerDict) ); writeObjectHeader(uxrefStreamRef, outStr); Object obj1(static_cast(mStream)); - writeObject(&obj1, outStr, xRef, 0, NULL, cryptRC4, 0, 0, 0); + writeObject(&obj1, outStr, xRef, 0, nullptr, cryptRC4, 0, 0, 0); writeObjectFooter(outStr); outStr->printf( "startxref\r\n"); @@ -1483,7 +1508,7 @@ void PDFDoc::writeXRefTableTrailer(Goffset uxrefOffset, XRef *uxref, GBool writeAllEntries, int uxrefSize, OutStream* outStr, GBool incrUpdate) { - const char *fileNameA = fileName ? fileName->getCString() : NULL; + const char *fileNameA = fileName ? fileName->getCString() : nullptr; // file size (doesn't include the trailer) unsigned int fileSize = 0; int c; @@ -1503,7 +1528,7 @@ void PDFDoc::writeHeader(OutStream *outStr, int major, int minor) { outStr->printf("%%PDF-%d.%d\n", major, minor); - outStr->printf("%%\xE2\xE3\xCF\xD3\n"); + outStr->printf("%%%c%c%c%c\n", 0xE2, 0xE3, 0xCF, 0xD3); } void PDFDoc::markDictionnary (Dict* dict, XRef * xRef, XRef *countRef, Guint numOffset, int oldRefNum, int newRefNum, std::set *alreadyMarkedDicts) @@ -1522,7 +1547,6 @@ alreadyMarkedDicts->insert(dict); } - Object obj1; for (int i=0; igetLength(); i++) { const char *key = dict->getKey(i); if (strcmp(key, "Annots") != 0) { @@ -1614,7 +1638,7 @@ Object mediaBoxObject(mediaBoxArray); Object trimBoxObject = mediaBoxObject.copy(); pageDict->add(copyString("MediaBox"), std::move(mediaBoxObject)); - if (cropBox != NULL) { + if (cropBox != nullptr) { Array *cropBoxArray = new Array(getXRef()); cropBoxArray->add(Object(cropBox->x1)); cropBoxArray->add(Object(cropBox->y1)); @@ -1673,8 +1697,8 @@ } else { Object page = getXRef()->fetch(obj2.getRef().num, obj2.getRef().gen); if (page.isDict()) { - Dict *dict = page.getDict(); - Object pagetype = dict->lookup("Type"); + Dict *pageDict = page.getDict(); + Object pagetype = pageDict->lookup("Type"); if (!pagetype.isName() || strcmp(pagetype.getName(), "Page") != 0) { continue; } @@ -1789,9 +1813,9 @@ Object obj = getXRef()->fetch(ref.num - numOffset, ref.gen); Goffset offset = writeObjectHeader(&ref, outStr); if (combine) { - writeObject(&obj, outStr, getXRef(), numOffset, NULL, cryptRC4, 0, 0, 0); + writeObject(&obj, outStr, getXRef(), numOffset, nullptr, cryptRC4, 0, 0, 0); } else if (xRef->getEntry(n)->getFlag(XRefEntry::Unencrypted)) { - writeObject(&obj, outStr, NULL, cryptRC4, 0, 0, 0); + writeObject(&obj, outStr, nullptr, cryptRC4, 0, 0, 0); } else { writeObject(&obj, outStr, fileKey, encAlgorithm, keyLength, ref.num, ref.gen); } @@ -1938,13 +1962,13 @@ pageRef.num = getHints()->getPageObjectNum(page); if (!pageRef.num) { error(errSyntaxWarning, -1, "Failed to get object num from hint tables for page {0:d}", page); - return NULL; + return nullptr; } // check for bogus ref - this can happen in corrupted PDF files if (pageRef.num < 0 || pageRef.num >= xref->getNumObjects()) { error(errSyntaxWarning, -1, "Invalid object num ({0:d}) for page {1:d}", pageRef.num, page); - return NULL; + return nullptr; } pageRef.gen = xref->getEntry(pageRef.num)->gen; @@ -1951,17 +1975,17 @@ Object obj = xref->fetch(pageRef.num, pageRef.gen); if (!obj.isDict("Page")) { error(errSyntaxWarning, -1, "Object ({0:d} {1:d}) is not a pageDict", pageRef.num, pageRef.gen); - return NULL; + return nullptr; } Dict *pageDict = obj.getDict(); return new Page(this, page, &obj, pageRef, - new PageAttrs(NULL, pageDict), catalog->getForm()); + new PageAttrs(nullptr, pageDict), catalog->getForm()); } Page *PDFDoc::getPage(int page) { - if ((page < 1) || page > getNumPages()) return NULL; + if ((page < 1) || page > getNumPages()) return nullptr; if (isLinearized() && checkLinearization()) { pdfdocLocker(); @@ -1968,7 +1992,7 @@ if (!pageCache) { pageCache = (Page **) gmallocn(getNumPages(), sizeof(Page *)); for (int i = 0; i < getNumPages(); i++) { - pageCache[i] = NULL; + pageCache[i] = nullptr; } } if (!pageCache[page-1]) { Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/PDFDoc.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/PDFDoc.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/PDFDoc.h 2018-04-22 15:47:12 UTC (rev 796) @@ -14,7 +14,7 @@ // under GPL version 2 or later // // Copyright (C) 2005, 2006, 2008 Brad Hards -// Copyright (C) 2005, 2009, 2014, 2015, 2017 Albert Astals Cid +// Copyright (C) 2005, 2009, 2014, 2015, 2017, 2018 Albert Astals Cid // Copyright (C) 2008 Julien Rebetez // Copyright (C) 2008 Pino Toscano // Copyright (C) 2008 Carlos Garcia Campos @@ -92,6 +92,9 @@ GooString *userPassword = NULL, void *guiDataA = NULL); ~PDFDoc(); + PDFDoc(const PDFDoc &) = delete; + PDFDoc& operator=(const PDFDoc &) = delete; + static PDFDoc *ErrorPDFDoc(int errorCode, GooString *fileNameA = NULL); // Was PDF document successfully opened? Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/PDFDocBuilder.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/PDFDocBuilder.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/PDFDocBuilder.h 2018-04-22 15:47:12 UTC (rev 796) @@ -5,7 +5,7 @@ // This file is licensed under the GPLv2 or later // // Copyright 2010 Hib Eris -// Copyright 2010 Albert Astals Cid +// Copyright 2010, 2018 Albert Astals Cid // //======================================================================== @@ -26,8 +26,12 @@ public: - virtual ~PDFDocBuilder() {}; + PDFDocBuilder() = default; + virtual ~PDFDocBuilder() = default; + PDFDocBuilder(const PDFDocBuilder &) = delete; + PDFDocBuilder& operator=(const PDFDocBuilder &) = delete; + // Builds a new PDFDoc. Returns a PDFDoc. You should check this PDFDoc // with PDFDoc::isOk() for failures. // The caller is responsible for deleting ownerPassword, userPassWord and guiData. Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/PDFDocFactory.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/PDFDocFactory.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/PDFDocFactory.h 2018-04-22 15:47:12 UTC (rev 796) @@ -5,7 +5,7 @@ // This file is licensed under the GPLv2 or later // // Copyright 2010 Hib Eris -// Copyright 2010 Albert Astals Cid +// Copyright 2010, 2018 Albert Astals Cid // //======================================================================== @@ -37,6 +37,9 @@ PDFDocFactory(GooList *pdfDocBuilders = NULL); ~PDFDocFactory(); + PDFDocFactory(const PDFDocFactory &) = delete; + PDFDocFactory& operator=(const PDFDocFactory &) = delete; + // Create a PDFDoc. Returns a PDFDoc. You should check this PDFDoc // with PDFDoc::isOk() for failures. // The caller is responsible for deleting ownerPassword, userPassWord and guiData. Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/PSOutputDev.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/PSOutputDev.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/PSOutputDev.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -15,7 +15,7 @@ // // Copyright (C) 2005 Martin Kretzschmar // Copyright (C) 2005, 2006 Kristian H?gsberg -// Copyright (C) 2006-2009, 2011-2013, 2015-2017 Albert Astals Cid +// Copyright (C) 2006-2009, 2011-2013, 2015-2018 Albert Astals Cid // Copyright (C) 2006 Jeff Muizelaar // Copyright (C) 2007, 2008 Brad Hards // Copyright (C) 2008, 2009 Koji Otani @@ -830,7 +830,7 @@ "} def", "~123sn", "end", - NULL + nullptr }; static const char *cmapProlog[] = { @@ -875,7 +875,7 @@ " currentdict CMapName exch /CMap defineresource pop", "end", "end", - NULL + nullptr }; //------------------------------------------------------------------------ @@ -946,6 +946,9 @@ double yA, double kA, GooString *nameA); ~PSOutCustomColor(); + PSOutCustomColor(const PSOutCustomColor &) = delete; + PSOutCustomColor& operator=(const PSOutCustomColor &) = delete; + double c, m, y, k; GooString *name; PSOutCustomColor *next; @@ -958,7 +961,7 @@ y = yA; k = kA; name = nameA; - next = NULL; + next = nullptr; } PSOutCustomColor::~PSOutCustomColor() { @@ -976,6 +979,8 @@ struct PSOutPaperSize { PSOutPaperSize(GooString *nameA, int wA, int hA) { name = nameA; w = wA; h = hA; } ~PSOutPaperSize() { delete name; } + PSOutPaperSize(const PSOutPaperSize &) = delete; + PSOutPaperSize& operator=(const PSOutPaperSize &) = delete; GooString *name; int w, h; }; @@ -996,7 +1001,7 @@ { return (bufIdx >= bufSize && !fillBuf()) ? EOF : buf[bufIdx++]; } int lookChar() override { return (bufIdx >= bufSize && !fillBuf()) ? EOF : buf[bufIdx]; } - GooString *getPSFilter(int psLevel, const char *indent) override { return NULL; } + GooString *getPSFilter(int psLevel, const char *indent) override { return nullptr; } GBool isBinary(GBool last = gTrue) override { return gTrue; } GBool isEncoder() override { return gTrue; } @@ -1020,7 +1025,7 @@ width = widthA; height = heightA; colorMap = colorMapA; - imgStr = NULL; + imgStr = nullptr; pixelIdx = 0; bufIdx = gfxColorMaxComps; bufSize = ((GfxDeviceNColorSpace *)colorMap->getColorSpace())-> @@ -1094,28 +1099,28 @@ FILE *f; PSFileType fileTypeA; - underlayCbk = NULL; - underlayCbkData = NULL; - overlayCbk = NULL; - overlayCbkData = NULL; + underlayCbk = nullptr; + underlayCbkData = nullptr; + overlayCbk = nullptr; + overlayCbkData = nullptr; customCodeCbk = customCodeCbkA; customCodeCbkData = customCodeCbkDataA; - fontIDs = NULL; + fontIDs = nullptr; fontNames = new GooHash(gTrue); fontMaxValidGlyph = new GooHash(gTrue); - t1FontNames = NULL; - font8Info = NULL; - font16Enc = NULL; - imgIDs = NULL; - formIDs = NULL; - paperSizes = NULL; - embFontList = NULL; - customColors = NULL; + t1FontNames = nullptr; + font8Info = nullptr; + font16Enc = nullptr; + imgIDs = nullptr; + formIDs = nullptr; + paperSizes = nullptr; + embFontList = nullptr; + customColors = nullptr; haveTextClip = gFalse; - t3String = NULL; + t3String = nullptr; forceRasterize = forceRasterizeA; - psTitle = NULL; + psTitle = nullptr; // open file or pipe if (!strcmp(fileName, "-")) { @@ -1163,28 +1168,28 @@ GBool manualCtrlA, PSOutCustomCodeCbk customCodeCbkA, void *customCodeCbkDataA) { - underlayCbk = NULL; - underlayCbkData = NULL; - overlayCbk = NULL; - overlayCbkData = NULL; + underlayCbk = nullptr; + underlayCbkData = nullptr; + overlayCbk = nullptr; + overlayCbkData = nullptr; customCodeCbk = customCodeCbkA; customCodeCbkData = customCodeCbkDataA; - fontIDs = NULL; + fontIDs = nullptr; fontNames = new GooHash(gTrue); fontMaxValidGlyph = new GooHash(gTrue); - t1FontNames = NULL; - font8Info = NULL; - font16Enc = NULL; - imgIDs = NULL; - formIDs = NULL; - paperSizes = NULL; - embFontList = NULL; - customColors = NULL; + t1FontNames = nullptr; + font8Info = nullptr; + font16Enc = nullptr; + imgIDs = nullptr; + formIDs = nullptr; + paperSizes = nullptr; + embFontList = nullptr; + customColors = nullptr; haveTextClip = gFalse; - t3String = NULL; + t3String = nullptr; forceRasterize = forceRasterizeA; - psTitle = NULL; + psTitle = nullptr; init(outputFuncA, outputStreamA, psGeneric, psTitleA, doc, pages, modeA, @@ -1217,7 +1222,7 @@ { "Folio", 612, 936 }, { "Quarto", 610, 780 }, { "10x14", 720, 1008 }, - { NULL, 0, 0 } + { nullptr, 0, 0 } }; /* PLRM specifies a tolerance of 5 points when matching page sizes */ @@ -1266,7 +1271,7 @@ outputFunc = outputFuncA; outputStream = outputStreamA; fileType = fileTypeA; - psTitle = (psTitleA? strdup(psTitleA): NULL); + psTitle = (psTitleA? strdup(psTitleA): nullptr); doc = docA; level = globalParams->getPSLevel(); pages = pagesA; @@ -1281,7 +1286,7 @@ imgURY = imgURYA; manualCtrl = manualCtrlA; - xref = NULL; + xref = nullptr; processColors = 0; inType3Char = gFalse; @@ -1333,7 +1338,7 @@ for (size_t pgi = 0; pgi < pages.size(); ++pgi) { const int pg = pages[pgi]; page = catalog->getPage(pg); - if (page == NULL) + if (page == nullptr) paperMatch = gFalse; if (!paperMatch) { w = paperWidth; @@ -1368,7 +1373,7 @@ } if (i == paperSizes->getLength()) { const StandardMedia *media = standardMedia; - GooString *name = NULL; + GooString *name = nullptr; while (media->name) { if (pageDimensionEqual(w, media->width) && pageDimensionEqual(h, media->height)) { name = new GooString(media->name); @@ -1872,7 +1877,7 @@ gfxFontDict = new GfxFontDict(xref, &r, obj2.getDict()); } } else if (obj1.isDict()) { - gfxFontDict = new GfxFontDict(xref, NULL, obj1.getDict()); + gfxFontDict = new GfxFontDict(xref, nullptr, obj1.getDict()); } if (gfxFontDict) { for (i = 0; i < gfxFontDict->getNumFonts(); ++i) { @@ -1911,7 +1916,7 @@ } fontIDs[fontIDLen++] = *font->getID(); - psName = NULL; + psName = nullptr; xs = ys = 1; subst = gFalse; @@ -1921,7 +1926,7 @@ setupType3Font(font, psName, parentResDict); } else { fontLoc = font->locateFont(xref, this); - if (fontLoc != NULL) { + if (fontLoc != nullptr) { switch (fontLoc->locType) { case gfxFontLocEmbedded: switch (fontLoc->fontType) { @@ -2011,7 +2016,7 @@ sizeof(PSFont16Enc)); } font16Enc[font16EncLen].fontID = *font->getID(); - font16Enc[font16EncLen].enc = NULL; + font16Enc[font16EncLen].enc = nullptr; ++font16EncLen; } else { error(errSyntaxError, -1, @@ -2063,7 +2068,7 @@ error(errSyntaxError, -1, "Couldn't find Unicode map for 16-bit font encoding '{0:t}'", fontLoc->encoding); - font16Enc[font16EncLen].enc = NULL; + font16Enc[font16EncLen].enc = nullptr; } ++font16EncLen; } @@ -2402,7 +2407,7 @@ // convert it to a Type 1 font if ((fontBuf = font->readEmbFontFile(xref, &fontLen))) { if ((ffT1C = FoFiType1C::make(fontBuf, fontLen))) { - ffT1C->convertToType1(psName->getCString(), NULL, gTrue, + ffT1C->convertToType1(psName->getCString(), nullptr, gTrue, outputFunc, outputStream); delete ffT1C; } @@ -2448,7 +2453,7 @@ if ((fontBuf = font->readEmbFontFile(xref, &fontLen))) { if ((ffTT = FoFiTrueType::make(fontBuf, fontLen))) { if (ffTT->isOpenTypeCFF()) { - ffTT->convertToType1(psName->getCString(), NULL, gTrue, + ffTT->convertToType1(psName->getCString(), nullptr, gTrue, outputFunc, outputStream); } delete ffTT; @@ -2480,7 +2485,7 @@ ffTT->convertToType42(psName->getCString(), ((Gfx8BitFont *)font)->getHasEncoding() ? ((Gfx8BitFont *)font)->getEncoding() - : (char **)NULL, + : (char **)nullptr, codeToGID, outputFunc, outputStream); if (codeToGID) { if (font8InfoLen >= font8InfoSize) { @@ -2519,7 +2524,7 @@ ffTT->convertToType42(psName->getCString(), ((Gfx8BitFont *)font)->getHasEncoding() ? ((Gfx8BitFont *)font)->getEncoding() - : (char **)NULL, + : (char **)nullptr, codeToGID, outputFunc, outputStream); if (codeToGID) { if (font8InfoLen >= font8InfoSize) { @@ -2567,7 +2572,7 @@ // check for embedding permission if (ffTT->getEmbeddingRights() >= 1) { - codeToGID = NULL; + codeToGID = nullptr; codeToGIDLen = 0; if (((GfxCIDFont *)font)->getCIDToGID()) { codeToGIDLen = ((GfxCIDFont *)font)->getCIDToGIDLen(); @@ -2649,11 +2654,11 @@ if ((ffT1C = FoFiType1C::make(fontBuf, fontLen))) { if (globalParams->getPSLevel() >= psLevel3) { // Level 3: use a CID font - ffT1C->convertToCIDType0(psName->getCString(), NULL, 0, + ffT1C->convertToCIDType0(psName->getCString(), nullptr, 0, outputFunc, outputStream); } else { // otherwise: use a non-CID composite font - ffT1C->convertToType0(psName->getCString(), NULL, 0, + ffT1C->convertToType0(psName->getCString(), nullptr, 0, outputFunc, outputStream); } delete ffT1C; @@ -2818,7 +2823,7 @@ box.y1 = m[1]; box.x2 = m[2]; box.y2 = m[3]; - gfx = new Gfx(doc, this, resDict, &box, NULL); + gfx = new Gfx(doc, this, resDict, &box, nullptr); inType3Char = gTrue; for (i = 0; i < charProcs->getLength(); ++i) { t3FillColorOnly = gFalse; @@ -2841,7 +2846,7 @@ (*outputFunc)(outputStream, t3String->getCString(), t3String->getLength()); delete t3String; - t3String = NULL; + t3String = nullptr; } if (t3NeedsRestore) { (*outputFunc)(outputStream, "Q\n", 2); @@ -3191,7 +3196,7 @@ // get resources Object resObj = dict->lookup("Resources"); - resDict = resObj.isDict() ? resObj.getDict() : (Dict *)NULL; + resDict = resObj.isDict() ? resObj.getDict() : (Dict *)nullptr; writePSFmt("/f_{0:d}_{1:d} {{\n", id.num, id.gen); writePS("q\n"); @@ -3746,7 +3751,7 @@ (*underlayCbk)(this, underlayCbkData); } if (overlayCbk) { - saveState(NULL); + saveState(nullptr); } xScale = yScale = 1; @@ -3960,7 +3965,7 @@ void PSOutputDev::endPage() { if (overlayCbk) { - restoreState(NULL); + restoreState(nullptr); (*overlayCbk)(this, overlayCbkData); } @@ -4411,7 +4416,7 @@ box.y1 = bbox[1]; box.x2 = bbox[2]; box.y2 = bbox[3]; - gfx = new Gfx(doc, this, resDict, &box, NULL); + gfx = new Gfx(doc, this, resDict, &box, nullptr); writePS("/x {\n"); if (paintType == 2) { writePSFmt("{0:.6g} 0 {1:.6g} {2:.6g} {3:.6g} {4:.6g} setcachedevice\n", @@ -4484,7 +4489,7 @@ box.y1 = bbox[1]; box.x2 = bbox[2]; box.y2 = bbox[3]; - gfx = new Gfx(doc, this, resDict, &box, NULL); + gfx = new Gfx(doc, this, resDict, &box, nullptr); inType3Char = gTrue; if (paintType == 2) { inUncoloredPattern = gTrue; @@ -4529,7 +4534,7 @@ box.y1 = bbox[1]; box.x2 = bbox[2]; box.y2 = bbox[3]; - gfx = new Gfx(doc, this, resDict, &box, NULL, NULL, NULL, gfxA->getXRef()); + gfx = new Gfx(doc, this, resDict, &box, nullptr, nullptr, nullptr, gfxA->getXRef()); writePSFmt("[{0:.6g} {1:.6g} {2:.6g} {3:.6g} {4:.6g} {5:.6g}] cm\n", mat[0], mat[1], mat[2], mat[3], tx, ty); inType3Char = gTrue; gfx->display(str); @@ -5042,8 +5047,8 @@ wMode = font->getWMode(); // check for a subtitute 16-bit font - uMap = NULL; - codeToGID = NULL; + uMap = nullptr; + codeToGID = nullptr; if (font->isCIDFont()) { for (i = 0; i < font16EncLen; ++i) { if (font->getID()->num == font16Enc[i].fontID.num && @@ -5185,18 +5190,18 @@ switch (level) { case psLevel1: case psLevel1Sep: - doImageL1(ref, NULL, invert, inlineImg, str, width, height, len, - NULL, NULL, 0, 0, gFalse); + doImageL1(ref, nullptr, invert, inlineImg, str, width, height, len, + nullptr, nullptr, 0, 0, gFalse); break; case psLevel2: case psLevel2Sep: - doImageL2(ref, NULL, invert, inlineImg, str, width, height, len, - NULL, NULL, 0, 0, gFalse); + doImageL2(ref, nullptr, invert, inlineImg, str, width, height, len, + nullptr, nullptr, 0, 0, gFalse); break; case psLevel3: case psLevel3Sep: - doImageL3(ref, NULL, invert, inlineImg, str, width, height, len, - NULL, NULL, 0, 0, gFalse); + doImageL3(ref, nullptr, invert, inlineImg, str, width, height, len, + nullptr, nullptr, 0, 0, gFalse); break; } } @@ -5225,22 +5230,22 @@ switch (level) { case psLevel1: doImageL1(ref, colorMap, gFalse, inlineImg, str, - width, height, len, maskColors, NULL, 0, 0, gFalse); + width, height, len, maskColors, nullptr, 0, 0, gFalse); break; case psLevel1Sep: //~ handle indexed, separation, ... color spaces doImageL1Sep(ref, colorMap, gFalse, inlineImg, str, - width, height, len, maskColors, NULL, 0, 0, gFalse); + width, height, len, maskColors, nullptr, 0, 0, gFalse); break; case psLevel2: case psLevel2Sep: doImageL2(ref, colorMap, gFalse, inlineImg, str, - width, height, len, maskColors, NULL, 0, 0, gFalse); + width, height, len, maskColors, nullptr, 0, 0, gFalse); break; case psLevel3: case psLevel3Sep: doImageL3(ref, colorMap, gFalse, inlineImg, str, - width, height, len, maskColors, NULL, 0, 0, gFalse); + width, height, len, maskColors, nullptr, 0, 0, gFalse); break; } t3Cacheable = gFalse; @@ -5260,22 +5265,22 @@ switch (level) { case psLevel1: doImageL1(ref, colorMap, gFalse, gFalse, str, width, height, len, - NULL, maskStr, maskWidth, maskHeight, maskInvert); + nullptr, maskStr, maskWidth, maskHeight, maskInvert); break; case psLevel1Sep: //~ handle indexed, separation, ... color spaces doImageL1Sep(ref, colorMap, gFalse, gFalse, str, width, height, len, - NULL, maskStr, maskWidth, maskHeight, maskInvert); + nullptr, maskStr, maskWidth, maskHeight, maskInvert); break; case psLevel2: case psLevel2Sep: doImageL2(ref, colorMap, gFalse, gFalse, str, width, height, len, - NULL, maskStr, maskWidth, maskHeight, maskInvert); + nullptr, maskStr, maskWidth, maskHeight, maskInvert); break; case psLevel3: case psLevel3Sep: doImageL3(ref, colorMap, gFalse, gFalse, str, width, height, len, - NULL, maskStr, maskWidth, maskHeight, maskInvert); + nullptr, maskStr, maskWidth, maskHeight, maskInvert); break; } t3Cacheable = gFalse; @@ -5988,7 +5993,7 @@ // filters if ((mode == psModeForm || inType3Char || preloadImagesForms) && uncompressPreloadedImages) { - s = NULL; + s = nullptr; useLZW = useRLE = gFalse; useCompressed = gFalse; useASCII = gFalse; @@ -6162,7 +6167,7 @@ useFlate = useLZW = useRLE = useASCII = useCompressed = gFalse; maskUseFlate = maskUseLZW = maskUseRLE = maskUseASCII = maskUseCompressed = gFalse; - maskFilters = NULL; // make gcc happy + maskFilters = nullptr; // make gcc happy // explicit masking if (maskStr) { @@ -6170,7 +6175,7 @@ // mask data source if ((mode == psModeForm || inType3Char || preloadImagesForms) && uncompressPreloadedImages) { - s = NULL; + s = nullptr; } else { s = maskStr->getPSFilter(3, " "); if (!s) { @@ -6409,7 +6414,7 @@ if ((mode == psModeForm || inType3Char || preloadImagesForms) && uncompressPreloadedImages) { - s = NULL; + s = nullptr; } else { s = str->getPSFilter(level < psLevel2 ? 1 : level < psLevel3 ? 2 : 3, " "); @@ -6720,7 +6725,7 @@ if (((GfxDeviceNColorSpace *)baseCS)->getAlt()->getMode() == csLab) { labCS = (GfxLabColorSpace *)((GfxDeviceNColorSpace *)baseCS)->getAlt(); } else { - labCS = NULL; + labCS = nullptr; } numAltComps = ((GfxDeviceNColorSpace *)baseCS)->getAlt()->getNComps(); p = lookup; Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/PSOutputDev.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/PSOutputDev.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/PSOutputDev.h 2018-04-22 15:47:12 UTC (rev 796) @@ -433,7 +433,7 @@ void writePSFmt(const char *fmt, ...); void writePSString(GooString *s); void writePSName(const char *s); - GooString *filterPSLabel(GooString *label, GBool *needParens=0); + GooString *filterPSLabel(GooString *label, GBool *needParens=nullptr); void writePSTextLine(GooString *s); PSLevel level; // PostScript level (1, 2, separation) Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/PSTokenizer.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/PSTokenizer.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/PSTokenizer.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -15,6 +15,7 @@ // // Copyright (C) 2006 Scott Turner // Copyright (C) 2008 Albert Astals Cid +// Copyright (C) 2017 Vincent Le Garrec // // 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 @@ -84,7 +85,7 @@ } } else if (c == '%') { comment = gTrue; - } else if (specialChars[c] != 1) { + } else if (specialChars[static_cast(c)] != 1) { break; } } @@ -113,7 +114,7 @@ } else if (c == '<') { while ((c = lookChar()) != EOF) { consumeChar(); - if (i < size && specialChars[c] != 1) { + if (i < size && specialChars[static_cast(c)] != 1) { buf[i++] = c; } if (c == '>') { @@ -121,7 +122,7 @@ } } } else if (c != '[' && c != ']') { - while ((c = lookChar()) != EOF && !specialChars[c]) { + while ((c = lookChar()) != EOF && !specialChars[static_cast(c)]) { consumeChar(); if (i < size) { buf[i++] = c; Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/Page.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/Page.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/Page.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -257,7 +257,7 @@ xref = doc->getXRef(); num = numA; duration = -1; - annots = NULL; + annots = nullptr; pageObj = pageDict->copy(); pageRef = pageRefA; @@ -345,7 +345,7 @@ Dict *Page::getResourceDictCopy(XRef *xrefA) { pageLocker(); Dict *dict = attrs->getResourceDict(); - return dict ? dict->copy(xrefA) : NULL; + return dict ? dict->copy(xrefA) : nullptr; } void Page::replaceXRef(XRef *xrefA) { @@ -517,7 +517,7 @@ crop = (box == *cropBox) && out->needClipToCropBox(); } gfx = new Gfx(doc, out, num, attrs->getResourceDict(), - hDPI, vDPI, &box, crop ? cropBox : (PDFRectangle *)NULL, + hDPI, vDPI, &box, crop ? cropBox : (PDFRectangle *)nullptr, rotate, abortCheckCbk, abortCheckCbkData, xrefA); return gfx; @@ -641,7 +641,7 @@ if (obj1.isNull ()) { obj1 = dict->lookup ("CS"); } - colorSpace = GfxColorSpace::parse(NULL, &obj1, NULL, NULL); + colorSpace = GfxColorSpace::parse(nullptr, &obj1, nullptr, nullptr); if (!colorSpace) { fprintf (stderr, "Error: Cannot parse color space\n"); goto fail1; @@ -794,7 +794,7 @@ Object additionalActionsObject = actions.fetch(doc->getXRef()); if (additionalActionsObject.isDict()) { const char *key = (type == actionOpenPage ? "O" : - type == actionClosePage ? "C" : NULL); + type == actionClosePage ? "C" : nullptr); Object actionObject = additionalActionsObject.dictLookup(key); if (actionObject.isDict()) Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/Page.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/Page.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/Page.h 2018-04-22 15:47:12 UTC (rev 796) @@ -20,7 +20,7 @@ // Copyright (C) 2007 Julien Rebetez // Copyright (C) 2008 I?igo Mart?nez // Copyright (C) 2012 Fabio D'Urso -// Copyright (C) 2012, 2017 Albert Astals Cid +// Copyright (C) 2012, 2017, 2018 Albert Astals Cid // Copyright (C) 2013 Thomas Freitag // Copyright (C) 2013, 2017 Adrian Johnson // @@ -148,6 +148,9 @@ // Destructor. ~Page(); + Page(const Page &) = delete; + Page& operator=(const Page &) = delete; + // Is page valid? GBool isOk() { return ok; } Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/PageLabelInfo.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/PageLabelInfo.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/PageLabelInfo.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -166,7 +166,7 @@ GooString number_string; base = 0; - interval = NULL; + interval = nullptr; for (i = 0; i < intervals.getLength(); i++) { interval = (Interval *) intervals.get(i); if (base <= index && index < base + interval->length) Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/PageLabelInfo.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/PageLabelInfo.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/PageLabelInfo.h 2018-04-22 15:47:12 UTC (rev 796) @@ -3,7 +3,7 @@ // This file is under the GPLv2 or later license // // Copyright (C) 2005-2006 Kristian H?gsberg -// Copyright (C) 2005 Albert Astals Cid +// Copyright (C) 2005, 2018 Albert Astals Cid // // 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 @@ -25,6 +25,8 @@ public: PageLabelInfo(Object *tree, int numPages); ~PageLabelInfo(); + PageLabelInfo(const PageLabelInfo &) = delete; + PageLabelInfo& operator=(const PageLabelInfo &) = delete; GBool labelToIndex(GooString *label, int *index); GBool indexToLabel(int index, GooString *label); @@ -35,6 +37,8 @@ struct Interval { Interval(Object *dict, int baseA); ~Interval(); + Interval(const Interval &) = delete; + Interval& operator=(const Interval &) = delete; GooString *prefix; enum NumberStyle { None, Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/Parser.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/Parser.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/Parser.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -60,7 +60,7 @@ Object Parser::getObj(int recursion) { - return getObj(gFalse, NULL, cryptRC4, 0, 0, 0, recursion); + return getObj(gFalse, nullptr, cryptRC4, 0, 0, 0, recursion); } Object Parser::getObj(GBool simpleOnly, @@ -89,10 +89,11 @@ if (!simpleOnly && buf1.isCmd("[")) { shift(); obj = Object(new Array(xref)); - while (!buf1.isCmd("]") && !buf1.isEOF()) { + while (!buf1.isCmd("]") && !buf1.isEOF() && recursion + 1 < recursionLimit) { Object obj2 = getObj(gFalse, fileKey, encAlgorithm, keyLength, objNum, objGen, recursion + 1); obj.arrayAdd(std::move(obj2)); } + if (recursion + 1 >= recursionLimit && strict) goto err; if (buf1.isEOF()) { error(errSyntaxError, getPos(), "End of file inside array"); if (strict) goto err; @@ -198,7 +199,7 @@ // get stream start position lexer->skipToNextLine(); if (!(str = lexer->getStream())) { - return NULL; + return nullptr; } pos = str->getPos(); @@ -210,7 +211,7 @@ length = obj.getInt64(); } else { error(errSyntaxError, getPos(), "Bad 'Length' attribute in stream"); - if (strict) return NULL; + if (strict) return nullptr; length = 0; } @@ -222,7 +223,7 @@ // in badly damaged PDF files, we can run off the end of the input // stream immediately after the "stream" token if (!lexer->getStream()) { - return NULL; + return nullptr; } baseStr = lexer->getStream()->getBaseStream(); @@ -241,7 +242,7 @@ shift(); } else { error(errSyntaxError, getPos(), "Missing 'endstream' or incorrect stream length"); - if (strict) return NULL; + if (strict) return nullptr; if (xref && lexer->getStream()) { // shift until we find the proper endstream or we change to another object or reach eof length = lexer->getPos() - pos; Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/Parser.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/Parser.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/Parser.h 2018-04-22 15:47:12 UTC (rev 796) @@ -13,7 +13,7 @@ // All changes made under the Poppler project to this file are licensed // under GPL version 2 or later // -// Copyright (C) 2006, 2010, 2013, 2017 Albert Astals Cid +// Copyright (C) 2006, 2010, 2013, 2017, 2018 Albert Astals Cid // Copyright (C) 2012 Hib Eris // Copyright (C) 2013 Adrian Johnson // Copyright (C) 2013 Thomas Freitag @@ -45,6 +45,9 @@ // Destructor. ~Parser(); + Parser(const Parser &) = delete; + Parser& operator=(const Parser &) = delete; + // Get the next object from the input stream. If is // true, do not parse compound objects (arrays, dictionaries, or // streams). Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/PopplerCache.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/PopplerCache.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/PopplerCache.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -43,7 +43,7 @@ PopplerCacheItem *PopplerCache::lookup(const PopplerCacheKey &key) { if (lastValidCacheIndex < 0) - return 0; + return nullptr; if (*keys[0] == key) { return items[0]; @@ -63,7 +63,7 @@ return itemHit; } } - return 0; + return nullptr; } void PopplerCache::put(PopplerCacheKey *key, PopplerCacheItem *item) Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/PopplerCache.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/PopplerCache.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/PopplerCache.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 Koji Otani -// Copyright (C) 2009, 2010, 2017 Albert Astals Cid +// Copyright (C) 2009, 2010, 2017, 2018 Albert Astals Cid // Copyright (C) 2010 Carlos Garcia Campos // //======================================================================== @@ -18,14 +18,22 @@ class PopplerCacheItem { public: + PopplerCacheItem() = default; virtual ~PopplerCacheItem(); + + PopplerCacheItem(const PopplerCacheItem &) = delete; + PopplerCacheItem& operator=(const PopplerCacheItem &other) = delete; }; class PopplerCacheKey { public: + PopplerCacheKey() = default; virtual ~PopplerCacheKey(); virtual bool operator==(const PopplerCacheKey &key) const = 0; + + PopplerCacheKey(const PopplerCacheKey &) = delete; + PopplerCacheKey& operator=(const PopplerCacheKey &other) = delete; }; class PopplerCache @@ -34,6 +42,9 @@ PopplerCache(int cacheSizeA); ~PopplerCache(); + PopplerCache(const PopplerCache &) = delete; + PopplerCache& operator=(const PopplerCache &other) = delete; + /* The item returned is owned by the cache */ PopplerCacheItem *lookup(const PopplerCacheKey &key); @@ -53,8 +64,6 @@ PopplerCacheKey *key(int index); private: - PopplerCache(const PopplerCache &cache); // not allowed - PopplerCacheKey **keys; PopplerCacheItem **items; int lastValidCacheIndex; @@ -67,6 +76,9 @@ PopplerObjectCache (int cacheSizeA, XRef *xrefA); ~PopplerObjectCache(); + PopplerObjectCache(const PopplerObjectCache &) = delete; + PopplerObjectCache& operator=(const PopplerObjectCache &other) = delete; + Object *put(const Ref &ref); Object lookup(const Ref &ref); Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/Rendition.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/Rendition.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/Rendition.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -254,8 +254,8 @@ GBool hasClip = gFalse; ok = gTrue; - fileName = NULL; - contentType = NULL; + fileName = nullptr; + contentType = nullptr; isEmbedded = gFalse; // Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/Rendition.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/Rendition.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/Rendition.h 2018-04-22 15:47:12 UTC (rev 796) @@ -5,7 +5,7 @@ //--------------------------------------------------------------------------------- // Hugo Mercier (c) 2008 // Carlos Garcia Campos (c) 2010 -// Albert Astals Cid (C) 2017 +// Albert Astals Cid (C) 2017, 2018 // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -121,6 +121,7 @@ MediaRendition(Object *obj); MediaRendition(const MediaRendition &other); ~MediaRendition(); + MediaRendition& operator=(const MediaRendition &) = delete; GBool isOk () { return ok; } Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/SecurityHandler.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/SecurityHandler.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/SecurityHandler.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -13,7 +13,7 @@ // All changes made under the Poppler project to this file are licensed // under GPL version 2 or later // -// Copyright (C) 2010, 2012, 2015, 2017 Albert Astals Cid +// Copyright (C) 2010, 2012, 2015, 2017, 2018 Albert Astals Cid // Copyright (C) 2013 Adrian Johnson // Copyright (C) 2014 Fabio D'Urso // Copyright (C) 2016 Alok Anand @@ -62,7 +62,7 @@ #endif error(errSyntaxError, -1, "Couldn't find the '{0:s}' security handler", filterObj.getName()); - secHdlr = NULL; + secHdlr = nullptr; #ifdef ENABLE_PLUGINS } #endif @@ -69,7 +69,7 @@ } else { error(errSyntaxError, -1, "Missing or invalid 'Filter' entry in encryption dictionary"); - secHdlr = NULL; + secHdlr = nullptr; } return secHdlr; } @@ -90,7 +90,7 @@ if (ownerPassword || userPassword) { authData = makeAuthData(ownerPassword, userPassword); } else { - authData = NULL; + authData = nullptr; } ok = authorize(authData); if (authData) { @@ -137,6 +137,9 @@ } } + StandardAuthData(const StandardAuthData &) = delete; + StandardAuthData& operator=(const StandardAuthData &) = delete; + GooString *ownerPassword; GooString *userPassword; }; @@ -146,11 +149,11 @@ SecurityHandler(docA) { ok = gFalse; - fileID = NULL; - ownerKey = NULL; - userKey = NULL; - ownerEnc = NULL; - userEnc = NULL; + fileID = nullptr; + ownerKey = nullptr; + userKey = nullptr; + ownerEnc = nullptr; + userEnc = nullptr; fileKeyLength = 0; Object versionObj = encryptDictA->dictLookup("V"); @@ -318,13 +321,13 @@ void *StandardSecurityHandler::makeAuthData(GooString *ownerPassword, GooString *userPassword) { return new StandardAuthData(ownerPassword ? ownerPassword->copy() - : (GooString *)NULL, + : (GooString *)nullptr, userPassword ? userPassword->copy() - : (GooString *)NULL); + : (GooString *)nullptr); } void *StandardSecurityHandler::getAuthData() { - return NULL; + return nullptr; } void StandardSecurityHandler::freeAuthData(void *authData) { @@ -341,8 +344,8 @@ ownerPassword = ((StandardAuthData *)authData)->ownerPassword; userPassword = ((StandardAuthData *)authData)->userPassword; } else { - ownerPassword = NULL; - userPassword = NULL; + ownerPassword = nullptr; + userPassword = nullptr; } if (!Decrypt::makeFileKey(encVersion, encRevision, fileKeyLength, ownerKey, userKey, ownerEnc, userEnc, Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/SecurityHandler.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/SecurityHandler.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/SecurityHandler.h 2018-04-22 15:47:12 UTC (rev 796) @@ -13,7 +13,7 @@ // All changes made under the Poppler project to this file are licensed // under GPL version 2 or later // -// Copyright (C) 2012 Albert Astals Cid +// Copyright (C) 2012, 2018 Albert Astals Cid // // 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 @@ -48,6 +48,9 @@ SecurityHandler(PDFDoc *docA); virtual ~SecurityHandler(); + SecurityHandler(const SecurityHandler &) = delete; + SecurityHandler& operator=(const SecurityHandler &) = delete; + // Returns true if the file is actually unencrypted. virtual GBool isUnencrypted() { return gFalse; } Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/SignatureHandler.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/SignatureHandler.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/SignatureHandler.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -42,7 +42,7 @@ char *SignatureHandler::getSignerName() { if (!CMSSignerInfo) - return NULL; + return nullptr; CERTCertificate *cert = NSS_CMSSignerInfo_GetSigningCertificate(CMSSignerInfo, CERT_GetDefaultCertDB()); return CERT_GetCommonName(&cert->subject); @@ -81,7 +81,7 @@ GooString *SignatureHandler::getDefaultFirefoxCertDB_Linux() { - GooString * finalPath = NULL; + GooString * finalPath = nullptr; DIR *toSearchIn; struct dirent *subFolder; @@ -88,24 +88,24 @@ GooString * homePath = new GooString(getenv("HOME")); homePath = homePath->append("/.mozilla/firefox/"); - if ((toSearchIn = opendir(homePath->getCString())) == NULL) { + if ((toSearchIn = opendir(homePath->getCString())) == nullptr) { error(errInternal, 0, "couldn't find default Firefox Folder"); delete homePath; - return NULL; + return nullptr; } do { - if ((subFolder = readdir(toSearchIn)) != NULL) { - if (strstr(subFolder->d_name, "default") != NULL) { + if ((subFolder = readdir(toSearchIn)) != nullptr) { + if (strstr(subFolder->d_name, "default") != nullptr) { finalPath = homePath->append(subFolder->d_name); closedir(toSearchIn); return finalPath; } } - } while (subFolder != NULL); + } while (subFolder != nullptr); closedir(toSearchIn); delete homePath; - return NULL; + return nullptr; } /** @@ -114,7 +114,7 @@ void SignatureHandler::init_nss() { GooString *certDBPath = getDefaultFirefoxCertDB_Linux(); - if (certDBPath == NULL) { + if (certDBPath == nullptr) { NSS_Init("sql:/etc/pki/nssdb"); } else { NSS_Init(certDBPath->getCString()); @@ -127,11 +127,11 @@ SignatureHandler::SignatureHandler(unsigned char *p7, int p7_length) - : hash_context(NULL), - CMSMessage(NULL), - CMSSignedData(NULL), - CMSSignerInfo(NULL), - temp_certs(NULL) + : hash_context(nullptr), + CMSMessage(nullptr), + CMSSignedData(nullptr), + CMSSignerInfo(nullptr), + temp_certs(nullptr) { init_nss(); CMSitem.data = p7; @@ -183,11 +183,11 @@ NSSCMSMessage *SignatureHandler::CMS_MessageCreate(SECItem * cms_item) { if (cms_item->data){ - return NSS_CMSMessage_CreateFromDER(cms_item, NULL, NULL /* Content callback */ - , NULL, NULL /*Password callback*/ - , NULL, NULL /*Decrypt callback*/); + return NSS_CMSMessage_CreateFromDER(cms_item, nullptr, nullptr /* Content callback */ + , nullptr, nullptr /*Password callback*/ + , nullptr, nullptr /*Decrypt callback*/); } else { - return NULL; + return nullptr; } } @@ -195,19 +195,19 @@ { if (!NSS_CMSMessage_IsSigned(cms_msg)) { error(errInternal, 0, "Input couldn't be parsed as a CMS signature"); - return NULL; + return nullptr; } NSSCMSContentInfo *cinfo = NSS_CMSMessage_ContentLevel(cms_msg, 0); if (!cinfo) { error(errInternal, 0, "Error in NSS_CMSMessage_ContentLevel"); - return NULL; + return nullptr; } NSSCMSSignedData *signedData = (NSSCMSSignedData*) NSS_CMSContentInfo_GetContent(cinfo); if (!signedData) { error(errInternal, 0, "CError in NSS_CMSContentInfo_GetContent()"); - return NULL; + return nullptr; } if (signedData->rawCerts) @@ -220,12 +220,12 @@ memset(signedData->tempCerts, 0, (i+1) * sizeof(CERTCertificate *)); // store the adresses of these temporary certificates for future release for (i = 0; signedData->rawCerts[i]; ++i) - signedData->tempCerts[i] = CERT_NewTempCertificate(CERT_GetDefaultCertDB(), signedData->rawCerts[i], NULL, 0, 0); + signedData->tempCerts[i] = CERT_NewTempCertificate(CERT_GetDefaultCertDB(), signedData->rawCerts[i], nullptr, 0, 0); temp_certs = signedData->tempCerts; return signedData; } else { - return NULL; + return nullptr; } } @@ -234,7 +234,7 @@ NSSCMSSignerInfo *signerInfo = NSS_CMSSignedData_GetSignerInfo(cms_sig_data, 0); if (!signerInfo) { printf("Error in NSS_CMSSignedData_GetSignerInfo()\n"); - return NULL; + return nullptr; } else { return signerInfo; } @@ -242,7 +242,7 @@ NSSCMSVerificationStatus SignatureHandler::validateSignature() { - unsigned char *digest_buffer = NULL; + unsigned char *digest_buffer = nullptr; if (!CMSSignedData) return NSSCMSVS_MalformedSignature; @@ -256,11 +256,11 @@ digest.data = digest_buffer; digest.len = hash_length; - if ((NSS_CMSSignerInfo_GetSigningCertificate(CMSSignerInfo, CERT_GetDefaultCertDB())) == NULL) + if ((NSS_CMSSignerInfo_GetSigningCertificate(CMSSignerInfo, CERT_GetDefaultCertDB())) == nullptr) CMSSignerInfo->verificationStatus = NSSCMSVS_SigningCertNotFound; SECItem * content_info_data = CMSSignedData->contentInfo.content.data; - if (content_info_data != NULL && content_info_data->data != NULL) + if (content_info_data != nullptr && content_info_data->data != nullptr) { /* This means it's not a detached type signature @@ -279,7 +279,7 @@ } } - else if (NSS_CMSSignerInfo_Verify(CMSSignerInfo, &digest, NULL) != SECSuccess) + else if (NSS_CMSSignerInfo_Verify(CMSSignerInfo, &digest, nullptr) != SECSuccess) { PORT_Free(digest_buffer); @@ -300,7 +300,7 @@ if (!CMSSignerInfo) return (SECErrorCodes) -1; //error code to avoid matching error codes defined in SECErrorCodes - if ((cert = NSS_CMSSignerInfo_GetSigningCertificate(CMSSignerInfo, CERT_GetDefaultCertDB())) == NULL) + if ((cert = NSS_CMSSignerInfo_GetSigningCertificate(CMSSignerInfo, CERT_GetDefaultCertDB())) == nullptr) CMSSignerInfo->verificationStatus = NSSCMSVS_SigningCertNotFound; PRTime vTime = 0; // time in microseconds since the epoch, special value 0 means now @@ -313,7 +313,7 @@ inParams[1].value.scalar.time = vTime; inParams[2].type = cert_pi_end; - CERT_PKIXVerifyCert(cert, certificateUsageEmailSigner, inParams, NULL, + CERT_PKIXVerifyCert(cert, certificateUsageEmailSigner, inParams, nullptr, CMSSignerInfo->cmsg->pwfn_arg); retVal = (SECErrorCodes) PORT_GetError(); Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/Sound.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/Sound.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/Sound.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -27,17 +27,17 @@ { // let's try to see if this Object is a Sound, according to the PDF specs // (section 9.2) - Stream *str = NULL; + Stream *str = nullptr; // the Object must be a Stream if (obj->isStream()) { str = obj->getStream(); } else { - return NULL; + return nullptr; } // the Stream must have a Dict Dict *dict = str->getDict(); - if (dict == NULL) - return NULL; + if (dict == nullptr) + return nullptr; // the Dict must have the 'R' key of type num Object tmp = dict->lookup("R"); if (tmp.isNum()) { @@ -51,7 +51,7 @@ { streamObj = obj->copy(); - fileName = NULL; + fileName = nullptr; samplingRate = 0.0; channels = 1; bitsPerSample = 8; Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/Sound.h =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/Sound.h 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/Sound.h 2018-04-22 15:47:12 UTC (rev 796) @@ -1,6 +1,6 @@ /* Sound.h - an object that holds the sound structure * Copyright (C) 2006-2007, Pino Toscano - * Copyright (C) 2017, Albert Astals Cid + * Copyright (C) 2017, 2018, Albert Astals Cid * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -47,6 +47,9 @@ // Destructor ~Sound(); + Sound(const Sound &) = delete; + Sound& operator=(const Sound &) = delete; + Object *getObject() { return &streamObj; } Stream *getStream(); Modified: branches/stable/source/src/libs/poppler/poppler-src/poppler/SplashOutputDev.cc =================================================================== --- branches/stable/source/src/libs/poppler/poppler-src/poppler/SplashOutputDev.cc 2018-02-27 23:34:23 UTC (rev 795) +++ branches/stable/source/src/libs/poppler/poppler-src/poppler/SplashOutputDev.cc 2018-04-22 15:47:12 UTC (rev 796) @@ -15,7 +15,7 @@ // // Copyright (C) 2005 Takashi Iwai // Copyright (C) 2006 Stefan Schweizer -// Copyright (C) 2006-2017 Albert Astals Cid +// Copyright (C) 2006-2018 Albert Astals Cid // Copyright (C) 2006 Krzysztof Kowalczyk // Copyright (C) 2006 Scott Turner // Copyright (C) 2007 Koji Otani @@ -197,15 +197,10 @@ // SplashGouraudPattern //------------------------------------------------------------------------ SplashGouraudPattern::SplashGouraudPattern(GBool bDirectColorTranslationA, - GfxState *stateA, GfxGouraudTriangleShading *shadingA, SplashColorMode modeA) { - SplashColor defaultColor; - GfxColor srcColor; + GfxState *stateA, GfxGouraudTriangleShading *shadingA) { state = stateA; shading = shadingA; - mode = modeA; bDirectColorTranslation = bDirectColorTranslationA; - shadingA->getColorSpace()->getDefaultColor(&srcColor); - convertGfxColor(defaultColor, mode, shadingA->getColorSpace(), &srcColor); gfxMode = shadingA->getColorSpace()->getMode(); } @@ -1176,7 +1171,7 @@ // NB: This must match the GfxBlendMode enum defined in GfxState.h. static const SplashBlendFunc splashOutBlendFuncs[] = { - NULL, + nullptr, &splashOutBlendMultiply, &splashOutBlendScreen, &splashOutBlendOverlay, @@ -1232,6 +1227,8 @@ int glyphXA, int glyphYA, int glyphWA, int glyphHA, GBool aa, GBool validBBoxA); ~T3FontCache(); + T3FontCache(const T3FontCache &) = delete; + T3FontCache& operator=(const T3FontCache &) = delete; GBool matches(Ref *idA, double m11A, double m12A, double m21A, double m22A) { return fontID.num == idA->num && fontID.gen == idA->gen && @@ -1289,9 +1286,9 @@ " This could teoretically result in wrong rendering,\n" " but most probably the document is bogus.\n" " Please report a bug if you think the rendering may be wrong because of this."); - cacheData = NULL; + cacheData = nullptr; } - if (cacheData != NULL) + if (cacheData != nullptr) { cacheTags = (T3FontCacheTag *)gmallocn(cacheSets * cacheAssoc, sizeof(T3FontCacheTag)); @@ -1301,7 +1298,7 @@ } else { - cacheTags = NULL; + cacheTags = nullptr; } } @@ -1376,7 +1373,7 @@ enableSlightHinting = gFalse; setupScreenParams(72.0, 72.0); reverseVideo = reverseVideoA; - if (paperColorA != NULL) { + if (paperColorA != nullptr) { splashColorCopy(paperColor, paperColorA); } else { splashClearColor(paperColor); @@ -1383,9 +1380,9 @@ } skipHorizText = gFalse; skipRotatedText = gFalse; - keepAlphaChannel = paperColorA == NULL; + keepAlphaChannel = paperColorA == nullptr; - doc = NULL; + doc = nullptr; bitmap = new SplashBitmap(1, 1, bitmapRowPad, colorMode, colorMode != splashModeMono1, bitmapTopDown); @@ -1394,17 +1391,17 @@ splash->setThinLineMode(thinLineMode); splash->clear(paperColor, 0); - fontEngine = NULL; + fontEngine = nullptr; nT3Fonts = 0; - t3GlyphStack = NULL; + t3GlyphStack = nullptr; - font = NULL; + font = nullptr; needFontUpdate = gFalse; - textClipPath = NULL; - transpGroupStack = NULL; + textClipPath = nullptr; + transpGroupStack = nullptr; nestCount = 0; - xref = NULL; + xref = nullptr; } void SplashOutputDev::setupScreenParams(double hDPI, double vDPI) { @@ -1492,12 +1489,12 @@ if (splash) { thinLineMode = splash->getThinLineMode(); delete splash; - splash = NULL; + splash = nullptr; } if (!bitmap || w != bitmap->getWidth() || h != bitmap->getHeight()) { if (bitmap) { delete bitmap; - bitmap = NULL; + bitmap = nullptr; } bitmap = new SplashBitmap(w, h, bitmapRowPad, colorMode, colorMode != splashModeMono1, bitmapTopDown); @@ -1547,7 +1544,7 @@ splash->setFillPattern(new SplashSolidColor(color)); splash->setLineCap(splashLineCapButt); splash->setLineJoin(splashLineJoinMiter); - splash->setLineDash(NULL, 0, 0); + splash->setLineDash(nullptr, 0, 0); splash->setMiterLimit(10); splash->setFlatness(1); // the SA parameter supposedly defaults to false, but Acrobat @@ -1907,7 +1904,7 @@ void SplashOutputDev::updateFillOpacity(GfxState *state) { splash->setFillAlpha((SplashCoord)state->getFillOpacity()); - if (transpGroupStack != NULL && (SplashCoord)state->getFillOpacity() < transpGroupStack->knockoutOpacity) { + if (transpGroupStack != nullptr && (SplashCoord)state->getFillOpacity() < transpGroupStack->knockoutOpacity) { transpGroupStack->knockoutOpacity = (SplashCoord)state->getFillOpacity(); } } @@ -1914,7 +1911,7 @@ void SplashOutputDev::updateStrokeOpacity(GfxState *state) { splash->setStrokeAlpha((SplashCoord)state->getStrokeOpacity()); - if (transpGroupStack != NULL && (SplashCoord)state->getStrokeOpacity() < transpGroupStack->knockoutOpacity) { + if (transpGroupStack != nullptr && (SplashCoord)state->getStrokeOpacity() < transpGroupStack->knockoutOpacity) { transpGroupStack->knockoutOpacity = (SplashCoord)state->getStrokeOpacity(); } } @@ -1992,11 +1989,10 @@ GfxFont *gfxFont; GfxFontLoc *fontLoc; GfxFontType fontType; - SplashOutFontFileID *id = NULL; + SplashOutFontFileID *id = nullptr; SplashFontFile *fontFile; - SplashFontSrc *fontsrc = NULL; + SplashFontSrc *fontsrc = nullptr; FoFiTrueType *ff; - Object refObj, strObj; GooString *fileName; char *tmpBuf; int tmpBufLen; @@ -2010,10 +2006,10 @@ GBool doAdjustFontMatrix = gFalse; needFontUpdate = gFalse; - font = NULL; - fileName = NULL; - tmpBuf = NULL; - fontLoc = NULL; + font = nullptr; + fileName = nullptr; + tmpBuf = nullptr; + fontLoc = nullptr; if (!(gfxFont = state->getFont())) { goto err1; @@ -2034,7 +2030,7 @@ reload: delete id; delete fontLoc; - fontLoc = NULL; + fontLoc = nullptr; if (fontsrc && !fontsrc->isFile) { fontsrc->unref(); fontsrc = nullptr; @@ -2046,7 +2042,7 @@ } else { - if (!(fontLoc = gfxFont->locateFont((xref) ? xref : doc->getXRef(), NULL))) { + if (!(fontLoc = gfxFont->locateFont((xref) ? xref : doc->getXRef(), nullptr))) { error(errSyntaxError, -1, "Couldn't find a font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->getCString() : "(unnamed)"); @@ -2133,7 +2129,7 @@ } } } else { - codeToGID = NULL; + codeToGID = nullptr; n = 0; } if (!(fontFile = fontEngine->loadTrueTypeFont( @@ -2166,7 +2162,7 @@ memcpy(codeToGID, ((GfxCIDFont *)gfxFont)->getCIDToGID(), n * sizeof(int)); } else { - codeToGID = NULL; + codeToGID = nullptr; n = 0; } if (!(fontFile = fontEngine->loadOpenTypeCFFFont( @@ -2182,7 +2178,7 @@ break; case fontCIDType2: case fontCIDType2OT: - codeToGID = NULL; + codeToGID = nullptr; n = 0; if (((GfxCIDFont *)gfxFont)->getCIDToGID()) { n = ((GfxCIDFont *)gfxFont)->getCIDToGIDLen(); @@ -2430,7 +2426,7 @@ !state->getStrokeColorSpace()->isNonMarking(); doClip = render & 4; - path = NULL; + path = nullptr; SplashCoord lineWidth = splash->getLineWidth(); if (doStroke && lineWidth == 0.0) splash->setLineWidth(1 / state->getVDPI()); @@ -2487,7 +2483,7 @@ textClipPath->append(path); } else { textClipPath = path; - path = NULL; + path = nullptr; } } } @@ -2551,7 +2547,7 @@ // create new entry in the font cache if (nT3Fonts == splashOutT3FontCacheSize) { t3gs = t3GlyphStack; - while (t3gs != NULL) { + while (t3gs != nullptr) { if (t3gs->cache == t3FontCache[nT3Fonts - 1]) { error(errSyntaxWarning, -1, "t3FontCache reaches limit but font still on stack in SplashOutputDev::beginType3Char"); return gTrue; @@ -2626,7 +2622,7 @@ // is the glyph in the cache? i = (code & (t3Font->cacheSets - 1)) * t3Font->cacheAssoc; for (j = 0; j < t3Font->cacheAssoc; ++j) { - if (t3Font->cacheTags != NULL) { + if (t3Font->cacheTags != nullptr) { if ((t3Font->cacheTags[i+j].mru & 0x8000) && t3Font->cacheTags[i+j].code == code) { drawType3Glyph(state, t3Font, &t3Font->cacheTags[i+j], @@ -2642,8 +2638,8 @@ t3GlyphStack = t3gs; t3GlyphStack->code = code; t3GlyphStack->cache = t3Font; - t3GlyphStack->cacheTag = NULL; - t3GlyphStack->cacheData = NULL; + t3GlyphStack->cacheTag = nullptr; + t3GlyphStack->cacheData = nullptr; t3GlyphStack->haveDx = gFalse; t3GlyphStack->doNotCache = gFalse; @@ -2700,17 +2696,17 @@ return; } - if (unlikely(t3GlyphStack == NULL)) { + if (unlikely(t3GlyphStack == nullptr)) { error(errSyntaxWarning, -1, "t3GlyphStack was null in SplashOutputDev::type3D1"); return; } - if (unlikely(t3GlyphStack->origBitmap != NULL)) { + if (unlikely(t3GlyphStack->origBitmap != nullptr)) { error(errSyntaxWarning, -1, "t3GlyphStack origBitmap was not null in SplashOutputDev::type3D1"); return; } - if (unlikely(t3GlyphStack->origSplash != NULL)) { + if (unlikely(t3GlyphStack->origSplash != nullptr)) { error(errSyntaxWarning, -1, "t3GlyphStack origSplash was not null in SplashOutputDev::type3D1"); return; } @@ -2765,7 +2761,7 @@ return; } - if (t3Font->cacheTags == NULL) + if (t3Font->cacheTags == nullptr) return; // allocate a cache entry @@ -2840,7 +2836,7 @@ if (textClipPath) { splash->clipToPath(textClipPath, gFalse); delete textClipPath; - textClipPath = NULL; + textClipPath = nullptr; } } @@ -2900,7 +2896,7 @@ imgMaskData.height = height; imgMaskData.y = 0; - splash->fillImageMask(&imageMaskSrc, &imgMaskData, width, height, mat, t3GlyphStack != NULL); + splash->fillImageMask(&imageMaskSrc, &imgMaskData, width, height, mat, t3GlyphStack != nullptr); if (inlineImg) { while (imgMaskData.y < height) { imgMaskData.imgStr->getLine(); @@ -2933,7 +2929,7 @@ if (!std::isfinite(ctm[i])) return; } - beginTransparencyGroup(state, bbox, NULL, gFalse, gFalse, gFalse); + beginTransparencyGroup(state, bbox, nullptr, gFalse, gFalse, gFalse); baseMatrix[4] -= transpGroupStack->tx; baseMatrix[5] -= transpGroupStack->ty; @@ -2957,7 +2953,7 @@ maskSplash->clear(maskColor); maskColor[0] = 0xff; maskSplash->setFillPattern(new SplashSolidColor(maskColor)); - maskSplash->fillImageMask(&imageMaskSrc, &imgMaskData, width, height, mat, t3GlyphStack != NULL); + maskSplash->fillImageMask(&imageMaskSrc, &imgMaskData, width, height, mat, t3GlyphStack != nullptr); delete maskSplash; delete imgMaskData.imgStr; str->close(); @@ -2969,7 +2965,7 @@ /* transfer mask to alpha channel! */ // memcpy(maskBitmap->getAlphaPtr(), maskBitmap->getDataPtr(), bitmap->getRowSize() * bitmap->getHeight()); // memset(maskBitmap->getDataPtr(), 0, bitmap->getRowSize() * bitmap->getHeight()); - if (transpGroupStack->softmask != NULL) { + if (transpGroupStack->softmask != nullptr) { Guchar *dest = bitmap->getAlphaPtr(); Guchar *src = transpGroupStack->softmask->getDataPtr(); for (int c= 0; c < transpGroupStack->softmask->getRowSize() * transpGroupStack->softmask->getHeight(); c++) { @@ -2976,7 +2972,7 @@ dest[c] = src[c]; } delete transpGroupStack->softmask; - transpGroupStack->softmask = NULL; + transpGroupStack->softmask = nullptr; } endTransparencyGroup(state); baseMatrix[4] += transpGroupStack->tx; @@ -3005,13 +3001,13 @@ switch (imgData->colorMode) { case splashModeMono1: case splashModeMono8: - if (colorSpace->getAlt() != NULL && colorSpace->getAlt()->getMode() == csDeviceGray) + if (colorSpace->getAlt() != nullptr && colorSpace->getAlt()->getMode() == csDeviceGray) return gTrue; break; case splashModeXBGR8: case splashModeRGB8: case splashModeBGR8: - if (colorSpace->getAlt() != NULL && colorSpace->getAlt()->getMode() == csDeviceRGB) + if (colorSpace->getAlt() != nullptr && colorSpace->getAlt()->getMode() == csDeviceRGB) return gTrue; break; #ifdef SPLASH_CMYK @@ -3175,7 +3171,7 @@ } } - if (imgData->maskStr != NULL && (p = imgData->maskStr->getLine()) != NULL) { + if (imgData->maskStr != nullptr && (p = imgData->maskStr->getLine()) != nullptr) { int destComps = splashColorModeNComps[imgData->colorMode]; int convComps = (imgData->colorMode == splashModeXBGR8) ? 3 : destComps; imgData->maskColorMap->getGrayLine(p, p, imgData->width); @@ -3238,7 +3234,7 @@ int nComps = imgData->colorMap->getNumPixelComps(); Guchar *colorLine = (Guchar *) gmalloc(nComps * bitmap->getWidth()); - Guchar *rgbxLine = (imgData->colorMode == splashModeXBGR8) ? (Guchar *) gmalloc(3 * bitmap->getWidth()) : NULL; + Guchar *rgbxLine = (imgData->colorMode == splashModeXBGR8) ? (Guchar *) gmalloc(3 * bitmap->getWidth()) : nullptr; for (int i = 0; i < bitmap->getHeight(); i++) { Guchar *p = bitmap->getDataPtr() + i * bitmap->getRowSize(); switch (imgData->colorMode) { @@ -3278,7 +3274,7 @@ } } gfree(colorLine); - if (rgbxLine != NULL) + if (rgbxLine != nullptr) gfree(rgbxLine); } #endif @@ -3435,7 +3431,7 @@ } } } - if (alphaLine != NULL) { + if (alphaLine != nullptr) { SplashColorPtr aq = alphaLine; SplashColorPtr p; const int n = imgData->bitmap->getWidth() - 1; @@ -3467,7 +3463,7 @@ dest += splashColorModeNComps[imgData->colorMode]; } } - if (alphaLine != NULL) { + if (alphaLine != nullptr) { const int y = (imgData->y == imgData->bitmap->getHeight() - 1 && imgData->y > 50) ? imgData->y - 1 : imgData->y; SplashColorPtr aq = alphaLine; SplashColorPtr p; @@ -3525,13 +3521,13 @@ imgData.colorMode = colorMode; imgData.width = width; imgData.height = height; - imgData.maskStr = NULL; - imgData.maskColorMap = NULL; + imgData.maskStr = nullptr; + imgData.maskColorMap = nullptr; imgData.y = 0; // special case for one-channel (monochrome/gray/separation) images: // build a lookup table here - imgData.lookup = NULL; + imgData.lookup = nullptr; if (colorMap->getNumPixelComps() == 1) { n = 1 << colorMap->getBits(); switch (colorMode) { @@ -3606,7 +3602,7 @@ state->getOverprintMode(), NULL, grayIndexed); #else setOverprintMask(colorMap->getColorSpace(), state->getFillOverprint(), - state->getOverprintMode(), NULL); + state->getOverprintMode(), nullptr); #endif if (colorMode == splashModeMono1) { @@ -3616,7 +3612,7 @@ } #ifdef USE_CMS @@ Diff output truncated at 1234567 characters. @@