texlive[47480] Build/source/libs: poppler 0.64.0

commits+kakuto at tug.org commits+kakuto at tug.org
Sun Apr 29 02:37:14 CEST 2018


Revision: 47480
          http://tug.org/svn/texlive?view=revision&revision=47480
Author:   kakuto
Date:     2018-04-29 02:37:13 +0200 (Sun, 29 Apr 2018)
Log Message:
-----------
poppler 0.64.0

Modified Paths:
--------------
    trunk/Build/source/libs/README
    trunk/Build/source/libs/poppler/ChangeLog
    trunk/Build/source/libs/poppler/TLpatches/ChangeLog
    trunk/Build/source/libs/poppler/TLpatches/TL-Changes
    trunk/Build/source/libs/poppler/TLpatches/patch-03-time
    trunk/Build/source/libs/poppler/configure
    trunk/Build/source/libs/poppler/poppler-src/CMakeLists.txt
    trunk/Build/source/libs/poppler/poppler-src/ChangeLog
    trunk/Build/source/libs/poppler/poppler-src/NEWS
    trunk/Build/source/libs/poppler/poppler-src/goo/GooHash.cc
    trunk/Build/source/libs/poppler/poppler-src/goo/GooHash.h
    trunk/Build/source/libs/poppler/poppler-src/goo/GooList.cc
    trunk/Build/source/libs/poppler/poppler-src/goo/GooList.h
    trunk/Build/source/libs/poppler/poppler-src/goo/GooString.cc
    trunk/Build/source/libs/poppler/poppler-src/goo/GooString.h
    trunk/Build/source/libs/poppler/poppler-src/goo/gfile.cc
    trunk/Build/source/libs/poppler/poppler-src/goo/gfile.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/Annot.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/Annot.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/CMap.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/CMap.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/CairoOutputDev.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/CairoOutputDev.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/Catalog.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/Catalog.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/CharCodeToUnicode.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/CharCodeToUnicode.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/DateInfo.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/DateInfo.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/FileSpec.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/FileSpec.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/FontInfo.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/Form.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/Form.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/Function.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/Gfx.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/Gfx.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/GfxFont.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/GfxFont.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/GfxState.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/GlobalParams.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/GlobalParamsWin.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/JPEG2000Stream.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/Link.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/Link.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/MarkedContentOutputDev.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/MarkedContentOutputDev.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/Movie.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/Movie.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/Object.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/OptionalContent.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/OptionalContent.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/Outline.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/Outline.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/OutputDev.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/OutputDev.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/PDFDoc.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/PDFDoc.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/PDFDocEncoding.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/PSOutputDev.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/PSOutputDev.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/Page.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/Parser.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/Rendition.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/Rendition.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/Sound.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/Sound.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/SplashOutputDev.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/SplashOutputDev.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/Stream.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/Stream.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/StructElement.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/TextOutputDev.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/TextOutputDev.h
    trunk/Build/source/libs/poppler/poppler-src/poppler/UTF.cc
    trunk/Build/source/libs/poppler/poppler-src/poppler/UTF.h
    trunk/Build/source/libs/poppler/version.ac

Removed Paths:
-------------
    trunk/Build/source/libs/poppler/TLpatches/patch-05-w32

Modified: trunk/Build/source/libs/README
===================================================================
--- trunk/Build/source/libs/README	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/README	2018-04-29 00:37:13 UTC (rev 47480)
@@ -49,7 +49,7 @@
 pixman 0.34.0 - checked 04feb16
   http://cairographics.org/releases/
 
-poppler 0.63.0 - checked 18mar18
+poppler 0.64.0 - checked 29apr18
   http://poppler.freedesktop.org/ - used by luatex and xetex
   (requires C++11)
 

Modified: trunk/Build/source/libs/poppler/ChangeLog
===================================================================
--- trunk/Build/source/libs/poppler/ChangeLog	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/ChangeLog	2018-04-29 00:37:13 UTC (rev 47480)
@@ -1,3 +1,8 @@
+2018-04-29  Akira Kakuto  <kakuto at fuk.kindai.ac.jp>
+
+	Import poppler-0.64.0.
+	* version.ac: Adjust.
+
 2018-03-18  Akira Kakuto  <kakuto at fuk.kindai.ac.jp>
 
 	Import poppler-0.63.0.

Modified: trunk/Build/source/libs/poppler/TLpatches/ChangeLog
===================================================================
--- trunk/Build/source/libs/poppler/TLpatches/ChangeLog	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/TLpatches/ChangeLog	2018-04-29 00:37:13 UTC (rev 47480)
@@ -1,3 +1,8 @@
+2018-04-29  Akira Kakuto  <kakuto at fuk.kindai.ac.jp>
+
+	* patch-03-time: Adapted.
+	* patch-05-w32: Removed.
+
 2018-04-01  Mojca Miklavec <mojca.miklavec.lists at gmail.com>
 
 	* patch-03-time: Adapted.

Modified: trunk/Build/source/libs/poppler/TLpatches/TL-Changes
===================================================================
--- trunk/Build/source/libs/poppler/TLpatches/TL-Changes	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/TLpatches/TL-Changes	2018-04-29 00:37:13 UTC (rev 47480)
@@ -1,4 +1,4 @@
-Changes applied to the poppler-0.63.0 tree as obtained from:
+Changes applied to the poppler-0.64.0 tree as obtained from:
 	http://poppler.freedesktop.org/
 
 Removed unused dirs:
@@ -11,7 +11,7 @@
 update version.ac
 mv poppler-src poppler-prev
 tar xf poppler-*.tar.gz
-mv poppler-0.62.0 poppler-src
+mv poppler-0.64.0 poppler-src
 cd poppler-src
 svn status >/tmp/s
 svn add # the ? lines

Modified: trunk/Build/source/libs/poppler/TLpatches/patch-03-time
===================================================================
--- trunk/Build/source/libs/poppler/TLpatches/patch-03-time	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/TLpatches/patch-03-time	2018-04-29 00:37:13 UTC (rev 47480)
@@ -1,39 +1,7 @@
-https://bugs.freedesktop.org/show_bug.cgi?id=105766
-
-diff -ur poppler-0.63.0/goo/gfile.cc poppler-src/goo/gfile.cc
---- poppler-0.63.0/goo/gfile.cc
-+++ poppler-src/goo/gfile.cc
-@@ -34,9 +34,7 @@
- 
- #include <config.h>
- 
--#ifdef _WIN32
--#  include <time.h>
--#else
-+#ifndef _WIN32
- #  if defined(MACOS)
- #    include <sys/stat.h>
- #  elif !defined(ACORN)
-@@ -44,7 +42,6 @@
- #    include <sys/stat.h>
- #    include <fcntl.h>
- #  endif
--#  include <time.h>
- #  include <limits.h>
- #  include <string.h>
- #  if !defined(VMS) && !defined(ACORN) && !defined(MACOS)
-diff -ur poppler-0.63.0/goo/gfile.h poppler-src/goo/gfile.h
---- poppler-0.63.0/goo/gfile.h
-+++ poppler-src/goo/gfile.h
-@@ -37,6 +37,7 @@
- #include <stdio.h>
- #include <stdlib.h>
- #include <stddef.h>
-+#include <time.h>
- extern "C" {
- #if defined(_WIN32)
- #  include <sys/stat.h>
-@@ -49,8 +50,6 @@
+diff -ur poppler-0.64.0/goo/gfile.h poppler-src/goo/gfile.h
+--- poppler-0.64.0/goo/gfile.h	Wed Apr 18 03:04:26 2018
++++ poppler-src/goo/gfile.h	Thu Apr 26 11:27:12 2018
+@@ -51,8 +51,6 @@
  #    include <windows.h>
  #  endif
  #elif defined(ACORN)
@@ -42,10 +10,10 @@
  #else
  #  include <unistd.h>
  #  include <sys/types.h>
-diff -ur poppler-0.63.0/poppler/Form.h poppler-src/poppler/Form.h
---- poppler-0.63.0/poppler/Form.h
-+++ poppler-src/poppler/Form.h
-@@ -33,6 +33,7 @@
+diff -ur poppler-0.64.0/poppler/Form.h poppler-src/poppler/Form.h
+--- poppler-0.64.0/poppler/Form.h	Wed Apr 18 03:04:26 2018
++++ poppler-src/poppler/Form.h	Wed Apr 25 18:40:18 2018
+@@ -36,6 +36,7 @@
  
  #include <set>
  #include <vector>

Deleted: trunk/Build/source/libs/poppler/TLpatches/patch-05-w32
===================================================================
--- trunk/Build/source/libs/poppler/TLpatches/patch-05-w32	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/TLpatches/patch-05-w32	2018-04-29 00:37:13 UTC (rev 47480)
@@ -1,22 +0,0 @@
-$ 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: trunk/Build/source/libs/poppler/configure
===================================================================
--- trunk/Build/source/libs/poppler/configure	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/configure	2018-04-29 00:37:13 UTC (rev 47480)
@@ -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.63.0.
+# Generated by GNU Autoconf 2.69 for poppler (TeX Live) 0.64.0.
 #
 # Report bugs to <tex-k at tug.org>.
 #
@@ -580,8 +580,8 @@
 # Identity of this package.
 PACKAGE_NAME='poppler (TeX Live)'
 PACKAGE_TARNAME='poppler--tex-live-'
-PACKAGE_VERSION='0.63.0'
-PACKAGE_STRING='poppler (TeX Live) 0.63.0'
+PACKAGE_VERSION='0.64.0'
+PACKAGE_STRING='poppler (TeX Live) 0.64.0'
 PACKAGE_BUGREPORT='tex-k at tug.org'
 PACKAGE_URL=''
 
@@ -1307,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.63.0 to adapt to many kinds of systems.
+\`configure' configures poppler (TeX Live) 0.64.0 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1374,7 +1374,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of poppler (TeX Live) 0.63.0:";;
+     short | recursive ) echo "Configuration of poppler (TeX Live) 0.64.0:";;
    esac
   cat <<\_ACEOF
 
@@ -1487,7 +1487,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-poppler (TeX Live) configure 0.63.0
+poppler (TeX Live) configure 0.64.0
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2134,7 +2134,7 @@
 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.63.0, which was
+It was created by poppler (TeX Live) $as_me 0.64.0, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -4057,7 +4057,7 @@
 
 # Define the identity of the package.
  PACKAGE='poppler--tex-live-'
- VERSION='0.63.0'
+ VERSION='0.64.0'
 
 
 # Some tools Automake needs.
@@ -7647,7 +7647,7 @@
 
 
 cat >>confdefs.h <<_ACEOF
-#define POPPLER_VERSION "0.63.0"
+#define POPPLER_VERSION "0.64.0"
 _ACEOF
 
 
@@ -8341,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.63.0, which was
+This file was extended by poppler (TeX Live) $as_me 0.64.0, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -8407,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.63.0
+poppler (TeX Live) config.status 0.64.0
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 

Modified: trunk/Build/source/libs/poppler/poppler-src/CMakeLists.txt
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/CMakeLists.txt	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/CMakeLists.txt	2018-04-29 00:37:13 UTC (rev 47480)
@@ -30,7 +30,7 @@
 endif()
 
 set(POPPLER_MAJOR_VERSION "0")
-set(POPPLER_MINOR_VERSION "63")
+set(POPPLER_MINOR_VERSION "64")
 set(POPPLER_MICRO_VERSION "0")
 set(POPPLER_VERSION "${POPPLER_MAJOR_VERSION}.${POPPLER_MINOR_VERSION}.${POPPLER_MICRO_VERSION}")
 
@@ -46,6 +46,7 @@
 option(ENABLE_UTILS "Compile poppler command line utils." ON)
 option(ENABLE_CPP "Compile poppler cpp wrapper." ON)
 option(ENABLE_GLIB "Compile poppler glib wrapper." ON)
+option(ENABLE_GOBJECT_INTROSPECTION "Whether to generate GObject introspection." ON)
 option(ENABLE_GTK_DOC "Whether to generate glib API documentation." OFF)
 option(ENABLE_QT5 "Compile poppler qt5 wrapper." ON)
 set(ENABLE_LIBOPENJPEG "openjpeg2" CACHE STRING "Use libopenjpeg for JPX streams. Possible values: openjpeg2, unmaintained, none. 'unmaintained' gives you the internal unmaintained decoder. Use at your own risk. 'none' compiles no JPX decoder at all. Default: openjpeg2")
@@ -88,10 +89,13 @@
 
 if(WIN32)
   set(_default_fontconfiguration "win32")
+elseif(ANDROID)
+  # on android we don't have fontconfig and we don't want window-specific code
+  set(_default_fontconfiguration "generic")
 else()
   set(_default_fontconfiguration "fontconfig")
 endif()
-set(FONT_CONFIGURATION "${_default_fontconfiguration}" CACHE STRING "The font configuration backend (win32|fontconfig).")
+set(FONT_CONFIGURATION "${_default_fontconfiguration}" CACHE STRING "The font configuration backend (win32|generic|fontconfig).")
 string(TOLOWER "${FONT_CONFIGURATION}" font_configuration)
 set(WITH_FONTCONFIGURATION_WIN32 OFF)
 set(WITH_FONTCONFIGURATION_FONTCONFIG OFF)
@@ -99,6 +103,8 @@
   set(WITH_FONTCONFIGURATION_WIN32 ON)
 elseif(font_configuration STREQUAL "fontconfig")
   set(WITH_FONTCONFIGURATION_FONTCONFIG ON)
+elseif(font_configuration STREQUAL "generic")
+  message(STATUS "no fontconfig or win32 specific code")
 else()
   message(FATAL_ERROR "Invalid font configuration setting: ${FONT_CONFIGURATION}")
 endif()
@@ -167,9 +173,11 @@
     endif()
   endif()
   if(ENABLE_GLIB)
-    # Check for introspection
-    macro_optional_find_package(GObjectIntrospection 0.9.12)
-    set(HAVE_INTROSPECTION ${INTROSPECTION_FOUND})
+    if(ENABLE_GOBJECT_INTROSPECTION)
+      # Check for introspection
+      macro_optional_find_package(GObjectIntrospection 0.9.12)
+      set(HAVE_INTROSPECTION ${INTROSPECTION_FOUND})
+    endif()
     set(POPPLER_GLIB_DISABLE_DEPRECATED "${POPPLER_GLIB_DISABLE_DEPRECATED} -DG_DISABLE_DEPRECATED")
     set(POPPLER_GLIB_DISABLE_SINGLE_INCLUDES "${POPPLER_GLIB_DISABLE_SINGLE_INCLUDES} -DG_DISABLE_SINGLE_INCLUDES")
     macro_optional_find_package(GTK)
@@ -483,7 +491,7 @@
 else()
 add_library(poppler ${poppler_SRCS})
 endif()
-set_target_properties(poppler PROPERTIES VERSION 74.0.0 SOVERSION 74)
+set_target_properties(poppler PROPERTIES VERSION 75.0.0 SOVERSION 75)
 if(MINGW)
     get_target_property(POPPLER_SOVERSION poppler SOVERSION)
     set_target_properties(poppler PROPERTIES SUFFIX "-${POPPLER_SOVERSION}${CMAKE_SHARED_LIBRARY_SUFFIX}")

Modified: trunk/Build/source/libs/poppler/poppler-src/ChangeLog
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/ChangeLog	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/ChangeLog	2018-04-29 00:37:13 UTC (rev 47480)
@@ -1,3 +1,930 @@
+commit 4d851d16aa6a2a9f00b60091a2ef810be1a571ea
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Tue Apr 17 20:04:26 2018 +0200
+
+    poppler 0.64.0
+
+ CMakeLists.txt         |  4 ++--
+ NEWS                   | 33 +++++++++++++++++++++++++++++++++
+ cpp/Doxyfile           |  2 +-
+ qt5/src/CMakeLists.txt |  2 +-
+ qt5/src/Doxyfile       |  2 +-
+ 5 files changed, 38 insertions(+), 5 deletions(-)
+
+commit 1dcf335a8e212fdfd18bad1f56a743504f653cf5
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Tue Apr 17 16:21:33 2018 +0200
+
+    qt5: Don't need this friend declaration
+
+ qt5/src/poppler-link.h | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit 281d5cbd33521c823f1602f3d0c1e2ad9a4ab1d2
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Fri Apr 6 15:34:57 2018 +0200
+
+    Object::getName return const char instead of char
+
+ poppler/Form.cc                   |  2 +-
+ poppler/Form.h                    |  2 +-
+ poppler/Gfx.cc                    | 20 ++++++++++----------
+ poppler/Gfx.h                     | 14 +++++++-------
+ poppler/GfxFont.cc                |  4 ++--
+ poppler/Link.cc                   |  6 +++---
+ poppler/Link.h                    |  2 +-
+ poppler/MarkedContentOutputDev.cc |  2 +-
+ poppler/MarkedContentOutputDev.h  |  2 +-
+ poppler/Movie.cc                  |  2 +-
+ poppler/Object.h                  |  2 +-
+ poppler/OutputDev.cc              |  6 +++---
+ poppler/OutputDev.h               |  6 +++---
+ poppler/Rendition.cc              |  2 +-
+ poppler/Stream.cc                 |  2 +-
+ poppler/Stream.h                  |  2 +-
+ 16 files changed, 38 insertions(+), 38 deletions(-)
+
+commit 8fe1a5b96e5ad7dac60dd0f198b3c8b18fb3c5bb
+Author: Andre Heinecke <aheinecke at intevation.de>
+Date:   Tue Apr 17 10:02:40 2018 +0200
+
+    Fix parsing of focus out actions
+
+    The key is uppercase B with lowercase L. Not I.
+
+ poppler/Annot.cc | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit 3636ccbaece6706ef86dfab9303c3f164e68ffe2
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Tue Apr 17 10:57:06 2018 +0200
+
+    pdfsig: Don't use fixed buffer size for path
+
+ utils/pdfsig.cc | 19 +++++++++++++------
+ 1 file changed, 13 insertions(+), 6 deletions(-)
+
+commit 17c7e3b0e1801a8643712013eb3b106c802e0faa
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Tue Apr 17 11:02:29 2018 +0200
+
+    utils: Move numberOfCharacters to shared file
+
+ utils/numberofcharacters.h | 26 ++++++++++++++++++++++++++
+ utils/pdftocairo.cc        | 13 +------------
+ utils/pdftoppm.cc          | 13 +------------
+ 3 files changed, 28 insertions(+), 24 deletions(-)
+
+commit 73ab9930810ae83998467ec859f3ee3984548cbd
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Tue Apr 17 10:46:46 2018 +0200
+
+    pdfsig: Add -dump to manpage
+
+ utils/pdfsig.1 | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit bdece3bb0c115576d23e76dc29ee43f04aafdee0
+Author: Chinmoy Ranjan Pradhan <chinmoyrp65 at protonmail.com>
+Date:   Tue Apr 17 10:45:15 2018 +0200
+
+    pdfsig: Add -dump which writes signatures to disk
+
+    Bug #104881
+
+ poppler/Form.cc |  8 +++++++-
+ poppler/Form.h  |  7 +++++--
+ utils/pdfsig.cc | 33 +++++++++++++++++++++++++++++++--
+ 3 files changed, 43 insertions(+), 5 deletions(-)
+
+commit 97aa11bf135421c1f87f2a46e2f597626f503f10
+Author: Oliver Sander <oliver.sander at tu-dresden.de>
+Date:   Fri Mar 23 22:04:11 2018 +0100
+
+    Document method drawImageMask
+
+ poppler/OutputDev.h | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+commit ae4349620863a42ae569f1ce05461bb27340c4ea
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Mon Apr 16 22:49:54 2018 +0200
+
+    Make the second parseAction variant private
+
+ poppler/Link.h | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 444d9d8de5d4f8d627084405e1583b6d6d3900c7
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Mon Apr 16 22:28:18 2018 +0200
+
+    Simplify LinkAction::parseAction a bit
+
+    After the discussion on the mailing list, also using unique_ptr was
+    wrong
+
+ poppler/Link.cc | 22 +++++++++++-----------
+ poppler/Link.h  |  5 +++--
+ 2 files changed, 14 insertions(+), 13 deletions(-)
+
+commit 88c99f1f6f4faf31faabccd35d9d094958020ebc
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Mon Apr 16 17:59:35 2018 +0200
+
+    Fix crash on malformed documents
+
+    In GfxGouraudTriangleShading::parse
+
+    Bug #106061
+
+ poppler/GfxState.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit df8a4ee51e18a39f85568c4122e5edd8c03d61df
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Mon Apr 16 17:46:10 2018 +0200
+
+    Make it so we copy seenNextActions a bit less
+
+ poppler/Link.cc | 20 +++++++++++---------
+ poppler/Link.h  |  3 ++-
+ 2 files changed, 13 insertions(+), 10 deletions(-)
+
+commit bd9fb431941916174e1c3b2201bf5f422bcf61bd
+Author: Aleix Pol <aleixpol at kde.org>
+Date:   Mon Apr 16 16:38:09 2018 +0200
+
+    Make it possible to build poppler on Android without fontconfig
+
+    Didn't manage to make fontconfig build, still nice to have poppler
+    available.
+
+ CMakeLists.txt | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+commit 34a44e5b95230b1ed03bb030e9963d0187b01951
+Author: Aleix Pol <aleixpol at kde.org>
+Date:   Mon Apr 16 16:35:47 2018 +0200
+
+    Do not assume that iconv is in /usr/include
+
+    We find it explicitly because it may be elsewhere.
+
+ cpp/CMakeLists.txt | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit bdd8db389c7b09cd9042267f36214f809e4c5f60
+Author: Andre Heinecke <aheinecke at intevation.de>
+Date:   Mon Apr 16 17:13:05 2018 +0200
+
+    Add support for Next actions following an action
+
+    Next actions are action dictionaries or an array
+    of action dictonaries. "Next" is an entry in the
+    general action dictionary.
+
+    These actions are supposed to be performed after each other.
+    So that a single button press can for example
+    both trigger a Hide action and a JavaScript action.
+
+ poppler/Link.cc                | 72
+ +++++++++++++++++++++++++++++++++++++++++-
+ poppler/Link.h                 | 18 +++++++++--
+ qt5/src/poppler-link-private.h |  9 ++++++
+ qt5/src/poppler-link.cc        |  7 +++-
+ qt5/src/poppler-link.h         | 11 ++++++-
+ qt5/src/poppler-page.cc        | 14 ++++++++
+ 6 files changed, 125 insertions(+), 6 deletions(-)
+
+commit ab72205dd14efe9c5c8d12e6b1ae538208bce168
+Author: Andre Heinecke <aheinecke at intevation.de>
+Date:   Mon Apr 16 16:31:38 2018 +0200
+
+    Add support for hide action
+
+    The hide action can be used to show / hide fields.
+
+ poppler/Link.cc                | 29 +++++++++++++++++++++++++++++
+ poppler/Link.h                 | 35 +++++++++++++++++++++++++++++++++++
+ qt5/src/poppler-annotation.cc  |  6 ++++++
+ qt5/src/poppler-link-private.h | 17 +++++++++++++++++
+ qt5/src/poppler-link.cc        | 28 ++++++++++++++++++++++++++++
+ qt5/src/poppler-link.h         | 39
+ ++++++++++++++++++++++++++++++++++++++-
+ qt5/src/poppler-page.cc        | 11 +++++++++++
+ 7 files changed, 164 insertions(+), 1 deletion(-)
+
+commit 022ccd4e1c61f4e89c7ffad83d9a5a896f65dc40
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Mon Apr 16 16:22:55 2018 +0200
+
+    GfxGouraudTriangleShading::parse: Fix memory leak on malformed files
+
+    Bug #106059
+
+ poppler/GfxState.cc | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit 776257d0c20d4e3ae8d66683ab0f087bf6fc7b0f
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Wed Apr 11 00:44:41 2018 +0200
+
+    Fix leaks in GfxPatchMeshShading::parse with malformed documents
+
+    Bug #105969
+
+ poppler/GfxState.cc | 11 ++++++++---
+ 1 file changed, 8 insertions(+), 3 deletions(-)
+
+commit d80e7aac3366f93865581a783751abb528c120b3
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Wed Apr 11 00:32:35 2018 +0200
+
+    Make GfxGouraudTriangleShading::parse more accepting of malformed
+    documents
+
+    Bug #105972
+
+ poppler/GfxState.cc | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+commit fee13e935e4c9eaadff434436eaceeb13afcfc13
+Author: Oliver Sander <oliver.sander at tu-dresden.de>
+Date:   Fri Mar 23 22:24:42 2018 +0100
+
+    Implement Type3 font support for ArthurOutputDev
+
+ qt5/src/ArthurOutputDev.cc | 177
+ ++++++++++++++++++++++++++++++++++++++++-----
+ qt5/src/ArthurOutputDev.h  |  16 ++--
+ qt5/src/poppler-page.cc    |   4 +-
+ 3 files changed, 170 insertions(+), 27 deletions(-)
+
+commit 79c588912f41aa6ee81ea058e7e649199a252f90
+Author: Oliver Sander <oliver.sander at tu-dresden.de>
+Date:   Sun Mar 25 21:38:27 2018 +0200
+
+    Do not make ArthurOutputDev::startPage fill the page with white
+
+ qt5/src/ArthurOutputDev.cc | 13 +------------
+ 1 file changed, 1 insertion(+), 12 deletions(-)
+
+commit 8c8c0034ae88c06616ace5e5ead71318f04311cf
+Author: Oliver Sander <oliver.sander at tu-dresden.de>
+Date:   Sat Apr 7 23:45:50 2018 +0200
+
+    Implement ArthurOutputDev::drawImageMask
+
+    Bug #105531
+
+    Also temporarily disable type3 fonts since it seems they're not
+    properly
+    supported
+
+ qt5/src/ArthurOutputDev.cc | 91
+ +++++++++++++++-------------------------------
+ qt5/src/ArthurOutputDev.h  |  2 +-
+ 2 files changed, 30 insertions(+), 63 deletions(-)
+
+commit 3e0408966ccdd713de7795ce7992888b3896b49c
+Author: Andre Heinecke <aheinecke at intevation.de>
+Date:   Thu Mar 22 14:53:19 2018 +0100
+
+    Qt5: Allow setting of visibility
+
+    Extends Qt5 API to allow setting visibility flags
+
+ qt5/src/poppler-form.cc | 11 +++++++++++
+ qt5/src/poppler-form.h  |  6 ++++++
+ 2 files changed, 17 insertions(+)
+
+commit b4127fb1c45fe5dcabe3751f0b40029405224f49
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Fri Apr 6 23:08:15 2018 +0200
+
+    Add some more const
+
+    const is always good :)
+
+ cpp/poppler-embedded-file.cpp   |  13 ++--
+ cpp/poppler-private.cpp         |   4 +-
+ cpp/poppler-private.h           |   3 +-
+ cpp/poppler-toc-private.h       |   4 +-
+ cpp/poppler-toc.cpp             |   9 +--
+ glib/poppler-action.cc          |  50 +++++++--------
+ glib/poppler-document.cc        |   8 +--
+ glib/poppler-layer.cc           |   2 +-
+ glib/poppler-media.cc           |   4 +-
+ glib/poppler-movie.cc           |   2 +-
+ glib/poppler-private.h          |   6 +-
+ goo/GooList.cc                  |  16 ++++-
+ goo/GooList.h                   |   8 +--
+ poppler/FileSpec.cc             |  10 +--
+ poppler/FileSpec.h              |  26 ++++----
+ poppler/Function.h              |   2 +-
+ poppler/Link.cc                 |  26 ++++----
+ poppler/Link.h                  | 138
+ ++++++++++++++++++++--------------------
+ poppler/Movie.cc                |  12 ++--
+ poppler/Movie.h                 |  26 ++++----
+ poppler/OptionalContent.cc      |   8 +--
+ poppler/OptionalContent.h       |  14 ++--
+ poppler/Outline.cc              |  10 +--
+ poppler/Outline.h               |  20 +++---
+ poppler/Rendition.cc            |   4 +-
+ poppler/Rendition.h             |  18 +++---
+ poppler/Sound.cc                |   6 +-
+ poppler/Sound.h                 |  18 +++---
+ qt5/src/poppler-document.cc     |   4 +-
+ qt5/src/poppler-embeddedfile.cc |  10 +--
+ qt5/src/poppler-link.cc         |   4 +-
+ qt5/src/poppler-media.cc        |   2 +-
+ qt5/src/poppler-movie.cc        |   4 +-
+ qt5/src/poppler-optcontent.cc   |   4 +-
+ qt5/src/poppler-private.cc      |  24 +++----
+ qt5/src/poppler-private.h       |   8 +--
+ qt5/src/poppler-sound.cc        |   2 +-
+ utils/HtmlFonts.cc              |   4 +-
+ utils/HtmlFonts.h               |   2 +-
+ utils/HtmlOutputDev.cc          |  12 ++--
+ utils/HtmlOutputDev.h           |   4 +-
+ utils/pdfdetach.cc              |   2 +-
+ 42 files changed, 285 insertions(+), 268 deletions(-)
+
+commit a8e93f46df9feb7f7241826307af51befdb25d9e
+Author: Albert Astals Cid <albert.astals.cid at kdab.com>
+Date:   Fri Apr 6 09:02:28 2018 +0200
+
+    Make Object return const GooString pointer
+
+    This helps making sure noone is changing strings that belong to
+    objects without us realizing.
+
+    In fact noone was doing except an ifdef for windows, fixed it to
+    not modify the dict contents anymore
+
+ glib/poppler-action.cc             | 2 +-
+ poppler/Annot.cc                   | 6 +++---
+ poppler/FileSpec.cc                | 4 +++-
+ poppler/Form.cc                    | 6 +++---
+ poppler/GfxFont.cc                 | 4 ++--
+ poppler/GfxState.cc                | 3 ++-
+ poppler/Link.cc                    | 3 ++-
+ poppler/Object.h                   | 3 ++-
+ poppler/Outline.cc                 | 3 ++-
+ poppler/PDFDoc.cc                  | 3 ++-
+ poppler/Parser.cc                  | 4 +++-
+ poppler/Stream.cc                  | 2 +-
+ poppler/StructElement.cc           | 3 ++-
+ qt5/src/poppler-document.cc        | 6 +++---
+ qt5/src/poppler-embeddedfile.cc    | 5 +++--
+ qt5/src/poppler-optcontent.cc      | 3 ++-
+ qt5/src/poppler-qt5.h              | 2 +-
+ qt5/tests/check_dateConversion.cpp | 4 ++--
+ test/pdf-fullrewrite.cc            | 4 ++--
+ utils/pdfinfo.cc                   | 7 ++++---
+ utils/pdftohtml.cc                 | 5 +++--
+ utils/pdftotext.cc                 | 5 +++--
+ utils/pdfunite.cc                  | 5 +++--
+ 23 files changed, 54 insertions(+), 38 deletions(-)
+
+commit 07180b86786cce95df4e2433a7cf3e006749a0f5
+Author: Albert Astals Cid <albert.astals.cid at kdab.com>
+Date:   Fri Apr 6 13:03:16 2018 +0200
+
+    Gfx: Make two functions take const GooString *
+
+ poppler/Gfx.cc | 8 ++++----
+ poppler/Gfx.h  | 4 ++--
+ 2 files changed, 6 insertions(+), 6 deletions(-)
+
+commit c4af5981ab2a5f42a9a1194bb5929c2151fc2674
+Author: Albert Astals Cid <albert.astals.cid at kdab.com>
+Date:   Fri Apr 6 13:00:12 2018 +0200
+
+    OutputDev: change functions taking GooString * to make it const
+
+    People that use poppler core, beware of the signature change!
+
+ poppler/CairoOutputDev.cc | 5 +++--
+ poppler/CairoOutputDev.h  | 5 +++--
+ poppler/OutputDev.h       | 7 ++++---
+ poppler/PSOutputDev.cc    | 4 ++--
+ poppler/PSOutputDev.h     | 2 +-
+ poppler/TextOutputDev.cc  | 7 ++++---
+ poppler/TextOutputDev.h   | 7 ++++---
+ utils/HtmlOutputDev.cc    | 5 +++--
+ utils/HtmlOutputDev.h     | 5 +++--
+ 9 files changed, 27 insertions(+), 20 deletions(-)
+
+commit 5fc6d9fcb41966b85dc67117531c81ec89f42f20
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Fri Apr 6 12:50:18 2018 +0200
+
+    PageAttrs and Page getLastModified return const GooString *
+
+ poppler/Page.h | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit a801b46e1e792b5d0a34f97de870c485e0ef312a
+Author: Albert Astals Cid <albert.astals.cid at kdab.com>
+Date:   Fri Apr 6 12:48:18 2018 +0200
+
+    PSOuputDev writePSString and writePSTextLine take const
+
+ poppler/PSOutputDev.cc | 4 ++--
+ poppler/PSOutputDev.h  | 4 ++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+commit eb6de58de5ef8c2ddeeed386e0b8b498b945797f
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Fri Apr 6 12:47:12 2018 +0200
+
+    PDFDoc::writeString take const GooString pointer
+
+ poppler/PDFDoc.cc | 2 +-
+ poppler/PDFDoc.h  | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+commit 853b2251d4e11f14cd891bf1b6095ee36683d161
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Fri Apr 6 12:46:06 2018 +0200
+
+    OCDisplayNode take const GooString pointer
+
+ poppler/OptionalContent.cc | 4 ++--
+ poppler/OptionalContent.h  | 2 +-
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+commit 0a8311929ba599d7b0a35e83b1f5dec4a3c9da06
+Author: Albert Astals Cid <albert.astals.cid at kdab.com>
+Date:   Fri Apr 6 12:44:43 2018 +0200
+
+    GfxFont::getNextChar take const char pointer
+
+ poppler/GfxFont.cc | 4 ++--
+ poppler/GfxFont.h  | 6 +++---
+ 2 files changed, 5 insertions(+), 5 deletions(-)
+
+commit 0e35441513bdce2471113b937bccb8928c7c9d9f
+Author: Albert Astals Cid <albert.astals.cid at kdab.com>
+Date:   Fri Apr 6 12:42:29 2018 +0200
+
+    FormFieldText::tokenizeDA take const GooString
+
+ poppler/Form.cc | 2 +-
+ poppler/Form.h  | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+commit ba91b95f6e504cce08825e83a567a554ac846e39
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Fri Apr 6 12:41:44 2018 +0200
+
+    dateStringToTime take const GooString
+
+ poppler/DateInfo.cc | 4 ++--
+ poppler/DateInfo.h  | 4 ++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+commit 9bfe4b43216bce4e702d7d8f61fc7cb9acdbb8f6
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Fri Apr 6 12:40:53 2018 +0200
+
+    CMap::getCID take const char
+
+ poppler/CMap.cc | 4 ++--
+ poppler/CMap.h  | 2 +-
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+commit 690ea9e5c900268556431df71bdac38f5e74dc36
+Author: Albert Astals Cid <albert.astals.cid at kdab.com>
+Date:   Fri Apr 6 12:39:35 2018 +0200
+
+    GooString::insert make pointer const
+
+ goo/GooString.cc | 2 +-
+ goo/GooString.h  | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+commit f3551055dab57eb0bc544070b15c6a7435585003
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Fri Apr 6 12:19:54 2018 +0200
+
+    Introduce AutoFreeMemStream
+
+    This is done by turning the old MemStream implementation to a new
+    template implementation in BaseMemStream
+    and inheriting from it MemStream for const char * and
+    AutoFreeMemStream for char *.
+
+    This way we make clear one frees the data and the other does not,
+    while also removing the ugly setNeedsFree in MemStream
+
+ poppler/Annot.cc           | 16 ++++++---------
+ poppler/SplashOutputDev.cc |  3 +--
+ poppler/Stream.h           | 51
+ +++++++++++++++++++++++++++-------------------
+ 3 files changed, 37 insertions(+), 33 deletions(-)
+
+commit 4cc89c79f58cb416aae8396190a788e1398113ff
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Fri Apr 6 12:11:55 2018 +0200
+
+    Move MemStream implementation to header
+
+    Will be useful in next step where we turn it into a template
+
+ poppler/Stream.cc | 83 --------------------------------------------------
+ poppler/Stream.h  | 91
+ +++++++++++++++++++++++++++++++++++++++++++++++++------
+ 2 files changed, 81 insertions(+), 93 deletions(-)
+
+commit 8821c04f36cb737776cd9077a46f1a9f86ca54e7
+Author: Albert Astals Cid <albert.astals.cid at kdab.com>
+Date:   Wed Apr 4 10:20:52 2018 +0200
+
+    Workaround form field text not being drawn on broken files
+
+    Try drawing with the form appearance instead of the field apparance
+    if drawing with the field appearance fails
+
+    Bug #103245
+
+ poppler/Annot.cc | 88
+ +++++++++++++++++++++++++++++++++++---------------------
+ poppler/Annot.h  | 24 +++++++++-------
+ 2 files changed, 68 insertions(+), 44 deletions(-)
+
+commit afb053d652cc1f670465d471f671652b112dbf51
+Author: Albert Astals Cid <albert.astals.cid at kdab.com>
+Date:   Thu Apr 5 11:48:11 2018 +0200
+
+    Annot: Move appearBuf construction to a new class
+
+    Previously we had appearBuf construction functions in Annot itself
+    which was a bit
+    confusing. Some functions like writeString took appearBuf as
+    parameter, some
+    other did not. By moving it out to a new class and making all the
+    input parameters const
+    pointers we make it clear the construction of appearBuf doesn't have
+    any other side
+    effect on Annot itself or any other class
+
+    I'm leaving the functions in their old place to minimize the diff
+    so it's easier to read.
+    I'll move them in a follow up commit
+
+ poppler/Annot.cc | 528
+ ++++++++++++++++++++++++++++---------------------------
+ poppler/Annot.h  |  73 +++++---
+ 2 files changed, 321 insertions(+), 280 deletions(-)
+
+commit 0a79dc3036111e86a11bd290057da6674da3b311
+Author: Albert Astals Cid <albert.astals.cid at kdab.com>
+Date:   Thu Apr 5 18:15:33 2018 +0200
+
+    Add some more const
+
+ glib/poppler-action.cc        | 14 +++++------
+ glib/poppler-annot.cc         | 18 +++++++--------
+ glib/poppler-document.cc      |  2 +-
+ glib/poppler-form-field.cc    |  4 ++--
+ glib/poppler-private.h        |  2 +-
+ poppler/Annot.cc              | 16 ++++++-------
+ poppler/Annot.h               | 54
+ +++++++++++++++++++++----------------------
+ poppler/Catalog.cc            |  5 ++--
+ poppler/Catalog.h             |  5 ++--
+ poppler/Form.cc               |  6 ++---
+ poppler/Form.h                |  6 ++---
+ poppler/Link.h                | 23 +++++++++---------
+ poppler/PDFDoc.h              |  3 ++-
+ poppler/UTF.cc                |  3 ++-
+ poppler/UTF.h                 |  3 ++-
+ qt5/src/poppler-annotation.cc |  5 ++--
+ qt5/src/poppler-document.cc   |  9 +++++++-
+ qt5/src/poppler-form.cc       |  4 ++--
+ qt5/src/poppler-page.cc       |  2 +-
+ qt5/src/poppler-private.cc    |  4 ++--
+ qt5/src/poppler-private.h     |  4 ++--
+ qt5/src/poppler-qt5.h         |  7 ++++++
+ utils/JSInfo.cc               |  7 +++---
+ utils/JSInfo.h                |  3 ++-
+ 24 files changed, 116 insertions(+), 93 deletions(-)
+
+commit b60de1700d95d022ec0d1676886b0442cb763473
+Author: Albert Astals Cid <albert.astals.cid at kdab.com>
+Date:   Thu Apr 5 16:03:54 2018 +0200
+
+    Introduce a const version of GfxResources::lookupFont
+
+ poppler/Gfx.cc     | 13 +++++++++++--
+ poppler/Gfx.h      |  5 ++++-
+ poppler/GfxFont.cc |  2 +-
+ poppler/GfxFont.h  |  2 +-
+ 4 files changed, 17 insertions(+), 5 deletions(-)
+
+commit 6bb508acd9a79671e5e9defc7b92a943fb880cda
+Author: Albert Astals Cid <albert.astals.cid at kdab.com>
+Date:   Thu Apr 5 14:19:51 2018 +0200
+
+    More const in GfxFont methods
+
+ poppler/GfxFont.h          | 10 +++++-----
+ poppler/PSOutputDev.cc     |  2 +-
+ poppler/PSOutputDev.h      |  2 +-
+ poppler/SplashOutputDev.cc | 11 ++++++-----
+ qt5/src/ArthurOutputDev.cc |  3 ++-
+ 5 files changed, 15 insertions(+), 13 deletions(-)
+
+commit 390109044bdef1ba67c2339bffaf11b38261854d
+Author: Albert Astals Cid <albert.astals.cid at kdab.com>
+Date:   Thu Apr 5 13:00:59 2018 +0200
+
+    Fix windows build
+
+ poppler/GlobalParamsWin.cc | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit f75c0f5c3f9d63334cc21e0ab68f1af45d0037cc
+Author: Albert Astals Cid <albert.astals.cid at kdab.com>
+Date:   Thu Apr 5 12:58:34 2018 +0200
+
+    Make GfxFont::getName const
+
+ glib/poppler-structure-element.cc | 2 +-
+ poppler/FontInfo.cc               | 3 ++-
+ poppler/GfxFont.h                 | 2 +-
+ poppler/GlobalParams.cc           | 6 +++---
+ poppler/PSOutputDev.cc            | 6 ++++--
+ poppler/PSOutputDev.h             | 3 ++-
+ utils/HtmlFonts.cc                | 3 ++-
+ 7 files changed, 15 insertions(+), 10 deletions(-)
+
+commit a669ad5cfb28cdfcfe38bbce39fbf8c6fc3102d9
+Author: Albert Astals Cid <albert.astals.cid at kdab.com>
+Date:   Thu Apr 5 12:55:39 2018 +0200
+
+    buildFcPattern: Don't modify the actual name of the font
+
+    When doing the '-' to ' ' replacement to build the fc pattern
+
+ poppler/GlobalParams.cc | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+commit 4f9b3d8d8d17863873a8a399ff3fe212d247b236
+Author: Albert Astals Cid <albert.astals.cid at kdab.com>
+Date:   Thu Apr 5 12:37:40 2018 +0200
+
+    Make some GfxFont methods const
+
+ poppler/GfxFont.cc |  8 ++++----
+ poppler/GfxFont.h  | 16 ++++++++--------
+ 2 files changed, 12 insertions(+), 12 deletions(-)
+
+commit 2bf6f2275c49f94e84f935653d6c42f6b5f9b364
+Author: Albert Astals Cid <albert.astals.cid at kdab.com>
+Date:   Thu Apr 5 12:21:38 2018 +0200
+
+    Make some Form methods const
+
+ glib/poppler-form-field.cc |  6 +++---
+ poppler/Annot.cc           |  4 ++--
+ poppler/Form.cc            | 18 +++++++++---------
+ poppler/Form.h             | 32 ++++++++++++++++----------------
+ qt5/src/poppler-form.cc    |  3 ++-
+ 5 files changed, 32 insertions(+), 31 deletions(-)
+
+commit 6f2bc64e09b7f5e5be6962840ede40369b78fd5e
+Author: Albert Astals Cid <albert.astals.cid at kdab.com>
+Date:   Thu Apr 5 12:25:17 2018 +0200
+
+    Make AnnotWidget::drawText and Annot::layoutText input GooString const
+
+ poppler/Annot.cc | 9 +++++----
+ poppler/Annot.h  | 5 +++--
+ 2 files changed, 8 insertions(+), 6 deletions(-)
+
+commit 5e7931c4c9fdaba8b3343d04eda6e9eb2a2e3dcd
+Author: Albert Astals Cid <albert.astals.cid at kdab.com>
+Date:   Thu Apr 5 12:23:21 2018 +0200
+
+    Make _poppler_goo_string_to_utf8 input param const
+
+ glib/poppler-document.cc | 2 +-
+ glib/poppler-private.h   | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+commit 3fdb7ea7b6a1ed4add2fbc6dca7a38b27fc79f45
+Author: Albert Astals Cid <albert.astals.cid at kdab.com>
+Date:   Thu Apr 5 12:21:11 2018 +0200
+
+    Make UnicodeParsedString input const
+
+ qt5/src/poppler-private.cc | 5 +++--
+ qt5/src/poppler-private.h  | 3 ++-
+ 2 files changed, 5 insertions(+), 3 deletions(-)
+
+commit 4b96c8399102a36e542c9da3b34650c26ccdda3c
+Author: Albert Astals Cid <albert.astals.cid at kdab.com>
+Date:   Thu Apr 5 12:19:07 2018 +0200
+
+    Make pdfDocEncodingToUTF16 input param const
+
+ poppler/Form.cc          | 5 +++--
+ poppler/Form.h           | 1 +
+ poppler/PDFDocEncoding.h | 2 +-
+ 3 files changed, 5 insertions(+), 3 deletions(-)
+
+commit 5804259f22d4d42ed7c37c9efb613910248cd1d4
+Author: Albert Astals Cid <albert.astals.cid at kdab.com>
+Date:   Thu Apr 5 11:58:50 2018 +0200
+
+    GfxFont::getToUnicode -> const
+
+    And we don't need to do the inc/dec ref dance in Annot
+    since the GfxFont is still alive while we use it and there's
+    no other users to getToUnicode that may keep the CharCodeToUnicode
+    for longer time than the GfxFont live
+
+ poppler/Annot.cc   |  5 ++---
+ poppler/GfxFont.cc | 12 ++++--------
+ poppler/GfxFont.h  |  7 ++++---
+ 3 files changed, 10 insertions(+), 14 deletions(-)
+
+commit 1eb06156855758e4b1da2adc0334d84d3f857fb1
+Author: Albert Astals Cid <albert.astals.cid at kdab.com>
+Date:   Thu Apr 5 11:56:57 2018 +0200
+
+    CharCodeToUnicode::mapToCharCode -> const
+
+ poppler/CharCodeToUnicode.cc | 3 ++-
+ poppler/CharCodeToUnicode.h  | 3 ++-
+ 2 files changed, 4 insertions(+), 2 deletions(-)
+
+commit 2a49511517678b7e05660bb9a35a614c83229b66
+Author: Albert Astals Cid <albert.astals.cid at kdab.com>
+Date:   Thu Apr 5 11:50:23 2018 +0200
+
+    Add some const to GooHash and GooString
+
+ goo/GooHash.cc   | 7 ++++---
+ goo/GooHash.h    | 7 ++++---
+ goo/GooString.cc | 7 ++++---
+ goo/GooString.h  | 7 ++++---
+ 4 files changed, 16 insertions(+), 12 deletions(-)
+
+commit e491e935ea355d48519cf0a14e4b060655850675
+Author: Evangelos Foutras <evangelos at foutrelis.com>
+Date:   Mon Apr 2 16:09:34 2018 +0300
+
+    Fix PDFDoc::checkHeader() for PDFs smaller than 1 KiB
+
+    The fix for bug 104502 made it so PDFDoc::checkHeader() would print a
+    warning and return immediatelly if it encounters an EOF while reading
+    the first 1024 bytes.
+
+    Some PDF files can be smaller than 1024 bytes, for example those used
+    by pdf2djvu's test suite. The latter would fail due to the unexpected
+    warnings.
+
+    Change the behavior of PDFDoc::checkHeader() when encountering an EOF
+    so it processes the data it has read so far instead of aborting early.
+
+    https://bugs.freedesktop.org/show_bug.cgi?id=105674
+
+ poppler/PDFDoc.cc | 23 +++++++++++++++--------
+ 1 file changed, 15 insertions(+), 8 deletions(-)
+
+commit c19469f2a80ebc09bef3fbd603034e43c4a707cd
+Author: Mojca Miklavec <mojca at macports.org>
+Date:   Mon Apr 2 12:52:35 2018 +0200
+
+    Fix build on some platforms
+
+    We need to include time.h in gfile.h
+
+    Bug #105766
+
+ goo/gfile.cc | 6 ++----
+ goo/gfile.h  | 2 ++
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+commit c7a317635cfc6934e975e846335e37a68d6b3876
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Mon Mar 26 16:10:05 2018 +0200
+
+    glib: less deprecated calls
+
+    And increate gdk pixbuf requirement to the version i think we
+    actually require
+
+ cmake/modules/FindGTK.cmake | 2 +-
+ glib/demo/annots.c          | 2 +-
+ glib/demo/selections.c      | 2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+commit 7a708ffd374cd18e9e4bfe8a8e95c02184a074ba
+Author: Oliver Sander <oliver.sander at tu-dresden.de>
+Date:   Wed Mar 28 00:00:35 2018 +0200
+
+    Implement ArthurOutputDev::axialShadedFill
+
+ qt5/src/ArthurOutputDev.cc | 128
+ ++++++++++++++++++++++++++++++++++++++++++++-
+ qt5/src/ArthurOutputDev.h  |   9 +++-
+ 2 files changed, 135 insertions(+), 2 deletions(-)
+
+commit 5e7aef9df36a07c82b0ab40f80fd8464840f6424
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Fri Mar 23 15:34:56 2018 +0100
+
+    PSOutputDev: move i declaration to the for
+
+ poppler/PSOutputDev.cc | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+commit 79789ed3d2798fb34f1c82d950e03a4d41e197de
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Fri Mar 23 19:58:16 2018 +0100
+
+    Annot: setColor -> setDrawColor
+
+    to differentiate from the setColor that actually changes the annot
+    color
+
+ poppler/Annot.cc | 60
+ ++++++++++++++++++++++++++++----------------------------
+ poppler/Annot.h  |  2 +-
+ 2 files changed, 31 insertions(+), 31 deletions(-)
+
+commit e34e187934e3654989b6af5177f345032623dd9b
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Fri Mar 23 19:57:39 2018 +0100
+
+    SplashOutputDev: make getMatteColor static
+
+ poppler/SplashOutputDev.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit c14dfa44a70ce32bbe1268ddff6106cab3f33bc2
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Fri Mar 23 19:56:12 2018 +0100
+
+    HtmlOutputDev: don't pass catalog around to not use it
+
+ utils/HtmlOutputDev.cc | 13 ++++++-------
+ utils/HtmlOutputDev.h  |  4 ++--
+ 2 files changed, 8 insertions(+), 9 deletions(-)
+
+commit 92c51751a87b31c4bafa7b0146f745b3008ec9fc
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Fri Mar 23 19:55:42 2018 +0100
+
+    JPEG2000Stream.cc: no need to store indexed
+
+    we only use it in one function
+
+ poppler/JPEG2000Stream.cc | 13 ++++++-------
+ 1 file changed, 6 insertions(+), 7 deletions(-)
+
+commit 46543272dbe7655821e1c794ca3cc22e8cb4cef9
+Author: Albert Astals Cid <aacid at kde.org>
+Date:   Tue Mar 20 23:44:23 2018 +0100
+
+    gfile: Fix windows build
+
+ goo/gfile.cc | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit 327c342a932d8df731ec02a6b22792004206c2db
+Author: Andre Heinecke <aheinecke at intevation.de>
+Date:   Tue Mar 20 23:07:15 2018 +0100
+
+    Add read only setter for form fields
+
+    Read only is modifiable from AcroForm scripts.
+
+ poppler/Form.cc         | 32 ++++++++++++++++++++++++++++++++
+ poppler/Form.h          |  4 +++-
+ qt5/src/poppler-form.cc |  6 ++++++
+ qt5/src/poppler-form.h  |  7 +++++++
+ 4 files changed, 48 insertions(+), 1 deletion(-)
+
+commit 4798ef5298bcfcfadf8e1d66f9200e3c9eee2248
+Author: Carlos Garcia Campos <cgarcia at igalia.com>
+Date:   Mon Mar 19 11:16:03 2018 +0100
+
+    build: bring back the option to disable GObject introspection
+
+    It was available with autotools, but we lost it when switching
+    to cmake.
+
+ CMakeLists.txt | 9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
+
 commit f26285f361478219ea9d3c6de1529ecd5ff96ac9
 Author: Albert Astals Cid <aacid at kde.org>
 Date:   Sun Mar 18 19:23:49 2018 +0100

Modified: trunk/Build/source/libs/poppler/poppler-src/NEWS
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/NEWS	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/NEWS	2018-04-29 00:37:13 UTC (rev 47480)
@@ -1,3 +1,36 @@
+Release 0.64.0
+        core:
+         * Workaround form field text not being drawn on broken files. Bug #103245
+         * Add read only setter for form fields
+         * Add support for Link Hide action
+         * Add support for Next actions in Links
+         * Fix parsing of Annot focus out actions
+         * Fix PDFDoc::checkHeader() for PDFs smaller than 1 KiB. Bug #105674
+         * Add const to several classes and members
+         * gfile: Fix build on some platforms
+         * Fix issues with on malformed documents. Bug #105972, #105969, #106059, #106061
+         * Several small code improvements
+
+        qt5:
+         * Allow setting of Form visibility status
+         * Allow setting of Form read only status
+         * Add support for Link Hide action
+         * Add support for Next actions in Links
+         * ArthurOutputDev: Implement axialShadedFill
+         * ArthurOutputDev: Implement drawImageMask. Bug #105531
+         * ArthurOutputDev: Implement Type3 font support
+
+        utils:
+         * pdfsig: Add -dump which writes signatures to disk. Bug #104881
+
+        glib:
+         * less deprecated calls
+
+        build system:
+         * bring back the option to disable GObject introspection
+         * Add iconv include dir when compiling
+         * Make it possible to build poppler without fontconfig. Default for Android
+
 Release 0.63.0
         core:
          * CairoOutputDev: support embedding CCITT image data. Bug #103399

Modified: trunk/Build/source/libs/poppler/poppler-src/goo/GooHash.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/goo/GooHash.cc	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/goo/GooHash.cc	2018-04-29 00:37:13 UTC (rev 47480)
@@ -14,6 +14,7 @@
 // under GPL version 2 or later
 //
 // Copyright (C) 2017 Albert Astals Cid <aacid at kde.org>
+// Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. 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
@@ -154,7 +155,7 @@
   return p->val.p;
 }
 
-int GooHash::lookupInt(GooString *key) {
+int GooHash::lookupInt(const GooString *key) {
   GooHashBucket *p;
   int h;
 
@@ -351,7 +352,7 @@
   gfree(oldTab);
 }
 
-GooHashBucket *GooHash::find(GooString *key, int *h) {
+GooHashBucket *GooHash::find(const GooString *key, int *h) {
   GooHashBucket *p;
 
   if (unlikely(!key))
@@ -378,7 +379,7 @@
   return nullptr;
 }
 
-int GooHash::hash(GooString *key) {
+int GooHash::hash(const GooString *key) {
   const char *p;
   unsigned int h;
   int i;

Modified: trunk/Build/source/libs/poppler/poppler-src/goo/GooHash.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/goo/GooHash.h	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/goo/GooHash.h	2018-04-29 00:37:13 UTC (rev 47480)
@@ -14,6 +14,7 @@
 // under GPL version 2 or later
 //
 // Copyright (C) 2012 Albert Astals Cid <aacid at kde.org>
+// Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. 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
@@ -45,7 +46,7 @@
   void replace(GooString *key, void *val);
   void replace(GooString *key, int val);
   void *lookup(GooString *key);
-  int lookupInt(GooString *key);
+  int lookupInt(const GooString *key);
   void *lookup(const char *key);
   int lookupInt(const char *key);
   void *remove(GooString *key);
@@ -63,9 +64,9 @@
   GooHash& operator=(const GooHash &other);
 
   void expand();
-  GooHashBucket *find(GooString *key, int *h);
+  GooHashBucket *find(const GooString *key, int *h);
   GooHashBucket *find(const char *key, int *h);
-  int hash(GooString *key);
+  int hash(const GooString *key);
   int hash(const char *key);
 
   GBool deleteKeys;		// set if key strings should be deleted

Modified: trunk/Build/source/libs/poppler/poppler-src/goo/GooList.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/goo/GooList.cc	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/goo/GooList.cc	2018-04-29 00:37:13 UTC (rev 47480)
@@ -6,6 +6,20 @@
 //
 //========================================================================
 
+//========================================================================
+//
+// Modified under the Poppler project - http://poppler.freedesktop.org
+//
+// All changes made under the Poppler project to this file are licensed
+// under GPL version 2 or later
+//
+// Copyright (C) 2018 Albert Astals Cid <aacid at kde.org>
+//
+// To see a description of the changes please see the Changelog file that
+// came with your tarball or type make ChangeLog if you are building from git
+//
+//========================================================================
+
 #include <config.h>
 
 #ifdef USE_GCC_PRAGMAS
@@ -39,7 +53,7 @@
   gfree(data);
 }
 
-GooList *GooList::copy() {
+GooList *GooList::copy() const {
   GooList *ret;
 
   ret = new GooList(length);

Modified: trunk/Build/source/libs/poppler/poppler-src/goo/GooList.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/goo/GooList.h	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/goo/GooList.h	2018-04-29 00:37:13 UTC (rev 47480)
@@ -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 <aacid at kde.org>
+// Copyright (C) 2012, 2018 Albert Astals Cid <aacid at kde.org>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -48,16 +48,16 @@
   //----- general
 
   // Get the number of elements.
-  int getLength() { return length; }
+  int getLength() const { return length; }
 
   // Returns a (shallow) copy of this list.
-  GooList *copy();
+  GooList *copy() const;
 
   //----- ordered list support
 
   // Return the <i>th element.
   // Assumes 0 <= i < length.
-  void *get(int i) { return data[i]; }
+  void *get(int i) const { return data[i]; }
 
   // Replace the <i>th element.
   // Assumes 0 <= i < length.

Modified: trunk/Build/source/libs/poppler/poppler-src/goo/GooString.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/goo/GooString.cc	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/goo/GooString.cc	2018-04-29 00:37:13 UTC (rev 47480)
@@ -26,6 +26,7 @@
 // Copyright (C) 2013 Jason Crain <jason at aquaticape.us>
 // Copyright (C) 2015 William Bader <williambader at hotmail.com>
 // Copyright (C) 2016 Jakub Alba <jakubalba at gmail.com>
+// Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. 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
@@ -206,7 +207,7 @@
   Set(sA, lengthA);
 }
 
-GooString::GooString(GooString *str, int idx, int lengthA) {
+GooString::GooString(const GooString *str, int idx, int lengthA) {
   s = nullptr;
   length = 0;
   assert(idx + lengthA <= str->length);
@@ -268,7 +269,7 @@
   return append((const char*)&c, 1);
 }
 
-GooString *GooString::append(GooString *str) {
+GooString *GooString::append(const GooString *str) {
   return append(str->getCString(), str->getLength());
 }
 
@@ -739,7 +740,7 @@
   return insert(i, (const char*)&c, 1);
 }
 
-GooString *GooString::insert(int i, GooString *str) {
+GooString *GooString::insert(int i, const GooString *str) {
   return insert(i, str->getCString(), str->getLength());
 }
 
@@ -789,7 +790,7 @@
   return this;
 }
 
-int GooString::cmp(GooString *str) const {
+int GooString::cmp(const GooString *str) const {
   int n1, n2, i, x;
   char *p1, *p2;
 

Modified: trunk/Build/source/libs/poppler/poppler-src/goo/GooString.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/goo/GooString.h	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/goo/GooString.h	2018-04-29 00:37:13 UTC (rev 47480)
@@ -23,6 +23,7 @@
 // Copyright (C) 2015 Adam Reichold <adam.reichold at t-online.de>
 // Copyright (C) 2016 Jakub Alba <jakubalba at gmail.com>
 // Copyright (C) 2017 Adrian Johnson <ajohnson at redneon.com>
+// Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. 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
@@ -64,7 +65,7 @@
   GooString(const char *sA, int lengthA);
 
   // Create a string from <lengthA> chars at <idx> in <str>.
-  GooString(GooString *str, int idx, int lengthA);
+  GooString(const GooString *str, int idx, int lengthA);
 
   // Set content of a string to <newStr>. If <newLen> is CALC_STRING_LEN, then
   // length of the string will be calculated with strlen(). Otherwise we assume
@@ -132,7 +133,7 @@
 
   // Append a character or string.
   GooString *append(char c);
-  GooString *append(GooString *str);
+  GooString *append(const GooString *str);
   GooString *append(const char *str, int lengthA=CALC_STRING_LEN);
 
   // Append a formatted string.
@@ -141,7 +142,7 @@
 
   // Insert a character or string.
   GooString *insert(int i, char c);
-  GooString *insert(int i, GooString *str);
+  GooString *insert(int i, const GooString *str);
   GooString *insert(int i, const char *str, int lengthA=CALC_STRING_LEN);
 
   // Delete a character or range of characters.
@@ -152,7 +153,7 @@
   GooString *lowerCase();
 
   // Compare two strings:  -1:<  0:=  +1:>
-  int cmp(GooString *str) const;
+  int cmp(const GooString *str) const;
   int cmpN(GooString *str, int n) const;
   int cmp(const char *sA) const;
   int cmpN(const char *sA, int n) const;

Modified: trunk/Build/source/libs/poppler/poppler-src/goo/gfile.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/goo/gfile.cc	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/goo/gfile.cc	2018-04-29 00:37:13 UTC (rev 47480)
@@ -26,6 +26,7 @@
 // Copyright (C) 2013 Peter Breitenlohner <peb at mppmu.mpg.de>
 // Copyright (C) 2013, 2017 Thomas Freitag <Thomas.Freitag at alfa.de>
 // Copyright (C) 2017 Christoph Cullmann <cullmann at kde.org>
+// Copyright (C) 2018 Mojca Miklavec <mojca at macports.org>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git

Modified: trunk/Build/source/libs/poppler/poppler-src/goo/gfile.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/goo/gfile.h	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/goo/gfile.h	2018-04-29 00:37:13 UTC (rev 47480)
@@ -24,6 +24,7 @@
 // Copyright (C) 2014 Peter Breitenlohner <peb at mppmu.mpg.de>
 // Copyright (C) 2017 Christoph Cullmann <cullmann at kde.org>
 // Copyright (C) 2017 Thomas Freitag <Thomas.Freitag at alfa.de>
+// Copyright (C) 2018 Mojca Miklavec <mojca at macports.org>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/Annot.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/Annot.cc	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/Annot.cc	2018-04-29 00:37:13 UTC (rev 47480)
@@ -15,7 +15,7 @@
 //
 // Copyright (C) 2006 Scott Turner <scotty1024 at mac.com>
 // Copyright (C) 2007, 2008 Julien Rebetez <julienr at svn.gnome.org>
-// Copyright (C) 2007-2013, 2015-2017 Albert Astals Cid <aacid at kde.org>
+// Copyright (C) 2007-2013, 2015-2018 Albert Astals Cid <aacid at kde.org>
 // Copyright (C) 2007-2013 Carlos Garcia Campos <carlosgc at gnome.org>
 // Copyright (C) 2007, 2008 Iñigo Martínez <inigomartinez at gmail.com>
 // Copyright (C) 2007 Jeff Muizelaar <jeff at infidigm.net>
@@ -36,6 +36,8 @@
 // Copyright (C) 2015 Philipp Reinkemeier <philipp.reinkemeier at offis.de>
 // Copyright (C) 2015 Tamas Szekeres <szekerest at gmail.com>
 // Copyright (C) 2017 Hans-Ulrich Jüttner <huj at froreich-bioscientia.de>
+// Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. Work sponsored by the LiMux project of the city of Munich
+// Copyright 2018 Andre Heinecke <aheinecke at intevation.de>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -113,7 +115,7 @@
 // = (4 * (sqrt(2) - 1) / 3) * r
 #define bezierCircle 0.55228475
 
-static AnnotLineEndingStyle parseAnnotLineEndingStyle(GooString *string) {
+static AnnotLineEndingStyle parseAnnotLineEndingStyle(const GooString *string) {
   if (string != nullptr) {
     if (!string->cmp("Square")) {
       return annotLineEndingSquare;
@@ -220,7 +222,7 @@
                        type == Annot::actionMousePressed ?   "D" :
                        type == Annot::actionMouseReleased ?  "U" :
                        type == Annot::actionFocusIn ?       "Fo" :
-                       type == Annot::actionFocusOut ?      "BI" :
+                       type == Annot::actionFocusOut ?      "Bl" :
                        type == Annot::actionPageOpening ?   "PO" :
                        type == Annot::actionPageClosing ?   "PC" :
                        type == Annot::actionPageVisible ?   "PV" :
@@ -1201,7 +1203,6 @@
   appearStreams = nullptr;
   appearBBox = nullptr;
   appearState = nullptr;
-  appearBuf = nullptr;
   fontSize = 0;
 
   appearance.setToNull();
@@ -1609,10 +1610,10 @@
 #endif
 }
 
-void Annot::setColor(AnnotColor *color, GBool fill) {
-  const double *values = color->getValues();
+void AnnotAppearanceBuilder::setDrawColor(const AnnotColor *drawColor, GBool fill) {
+  const double *values = drawColor->getValues();
 
-  switch (color->getSpace()) {
+  switch (drawColor->getSpace()) {
   case AnnotColor::colorCMYK:
     appearBuf->appendf("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:c}\n",
 		       values[0], values[1], values[2], values[3],
@@ -1634,7 +1635,7 @@
   }
 }
 
-void Annot::setLineStyleForBorder(AnnotBorder *border) {
+void AnnotAppearanceBuilder::setLineStyleForBorder(const AnnotBorder *border) {
   int i, dashLength;
   double *dash;
 
@@ -1656,7 +1657,7 @@
 
 // Draw an (approximate) circle of radius <r> centered at (<cx>, <cy>).
 // If <fill> is true, the circle is filled; otherwise it is stroked.
-void Annot::drawCircle(double cx, double cy, double r, GBool fill) {
+void AnnotAppearanceBuilder::drawCircle(double cx, double cy, double r, GBool fill) {
   appearBuf->appendf("{0:.2f} {1:.2f} m\n",
       cx + r, cy);
   appearBuf->appendf("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n",
@@ -1680,7 +1681,7 @@
 
 // Draw the top-left half of an (approximate) circle of radius <r>
 // centered at (<cx>, <cy>).
-void Annot::drawCircleTopLeft(double cx, double cy, double r) {
+void AnnotAppearanceBuilder::drawCircleTopLeft(double cx, double cy, double r) {
   double r2;
 
   r2 = r / sqrt(2.0);
@@ -1705,7 +1706,7 @@
 
 // Draw the bottom-right half of an (approximate) circle of radius <r>
 // centered at (<cx>, <cy>).
-void Annot::drawCircleBottomRight(double cx, double cy, double r) {
+void AnnotAppearanceBuilder::drawCircleBottomRight(double cx, double cy, double r) {
   double r2;
 
   r2 = r / sqrt(2.0);
@@ -1728,7 +1729,7 @@
   appearBuf->append("S\n");
 }
 
-Object Annot::createForm(double *bbox, GBool transparencyGroup, Dict *resDict) {
+Object Annot::createForm(const GooString *appearBuf, double *bbox, GBool transparencyGroup, Dict *resDict) {
   Dict *appearDict = new Dict(xref);
   appearDict->set("Length", Object(appearBuf->getLength()));
   appearDict->set("Subtype", Object(objName, "Form"));
@@ -1747,10 +1748,9 @@
   if (resDict)
     appearDict->set("Resources", Object(resDict));
 
-  MemStream *mStream = new MemStream(copyString(appearBuf->getCString()), 0,
+  Stream *mStream = new AutoFreeMemStream(copyString(appearBuf->getCString()), 0,
 				     appearBuf->getLength(), Object(appearDict));
-  mStream->setNeedFree(gTrue);
-  return Object(static_cast<Stream*>(mStream));
+  return Object(mStream);
 }
 
 Dict *Annot::createResourcesDict(const char *formName, Object &&formStream,
@@ -2098,11 +2098,11 @@
 
   obj1 = dict->lookup("StateModel");
   if (obj1.isString()) {
-    GooString *modelName = obj1.getString();
+    const GooString *modelName = obj1.getString();
 
     Object obj2 = dict->lookup("State");
     if (obj2.isString()) {
-      GooString *stateName = obj2.getString();
+      const GooString *stateName = obj2.getString();
 
       if (!stateName->cmp("Marked")) {
         state = stateMarked;
@@ -2435,32 +2435,32 @@
   if (appearance.isNull()) {
     ca = opacity;
 
-    appearBuf = new GooString ();
+    AnnotAppearanceBuilder appearBuilder;
 
-    appearBuf->append ("q\n");
+    appearBuilder.append ("q\n");
     if (color)
-      setColor(color, gTrue);
+      appearBuilder.setDrawColor(color, gTrue);
     else
-      appearBuf->append ("1 1 1 rg\n");
+      appearBuilder.append ("1 1 1 rg\n");
     if (!icon->cmp("Note"))
-      appearBuf->append (ANNOT_TEXT_AP_NOTE);
+      appearBuilder.append (ANNOT_TEXT_AP_NOTE);
     else if (!icon->cmp("Comment"))
-      appearBuf->append (ANNOT_TEXT_AP_COMMENT);
+      appearBuilder.append (ANNOT_TEXT_AP_COMMENT);
     else if (!icon->cmp("Key"))
-      appearBuf->append (ANNOT_TEXT_AP_KEY);
+      appearBuilder.append (ANNOT_TEXT_AP_KEY);
     else if (!icon->cmp("Help"))
-      appearBuf->append (ANNOT_TEXT_AP_HELP);
+      appearBuilder.append (ANNOT_TEXT_AP_HELP);
     else if (!icon->cmp("NewParagraph"))
-      appearBuf->append (ANNOT_TEXT_AP_NEW_PARAGRAPH);
+      appearBuilder.append (ANNOT_TEXT_AP_NEW_PARAGRAPH);
     else if (!icon->cmp("Paragraph"))
-      appearBuf->append (ANNOT_TEXT_AP_PARAGRAPH);
+      appearBuilder.append (ANNOT_TEXT_AP_PARAGRAPH);
     else if (!icon->cmp("Insert"))
-      appearBuf->append (ANNOT_TEXT_AP_INSERT);
+      appearBuilder.append (ANNOT_TEXT_AP_INSERT);
     else if (!icon->cmp("Cross"))
-      appearBuf->append (ANNOT_TEXT_AP_CROSS);
+      appearBuilder.append (ANNOT_TEXT_AP_CROSS);
     else if (!icon->cmp("Circle"))
-      appearBuf->append (ANNOT_TEXT_AP_CIRCLE);
-    appearBuf->append ("Q\n");
+      appearBuilder.append (ANNOT_TEXT_AP_CIRCLE);
+    appearBuilder.append ("Q\n");
 
     // Force 24x24 rectangle
     PDFRectangle fixedRect(rect->x1, rect->y2 - 24, rect->x1 + 24, rect->y2);
@@ -2468,16 +2468,14 @@
     double bbox[4];
     appearBBox->getBBoxRect(bbox);
     if (ca == 1) {
-      appearance = createForm(bbox, gFalse, nullptr);
+      appearance = createForm(appearBuilder.buffer(), bbox, gFalse, nullptr);
     } else {
-      Object aStream = createForm(bbox, gTrue, nullptr);
-      delete appearBuf;
+      Object aStream = createForm(appearBuilder.buffer(), bbox, gTrue, nullptr);
 
-      appearBuf = new GooString ("/GS0 gs\n/Fm0 Do");
+      GooString appearBuf("/GS0 gs\n/Fm0 Do");
       Dict *resDict = createResourcesDict("Fm0", std::move(aStream), "GS0", ca, nullptr);
-      appearance = createForm(bbox, gFalse, resDict);
+      appearance = createForm(&appearBuf, bbox, gFalse, resDict);
     }
-    delete appearBuf;
   }
 
   // draw the appearance stream
@@ -2859,12 +2857,12 @@
 {
   double borderWidth, ca = opacity;
 
-  appearBuf = new GooString ();
-  appearBuf->append ("q\n");
+  AnnotAppearanceBuilder appearBuilder;
+  appearBuilder.append ("q\n");
 
   borderWidth = border->getWidth();
   if (borderWidth > 0)
-    setLineStyleForBorder(border);
+    appearBuilder.setLineStyleForBorder(border);
 
   // Box size
   const double width = rect->x2 - rect->x1;
@@ -2887,14 +2885,14 @@
   GBool doStroke = (borderWidth != 0);
   if (doFill || doStroke) {
     if (doStroke) {
-      setColor(fontcolor, gFalse); // Border color: same as font color
+      appearBuilder.setDrawColor(fontcolor, gFalse); // Border color: same as font color
     }
-    appearBuf->appendf ("{0:.2f} {0:.2f} {1:.2f} {2:.2f} re\n", borderWidth/2, width-borderWidth, height-borderWidth);
+    appearBuilder.appendf ("{0:.2f} {0:.2f} {1:.2f} {2:.2f} re\n", borderWidth/2, width-borderWidth, height-borderWidth);
     if (doFill) {
-      setColor(color, gTrue);
-      appearBuf->append(doStroke ? "B\n" : "f\n");
+      appearBuilder.setDrawColor(color, gTrue);
+      appearBuilder.append(doStroke ? "B\n" : "f\n");
     } else {
-      appearBuf->append("S\n");
+      appearBuilder.append("S\n");
     }
   }
 
@@ -2901,15 +2899,15 @@
   // Setup text clipping
   const double textmargin = borderWidth * 2;
   const double textwidth = width - 2*textmargin;
-  appearBuf->appendf ("{0:.2f} {0:.2f} {1:.2f} {2:.2f} re W n\n", textmargin, textwidth, height - 2*textmargin);
+  appearBuilder.appendf ("{0:.2f} {0:.2f} {1:.2f} {2:.2f} re W n\n", textmargin, textwidth, height - 2*textmargin);
 
   Dict *fontResDict = new Dict(xref);
   GfxFont *font = createAnnotDrawFont(xref, fontResDict);
 
   // Set font state
-  setColor(fontcolor, gTrue);
-  appearBuf->appendf ("BT 1 0 0 1 {0:.2f} {1:.2f} Tm\n", textmargin, height - textmargin - fontsize * font->getDescent());
-  appearBuf->appendf ("/AnnotDrawFont {0:.2f} Tf\n", fontsize);
+  appearBuilder.setDrawColor(fontcolor, gTrue);
+  appearBuilder.appendf ("BT 1 0 0 1 {0:.2f} {1:.2f} Tm\n", textmargin, height - textmargin - fontsize * font->getDescent());
+  appearBuilder.appendf ("/AnnotDrawFont {0:.2f} Tf\n", fontsize);
 
   int i = 0;
   double xposPrev = 0;
@@ -2929,15 +2927,15 @@
       xpos = 0;
       break;
     }
-    appearBuf->appendf("{0:.2f} {1:.2f} Td\n", xpos - xposPrev, -fontsize);
-    writeString(&out, appearBuf);
-    appearBuf->append("Tj\n");
+    appearBuilder.appendf("{0:.2f} {1:.2f} Td\n", xpos - xposPrev, -fontsize);
+    appearBuilder.writeString(out);
+    appearBuilder.append("Tj\n");
     xposPrev = xpos;
   }
 
   font->decRefCnt();
   delete fontcolor;
-  appearBuf->append ("ET Q\n");
+  appearBuilder.append ("ET Q\n");
 
   double bbox[4];
   bbox[0] = bbox[1] = 0;
@@ -2945,16 +2943,14 @@
   bbox[3] = rect->y2 - rect->y1;
 
   if (ca == 1) {
-    appearance = createForm(bbox, gFalse, fontResDict);
+    appearance = createForm(appearBuilder.buffer(), bbox, gFalse, fontResDict);
   } else {
-    Object aStream = createForm(bbox, gTrue, fontResDict);
-    delete appearBuf;
+    Object aStream = createForm(appearBuilder.buffer(), bbox, gTrue, fontResDict);
 
-    appearBuf = new GooString ("/GS0 gs\n/Fm0 Do");
+    GooString appearBuf("/GS0 gs\n/Fm0 Do");
     Dict *resDict = createResourcesDict("Fm0", std::move(aStream), "GS0", ca, nullptr);
-    appearance = createForm(bbox, gFalse, resDict);
+    appearance = createForm(&appearBuf, bbox, gFalse, resDict);
   }
-  delete appearBuf;
 }
 
 void AnnotFreeText::draw(Gfx *gfx, GBool printing) {
@@ -3233,13 +3229,13 @@
   double borderWidth, ca = opacity;
 
   appearBBox = new AnnotAppearanceBBox(rect);
-  appearBuf = new GooString ();
-  appearBuf->append ("q\n");
+  AnnotAppearanceBuilder appearBuilder;
+  appearBuilder.append ("q\n");
   if (color) {
-    setColor(color, gFalse);
+    appearBuilder.setDrawColor(color, gFalse);
   }
 
-  setLineStyleForBorder(border);
+  appearBuilder.setLineStyleForBorder(border);
   borderWidth = border->getWidth();
   appearBBox->setBorderWidth(std::max(1., borderWidth));
 
@@ -3297,19 +3293,19 @@
 
   // Draw main segment
   matr.transform (0, leaderLineLength, &tx, &ty);
-  appearBuf->appendf ("{0:.2f} {1:.2f} m\n", tx, ty);
+  appearBuilder.appendf ("{0:.2f} {1:.2f} m\n", tx, ty);
   appearBBox->extendTo (tx, ty);
 
   if (captionwidth != 0 && actualCaptionPos == captionPosInline) { // Break in the middle
     matr.transform ((main_len-captionwidth)/2 - captionhmargin, leaderLineLength, &tx, &ty);
-    appearBuf->appendf ("{0:.2f} {1:.2f} l S\n", tx, ty);
+    appearBuilder.appendf ("{0:.2f} {1:.2f} l S\n", tx, ty);
 
     matr.transform ((main_len+captionwidth)/2 + captionhmargin, leaderLineLength, &tx, &ty);
-    appearBuf->appendf ("{0:.2f} {1:.2f} m\n", tx, ty);
+    appearBuilder.appendf ("{0:.2f} {1:.2f} m\n", tx, ty);
   }
 
   matr.transform (main_len, leaderLineLength, &tx, &ty);
-  appearBuf->appendf ("{0:.2f} {1:.2f} l S\n", tx, ty);
+  appearBuilder.appendf ("{0:.2f} {1:.2f} l S\n", tx, ty);
   appearBBox->extendTo (tx, ty);
 
   // TODO: Line endings
@@ -3337,10 +3333,10 @@
     appearBBox->extendTo (tx, ty);
 
     // Setup text state (reusing transformed top-left coord)
-    appearBuf->appendf ("0 g BT /AnnotDrawFont {0:.2f} Tf\n", fontsize); // Font color: black
-    appearBuf->appendf ("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} Tm\n",
+    appearBuilder.appendf ("0 g BT /AnnotDrawFont {0:.2f} Tf\n", fontsize); // Font color: black
+    appearBuilder.appendf ("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} Tm\n",
                         matr.m[0], matr.m[1], matr.m[2], matr.m[3], tx, ty);
-    appearBuf->appendf ("0 {0:.2f} Td\n",  -fontsize * font->getDescent());
+    appearBuilder.appendf ("0 {0:.2f} Td\n",  -fontsize * font->getDescent());
     // Draw text
     int i = 0;
     double xposPrev = 0;
@@ -3350,12 +3346,12 @@
       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);
-      writeString(&out, appearBuf);
-      appearBuf->append ("Tj\n");
+      appearBuilder.appendf("{0:.2f} {1:.2f} Td\n", xpos - xposPrev, -fontsize);
+      appearBuilder.writeString(out);
+      appearBuilder.append ("Tj\n");
       xposPrev = xpos;
     }
-    appearBuf->append ("ET\n");
+    appearBuilder.append ("ET\n");
     font->decRefCnt();
   }
 
@@ -3364,35 +3360,33 @@
   double sign = leaderLineLength >= 0 ? 1 : -1;
   if (ll_len != 0) {
     matr.transform (0, 0, &tx, &ty);
-    appearBuf->appendf ("{0:.2f} {1:.2f} m\n", tx, ty);
+    appearBuilder.appendf ("{0:.2f} {1:.2f} m\n", tx, ty);
     appearBBox->extendTo (tx, ty);
     matr.transform (0, sign*ll_len, &tx, &ty);
-    appearBuf->appendf ("{0:.2f} {1:.2f} l S\n", tx, ty);
+    appearBuilder.appendf ("{0:.2f} {1:.2f} l S\n", tx, ty);
     appearBBox->extendTo (tx, ty);
 
     matr.transform (main_len, 0, &tx, &ty);
-    appearBuf->appendf ("{0:.2f} {1:.2f} m\n", tx, ty);
+    appearBuilder.appendf ("{0:.2f} {1:.2f} m\n", tx, ty);
     appearBBox->extendTo (tx, ty);
     matr.transform (main_len, sign*ll_len, &tx, &ty);
-    appearBuf->appendf ("{0:.2f} {1:.2f} l S\n", tx, ty);
+    appearBuilder.appendf ("{0:.2f} {1:.2f} l S\n", tx, ty);
     appearBBox->extendTo (tx, ty);
   }
 
-  appearBuf->append ("Q\n");
+  appearBuilder.append ("Q\n");
 
   double bbox[4];
   appearBBox->getBBoxRect(bbox);
   if (ca == 1) {
-    appearance = createForm(bbox, gFalse, fontResDict);
+    appearance = createForm(appearBuilder.buffer(), bbox, gFalse, fontResDict);
   } else {
-    Object aStream = createForm(bbox, gTrue, fontResDict);
-    delete appearBuf;
+    Object aStream = createForm(appearBuilder.buffer(), bbox, gTrue, fontResDict);
 
-    appearBuf = new GooString ("/GS0 gs\n/Fm0 Do");
+    GooString appearBuf("/GS0 gs\n/Fm0 Do");
     Dict *resDict = createResourcesDict("Fm0", std::move(aStream), "GS0", ca, nullptr);
-    appearance = createForm(bbox, gFalse, resDict);
+    appearance = createForm(&appearBuf, bbox, gFalse, resDict);
   }
-  delete appearBuf;
 }
 
 void AnnotLine::draw(Gfx *gfx, GBool printing) {
@@ -3554,8 +3548,8 @@
     GBool blendMultiply = gTrue;
     ca = opacity;
 
-    appearBuf = new GooString ();
-    appearBuf->append ("q\n");
+    AnnotAppearanceBuilder appearBuilder;
+    appearBuilder.append ("q\n");
 
     /* Adjust BBox */
     delete appearBBox;
@@ -3570,9 +3564,9 @@
     switch (type) {
     case typeUnderline:
       if (color) {
-        setColor(color, gFalse);
+        appearBuilder.setDrawColor(color, gFalse);
       }
-      appearBuf->append ("[] 0 d 1 w\n");
+      appearBuilder.append ("[] 0 d 1 w\n");
 
       for (i = 0; i < quadrilaterals->getQuadrilateralsLength(); ++i) {
 	double x3, y3, x4, y4;
@@ -3582,17 +3576,17 @@
 	x4 = quadrilaterals->getX4(i);
 	y4 = quadrilaterals->getY4(i);
 
-	appearBuf->appendf ("{0:.2f} {1:.2f} m\n", x3, y3);
-	appearBuf->appendf ("{0:.2f} {1:.2f} l\n", x4, y4);
-	appearBuf->append ("S\n");
+	appearBuilder.appendf ("{0:.2f} {1:.2f} m\n", x3, y3);
+	appearBuilder.appendf ("{0:.2f} {1:.2f} l\n", x4, y4);
+	appearBuilder.append ("S\n");
       }
       break;
     case typeStrikeOut:
       if (color) {
-        setColor(color, gFalse);
+        appearBuilder.setDrawColor(color, gFalse);
       }
       blendMultiply = gFalse;
-      appearBuf->append ("[] 0 d 1 w\n");
+      appearBuilder.append ("[] 0 d 1 w\n");
 
       for (i = 0; i < quadrilaterals->getQuadrilateralsLength(); ++i) {
 	double x1, y1, x2, y2;
@@ -3608,16 +3602,16 @@
 	x4 = quadrilaterals->getX4(i);
 	y4 = quadrilaterals->getY4(i);
 
-	appearBuf->appendf ("{0:.2f} {1:.2f} m\n", (x1+x3)/2., (y1+y3)/2.);
-	appearBuf->appendf ("{0:.2f} {1:.2f} l\n", (x2+x4)/2., (y2+y4)/2.);
-	appearBuf->append ("S\n");
+	appearBuilder.appendf ("{0:.2f} {1:.2f} m\n", (x1+x3)/2., (y1+y3)/2.);
+	appearBuilder.appendf ("{0:.2f} {1:.2f} l\n", (x2+x4)/2., (y2+y4)/2.);
+	appearBuilder.append ("S\n");
       }
       break;
     case typeSquiggly:
       if (color) {
-        setColor(color, gFalse);
+        appearBuilder.setDrawColor(color, gFalse);
       }
-      appearBuf->append ("[] 0 d 1 w\n");
+      appearBuilder.append ("[] 0 d 1 w\n");
 
       for (i = 0; i < quadrilaterals->getQuadrilateralsLength(); ++i) {
         double x1, y1, x2, y3;
@@ -3629,20 +3623,20 @@
         y3 = quadrilaterals->getY3(i);
         h6 = (y1 - y3) / 6.0;
 
-        appearBuf->appendf ("{0:.2f} {1:.2f} m\n", x1, y3+h6);
+        appearBuilder.appendf ("{0:.2f} {1:.2f} m\n", x1, y3+h6);
         bool down = false;
         do {
           down = !down; // Zigzag line
           x1 += 2;
-          appearBuf->appendf ("{0:.2f} {1:.2f} l\n", x1, y3 + (down ? 0 : h6));
+          appearBuilder.appendf ("{0:.2f} {1:.2f} l\n", x1, y3 + (down ? 0 : h6));
         } while (x1 < x2);
-        appearBuf->append ("S\n");
+        appearBuilder.append ("S\n");
       }
       break;
     default:
     case typeHighlight:
       if (color)
-        setColor(color, gTrue);
+        appearBuilder.setDrawColor(color, gTrue);
 
       double biggestBorder = 0;
       for (i = 0; i < quadrilaterals->getQuadrilateralsLength(); ++i) {
@@ -3663,41 +3657,36 @@
 	  biggestBorder = h4;
 	}
 
-	appearBuf->appendf ("{0:.2f} {1:.2f} m\n", x3, y3);
-	appearBuf->appendf ("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n",
+	appearBuilder.appendf ("{0:.2f} {1:.2f} m\n", x3, y3);
+	appearBuilder.appendf ("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n",
 			    x3 - h4, y3 + h4, x1 - h4, y1 - h4, x1, y1);
-	appearBuf->appendf ("{0:.2f} {1:.2f} l\n", x2, y2);
-	appearBuf->appendf ("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n",
+	appearBuilder.appendf ("{0:.2f} {1:.2f} l\n", x2, y2);
+	appearBuilder.appendf ("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n",
 			    x2 + h4, y2 - h4, x4 + h4, y4 + h4, x4, y4);
-	appearBuf->append ("f\n");
+	appearBuilder.append ("f\n");
       }
       appearBBox->setBorderWidth(biggestBorder);
       break;
     }
-    appearBuf->append ("Q\n");
+    appearBuilder.append ("Q\n");
 
-    Object aStream;
     double bbox[4];
     bbox[0] = appearBBox->getPageXMin();
     bbox[1] = appearBBox->getPageYMin();
     bbox[2] = appearBBox->getPageXMax();
     bbox[3] = appearBBox->getPageYMax();
-    aStream = createForm(bbox, gTrue, nullptr);
-    delete appearBuf;
+    Object aStream = createForm(appearBuilder.buffer(), bbox, gTrue, nullptr);
 
-    appearBuf = new GooString ("/GS0 gs\n/Fm0 Do");
+    GooString appearBuf("/GS0 gs\n/Fm0 Do");
     Dict *resDict = createResourcesDict("Fm0", std::move(aStream), "GS0", 1, blendMultiply ? "Multiply" : nullptr);
     if (ca == 1) {
-      appearance = createForm(bbox, gFalse, resDict);
+      appearance = createForm(&appearBuf, bbox, gFalse, resDict);
     } else {
-      aStream = createForm(bbox, gTrue, resDict);
-      delete appearBuf;
+      aStream = createForm(&appearBuf, bbox, gTrue, resDict);
 
-      appearBuf = new GooString ("/GS0 gs\n/Fm0 Do");
       Dict *resDict2 = createResourcesDict("Fm0", std::move(aStream), "GS0", ca, nullptr);
-      appearance = createForm(bbox, gFalse, resDict2);
+      appearance = createForm(&appearBuf, bbox, gFalse, resDict2);
     }
-    delete appearBuf;
   }
 
   // draw the appearance stream
@@ -3829,8 +3818,8 @@
 // TODO: Handle surrogate pairs in UTF-16.
 //       Should be able to generate output for any CID-keyed font.
 //       Doesn't handle vertical fonts--should it?
-void Annot::layoutText(GooString *text, GooString *outBuf, int *i,
-                             GfxFont *font, double *width, double widthLimit,
+void Annot::layoutText(const GooString *text, GooString *outBuf, int *i,
+                             const GfxFont *font, double *width, double widthLimit,
                              int *charCount, GBool noReencode)
 {
   CharCode c;
@@ -3906,13 +3895,12 @@
     if (noReencode) {
       outBuf->append(uChar);
     } else {
-      CharCodeToUnicode *ccToUnicode = font->getToUnicode();
+      const CharCodeToUnicode *ccToUnicode = font->getToUnicode();
       if (!ccToUnicode) {
         // This assumes an identity CMap.
         outBuf->append((uChar >> 8) & 0xff);
         outBuf->append(uChar & 0xff);
       } else if (ccToUnicode->mapToCharCode(&uChar, &c, 1)) {
-        ccToUnicode->decRefCnt();
         if (font->isCIDFont()) {
           // TODO: This assumes an identity CMap.  It should be extended to
           // handle the general case.
@@ -3923,7 +3911,6 @@
           outBuf->append(c);
         }
       } else {
-        ccToUnicode->decRefCnt();
         error(errSyntaxError, -1, "AnnotWidget::layoutText, cannot convert U+{0:04uX}", uChar);
       }
     }
@@ -4025,7 +4012,7 @@
 
 // Copy the given string to appearBuf, adding parentheses around it and
 // escaping characters as appropriate.
-void Annot::writeString(GooString *str, GooString *appearBuf)
+void AnnotAppearanceBuilder::writeString(const GooString &str)
 {
   char c;
   int i;
@@ -4032,8 +4019,8 @@
 
   appearBuf->append('(');
 
-  for (i = 0; i < str->getLength(); ++i) {
-    c = str->getChar(i);
+  for (i = 0; i < str.getLength(); ++i) {
+    c = str.getChar(i);
     if (c == '(' || c == ')' || c == '\\') {
       appearBuf->append('\\');
       appearBuf->append(c);
@@ -4048,24 +4035,26 @@
 }
 
 // Draw the variable text or caption for a field.
-void AnnotWidget::drawText(GooString *text, GooString *da, GfxResources *resources,
+bool AnnotAppearanceBuilder::drawText(const GooString *text, const GooString *da, const GfxResources *resources,
+    const AnnotBorder *border, const AnnotAppearanceCharacs *appearCharacs, const PDFRectangle *rect,
     GBool multiline, int comb, int quadding,
     GBool txField, GBool forceZapfDingbats,
+    XRef *xref, bool *addedDingbatsResource,
     GBool password) {
   GooList *daToks;
   GooString *tok, *convertedText;
-  GfxFont *font;
+  const GfxFont *font;
   double dx, dy;
   double fontSize, fontSize2, borderWidth, x, xPrev, y, w, wMax;
   int tfPos, tmPos, i, j;
   int rot;
   GBool freeText = gFalse;      // true if text should be freed before return
-  GBool freeFont = gFalse;
+  GfxFont *fontToFree = nullptr;
 
   //~ if there is no MK entry, this should use the existing content stream,
   //~ and only replace the marked content portion of it
   //~ (this is only relevant for Tx fields)
-  
+
   // parse the default appearance string
   tfPos = tmPos = -1;
   if (da) {
@@ -4096,6 +4085,10 @@
 
   // force ZapfDingbats
   if (forceZapfDingbats) {
+    assert(xref != nullptr);
+    assert(addedDingbatsResource != nullptr);
+    *addedDingbatsResource = false;
+
     if (tfPos >= 0) {
       tok = (GooString *)daToks->get(tfPos);
       if (tok->cmp("/ZaDb")) {
@@ -4118,10 +4111,10 @@
           r.num = -1;
           r.gen = -1;
           Dict *d = new Dict(xref);
-          font = new Gfx8BitFont(xref, "ZaDb", r, new GooString("ZapfDingbats"), fontType1, r, d);
+          fontToFree = new Gfx8BitFont(xref, "ZaDb", r, new GooString("ZapfDingbats"), fontType1, r, d);
           delete d;
-          freeFont = gTrue;
-          addDingbatsResource = gTrue;
+          font = fontToFree;
+          *addedDingbatsResource = true;
         } else {
           error(errSyntaxError, -1, "Unknown font in field's DA string");
         }
@@ -4138,7 +4131,7 @@
     if (daToks) {
       deleteGooList(daToks, GooString);
     }
-    return;
+    return false;
   }
 
   // get the border width
@@ -4152,9 +4145,10 @@
     else
       len = text->getLength();
 
-    text = new GooString;
+    GooString *newText = new GooString;
     for (i = 0; i < len; ++i)
-      text->append('*');
+      newText->append('*');
+    text = newText;
     freeText = gTrue;
   }
 
@@ -4201,7 +4195,7 @@
         y = dy - 3;
         i = 0;
         while (i < text->getLength()) {
-          layoutText(text, convertedText, &i, font, &w, wMax / fontSize, nullptr,
+          Annot::layoutText(text, convertedText, &i, font, &w, wMax / fontSize, nullptr,
                      forceZapfDingbats);
           y -= fontSize;
         }
@@ -4248,7 +4242,7 @@
     i = 0;
     xPrev = 0;
     while (i < text->getLength()) {
-      layoutText(text, convertedText, &i, font, &w, wMax / fontSize, nullptr,
+      Annot::layoutText(text, convertedText, &i, font, &w, wMax / fontSize, nullptr,
                  forceZapfDingbats);
       w *= fontSize;
 
@@ -4268,7 +4262,7 @@
 
       // draw the line
       appearBuf->appendf("{0:.2f} {1:.2f} Td\n", x - xPrev, -fontSize);
-      writeString(convertedText, appearBuf);
+      writeString(*convertedText);
       appearBuf->append(" Tj\n");
 
       // next line
@@ -4301,7 +4295,7 @@
       }
 
       i = 0;
-      layoutText(text, convertedText, &i, font, nullptr, 0.0, &charCount,
+      Annot::layoutText(text, convertedText, &i, font, nullptr, 0.0, &charCount,
                  forceZapfDingbats);
       if (charCount > comb)
         charCount = comb;
@@ -4364,10 +4358,9 @@
         x = 0.5 * (w - dx);
         appearBuf->appendf("{0:.2f} 0 Td\n", x - xPrev + w);
 
-        GooString *charBuf = new GooString(s, n);
-        writeString(charBuf, appearBuf);
+        GooString charBuf(s, n);
+        writeString(charBuf);
         appearBuf->append(" Tj\n");
-        delete charBuf;
 
         i++;
         s += n;
@@ -4378,7 +4371,7 @@
       // regular (non-comb) formatting
     } else {
       i = 0;
-      layoutText(text, convertedText, &i, font, &w, 0.0, nullptr,
+      Annot::layoutText(text, convertedText, &i, font, &w, 0.0, nullptr,
                  forceZapfDingbats);
 
       // compute font autosize
@@ -4435,7 +4428,7 @@
       }
 
       // write the text string
-      writeString(convertedText, appearBuf);
+      writeString(*convertedText);
       appearBuf->append(" Tj\n");
     }
   }
@@ -4452,17 +4445,19 @@
     delete text;
   }
   delete convertedText;
-  if (freeFont) {
-    font->decRefCnt();
+  if (fontToFree) {
+    fontToFree->decRefCnt();
   }
+
+  return true;
 }
 
 // Draw the variable text or caption for a field.
-void AnnotWidget::drawListBox(FormFieldChoice *fieldChoice,
-			      GooString *da, GfxResources *resources, int quadding) {
+bool AnnotAppearanceBuilder::drawListBox(const FormFieldChoice *fieldChoice, const AnnotBorder *border, const PDFRectangle *rect,
+			      const GooString *da, const GfxResources *resources, int quadding) {
   GooList *daToks;
   GooString *tok, *convertedText;
-  GfxFont *font;
+  const GfxFont *font;
   double fontSize, fontSize2, borderWidth, x, y, w, wMax;
   int tfPos, tmPos, i, j;
 
@@ -4519,7 +4514,7 @@
     if (daToks) {
       deleteGooList(daToks, GooString);
     }
-    return;
+    return false;
   }
 
   convertedText = new GooString;
@@ -4538,9 +4533,9 @@
           deleteGooList(daToks, GooString);
         }
         delete convertedText;
-        return;
+        return false;
       }
-      layoutText(fieldChoice->getChoice(i), convertedText, &j, font, &w, 0.0, nullptr, gFalse);
+      Annot::layoutText(fieldChoice->getChoice(i), convertedText, &j, font, &w, 0.0, nullptr, gFalse);
       if (w > wMax) {
         wMax = w;
       }
@@ -4578,7 +4573,7 @@
 
     // compute text width and start position
     j = 0;
-    layoutText(fieldChoice->getChoice(i), convertedText, &j, font, &w, 0.0, nullptr, gFalse);
+    Annot::layoutText(fieldChoice->getChoice(i), convertedText, &j, font, &w, 0.0, nullptr, gFalse);
     w *= fontSize;
     switch (quadding) {
     case quaddingLeftJustified:
@@ -4621,7 +4616,7 @@
     }
 
     // write the text string
-    writeString(convertedText, appearBuf);
+    writeString(*convertedText);
     appearBuf->append(" Tj\n");
 
     // cleanup
@@ -4637,27 +4632,29 @@
   }
 
   delete convertedText;
+
+  return true;
 }
 
-void AnnotWidget::drawBorder() {
+void AnnotAppearanceBuilder::drawFieldBorder(const FormField *field, const AnnotBorder *border, const AnnotAppearanceCharacs *appearCharacs, const PDFRectangle *rect) {
   int dashLength;
   double *dash;
   AnnotColor adjustedColor;
-  double w = border->getWidth();
+  const double w = border->getWidth();
 
-  AnnotColor *aColor = appearCharacs->getBorderColor();
+  const AnnotColor *aColor = appearCharacs->getBorderColor();
   if (!aColor)
     aColor = appearCharacs->getBackColor();
   if (!aColor)
     return;
 
-  double dx = rect->x2 - rect->x1;
-  double dy = rect->y2 - rect->y1;
+  const double dx = rect->x2 - rect->x1;
+  const double dy = rect->y2 - rect->y1;
 
   // radio buttons with no caption have a round border
-  GBool hasCaption = appearCharacs->getNormalCaption() != nullptr;
+  const GBool hasCaption = appearCharacs->getNormalCaption() != nullptr;
   if (field->getType() == formButton &&
-      static_cast<FormFieldButton*>(field)->getButtonType() == formButtonRadio && !hasCaption) {
+      static_cast<const FormFieldButton*>(field)->getButtonType() == formButtonRadio && !hasCaption) {
     double r = 0.5 * (dx < dy ? dx : dy);
     switch (border->getStyle()) {
     case AnnotBorder::borderDashed:
@@ -4672,21 +4669,21 @@
     case AnnotBorder::borderSolid:
     case AnnotBorder::borderUnderlined:
       appearBuf->appendf("{0:.2f} w\n", w);
-      setColor(aColor, gFalse);
+      setDrawColor(aColor, gFalse);
       drawCircle(0.5 * dx, 0.5 * dy, r - 0.5 * w, gFalse);
       break;
     case AnnotBorder::borderBeveled:
     case AnnotBorder::borderInset:
       appearBuf->appendf("{0:.2f} w\n", 0.5 * w);
-      setColor(aColor, gFalse);
+      setDrawColor(aColor, gFalse);
       drawCircle(0.5 * dx, 0.5 * dy, r - 0.25 * w, gFalse);
       adjustedColor = AnnotColor(*aColor);
       adjustedColor.adjustColor(border->getStyle() == AnnotBorder::borderBeveled ? 1 : -1);
-      setColor(&adjustedColor, gFalse);
+      setDrawColor(&adjustedColor, gFalse);
       drawCircleTopLeft(0.5 * dx, 0.5 * dy, r - 0.75 * w);
       adjustedColor = AnnotColor(*aColor);
       adjustedColor.adjustColor(border->getStyle() == AnnotBorder::borderBeveled ? -1 : 1);
-      setColor(&adjustedColor, gFalse);
+      setDrawColor(&adjustedColor, gFalse);
       drawCircleBottomRight(0.5 * dx, 0.5 * dy, r - 0.75 * w);
       break;
     }
@@ -4703,7 +4700,7 @@
       // fallthrough
     case AnnotBorder::borderSolid:
       appearBuf->appendf("{0:.2f} w\n", w);
-      setColor(aColor, gFalse);
+      setDrawColor(aColor, gFalse);
       appearBuf->appendf("{0:.2f} {0:.2f} {1:.2f} {2:.2f} re s\n",
                          0.5 * w, dx - w, dy - w);
       break;
@@ -4711,7 +4708,7 @@
     case AnnotBorder::borderInset:
       adjustedColor = AnnotColor(*aColor);
       adjustedColor.adjustColor(border->getStyle() == AnnotBorder::borderBeveled ? 1 : -1);
-      setColor(&adjustedColor, gTrue);
+      setDrawColor(&adjustedColor, gTrue);
       appearBuf->append("0 0 m\n");
       appearBuf->appendf("0 {0:.2f} l\n", dy);
       appearBuf->appendf("{0:.2f} {1:.2f} l\n", dx, dy);
@@ -4721,7 +4718,7 @@
       appearBuf->append("f\n");
       adjustedColor = AnnotColor(*aColor);
       adjustedColor.adjustColor(border->getStyle() == AnnotBorder::borderBeveled ? -1 : 1);
-      setColor(&adjustedColor, gTrue);
+      setDrawColor(&adjustedColor, gTrue);
       appearBuf->append("0 0 m\n");
       appearBuf->appendf("{0:.2f} 0 l\n", dx);
       appearBuf->appendf("{0:.2f} {1:.2f} l\n", dx, dy);
@@ -4732,7 +4729,7 @@
       break;
     case AnnotBorder::borderUnderlined:
       appearBuf->appendf("{0:.2f} w\n", w);
-      setColor(aColor, gFalse);
+      setDrawColor(aColor, gFalse);
       appearBuf->appendf("0 0 m {0:.2f} 0 l s\n", dx);
       break;
     }
@@ -4743,27 +4740,51 @@
   }
 }
 
-void AnnotWidget::drawFormFieldButton(GfxResources *resources, GooString *da) {
-  GooString *caption = nullptr;
+bool AnnotAppearanceBuilder::drawFormField(const FormField *field, const Form *form, const GfxResources *resources, const GooString *da, const AnnotBorder *border, const AnnotAppearanceCharacs *appearCharacs, const PDFRectangle *rect, const GooString *appearState, XRef *xref, bool *addedDingbatsResource)
+{
+  // draw the field contents
+  switch (field->getType()) {
+  case formButton:
+    return drawFormFieldButton(static_cast<const FormFieldButton *>(field), resources, da, border, appearCharacs, rect, appearState, xref, addedDingbatsResource);
+    break;
+  case formText:
+    return drawFormFieldText(static_cast<const FormFieldText *>(field), form, resources, da, border, appearCharacs, rect);
+  case formChoice:
+    return drawFormFieldChoice(static_cast<const FormFieldChoice *>(field), form, resources, da, border, appearCharacs, rect);
+    break;
+  case formSignature:
+    //~unimp
+    break;
+  case formUndef:
+  default:
+    error(errSyntaxError, -1, "Unknown field type");
+  }
+
+  return false;
+}
+
+
+bool AnnotAppearanceBuilder::drawFormFieldButton(const FormFieldButton *field, const GfxResources *resources, const GooString *da, const AnnotBorder *border, const AnnotAppearanceCharacs *appearCharacs, const PDFRectangle *rect, const GooString *appearState, XRef *xref, bool *addedDingbatsResource) {
+  const GooString *caption = nullptr;
   if (appearCharacs)
     caption = appearCharacs->getNormalCaption();
 
-  switch (static_cast<FormFieldButton *>(field)->getButtonType()) {
+  switch (field->getButtonType()) {
   case formButtonRadio: {
     //~ Acrobat doesn't draw a caption if there is no AP dict (?)
     if (appearState && appearState->cmp("Off") != 0 &&
-        static_cast<FormFieldButton *>(field)->getState(appearState->getCString())) {
+        field->getState(appearState->getCString())) {
       if (caption) {
-        drawText(caption, da, resources, gFalse, 0, fieldQuadCenter,
-                 gFalse, gTrue);
+        return drawText(caption, da, resources, border, appearCharacs, rect, gFalse, 0, fieldQuadCenter, gFalse, gTrue, xref, addedDingbatsResource, gFalse);
       } else if (appearCharacs) {
-        AnnotColor *aColor = appearCharacs->getBorderColor();
+        const AnnotColor *aColor = appearCharacs->getBorderColor();
         if (aColor) {
-          double dx = rect->x2 - rect->x1;
-          double dy = rect->y2 - rect->y1;
-          setColor(aColor, gTrue);
+          const double dx = rect->x2 - rect->x1;
+          const double dy = rect->y2 - rect->y1;
+          setDrawColor(aColor, gTrue);
           drawCircle(0.5 * dx, 0.5 * dy, 0.2 * (dx < dy ? dx : dy), gTrue);
         }
+        return true;
       }
     }
   }
@@ -4770,70 +4791,74 @@
     break;
   case formButtonPush:
     if (caption)
-      drawText(caption, da, resources, gFalse, 0, fieldQuadCenter, gFalse, gFalse);
+      return drawText(caption, da, resources, border, appearCharacs, rect, gFalse, 0, fieldQuadCenter, gFalse, gFalse, xref, addedDingbatsResource, gFalse);
     break;
   case formButtonCheck:
     if (appearState && appearState->cmp("Off") != 0) {
       if (!caption) {
         GooString checkMark("3");
-        drawText(&checkMark, da, resources, gFalse, 0, fieldQuadCenter, gFalse, gTrue);
+        return drawText(&checkMark, da, resources, border, appearCharacs, rect, gFalse, 0, fieldQuadCenter, gFalse, gTrue, xref, addedDingbatsResource, gFalse);
       } else {
-        drawText(caption, da, resources, gFalse, 0, fieldQuadCenter, gFalse, gTrue);
+        return drawText(caption, da, resources, border, appearCharacs, rect, gFalse, 0, fieldQuadCenter, gFalse, gTrue, xref, addedDingbatsResource, gFalse);
       }
     }
     break;
   }
+
+  return true;
 }
 
-void AnnotWidget::drawFormFieldText(GfxResources *resources, GooString *da) {
+bool AnnotAppearanceBuilder::drawFormFieldText(const FormFieldText *fieldText, const Form *form, const GfxResources *resources, const GooString *da, const AnnotBorder *border, const AnnotAppearanceCharacs *appearCharacs, const PDFRectangle *rect) {
   VariableTextQuadding quadding;
-  GooString *contents;
-  FormFieldText *fieldText = static_cast<FormFieldText *>(field);
+  const GooString *contents;
 
   contents = fieldText->getContent();
   if (contents) {
-    quadding = field->hasTextQuadding() ? field->getTextQuadding() : form->getTextQuadding();
+    quadding = fieldText->hasTextQuadding() ? fieldText->getTextQuadding() : form->getTextQuadding();
 
     int comb = 0;
     if (fieldText->isComb())
       comb = fieldText->getMaxLen();
 
-    drawText(contents, da, resources,
-             fieldText->isMultiline(), comb, quadding, gTrue, gFalse, fieldText->isPassword());
+    return drawText(contents, da, resources, border, appearCharacs, rect,
+             fieldText->isMultiline(), comb, quadding, gTrue, gFalse, nullptr, nullptr, fieldText->isPassword());
   }
+
+  return true;
 }
 
-void AnnotWidget::drawFormFieldChoice(GfxResources *resources, GooString *da) {
-  GooString *selected;
+bool AnnotAppearanceBuilder::drawFormFieldChoice(const FormFieldChoice *fieldChoice, const Form *form, const GfxResources *resources, const GooString *da, const AnnotBorder *border, const AnnotAppearanceCharacs *appearCharacs, const PDFRectangle *rect) {
+  const GooString *selected;
   VariableTextQuadding quadding;
-  FormFieldChoice *fieldChoice = static_cast<FormFieldChoice *>(field);
 
-  quadding = field->hasTextQuadding() ? field->getTextQuadding() : form->getTextQuadding();
+  quadding = fieldChoice->hasTextQuadding() ? fieldChoice->getTextQuadding() : form->getTextQuadding();
 
   if (fieldChoice->isCombo()) {
     selected = fieldChoice->getSelectedChoice();
     if (selected) {
-      drawText(selected, da, resources, gFalse, 0, quadding, gTrue, gFalse);
+      return drawText(selected, da, resources, border, appearCharacs, rect, gFalse, 0, quadding, gTrue, gFalse, nullptr, nullptr, gFalse);
       //~ Acrobat draws a popup icon on the right side
     }
   // list box
   } else {
-    drawListBox(fieldChoice, da, resources, quadding);
+    return drawListBox(fieldChoice, border, rect, da, resources, quadding);
   }
+
+  return true;
 }
 
-void AnnotWidget::generateFieldAppearance() {
+void AnnotWidget::generateFieldAppearance(bool *addedDingbatsResource) {
   GfxResources *resources;
-  GooString *da;
+  const GooString *da;
 
-  appearBuf = new GooString ();
+  AnnotAppearanceBuilder appearBuilder;
 
   // draw the background
   if (appearCharacs) {
-    AnnotColor *aColor = appearCharacs->getBackColor();
+    const AnnotColor *aColor = appearCharacs->getBackColor();
     if (aColor) {
-      setColor(aColor, gTrue);
-      appearBuf->appendf("0 0 {0:.2f} {1:.2f} re f\n",
+      appearBuilder.setDrawColor(aColor, gTrue);
+      appearBuilder.appendf("0 0 {0:.2f} {1:.2f} re f\n",
                          rect->x2 - rect->x1, rect->y2 - rect->y1);
     }
   }
@@ -4840,7 +4865,7 @@
 
   // draw the border
   if (appearCharacs && border && border->getWidth() > 0)
-    drawBorder();
+    appearBuilder.drawFieldBorder(field, border, appearCharacs, rect);
 
   da = field->getDefaultAppearance();
   if (!da)
@@ -4848,25 +4873,13 @@
 
   resources = form->getDefaultResources();
 
-  // draw the field contents
-  switch (field->getType()) {
-  case formButton:
-    drawFormFieldButton(resources, da);
-    break;
-  case formText:
-    drawFormFieldText(resources, da);
-    break;
-  case formChoice:
-    drawFormFieldChoice(resources, da);
-    break;
-  case formSignature:
-    //~unimp
-    break;
-  case formUndef:
-  default:
-    error(errSyntaxError, -1, "Unknown field type");
+  const bool success = appearBuilder.drawFormField(field, form, resources, da, border, appearCharacs, rect, appearState, xref, addedDingbatsResource);
+  if (!success && da != form->getDefaultAppearance()) {
+    da = form->getDefaultAppearance();
+    appearBuilder.drawFormField(field, form, resources, da, border, appearCharacs, rect, appearState, xref, addedDingbatsResource);
   }
 
+  const GooString *appearBuf = appearBuilder.buffer();
   // build the appearance stream dictionary
   Dict *appearDict = new Dict(xref);
   appearDict->add(copyString("Length"), Object(appearBuf->getLength()));
@@ -4885,12 +4898,9 @@
   }
 
   // build the appearance stream
-  MemStream *appearStream = new MemStream(copyString(appearBuf->getCString()), 0,
+  Stream *appearStream = new AutoFreeMemStream(copyString(appearBuf->getCString()), 0,
       appearBuf->getLength(), Object(appearDict));
-  appearance = Object(static_cast<Stream*>(appearStream));
-  delete appearBuf;
-
-  appearStream->setNeedFree(gTrue);
+  appearance = Object(appearStream);
 }
 
 void AnnotWidget::updateAppearanceStream()
@@ -4907,7 +4917,9 @@
     return;
 
   // Create the new appearance
-  generateFieldAppearance();
+  bool dummyAddDingbatsResource = false; // This is only update so if we didn't need to add
+                                         // the dingbats resource we should not need it now
+  generateFieldAppearance(&dummyAddDingbatsResource);
 
   // Fetch the appearance stream we've just created
   Object obj1 = appearance.fetch(xref);
@@ -4938,7 +4950,7 @@
     return;
 
   annotLocker();
-  addDingbatsResource = gFalse;
+  bool addDingbatsResource = false;
 
   // Only construct the appearance stream when
   // - annot doesn't have an AP or
@@ -4945,7 +4957,7 @@
   // - NeedAppearances is true
   if (field) {
     if (appearance.isNull() || (form && form->getNeedAppearances()))
-      generateFieldAppearance();
+      generateFieldAppearance(&addDingbatsResource);
   }
 
   // draw the appearance stream
@@ -5039,7 +5051,7 @@
     movie->getAspect(&width, &height);
 
     if (width != -1 && height != -1 && !poster.isNone()) {
-      appearBuf = new GooString ();
+      GooString *appearBuf = new GooString ();
       appearBuf->append ("q\n");
       appearBuf->appendf ("{0:d} 0 0 {1:d} 0 0 cm\n", width, height);
       appearBuf->append ("/MImg Do\n");
@@ -5071,13 +5083,12 @@
       formDict->set("Matrix", Object(matrix));
       formDict->set("Resources", Object(resDict));
 
-      MemStream *mStream = new MemStream(copyString(appearBuf->getCString()), 0,
+      Stream *mStream = new AutoFreeMemStream(copyString(appearBuf->getCString()), 0,
 			      appearBuf->getLength(), Object(formDict));
-      mStream->setNeedFree(gTrue);
       delete appearBuf;
 
       Dict *dict = new Dict(gfx->getXRef());
-      dict->set("FRM", Object(static_cast<Stream*>(mStream)));
+      dict->set("FRM", Object(mStream));
 
       Dict *resDict2 = new Dict(gfx->getXRef());
       resDict2->set("XObject", Object(dict));
@@ -5096,7 +5107,7 @@
       bbox[0] = bbox[1] = 0;
       bbox[2] = width;
       bbox[3] = height;
-      appearance = createForm(bbox, gFalse, resDict2);
+      appearance = createForm(appearBuf, bbox, gFalse, resDict2);
       delete appearBuf;
     }
   }
@@ -5327,19 +5338,19 @@
   if (appearance.isNull()) {
     ca = opacity;
 
-    appearBuf = new GooString ();
-    appearBuf->append ("q\n");
+    AnnotAppearanceBuilder appearBuilder;
+    appearBuilder.append ("q\n");
     if (color)
-      setColor(color, gFalse);
+      appearBuilder.setDrawColor(color, gFalse);
 
     double borderWidth = border->getWidth();
-    setLineStyleForBorder(border);
+    appearBuilder.setLineStyleForBorder(border);
 
     if (interiorColor)
-      setColor(interiorColor, gTrue);
+      appearBuilder.setDrawColor(interiorColor, gTrue);
 
     if (type == typeSquare) {
-      appearBuf->appendf ("{0:.2f} {1:.2f} {2:.2f} {3:.2f} re\n",
+      appearBuilder.appendf ("{0:.2f} {1:.2f} {2:.2f} {3:.2f} re\n",
                           borderWidth / 2.0, borderWidth / 2.0,
                           (rect->x2 - rect->x1) - borderWidth,
                           (rect->y2 - rect->y1) - borderWidth);
@@ -5354,7 +5365,7 @@
 
       x1 = b;
       y1 = height / 2.0;
-      appearBuf->appendf ("{0:.2f} {1:.2f} m\n", x1, y1);
+      appearBuilder.appendf ("{0:.2f} {1:.2f} m\n", x1, y1);
 
       y1 += height / 4.0;
       x2 = width / 4.0;
@@ -5361,7 +5372,7 @@
       y2 = height - b;
       x3 = width / 2.0;
       y3 = y2;
-      appearBuf->appendf ("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n",
+      appearBuilder.appendf ("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n",
                           x1, y1, x2, y2, x3, y3);
       x2 = width - b;
       y2 = y1;
@@ -5369,7 +5380,7 @@
       y1 = y3;
       x3 = x2;
       y3 = height / 2.0;
-      appearBuf->appendf ("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n",
+      appearBuilder.appendf ("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n",
                           x1, y1, x2, y2, x3, y3);
 
       x2 = x1;
@@ -5378,7 +5389,7 @@
       y1 = height / 4.0;
       x3 = width / 2.0;
       y3 = b;
-      appearBuf->appendf ("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n",
+      appearBuilder.appendf ("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n",
                           x1, y1, x2, y2, x3, y3);
 
       x2 = b;
@@ -5387,16 +5398,16 @@
       y1 = b;
       x3 = b;
       y3 = height / 2.0;
-      appearBuf->appendf ("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n",
+      appearBuilder.appendf ("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:.2f} {5:.2f} c\n",
                           x1, y1, x2, y2, x3, y3);
     }
 
     if (interiorColor && interiorColor->getSpace() != AnnotColor::colorTransparent)
-      appearBuf->append ("b\n");
+      appearBuilder.append ("b\n");
     else
-      appearBuf->append ("S\n");
+      appearBuilder.append ("S\n");
 
-    appearBuf->append ("Q\n");
+    appearBuilder.append ("Q\n");
 
     double bbox[4];
     bbox[0] = bbox[1] = 0;
@@ -5403,16 +5414,14 @@
     bbox[2] = rect->x2 - rect->x1;
     bbox[3] = rect->y2 - rect->y1;
     if (ca == 1) {
-      appearance = createForm(bbox, gFalse, nullptr);
+      appearance = createForm(appearBuilder.buffer(), bbox, gFalse, nullptr);
     } else {
-      Object aStream = createForm(bbox, gTrue, nullptr);
-      delete appearBuf;
+      Object aStream = createForm(appearBuilder.buffer(), bbox, gTrue, nullptr);
 
-      appearBuf = new GooString ("/GS0 gs\n/Fm0 Do");
+      GooString appearBuf("/GS0 gs\n/Fm0 Do");
       Dict *resDict = createResourcesDict("Fm0", std::move(aStream), "GS0", ca, nullptr);
-      appearance = createForm(bbox, gFalse, resDict);
+      appearance = createForm(&appearBuf, bbox, gFalse, resDict);
     }
-    delete appearBuf;
   }
 
   // draw the appearance stream
@@ -5624,55 +5633,53 @@
     appearBBox = new AnnotAppearanceBBox(rect);
     ca = opacity;
 
-    appearBuf = new GooString ();
-    appearBuf->append ("q\n");
+    AnnotAppearanceBuilder appearBuilder;
+    appearBuilder.append ("q\n");
 
     if (color) {
-      setColor(color, gFalse);
+      appearBuilder.setDrawColor(color, gFalse);
     }
 
-    setLineStyleForBorder(border);
+    appearBuilder.setLineStyleForBorder(border);
     appearBBox->setBorderWidth(std::max(1., border->getWidth()));
 
     if (interiorColor) {
-      setColor(interiorColor, gTrue);
+      appearBuilder.setDrawColor(interiorColor, gTrue);
     }
 
     if (vertices->getCoordsLength() != 0) {
-      appearBuf->appendf ("{0:.2f} {1:.2f} m\n", vertices->getX(0) - rect->x1, vertices->getY(0) - rect->y1);
+      appearBuilder.appendf ("{0:.2f} {1:.2f} m\n", vertices->getX(0) - rect->x1, vertices->getY(0) - rect->y1);
       appearBBox->extendTo (vertices->getX(0) - rect->x1, vertices->getY(0) - rect->y1);
 
       for (int i = 1; i < vertices->getCoordsLength(); ++i) {
-        appearBuf->appendf ("{0:.2f} {1:.2f} l\n", vertices->getX(i) - rect->x1, vertices->getY(i) - rect->y1);
+        appearBuilder.appendf ("{0:.2f} {1:.2f} l\n", vertices->getX(i) - rect->x1, vertices->getY(i) - rect->y1);
         appearBBox->extendTo (vertices->getX(i) - rect->x1, vertices->getY(i) - rect->y1);
       }
 
       if (type == typePolygon) {
         if (interiorColor && interiorColor->getSpace() != AnnotColor::colorTransparent) {
-          appearBuf->append ("b\n");
+          appearBuilder.append ("b\n");
         } else {
-          appearBuf->append ("s\n");
+          appearBuilder.append ("s\n");
         }
       } else {
-        appearBuf->append ("S\n");
+        appearBuilder.append ("S\n");
       }
     }
 
-    appearBuf->append ("Q\n");
+    appearBuilder.append ("Q\n");
 
     double bbox[4];
     appearBBox->getBBoxRect(bbox);
     if (ca == 1) {
-      appearance = createForm(bbox, gFalse, nullptr);
+      appearance = createForm(appearBuilder.buffer(), bbox, gFalse, nullptr);
     } else {
-      Object aStream = createForm(bbox, gTrue, nullptr);
-      delete appearBuf;
+      Object aStream = createForm(appearBuilder.buffer(), bbox, gTrue, nullptr);
 
-      appearBuf = new GooString ("/GS0 gs\n/Fm0 Do");
+      GooString appearBuf("/GS0 gs\n/Fm0 Do");
       Dict *resDict = createResourcesDict("Fm0", std::move(aStream), "GS0", ca, nullptr);
-      appearance = createForm(bbox, gFalse, resDict);
+      appearance = createForm(&appearBuf, bbox, gFalse, resDict);
     }
-    delete appearBuf;
   }
 
   // draw the appearance stream
@@ -5842,46 +5849,44 @@
     appearBBox = new AnnotAppearanceBBox(rect);
     ca = opacity;
 
-    appearBuf = new GooString ();
-    appearBuf->append ("q\n");
+    AnnotAppearanceBuilder appearBuilder;
+    appearBuilder.append ("q\n");
 
     if (color) {
-      setColor(color, gFalse);
+      appearBuilder.setDrawColor(color, gFalse);
     }
 
-    setLineStyleForBorder(border);
+    appearBuilder.setLineStyleForBorder(border);
     appearBBox->setBorderWidth(std::max(1., border->getWidth()));
 
     for (int i = 0; i < inkListLength; ++i) {
       const AnnotPath * path = inkList[i];
       if (path && path->getCoordsLength() != 0) {
-        appearBuf->appendf ("{0:.2f} {1:.2f} m\n", path->getX(0) - rect->x1, path->getY(0) - rect->y1);
+        appearBuilder.appendf ("{0:.2f} {1:.2f} m\n", path->getX(0) - rect->x1, path->getY(0) - rect->y1);
         appearBBox->extendTo (path->getX(0) - rect->x1, path->getY(0) - rect->y1);
 
         for (int j = 1; j < path->getCoordsLength(); ++j) {
-          appearBuf->appendf ("{0:.2f} {1:.2f} l\n", path->getX(j) - rect->x1, path->getY(j) - rect->y1);
+          appearBuilder.appendf ("{0:.2f} {1:.2f} l\n", path->getX(j) - rect->x1, path->getY(j) - rect->y1);
           appearBBox->extendTo (path->getX(j) - rect->x1, path->getY(j) - rect->y1);
         }
 
-        appearBuf->append ("S\n");
+        appearBuilder.append ("S\n");
       }
     }
 
-    appearBuf->append ("Q\n");
+    appearBuilder.append ("Q\n");
 
     double bbox[4];
     appearBBox->getBBoxRect(bbox);
     if (ca == 1) {
-      appearance = createForm(bbox, gFalse, nullptr);
+      appearance = createForm(appearBuilder.buffer(), bbox, gFalse, nullptr);
     } else {
-      Object aStream = createForm(bbox, gTrue, nullptr);
-      delete appearBuf;
+      Object aStream = createForm(appearBuilder.buffer(), bbox, gTrue, nullptr);
 
-      appearBuf = new GooString ("/GS0 gs\n/Fm0 Do");
+      GooString appearBuf("/GS0 gs\n/Fm0 Do");
       Dict *resDict = createResourcesDict("Fm0", std::move(aStream), "GS0", ca, nullptr);
-      appearance = createForm(bbox, gFalse, resDict);
+      appearance = createForm(&appearBuf, bbox, gFalse, resDict);
     }
-    delete appearBuf;
   }
 
   // draw the appearance stream
@@ -6061,37 +6066,35 @@
   if (appearance.isNull()) {
     ca = opacity;
 
-    appearBuf = new GooString ();
+    AnnotAppearanceBuilder appearBuilder;
 
-    appearBuf->append ("q\n");
+    appearBuilder.append ("q\n");
     if (color)
-      setColor(color, gTrue);
+      appearBuilder.setDrawColor(color, gTrue);
     else
-      appearBuf->append ("1 1 1 rg\n");
+      appearBuilder.append ("1 1 1 rg\n");
     if (!name->cmp("PushPin"))
-      appearBuf->append (ANNOT_FILE_ATTACHMENT_AP_PUSHPIN);
+      appearBuilder.append (ANNOT_FILE_ATTACHMENT_AP_PUSHPIN);
     else if (!name->cmp("Paperclip"))
-      appearBuf->append (ANNOT_FILE_ATTACHMENT_AP_PAPERCLIP);
+      appearBuilder.append (ANNOT_FILE_ATTACHMENT_AP_PAPERCLIP);
     else if (!name->cmp("Graph"))
-      appearBuf->append (ANNOT_FILE_ATTACHMENT_AP_GRAPH);
+      appearBuilder.append (ANNOT_FILE_ATTACHMENT_AP_GRAPH);
     else if (!name->cmp("Tag"))
-      appearBuf->append (ANNOT_FILE_ATTACHMENT_AP_TAG);
-    appearBuf->append ("Q\n");
+      appearBuilder.append (ANNOT_FILE_ATTACHMENT_AP_TAG);
+    appearBuilder.append ("Q\n");
 
     double bbox[4];
     bbox[0] = bbox[1] = 0;
     bbox[2] = bbox[3] = 24;
     if (ca == 1) {
-      appearance = createForm (bbox, gFalse, nullptr);
+      appearance = createForm (appearBuilder.buffer(), bbox, gFalse, nullptr);
     } else {
-      Object aStream = createForm (bbox, gTrue, nullptr);
-      delete appearBuf;
+      Object aStream = createForm (appearBuilder.buffer(), bbox, gTrue, nullptr);
 
-      appearBuf = new GooString ("/GS0 gs\n/Fm0 Do");
+      GooString appearBuf("/GS0 gs\n/Fm0 Do");
       Dict *resDict = createResourcesDict("Fm0", std::move(aStream), "GS0", ca, nullptr);
-      appearance = createForm(bbox, gFalse, resDict);
+      appearance = createForm(&appearBuf, bbox, gFalse, resDict);
     }
-    delete appearBuf;
   }
 
   // draw the appearance stream
@@ -6216,33 +6219,31 @@
   if (appearance.isNull()) {
     ca = opacity;
 
-    appearBuf = new GooString ();
+    AnnotAppearanceBuilder appearBuilder;
 
-    appearBuf->append ("q\n");
+    appearBuilder.append ("q\n");
     if (color)
-      setColor(color, gTrue);
+      appearBuilder.setDrawColor(color, gTrue);
     else
-      appearBuf->append ("1 1 1 rg\n");
+      appearBuilder.append ("1 1 1 rg\n");
     if (!name->cmp("Speaker"))
-      appearBuf->append (ANNOT_SOUND_AP_SPEAKER);
+      appearBuilder.append (ANNOT_SOUND_AP_SPEAKER);
     else if (!name->cmp("Mic"))
-      appearBuf->append (ANNOT_SOUND_AP_MIC);
-    appearBuf->append ("Q\n");
+      appearBuilder.append (ANNOT_SOUND_AP_MIC);
+    appearBuilder.append ("Q\n");
 
     double bbox[4];
     bbox[0] = bbox[1] = 0;
     bbox[2] = bbox[3] = 24;
     if (ca == 1) {
-      appearance = createForm(bbox, gFalse, nullptr);
+      appearance = createForm(appearBuilder.buffer(), bbox, gFalse, nullptr);
     } else {
-      Object aStream = createForm(bbox, gTrue, nullptr);
-      delete appearBuf;
+      Object aStream = createForm(appearBuilder.buffer(), bbox, gTrue, nullptr);
 
-      appearBuf = new GooString ("/GS0 gs\n/Fm0 Do");
+      GooString appearBuf("/GS0 gs\n/Fm0 Do");
       Dict *resDict = createResourcesDict("Fm0", std::move(aStream), "GS0", ca, nullptr);
-      appearance = createForm(bbox, gFalse, resDict);
+      appearance = createForm(&appearBuf, bbox, gFalse, resDict);
     }
-    delete appearBuf;
   }
 
   // draw the appearance stream
@@ -6580,7 +6581,7 @@
   delete name;
 }
 
-GooString* AnnotRichMedia::Asset::getName() const {
+const GooString* AnnotRichMedia::Asset::getName() const {
   return name;
 }
 
@@ -6679,7 +6680,7 @@
   return instances[index];
 }
 
-GooString* AnnotRichMedia::Configuration::getName() const {
+const GooString* AnnotRichMedia::Configuration::getName() const {
   return name;
 }
 
@@ -6740,7 +6741,7 @@
   delete flashVars;
 }
 
-GooString* AnnotRichMedia::Params::getFlashVars() const {
+const GooString* AnnotRichMedia::Params::getFlashVars() const {
   return flashVars;
 }
 
@@ -6913,3 +6914,37 @@
   }
   gfree(annots);
 }
+
+
+//------------------------------------------------------------------------
+// AnnotAppearanceBuilder
+//------------------------------------------------------------------------
+
+AnnotAppearanceBuilder::AnnotAppearanceBuilder()
+ : appearBuf(new GooString())
+{
+}
+
+AnnotAppearanceBuilder::~AnnotAppearanceBuilder()
+{
+    delete appearBuf;
+}
+
+void AnnotAppearanceBuilder::append(const char *text)
+{
+    appearBuf->append(text);
+}
+
+void AnnotAppearanceBuilder::appendf(const char *fmt, ...) GOOSTRING_FORMAT
+{
+  va_list argList;
+
+  va_start(argList, fmt);
+  appearBuf->appendfv(fmt, argList);
+  va_end(argList);
+}
+
+const GooString *AnnotAppearanceBuilder::buffer() const
+{
+    return appearBuf;
+}

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/Annot.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/Annot.h	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/Annot.h	2018-04-29 00:37:13 UTC (rev 47480)
@@ -26,6 +26,7 @@
 // Copyright (C) 2012, 2015 Tobias Koenig <tokoe at kdab.com>
 // Copyright (C) 2013 Thomas Freitag <Thomas.Freitag at alfa.de>
 // Copyright (C) 2013, 2017 Adrian Johnson <ajohnson at redneon.com>
+// Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. 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
@@ -51,6 +52,8 @@
 class Form;
 class FormWidget;
 class FormField;
+class FormFieldButton;
+class FormFieldText;
 class FormFieldChoice;
 class PDFRectangle;
 class Movie;
@@ -444,14 +447,14 @@
   AnnotAppearanceCharacs(const AnnotAppearanceCharacs &) = delete;
   AnnotAppearanceCharacs& operator=(const AnnotAppearanceCharacs &) = delete;
 
-  int getRotation() { return rotation; }
-  AnnotColor *getBorderColor() { return borderColor; }
-  AnnotColor *getBackColor() { return backColor; }
-  GooString *getNormalCaption() { return normalCaption; }
-  GooString *getRolloverCaption() { return rolloverCaption; }
-  GooString *getAlternateCaption() { return alternateCaption; }
-  AnnotIconFit *getIconFit() { return iconFit; }
-  AnnotAppearanceCharacsTextPos getPosition() { return position; }
+  int getRotation() const { return rotation; }
+  const AnnotColor *getBorderColor() const { return borderColor; }
+  const AnnotColor *getBackColor() const { return backColor; }
+  const GooString *getNormalCaption() const { return normalCaption; }
+  const GooString *getRolloverCaption() const { return rolloverCaption; }
+  const GooString *getAlternateCaption() const { return alternateCaption; }
+  const AnnotIconFit *getIconFit() const { return iconFit; }
+  AnnotAppearanceCharacsTextPos getPosition() const { return position; }
 
 protected:
 
@@ -495,6 +498,49 @@
 };
 
 //------------------------------------------------------------------------
+// AnnotAppearanceBuilder
+//------------------------------------------------------------------------
+
+class AnnotAppearanceBuilder {
+public:
+  AnnotAppearanceBuilder();
+  ~AnnotAppearanceBuilder();
+
+  AnnotAppearanceBuilder(const AnnotAppearanceBuilder &) = delete;
+  AnnotAppearanceBuilder& operator=(const AnnotAppearanceBuilder &) = delete;
+
+  void setDrawColor(const AnnotColor *color, GBool fill);
+  void setLineStyleForBorder(const AnnotBorder *border);
+  void drawCircle(double cx, double cy, double r, GBool fill);
+  void drawCircleTopLeft(double cx, double cy, double r);
+  void drawCircleBottomRight(double cx, double cy, double r);
+  void drawFieldBorder(const FormField *field, const AnnotBorder *border, const AnnotAppearanceCharacs *appearCharacs, const PDFRectangle *rect);
+  bool drawFormField(const FormField *field, const Form *form, const GfxResources *resources, const GooString *da, const AnnotBorder *border, const AnnotAppearanceCharacs *appearCharacs, const PDFRectangle *rect, const GooString *appearState, XRef *xref, bool *addedDingbatsResource);
+
+  void writeString(const GooString &str);
+
+  void append(const char *text);
+  void appendf(const char *fmt, ...) GOOSTRING_FORMAT;
+
+  const GooString *buffer() const;
+
+private:
+  bool drawListBox(const FormFieldChoice *fieldChoice, const AnnotBorder *border, const PDFRectangle *rect,
+		   const GooString *da, const GfxResources *resources, int quadding);
+  bool drawFormFieldButton(const FormFieldButton *field, const GfxResources *resources, const GooString *da, const AnnotBorder *border, const AnnotAppearanceCharacs *appearCharacs, const PDFRectangle *rect, const GooString *appearState, XRef *xref, bool *addedDingbatsResource);
+  bool drawFormFieldText(const FormFieldText *fieldText, const Form *form, const GfxResources *resources, const GooString *da, const AnnotBorder *border, const AnnotAppearanceCharacs *appearCharacs, const PDFRectangle *rect);
+  bool drawFormFieldChoice(const FormFieldChoice *fieldChoice, const Form *form, const GfxResources *resources, const GooString *da, const AnnotBorder *border, const AnnotAppearanceCharacs *appearCharacs, const PDFRectangle *rect);
+  bool drawText(const GooString *text, const GooString *da, const GfxResources *resources,
+		const AnnotBorder *border, const AnnotAppearanceCharacs *appearCharacs, const PDFRectangle *rect,
+		GBool multiline, int comb, int quadding,
+		GBool txField, GBool forceZapfDingbats,
+		XRef *xref, bool *addedDingbatsResource, // xref and addedDingbatsResource both must not be null if forceZapfDingbats is passed
+		GBool password);
+
+  GooString *appearBuf;
+};
+
+//------------------------------------------------------------------------
 // Annot
 //------------------------------------------------------------------------
 
@@ -617,13 +663,13 @@
   AnnotSubtype getType() const { return type; }
   PDFRectangle *getRect() const { return rect; }
   void getRect(double *x1, double *y1, double *x2, double *y2) const;
-  GooString *getContents() const { return contents; }
+  const GooString *getContents() const { return contents; }
   int getPageNum() const { return page; }
-  GooString *getName() const { return name; }
-  GooString *getModified() const { return modified; }
+  const GooString *getName() const { return name; }
+  const GooString *getModified() const { return modified; }
   Guint getFlags() const { return flags; }
   AnnotAppearance *getAppearStreams() const { return appearStreams; }
-  GooString *getAppearState() const { return appearState; }
+  const GooString *getAppearState() const { return appearState; }
   AnnotBorder *getBorder() const { return border; }
   AnnotColor *getColor() const { return color; }
   int getTreeKey() const { return treeKey; }
@@ -633,6 +679,10 @@
   // Check if point is inside the annot rectangle.
   GBool inRect(double x, double y) const;
 
+  static void layoutText(const GooString *text, GooString *outBuf, int *i, const GfxFont *font,
+		  double *width, double widthLimit, int *charCount,
+		  GBool noReencode);
+
 private:
   void readArrayNum(Object *pdfArray, int key, double *value);
   // write vStr[i:j[ in appearBuf
@@ -644,16 +694,7 @@
 protected:
   virtual ~Annot();
   virtual void removeReferencedObjects(); // Called by Page::removeAnnot
-  void setColor(AnnotColor *color, GBool fill);
-  void setLineStyleForBorder(AnnotBorder *border);
-  void drawCircle(double cx, double cy, double r, GBool fill);
-  void drawCircleTopLeft(double cx, double cy, double r);
-  void drawCircleBottomRight(double cx, double cy, double r);
-  void layoutText(GooString *text, GooString *outBuf, int *i, GfxFont *font,
-		  double *width, double widthLimit, int *charCount,
-		  GBool noReencode);
-  void writeString(GooString *str, GooString *appearBuf);
-  Object createForm(double *bbox, GBool transparencyGroup, Dict *resDict);
+  Object createForm(const GooString *appearBuf, double *bbox, GBool transparencyGroup, Dict *resDict);
   Dict *createResourcesDict(const char *formName, Object &&formStream, const char *stateName,
 			   double opacity, const char *blendMode);
   GBool isVisible(GBool printing);
@@ -691,7 +732,6 @@
   PDFDoc *doc;
   XRef *xref;			// the xref table for this PDF file
   Ref ref;                      // object ref identifying this annotation
-  GooString *appearBuf;
   AnnotBorder *border;          // Border, BS
   AnnotColor *color;            // C
   double fontSize; 
@@ -742,13 +782,13 @@
   ~AnnotMarkup();
 
   // getters
-  GooString *getLabel() const { return label; }
+  const GooString *getLabel() const { return label; }
   AnnotPopup *getPopup() const { return popup; }
   double getOpacity() const { return opacity; }
   // getRC
-  GooString *getDate() const { return date; }
+  const GooString *getDate() const { return date; }
   int getInReplyToID() const { return inReplyTo.num; }
-  GooString *getSubject() const { return subject; }
+  const GooString *getSubject() const { return subject; }
   AnnotMarkupReplyType getReplyTo() const { return replyTo; }
   AnnotExternalDataType getExData() const { return exData; }
 
@@ -805,7 +845,7 @@
 
   // getters
   GBool getOpen() const { return open; }
-  GooString *getIcon() const { return icon; }
+  const GooString *getIcon() const { return icon; }
   AnnotTextState getState() const { return state; }
 
   void setOpen(GBool openA);
@@ -836,7 +876,7 @@
 
   void draw(Gfx *gfx, GBool printing) override;
 
-  GooString* getTitle() { return title; }
+  const GooString* getTitle() const { return title; }
   Movie* getMovie() { return movie; }
 
  private:
@@ -858,7 +898,7 @@
   AnnotScreen(PDFDoc *docA, Object *dictObject, Object *obj);
   ~AnnotScreen();
 
-  GooString* getTitle() { return title; }
+  const GooString* getTitle() const { return title; }
 
   AnnotAppearanceCharacs *getAppearCharacs() { return appearCharacs; }
   LinkAction* getAction() { return action; } // The caller should now delete the result
@@ -947,10 +987,10 @@
   void setIntent(AnnotFreeTextIntent new_intent);
 
   // getters
-  GooString *getAppearanceString() const { return appearanceString; }
+  const GooString *getAppearanceString() const { return appearanceString; }
   AnnotFreeTextQuadding getQuadding() const { return quadding; }
   // return rc
-  GooString *getStyleString() const { return styleString; }
+  const GooString *getStyleString() const { return styleString; }
   AnnotCalloutLine *getCalloutLine() const {  return calloutLine; }
   AnnotFreeTextIntent getIntent() const { return intent; }
   AnnotBorderEffect *getBorderEffect() const { return borderEffect; }
@@ -1096,7 +1136,7 @@
   void setIcon(GooString *new_icon);
 
   // getters
-  GooString *getIcon() const { return icon; }
+  const GooString *getIcon() const { return icon; }
 
 private:
 
@@ -1266,7 +1306,7 @@
 
   // getters
   Object *getFile() { return &file; }
-  GooString *getName() const { return name; }
+  const GooString *getName() const { return name; }
 
 private:
 
@@ -1294,7 +1334,7 @@
 
   // getters
   Sound *getSound() { return sound; }
-  GooString *getName() const { return name; }
+  const GooString *getName() const { return name; }
 
 private:
 
@@ -1327,11 +1367,7 @@
 
   void draw(Gfx *gfx, GBool printing) override;
 
-  void drawBorder();
-  void drawFormFieldButton(GfxResources *resources, GooString *da);
-  void drawFormFieldText(GfxResources *resources, GooString *da);
-  void drawFormFieldChoice(GfxResources *resources, GooString *da);
-  void generateFieldAppearance ();
+  void generateFieldAppearance (bool *addDingbatsResource);
   void updateAppearanceStream ();
 
   AnnotWidgetHighlightMode getMode() { return mode; }
@@ -1345,13 +1381,6 @@
 
   void initialize(PDFDoc *docA, Dict *dict);
 
-  void drawText(GooString *text, GooString *da, GfxResources *resources,
-		GBool multiline, int comb, int quadding,
-		GBool txField, GBool forceZapfDingbats,
-		GBool password=false);
-  void drawListBox(FormFieldChoice *fieldChoice,
-		   GooString *da, GfxResources *resources, int quadding);
-
   Form *form;
   FormField *field;                       // FormField object for this annotation
   AnnotWidgetHighlightMode mode;          // H  (Default I)
@@ -1361,7 +1390,6 @@
   // inherited  from Annot
   // AnnotBorderBS border;                // BS
   Dict *parent;                           // Parent
-  GBool addDingbatsResource;
   Ref updatedAppearanceStream; // {-1,-1} if updateAppearanceStream has never been called
 };
 
@@ -1438,7 +1466,7 @@
     Params(const Params &) = delete;
     Params& operator=(const Params &) = delete;
 
-    GooString* getFlashVars() const;
+    const GooString* getFlashVars() const;
 
   private:
     // optional
@@ -1485,7 +1513,7 @@
     Configuration& operator=(const Configuration &) = delete;
 
     Type getType() const;
-    GooString* getName() const;
+    const GooString* getName() const;
     int getInstancesCount() const;
     Instance* getInstance(int index) const;
 
@@ -1507,7 +1535,7 @@
     Asset(const Asset &) = delete;
     Asset& operator=(const Asset &) = delete;
 
-    GooString* getName() const;
+    const GooString* getName() const;
     Object* getFileSpec() const;
 
   private:

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/CMap.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/CMap.cc	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/CMap.cc	2018-04-29 00:37:13 UTC (rev 47480)
@@ -14,7 +14,7 @@
 // under GPL version 2 or later
 //
 // Copyright (C) 2008 Koji Otani <sho at bbr.jp>
-// Copyright (C) 2008, 2009, 2017 Albert Astals Cid <aacid at kde.org>
+// Copyright (C) 2008, 2009, 2017, 2018 Albert Astals Cid <aacid at kde.org>
 // Copyright (C) 2013 Fabio D'Urso <fabiodurso at hotmail.it>
 // Copyright (C) 2017 Adrian Johnson <ajohnson at redneon.com>
 //
@@ -478,7 +478,7 @@
   return !collection->cmp(collectionA) && !cMapName->cmp(cMapNameA);
 }
 
-CID CMap::getCID(char *s, int len, CharCode *c, int *nUsed) {
+CID CMap::getCID(const char *s, int len, CharCode *c, int *nUsed) {
   CMapVectorEntry *vec;
   CharCode cc;
   int n, i;

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/CMap.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/CMap.h	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/CMap.h	2018-04-29 00:37:13 UTC (rev 47480)
@@ -89,7 +89,7 @@
   // Return the CID corresponding to the character code starting at
   // <s>, which contains <len> bytes.  Sets *<c> to the char code, and
   // *<nUsed> to the number of bytes used by the char code.
-  CID getCID(char *s, int len, CharCode *c, int *nUsed);
+  CID getCID(const char *s, int len, CharCode *c, int *nUsed);
 
   // Return the writing mode (0=horizontal, 1=vertical).
   int getWMode() { return wMode; }

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/CairoOutputDev.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/CairoOutputDev.cc	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/CairoOutputDev.cc	2018-04-29 00:37:13 UTC (rev 47480)
@@ -29,6 +29,7 @@
 // Copyright (C) 2012 Patrick Pfeifer <p2000 at mailinator.com>
 // Copyright (C) 2012, 2015, 2016 Jason Crain <jason at aquaticape.us>
 // Copyright (C) 2015 Suzuki Toshiya <mpsuzuki at hiroshima-u.ac.jp>
+// Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. 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
@@ -1379,7 +1380,7 @@
   cairo_restore (cairo);
 }
 
-void CairoOutputDev::beginString(GfxState *state, GooString *s)
+void CairoOutputDev::beginString(GfxState *state, const GooString *s)
 {
   int len = s->getLength();
 
@@ -1588,7 +1589,7 @@
   }
 }
 
-void CairoOutputDev::beginActualText(GfxState *state, GooString *text)
+void CairoOutputDev::beginActualText(GfxState *state, const GooString *text)
 {
   if (this->text)
     actualText->begin(state, text);

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/CairoOutputDev.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/CairoOutputDev.h	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/CairoOutputDev.h	2018-04-29 00:37:13 UTC (rev 47480)
@@ -24,6 +24,7 @@
 // Copyright (C) 2015 Suzuki Toshiya <mpsuzuki at hiroshima-u.ac.jp>
 // Copyright (C) 2016 Jason Crain <jason at aquaticape.us>
 // Copyright (C) 2018 Albert Astals Cid <aacid at kde.org>
+// Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. 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
@@ -191,13 +192,13 @@
   void eoClip(GfxState *state) override;
 
   //----- text drawing
-  void beginString(GfxState *state, GooString *s) override;
+  void beginString(GfxState *state, const GooString *s) override;
   void endString(GfxState *state) override;
   void drawChar(GfxState *state, double x, double y,
 		double dx, double dy,
 		double originX, double originY,
 		CharCode code, int nBytes, Unicode *u, int uLen) override;
-  void beginActualText(GfxState *state, GooString *text) override;
+  void beginActualText(GfxState *state, const GooString *text) override;
   void endActualText(GfxState *state) override;
 
   GBool beginType3Char(GfxState *state, double x, double y,

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/Catalog.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/Catalog.cc	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/Catalog.cc	2018-04-29 00:37:13 UTC (rev 47480)
@@ -33,6 +33,7 @@
 // Copyright (C) 2014 Ed Porras <ed at moto-research.com>
 // Copyright (C) 2015 Even Rouault <even.rouault at spatialys.com>
 // Copyright (C) 2016 Masamichi Hosoda <trueroad at trueroad.jp>
+// Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. 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
@@ -382,7 +383,7 @@
   return 0;
 }
 
-LinkDest *Catalog::findDest(GooString *name) {
+LinkDest *Catalog::findDest(const GooString *name) {
   // try named destination dictionary then name tree
   if (getDests()->isDict()) {
     Object obj1 = getDests()->dictLookup(name->getCString());
@@ -684,7 +685,7 @@
   return key->cmp(&entry->name);
 }
 
-Object NameTree::lookup(GooString *name)
+Object NameTree::lookup(const GooString *name)
 {
   Entry **entry;
 

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/Catalog.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/Catalog.h	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/Catalog.h	2018-04-29 00:37:13 UTC (rev 47480)
@@ -26,6 +26,7 @@
 // Copyright (C) 2013, 2017 Adrian Johnson <ajohnson at redneon.com>
 // Copyright (C) 2013 José Aliste <jaliste at src.gnome.org>
 // Copyright (C) 2016 Masamichi Hosoda <trueroad at trueroad.jp>
+// Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. 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
@@ -73,7 +74,7 @@
   NameTree& operator=(const NameTree &) = delete;
 
   void init(XRef *xref, Object *tree);
-  Object lookup(GooString *name);
+  Object lookup(const GooString *name);
   int numEntries() { return length; };
   // iterator accessor, note it returns a pointer to the internal object, do not free nor delete it
   Object *getValue(int i);
@@ -154,7 +155,7 @@
 
   // Find a named destination.  Returns the link destination, or
   // NULL if <name> is not a destination.
-  LinkDest *findDest(GooString *name);
+  LinkDest *findDest(const GooString *name);
 
   Object *getDests();
 

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/CharCodeToUnicode.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/CharCodeToUnicode.cc	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/CharCodeToUnicode.cc	2018-04-29 00:37:13 UTC (rev 47480)
@@ -25,6 +25,7 @@
 // Copyright (C) 2014 Jiri Slaby <jirislaby at gmail.com>
 // Copyright (C) 2015 Marek Kasik <mkasik at redhat.com>
 // Copyright (C) 2017 Jean Ghali <jghali at libertysurf.fr>
+// Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. 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
@@ -635,7 +636,7 @@
   return 0;
 }
 
-int CharCodeToUnicode::mapToCharCode(Unicode* u, CharCode *c, int usize) {
+int CharCodeToUnicode::mapToCharCode(Unicode* u, CharCode *c, int usize) const {
   //look for charcode in map
   if (usize == 1 || (usize > 1 && !(*u & ~0xff))) {
     if (isIdentity) {

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/CharCodeToUnicode.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/CharCodeToUnicode.h	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/CharCodeToUnicode.h	2018-04-29 00:37:13 UTC (rev 47480)
@@ -19,6 +19,7 @@
 // Copyright (C) 2007 Koji Otani <sho at bbr.jp>
 // Copyright (C) 2008, 2011, 2012, 2018 Albert Astals Cid <aacid at kde.org>
 // Copyright (C) 2017 Adrian Johnson <ajohnson at redneon.com>
+// Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. 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
@@ -96,7 +97,7 @@
   int mapToUnicode(CharCode c, Unicode **u);
 
   // Map a Unicode to CharCode.
-  int mapToCharCode(Unicode* u, CharCode *c, int usize);
+  int mapToCharCode(Unicode* u, CharCode *c, int usize) const;
 
   // Return the mapping's length, i.e., one more than the max char
   // code supported by the mapping.

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/DateInfo.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/DateInfo.cc	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/DateInfo.cc	2018-04-29 00:37:13 UTC (rev 47480)
@@ -2,7 +2,7 @@
 //
 // DateInfo.cc
 //
-// Copyright (C) 2008 Albert Astals Cid <aacid at kde.org>
+// Copyright (C) 2008, 2018 Albert Astals Cid <aacid at kde.org>
 // Copyright (C) 2009 Carlos Garcia Campos <carlosgc at gnome.org>
 // Copyright (C) 2015 André Guerreiro <aguerreiro1985 at gmail.com>
 // Copyright (C) 2015 André Esser <bepandre at hotmail.com>
@@ -117,7 +117,7 @@
 }
 
 // Convert PDF date string to time. Returns -1 if conversion fails.
-time_t dateStringToTime(GooString *dateString) {
+time_t dateStringToTime(const GooString *dateString) {
   int year, mon, day, hour, min, sec, tz_hour, tz_minute;
   char tz;
   struct tm tm;

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/DateInfo.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/DateInfo.h	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/DateInfo.h	2018-04-29 00:37:13 UTC (rev 47480)
@@ -2,7 +2,7 @@
 //
 // DateInfo.h
 //
-// Copyright (C) 2008 Albert Astals Cid <aacid at kde.org>
+// Copyright (C) 2008, 2018 Albert Astals Cid <aacid at kde.org>
 // Copyright (C) 2009 Carlos Garcia Campos <carlosgc at gnome.org>
 // Copyright (C) 2015 André Guerreiro <aguerreiro1985 at gmail.com>
 // Copyright (C) 2015 André Esser <bepandre at hotmail.com>
@@ -38,6 +38,6 @@
 /* Convert PDF date string to time.
  * Returns -1 if conversion fails.
  */
-time_t dateStringToTime(GooString *dateString);
+time_t dateStringToTime(const GooString *dateString);
 
 #endif

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/FileSpec.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/FileSpec.cc	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/FileSpec.cc	2018-04-29 00:37:13 UTC (rev 47480)
@@ -7,8 +7,9 @@
 //
 // Copyright (C) 2008-2009 Carlos Garcia Campos <carlosgc at gnome.org>
 // Copyright (C) 2009 Kovid Goyal <kovid at kovidgoyal.net>
-// Copyright (C) 2012, 2017 Albert Astals Cid <aacid at kde.org>
+// Copyright (C) 2012, 2017, 2018 Albert Astals Cid <aacid at kde.org>
 // Copyright (C) 2012 Hib Eris <hib at hiberis.nl>
+// Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. 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
@@ -27,7 +28,7 @@
 
 #include "FileSpec.h"
 
-EmbFile::EmbFile(Object *efStream)
+EmbFile::EmbFile(const Object *efStream)
 {
   m_size = -1;
   m_createDate = nullptr;
@@ -99,7 +100,7 @@
   return gTrue;
 }
 
-FileSpec::FileSpec(Object *fileSpecA)
+FileSpec::FileSpec(const Object *fileSpecA)
 {
   ok = gTrue;
   fileName = nullptr;
@@ -171,7 +172,7 @@
   return platformFileName;
 }
 
-Object getFileSpecName (Object *fileSpec)
+Object getFileSpecName (const Object *fileSpec)
 {
   if (fileSpec->isString()) {
     return fileSpec->copy();
@@ -202,7 +203,7 @@
   return Object();
 }
 
-Object getFileSpecNameForPlatform (Object *fileSpec)
+Object getFileSpecNameForPlatform (const Object *fileSpec)
 {
   if (fileSpec->isString()) {
     return fileSpec->copy();
@@ -234,7 +235,7 @@
   // system-dependent path manipulation
 #ifdef _WIN32
   int i, j;
-  GooString *name = fileName.getString();
+  GooString *name = fileName.getString()->copy();
   // "//...."             --> "\...."
   // "/x/...."            --> "x:\...."
   // "/server/share/...." --> "\\server\share\...."
@@ -274,6 +275,7 @@
       name->del(i);
     }
   }
+  fileName = Object(name);
 #endif /* _WIN32 */
 
   return fileName;

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/FileSpec.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/FileSpec.h	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/FileSpec.h	2018-04-29 00:37:13 UTC (rev 47480)
@@ -24,20 +24,20 @@
 
 class EmbFile {
 public:
-  EmbFile(Object *efStream);
+  EmbFile(const 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; }
-  GooString *checksum() { return m_checksum; }
-  GooString *mimeType() { return m_mimetype; }
+  int size() const { return m_size; }
+  const GooString *modDate() const { return m_modDate; }
+  const GooString *createDate() const { return m_createDate; }
+  const GooString *checksum() const { return m_checksum; }
+  const GooString *mimeType() const { return m_mimetype; }
   Object *streamObject() { return &m_objStr; }
   Stream *stream() { return isOk() ? m_objStr.getStream() : NULL; }
-  GBool isOk() { return m_objStr.isStream(); }
+  GBool isOk() const { return m_objStr.isStream(); }
   GBool save(const char *path);
 
 private:
@@ -53,17 +53,17 @@
 
 class FileSpec {
 public:
-  FileSpec(Object *fileSpec);
+  FileSpec(const Object *fileSpec);
   ~FileSpec();
 
   FileSpec(const FileSpec &) = delete;
   FileSpec& operator=(const FileSpec &) = delete;
 
-  GBool isOk() { return ok; }
+  GBool isOk() const { return ok; }
 
-  GooString *getFileName() const { return fileName; }
+  const GooString *getFileName() const { return fileName; }
   GooString *getFileNameForPlatform();
-  GooString *getDescription() const { return desc; }
+  const GooString *getDescription() const { return desc; }
   EmbFile *getEmbeddedFile();
 
 private:
@@ -78,7 +78,7 @@
   GooString *desc;             // Desc
 };
 
-Object getFileSpecName (Object *fileSpec);
-Object getFileSpecNameForPlatform (Object *fileSpec);
+Object getFileSpecName (const Object *fileSpec);
+Object getFileSpecNameForPlatform (const Object *fileSpec);
 
 #endif /* FILE_SPEC_H */

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/FontInfo.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/FontInfo.cc	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/FontInfo.cc	2018-04-29 00:37:13 UTC (rev 47480)
@@ -12,6 +12,7 @@
 // Copyright (C) 2010, 2013 Thomas Freitag <Thomas.Freitag at alfa.de>
 // Copyright (C) 2011 Carlos Garcia Campos <carlosgc at gnome.org>
 // Copyright (C) 2012 Fabio D'Urso <fabiodurso at hotmail.it>
+// Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. 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
@@ -153,7 +154,7 @@
 }
 
 FontInfo::FontInfo(GfxFont *font, XRef *xref) {
-  GooString *origName;
+  const GooString *origName;
 
   fontRef = *font->getID();
 

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/Form.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/Form.cc	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/Form.cc	2018-04-29 00:37:13 UTC (rev 47480)
@@ -19,6 +19,9 @@
 // Copyright 2015 André Esser <bepandre at hotmail.com>
 // Copyright 2017 Hans-Ulrich Jüttner <huj at froreich-bioscientia.de>
 // Copyright 2017 Bernd Kuhls <berndkuhls at hotmail.com>
+// Copyright 2018 Andre Heinecke <aheinecke at intevation.de>
+// Copyright 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. Work sponsored by the LiMux project of the city of Munich
+// Copyright 2018 Chinmoy Ranjan Pradhan <chinmoyrp65 at protonmail.com>
 //
 //========================================================================
 
@@ -55,12 +58,12 @@
 #include "Lexer.h"
 
 //return a newly allocated char* containing an UTF16BE string of size length
-char* pdfDocEncodingToUTF16 (GooString* orig, int* length)
+char* pdfDocEncodingToUTF16 (const GooString* orig, int* length)
 {
   //double size, a unicode char takes 2 char, add 2 for the unicode marker
   *length = 2+2*orig->getLength();
   char *result = new char[(*length)];
-  char *cstring = orig->getCString();
+  const char *cstring = orig->getCString();
   //unicode marker
   result[0] = (char)0xfe;
   result[1] = (char)0xff;
@@ -135,6 +138,11 @@
   return field->isReadOnly();
 }
 
+void FormWidget::setReadOnly(bool value)
+{
+  return field->setReadOnly(value);
+}
+
 int FormWidget::encodeID (unsigned pageNum, unsigned fieldNum)
 {
   return (pageNum << 4*sizeof(unsigned)) + fieldNum;
@@ -146,7 +154,7 @@
   *fieldNum = (id << 4*sizeof(unsigned)) >> 4*sizeof(unsigned);
 }
 
-GooString *FormWidget::getPartialName() const {
+const GooString *FormWidget::getPartialName() const {
   return field->getPartialName();
 }
 
@@ -155,11 +163,11 @@
   field->setPartialName(name);
 }
 
-GooString *FormWidget::getAlternateUiName() const {
+const GooString *FormWidget::getAlternateUiName() const {
   return field->getAlternateUiName();
 }
 
-GooString *FormWidget::getMappingName() const {
+const GooString *FormWidget::getMappingName() const {
   return field->getMappingName();
 }
 
@@ -260,7 +268,7 @@
   type = formText;
 }
 
-GooString* FormWidgetText::getContent ()
+const GooString* FormWidgetText::getContent () const
 {
   return parent()->getContent();
 }
@@ -346,7 +354,7 @@
 {
 }
 
-bool FormWidgetChoice::_checkRange (int i)
+bool FormWidgetChoice::_checkRange (int i) const
 {
   if (i < 0 || i >= parent()->getNumChoices()) {
     error(errInternal, -1, "FormWidgetChoice::_checkRange i out of range : {0:d}", i);
@@ -372,7 +380,7 @@
   parent()->deselectAll();
 }
 
-GooString* FormWidgetChoice::getEditChoice ()
+const GooString* FormWidgetChoice::getEditChoice () const
 {
   if (!hasEdit()) {
     error(errInternal, -1, "FormFieldChoice::getEditChoice called on a non-editable choice\n");
@@ -387,7 +395,7 @@
     widget->updateAppearanceStream();
 }
 
-bool FormWidgetChoice::isSelected (int i)
+bool FormWidgetChoice::isSelected (int i) const
 {
   if (!_checkRange(i)) return false;
   return parent()->isSelected(i);
@@ -403,12 +411,12 @@
   parent()->setEditChoice(new_content);
 }
 
-int FormWidgetChoice::getNumChoices() 
+int FormWidgetChoice::getNumChoices() const
 { 
   return parent()->getNumChoices();
 }
 
-GooString* FormWidgetChoice::getChoice(int i) 
+const GooString* FormWidgetChoice::getChoice(int i) const
 { 
   return parent()->getChoice(i);
 }
@@ -454,6 +462,11 @@
   type = formSignature;
 }
 
+const GooString *FormWidgetSignature::getSignature() const
+{
+    return static_cast<FormFieldSignature*>(field)->getSignature();
+}
+
 SignatureInfo *FormWidgetSignature::validateSignature(bool doVerifyCert, bool forceRevalidation, time_t validationTime)
 {
   return static_cast<FormFieldSignature*>(field)->validateSignature(doVerifyCert, forceRevalidation, validationTime);
@@ -847,7 +860,7 @@
 GooString* FormField::getFullyQualifiedName() {
   Object obj1;
   Object parent;
-  GooString *parent_name;
+  const GooString *parent_name;
   GooString *full_name;
   GBool unicode_encoded = gFalse;
 
@@ -939,6 +952,32 @@
   }
 }
 
+void FormField::setReadOnly (bool value)
+{
+  if (value == readOnly) {
+    return;
+  }
+
+  readOnly = value;
+
+  Dict* dict = obj.getDict();
+
+  const Object obj1 = Form::fieldLookup(dict, "Ff");
+  int flags = 0;
+  if (obj1.isInt()) {
+    flags = obj1.getInt();
+  }
+  if (value) {
+    flags |= 1;
+  } else {
+    flags &= ~1;
+  }
+
+  dict->set("Ff", Object(flags));
+  xref->setModifiedObject(&obj, ref);
+  updateChildrenAppearance();
+}
+
 //------------------------------------------------------------------------
 // FormFieldButton
 //------------------------------------------------------------------------
@@ -1050,7 +1089,7 @@
   if (!isOn && noAllOff)
     return gFalse; // Don't allow to set all radio to off
 
-  char *current = getAppearanceState();
+  const char *current = getAppearanceState();
   GBool currentFound = gFalse, newFound = gFalse;
 
   for (int i = 0; i < numChildren; i++) {
@@ -1089,7 +1128,7 @@
   return gTrue;
 }
 
-GBool FormFieldButton::getState(char *state) {
+GBool FormFieldButton::getState(const char *state) const {
   if (appearanceState.isName(state))
     return gTrue;
 
@@ -1241,7 +1280,7 @@
   }
 }
 
-int FormFieldText::tokenizeDA(GooString* da, GooList* daToks, const char* searchTok)
+int FormFieldText::tokenizeDA(const GooString* da, GooList* daToks, const char* searchTok)
 {
   int idx = -1;
   if(da && daToks) {
@@ -1271,7 +1310,7 @@
   if (obj.isDict()) {
     Object objDA(obj.dictLookup("DA"));
     if (objDA.isString()) {
-      GooString* da = objDA.getString();
+      const GooString* da = objDA.getString();
       idx = tokenizeDA(da, daToks, "Tf") - 1;
     }
   }
@@ -1546,7 +1585,7 @@
   updateSelection();
 }
 
-GooString* FormFieldChoice::getEditChoice ()
+const GooString* FormFieldChoice::getEditChoice () const
 {
   return editedChoice;
 }
@@ -1561,7 +1600,7 @@
   return cnt;
 }
 
-GooString *FormFieldChoice::getSelectedChoice() {
+const GooString *FormFieldChoice::getSelectedChoice() const {
   if (edit && editedChoice)
     return editedChoice;
 
@@ -1614,7 +1653,7 @@
   // retrieve SigningTime
   Object time_of_signing = sig_dict.dictLookup("M");
   if (time_of_signing.isString()) {
-    GooString *time_str = time_of_signing.getString();
+    const GooString *time_str = time_of_signing.getString();
     signature_info->setSigningTime(dateStringToTime(time_str)); // Put this information directly in SignatureInfo object
   }
 

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/Form.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/Form.h	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/Form.h	2018-04-29 00:37:13 UTC (rev 47480)
@@ -15,6 +15,9 @@
 // Copyright 2015 André Esser <bepandre at hotmail.com>
 // Copyright 2017 Roland Hieber <r.hieber at pengutronix.de>
 // Copyright 2017 Hans-Ulrich Jüttner <huj at froreich-bioscientia.de>
+// Copyright 2018 Andre Heinecke <aheinecke at intevation.de>
+// Copyright 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. Work sponsored by the LiMux project of the city of Munich
+// Copyright 2018 Chinmoy Ranjan Pradhan <chinmoyrp65 at protonmail.com>
 //
 //========================================================================
 
@@ -110,15 +113,16 @@
 
   double getFontSize() const;
 
-  GooString *getPartialName() const;
+  const GooString *getPartialName() const;
   void setPartialName(const GooString &name);
-  GooString *getAlternateUiName() const;
-  GooString *getMappingName() const;
+  const GooString *getAlternateUiName() const;
+  const GooString *getMappingName() const;
   GooString *getFullyQualifiedName();
 
   GBool isModified () const;
 
   bool isReadOnly() const;
+  void setReadOnly(bool value);
 
   LinkAction *getActivationAction(); // The caller should not delete the result
   LinkAction *getAdditionalAction(Annot::FormAdditionalActionsType type); // The caller should delete the result
@@ -193,7 +197,7 @@
 public:
   FormWidgetText(PDFDoc *docA, Object *dict, unsigned num, Ref ref, FormField *p);
   //return the field's content (UTF16BE)
-  GooString* getContent() ;
+  const GooString* getContent() const;
   //return a copy of the field's content (UTF16BE)
   GooString* getContentCopy();
 
@@ -228,9 +232,9 @@
   FormWidgetChoice(PDFDoc *docA, Object *dict, unsigned num, Ref ref, FormField *p);
   ~FormWidgetChoice();
 
-  int getNumChoices();
+  int getNumChoices() const;
   //return the display name of the i-th choice (UTF16BE)
-  GooString* getChoice(int i);
+  const GooString* getChoice(int i) const;
   //select the i-th choice
   void select (int i); 
 
@@ -244,10 +248,10 @@
   //only work for editable combo box, set the user-entered text as the current choice
   void setEditChoice(GooString* new_content);
 
-  GooString* getEditChoice ();
+  const GooString* getEditChoice () const;
 
   void updateWidgetAppearance() override;
-  bool isSelected (int i);
+  bool isSelected (int i) const;
 
   bool isCombo () const; 
   bool hasEdit () const; 
@@ -256,7 +260,7 @@
   bool commitOnSelChange () const; 
   bool isListBox () const;
 protected:
-  bool _checkRange (int i);
+  bool _checkRange (int i) const;
   FormFieldChoice *parent() const;
 };
 
@@ -281,6 +285,8 @@
   // if the check passed (and the checked file size as output parameter in checkedFileSize)
   // otherwise a nullptr is returned
   GooString* getCheckedSignature(Goffset *checkedFileSize);
+
+  const GooString *getSignature() const;
 };
 
 //------------------------------------------------------------------------
@@ -297,11 +303,11 @@
   virtual ~FormField();
 
   // Accessors.
-  FormFieldType getType() { return type; }
+  FormFieldType getType() const { return type; }
   Object* getObj() { return &obj; }
   Ref getRef() { return ref; }
 
-  void setReadOnly (bool b) { readOnly = b; }
+  void setReadOnly (bool b);
   bool isReadOnly () const { return readOnly; }
 
   GooString* getDefaultAppearance() const { return defaultAppearance; }
@@ -369,15 +375,15 @@
 public:
   FormFieldButton(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent, std::set<int> *usedParents);
 
-  FormButtonType getButtonType () { return btype; }
+  FormButtonType getButtonType () const { return btype; }
 
   bool noToggleToOff () const { return noAllOff; }
 
   // returns gTrue if the state modification is accepted
   GBool setState (char *state);
-  GBool getState(char *state);
+  GBool getState(const char *state) const;
 
-  char *getAppearanceState() { return appearanceState.isName() ? appearanceState.getName() : NULL; }
+  const char *getAppearanceState() const { return appearanceState.isName() ? appearanceState.getName() : nullptr; }
 
   void fillChildrenSiblingsID () override;
   
@@ -415,7 +421,7 @@
 public:
   FormFieldText(PDFDoc *docA, Object *dict, const Ref& ref, FormField *parent, std::set<int> *usedParents);
   
-  GooString* getContent () { return content; }
+  const GooString* getContent () const { return content; }
   GooString* getContentCopy ();
   void setContentCopy (GooString* new_content);
   ~FormFieldText();
@@ -439,7 +445,7 @@
   void print(int indent = 0);
 #endif
 
-  static int tokenizeDA(GooString* daString, GooList* daToks, const char* searchTok);
+  static int tokenizeDA(const GooString* daString, GooList* daToks, const char* searchTok);
 
 protected:
   int parseDA(GooList* daToks);
@@ -465,11 +471,11 @@
 
   ~FormFieldChoice();
 
-  int getNumChoices() { return numChoices; }
-  GooString* getChoice(int i) { return choices ? choices[i].optionName : NULL; }
-  GooString* getExportVal (int i) { return choices ? choices[i].exportVal : NULL; }
+  int getNumChoices() const { return numChoices; }
+  const GooString* getChoice(int i) const { return choices ? choices[i].optionName : NULL; }
+  const GooString* getExportVal (int i) const  { return choices ? choices[i].exportVal : NULL; }
   // For multi-select choices it returns the first one
-  GooString* getSelectedChoice();
+  const GooString* getSelectedChoice() const;
 
   //select the i-th choice
   void select (int i); 
@@ -483,9 +489,9 @@
   //only work for editable combo box, set the user-entered text as the current choice
   void setEditChoice(GooString* new_content);
 
-  GooString* getEditChoice ();
+  const GooString* getEditChoice () const;
 
-  bool isSelected (int i) { return choices[i].selected; }
+  bool isSelected (int i) const { return choices[i].selected; }
 
   int getNumSelected ();
 
@@ -538,7 +544,7 @@
 
   ~FormFieldSignature();
   Object* getByteRange() { return &byte_range; }
-  GooString* getSignature() { return signature; }
+  const GooString* getSignature() const { return signature; }
 
 private:
   void parseInfo();

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/Function.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/Function.h	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/Function.h	2018-04-29 00:37:13 UTC (rev 47480)
@@ -240,7 +240,7 @@
   void transform(double *in, double *out) override;
   GBool isOk() override { return ok; }
 
-  GooString *getCodeString() { return codeString; }
+  const GooString *getCodeString() const { return codeString; }
 
 private:
 

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/Gfx.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/Gfx.cc	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/Gfx.cc	2018-04-29 00:37:13 UTC (rev 47480)
@@ -38,7 +38,7 @@
 // Copyright (C) 2012, 2013 Fabio D'Urso <fabiodurso at hotmail.it>
 // Copyright (C) 2012 Lu Wang <coolwanglu at gmail.com>
 // Copyright (C) 2014 Jason Crain <jason at aquaticape.us>
-// Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. Work sponsored by the LiMux project of the city of Munich
+// Copyright (C) 2017, 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. 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
@@ -375,9 +375,10 @@
   delete fonts;
 }
 
-GfxFont *GfxResources::lookupFont(char *name) {
+GfxFont *GfxResources::doLookupFont(const char *name) const
+{
   GfxFont *font;
-  GfxResources *resPtr;
+  const GfxResources *resPtr;
 
   for (resPtr = this; resPtr; resPtr = resPtr->next) {
     if (resPtr->fonts) {
@@ -389,7 +390,15 @@
   return nullptr;
 }
 
-Object GfxResources::lookupXObject(char *name) {
+GfxFont *GfxResources::lookupFont(const char *name) {
+  return doLookupFont(name);
+}
+
+const GfxFont *GfxResources::lookupFont(const char *name) const {
+  return doLookupFont(name);
+}
+
+Object GfxResources::lookupXObject(const char *name) {
   GfxResources *resPtr;
 
   for (resPtr = this; resPtr; resPtr = resPtr->next) {
@@ -403,7 +412,7 @@
   return Object(objNull);
 }
 
-Object GfxResources::lookupXObjectNF(char *name) {
+Object GfxResources::lookupXObjectNF(const char *name) {
   GfxResources *resPtr;
 
   for (resPtr = this; resPtr; resPtr = resPtr->next) {
@@ -417,7 +426,7 @@
   return Object(objNull);
 }
 
-Object GfxResources::lookupMarkedContentNF(char *name) {
+Object GfxResources::lookupMarkedContentNF(const char *name) {
   GfxResources *resPtr;
 
   for (resPtr = this; resPtr; resPtr = resPtr->next) {
@@ -445,7 +454,7 @@
   return Object(objNull);
 }
 
-GfxPattern *GfxResources::lookupPattern(char *name, OutputDev *out, GfxState *state) {
+GfxPattern *GfxResources::lookupPattern(const char *name, OutputDev *out, GfxState *state) {
   GfxResources *resPtr;
   GfxPattern *pattern;
 
@@ -468,7 +477,7 @@
   return nullptr;
 }
 
-GfxShading *GfxResources::lookupShading(char *name, OutputDev *out, GfxState *state) {
+GfxShading *GfxResources::lookupShading(const char *name, OutputDev *out, GfxState *state) {
   GfxResources *resPtr;
   GfxShading *shading;
 
@@ -485,7 +494,7 @@
   return nullptr;
 }
 
-Object GfxResources::lookupGState(char *name) {
+Object GfxResources::lookupGState(const char *name) {
   Object obj = lookupGStateNF(name);
   if (obj.isNull())
     return Object(objNull);
@@ -502,7 +511,7 @@
   return obj;
 }
 
-Object GfxResources::lookupGStateNF(char *name) {
+Object GfxResources::lookupGStateNF(const char *name) {
   GfxResources *resPtr;
 
   for (resPtr = this; resPtr; resPtr = resPtr->next) {
@@ -3870,7 +3879,7 @@
   }
 }
 
-void Gfx::doShowText(GooString *s) {
+void Gfx::doShowText(const GooString *s) {
   GfxFont *font;
   int wMode;
   double riseX, riseY;
@@ -3884,7 +3893,7 @@
   Dict *resDict;
   Parser *oldParser;
   GfxState *savedState;
-  char *p;
+  const char *p;
   int render;
   GBool patternFill;
   int len, n, uLen, nChars, nSpaces, i;
@@ -4123,7 +4132,7 @@
 }
 
 // NB: this is only called when ocState is false.
-void Gfx::doIncCharCount(GooString *s) {
+void Gfx::doIncCharCount(const GooString *s) {
   if (out->needCharCount()) {
     out->incCharCount(s->getLength());
   }
@@ -4134,7 +4143,7 @@
 //------------------------------------------------------------------------
 
 void Gfx::opXObject(Object args[], int numArgs) {
-  char *name;
+  const char *name;
 
   if (!ocState && !out->needCharCount()) {
     return;
@@ -5022,11 +5031,11 @@
   pushMarkedContent();
   
   OCGs *contentConfig = catalog->getOptContentConfig();
-  char* name0 = args[0].getName();
+  const char* name0 = args[0].getName();
   if ( strncmp( name0, "OC", 2) == 0 && contentConfig) {
     if ( numArgs >= 2 ) {
       if (args[1].isName()) {
-        char* name1 = args[1].getName();
+        const char* name1 = args[1].getName();
         MarkedContentStack *mc = mcStack;
         mc->kind = gfxMCOptionalContent;
         Object markedContent = res->lookupMarkedContentNF( name1 );

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/Gfx.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/Gfx.h	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/Gfx.h	2018-04-29 00:37:13 UTC (rev 47480)
@@ -22,6 +22,7 @@
 // Copyright (C) 2010 David Benjamin <davidben at mit.edu>
 // Copyright (C) 2010 Christian Feuersänger <cfeuersaenger at googlemail.com>
 // Copyright (C) 2013 Fabio D'Urso <fabiodurso at hotmail.it>
+// Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. 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
@@ -115,19 +116,21 @@
   GfxResources(const GfxResources &) = delete;
   GfxResources& operator=(const GfxResources &other) = delete;
 
-  GfxFont *lookupFont(char *name);
-  Object lookupXObject(char *name);
-  Object lookupXObjectNF(char *name);
-  Object lookupMarkedContentNF(char *name);
+  GfxFont *lookupFont(const char *name);
+  const GfxFont *lookupFont(const char *name) const;
+  Object lookupXObject(const char *name);
+  Object lookupXObjectNF(const char *name);
+  Object lookupMarkedContentNF(const char *name);
   Object lookupColorSpace(const char *name);
-  GfxPattern *lookupPattern(char *name, OutputDev *out, GfxState *state);
-  GfxShading *lookupShading(char *name, OutputDev *out, GfxState *state);
-  Object lookupGState(char *name);
-  Object lookupGStateNF(char *name);
+  GfxPattern *lookupPattern(const char *name, OutputDev *out, GfxState *state);
+  GfxShading *lookupShading(const char *name, OutputDev *out, GfxState *state);
+  Object lookupGState(const char *name);
+  Object lookupGStateNF(const char *name);
 
   GfxResources *getNext() { return next; }
 
 private:
+  GfxFont *doLookupFont(const char *name) const;
 
   GfxFontDict *fonts;
   Object xObjDict;
@@ -358,8 +361,8 @@
   void opMoveShowText(Object args[], int numArgs);
   void opMoveSetShowText(Object args[], int numArgs);
   void opShowSpaceText(Object args[], int numArgs);
-  void doShowText(GooString *s);
-  void doIncCharCount(GooString *s);
+  void doShowText(const GooString *s);
+  void doIncCharCount(const GooString *s);
 
   // XObject operators
   void opXObject(Object args[], int numArgs);

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/GfxFont.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/GfxFont.cc	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/GfxFont.cc	2018-04-29 00:37:13 UTC (rev 47480)
@@ -32,6 +32,7 @@
 // Copyright (C) 2012, 2017 Thomas Freitag <Thomas.Freitag at alfa.de>
 // Copyright (C) 2013-2016, 2018 Jason Crain <jason at aquaticape.us>
 // Copyright (C) 2014 Olly Betts <olly at survex.com>
+// Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. 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
@@ -870,7 +871,7 @@
 // Parse character names of the form 'Axx', 'xx', 'Ann', 'ABnn', or
 // 'nn', where 'A' and 'B' are any letters, 'xx' is two hex digits,
 // and 'nn' is decimal digits.
-static GBool parseNumericName(char *s, GBool hex, unsigned int *u) {
+static GBool parseNumericName(const char *s, GBool hex, unsigned int *u) {
   char *endptr;
 
   // Strip leading alpha characters.
@@ -1553,9 +1554,9 @@
   return 0;
 }
 
-int Gfx8BitFont::getNextChar(char *s, int len, CharCode *code,
+int Gfx8BitFont::getNextChar(const char *s, int len, CharCode *code,
 			     Unicode **u, int *uLen,
-			     double *dx, double *dy, double *ox, double *oy) {
+			     double *dx, double *dy, double *ox, double *oy) const {
   CharCode c;
 
   *code = c = (CharCode)(*s & 0xff);
@@ -1565,8 +1566,7 @@
   return 1;
 }
 
-CharCodeToUnicode *Gfx8BitFont::getToUnicode() {
-  ctu->incRefCnt();
+const CharCodeToUnicode *Gfx8BitFont::getToUnicode() const {
   return ctu;
 }
 
@@ -2051,9 +2051,9 @@
   }
 }
 
-int GfxCIDFont::getNextChar(char *s, int len, CharCode *code,
+int GfxCIDFont::getNextChar(const char *s, int len, CharCode *code,
 			    Unicode **u, int *uLen,
-			    double *dx, double *dy, double *ox, double *oy) {
+			    double *dx, double *dy, double *ox, double *oy) const {
   CID cid;
   CharCode dummy;
   double w, h, vx, vy;
@@ -2125,10 +2125,7 @@
   return cMap ? cMap->getWMode() : 0;
 }
 
-CharCodeToUnicode *GfxCIDFont::getToUnicode() {
-  if (ctu) {
-    ctu->incRefCnt();
-  }
+const CharCodeToUnicode *GfxCIDFont::getToUnicode() const {
   return ctu;
 }
 
@@ -2324,7 +2321,7 @@
   } else {
     error(errSyntaxError, -1, "Unknown character collection {0:t}\n",
       getCollection());
-    if ((ctu = getToUnicode()) != nullptr) {
+    if (ctu) {
       CharCode cid;
       for (cid = 0;cid < n ;cid++) {
 	Unicode *ucode;
@@ -2337,7 +2334,6 @@
 	    humap[cid*N_UCS_CANDIDATES+i] = 0;
 	}
       }
-      ctu->decRefCnt();
     }
   }
   // map CID -> Unicode -> GID
@@ -2395,7 +2391,7 @@
   return codeToGID;
 }
 
-double GfxCIDFont::getWidth(CID cid) {
+double GfxCIDFont::getWidth(CID cid) const {
   double w;
   int a, b, m;
 
@@ -2419,7 +2415,7 @@
   return w;
 }
 
-double GfxCIDFont::getWidth (char* s, int len) {
+double GfxCIDFont::getWidth (char* s, int len) const {
   int nUsed;
   CharCode c;
 
@@ -2482,7 +2478,7 @@
   gfree(fonts);
 }
 
-GfxFont *GfxFontDict::lookup(char *tag) {
+GfxFont *GfxFontDict::lookup(const char *tag) {
   int i;
 
   for (i = 0; i < numFonts; ++i) {
@@ -2506,7 +2502,7 @@
     h *= 16777619;
   }
 
-  void hash(char *p, int n) {
+  void hash(const char *p, int n) {
     int i;
     for (i = 0; i < n; ++i) {
       hash(p[i]);
@@ -2531,8 +2527,8 @@
 
 void GfxFontDict::hashFontObject1(Object *obj, FNVHash *h) {
   Object obj2;
-  GooString *s;
-  char *p;
+  const GooString *s;
+  const char *p;
   double r;
   int n, i;
 

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/GfxFont.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/GfxFont.h	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/GfxFont.h	2018-04-29 00:37:13 UTC (rev 47480)
@@ -23,6 +23,7 @@
 // Copyright (C) 2011, 2012, 2014 Adrian Johnson <ajohnson at redneon.com>
 // Copyright (C) 2015, 2018 Jason Crain <jason at aquaticape.us>
 // Copyright (C) 2015 Thomas Freitag <Thomas.Freitag at alfa.de>
+// Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. 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
@@ -189,30 +190,30 @@
   void decRefCnt();
 
   // Get font tag.
-  GooString *getTag() { return tag; }
+  const GooString *getTag() const { return tag; }
 
   // Get font dictionary ID.
-  Ref *getID() { return &id; }
+  const Ref *getID() const { return &id; }
 
   // Does this font match the tag?
-  GBool matches(char *tagA) { return !tag->cmp(tagA); }
+  GBool matches(const char *tagA) const { return !tag->cmp(tagA); }
 
   // Get font family name.
   GooString *getFamily() { return family; }
   
   // Get font stretch.
-  Stretch getStretch() { return stretch; }
+  Stretch getStretch() const { return stretch; }
   
   // Get font weight.
-  Weight getWeight() { return weight; }
+  Weight getWeight() const { return weight; }
 
   // Get the original font name (ignornig any munging that might have
   // been done to map to a canonical Base-14 font name).
-  GooString *getName() { return name; }
+  const GooString *getName() const { return name; }
 
   // Get font type.
-  GfxFontType getType() { return type; }
-  virtual GBool isCIDFont() { return gFalse; }
+  GfxFontType getType() const { return type; }
+  virtual GBool isCIDFont() const { return gFalse; }
 
   // Get embedded font ID, i.e., a ref for the font file stream.
   // Returns false if there is no embedded font.
@@ -242,7 +243,7 @@
   GBool isBold() { return flags & fontBold; }
 
   // Return the Unicode map.
-  virtual CharCodeToUnicode *getToUnicode() = 0;
+  virtual const CharCodeToUnicode *getToUnicode() const = 0;
 
   // Return the font matrix.
   double *getFontMatrix() { return fontMat; }
@@ -273,9 +274,9 @@
   // is the number of entries available in <u>, and <uLen> is set to
   // the number actually used.  Returns the number of bytes used by
   // the char code.
-  virtual int getNextChar(char *s, int len, CharCode *code,
+  virtual int getNextChar(const char *s, int len, CharCode *code,
 			  Unicode **u, int *uLen,
-			  double *dx, double *dy, double *ox, double *oy) = 0;
+			  double *dx, double *dy, double *ox, double *oy) const = 0;
 
   // Does this font have a toUnicode map?
   GBool hasToUnicodeCMap() { return hasToUnicode; }
@@ -329,15 +330,15 @@
   Gfx8BitFont(XRef *xref, const char *tagA, Ref idA, GooString *nameA,
 	      GfxFontType typeA, Ref embFontIDA, Dict *fontDict);
 
-  int getNextChar(char *s, int len, CharCode *code,
+  int getNextChar(const char *s, int len, CharCode *code,
 			  Unicode **u, int *uLen,
-			  double *dx, double *dy, double *ox, double *oy) override;
+			  double *dx, double *dy, double *ox, double *oy) const override;
 
   // Return the encoding.
   char **getEncoding() { return enc; }
 
   // Return the Unicode map.
-  CharCodeToUnicode *getToUnicode() override;
+  const CharCodeToUnicode *getToUnicode() const override;
 
   // Return the character name associated with <code>.
   char *getCharName(int code) { return enc[code]; }
@@ -392,17 +393,17 @@
   GfxCIDFont(XRef *xref, const char *tagA, Ref idA, GooString *nameA,
 	     GfxFontType typeA, Ref embFontIDA, Dict *fontDict);
 
-  GBool isCIDFont() override { return gTrue; }
+  GBool isCIDFont() const override { return gTrue; }
 
-  int getNextChar(char *s, int len, CharCode *code,
+  int getNextChar(const char *s, int len, CharCode *code,
 			  Unicode **u, int *uLen,
-			  double *dx, double *dy, double *ox, double *oy) override;
+			  double *dx, double *dy, double *ox, double *oy) const override;
 
   // Return the writing mode (0=horizontal, 1=vertical).
   int getWMode() override;
 
   // Return the Unicode map.
-  CharCodeToUnicode *getToUnicode() override;
+  const CharCodeToUnicode *getToUnicode() const override;
 
   // Get the collection name (<registry>-<ordering>).
   GooString *getCollection();
@@ -414,7 +415,7 @@
 
   int *getCodeToGIDMap(FoFiTrueType *ff, int *length);
 
-  double getWidth(char* s, int len);
+  double getWidth(char* s, int len) const;
 
 private:
   ~GfxCIDFont();
@@ -421,7 +422,7 @@
 
   int mapCodeToGID(FoFiTrueType *ff, int cmapi,
     Unicode unicode, GBool wmode);
-  double getWidth(CID cid);	// Get width of a character.
+  double getWidth(CID cid) const;	// Get width of a character.
 
   GooString *collection;		// collection name
   CMap *cMap;			// char code --> CID
@@ -451,7 +452,7 @@
   GfxFontDict& operator=(const GfxFontDict &) = delete;
 
   // Get the specified font.
-  GfxFont *lookup(char *tag);
+  GfxFont *lookup(const char *tag);
 
   // Iterative access.
   int getNumFonts() { return numFonts; }

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/GfxState.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/GfxState.cc	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/GfxState.cc	2018-04-29 00:37:13 UTC (rev 47480)
@@ -30,6 +30,7 @@
 // Copyright (C) 2015 Adrian Johnson <ajohnson at redneon.com>
 // Copyright (C) 2016 Marek Kasik <mkasik at redhat.com>
 // Copyright (C) 2017 Oliver Sander <oliver.sander at tu-dresden.de>
+// Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. 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
@@ -43,6 +44,7 @@
 #endif
 
 #include <algorithm>
+#include <memory>
 #include <stddef.h>
 #include <math.h>
 #include <string.h>
@@ -2481,7 +2483,7 @@
   GfxColorSpace *baseA;
   int indexHighA;
   Object obj1;
-  char *s;
+  const char *s;
   int i, j;
 
   if (arr->getLength() != 4) {
@@ -4914,10 +4916,17 @@
     }
   }
   delete bitBuf;
-  if (typeA == 5 && nVerticesA > 0) {
+  if (typeA == 5 && nVerticesA > 0 && vertsPerRow > 0) {
     nRows = nVerticesA / vertsPerRow;
     nTrianglesA = (nRows - 1) * 2 * (vertsPerRow - 1);
-    trianglesA = (int (*)[3])gmallocn(nTrianglesA * 3, sizeof(int));
+    trianglesA = (int (*)[3])gmallocn_checkoverflow(nTrianglesA * 3, sizeof(int));
+    if (unlikely(!trianglesA)) {
+      gfree(verticesA);
+      for (i = 0; i < nFuncsA; ++i) {
+	delete funcsA[i];
+      }
+      return nullptr;
+    }
     k = 0;
     for (i = 0; i < nRows - 1; ++i) {
       for (j = 0; j < vertsPerRow - 1; ++j) {
@@ -5100,7 +5109,6 @@
   Guint xi, yi;
   double c[4][gfxColorMaxComps];
   Guint ci;
-  GfxShadingBitBuf *bitBuf;
   Object obj1;
   int i, j;
 
@@ -5178,7 +5186,7 @@
   nPatchesA = 0;
   patchesA = nullptr;
   patchesSize = 0;
-  bitBuf = new GfxShadingBitBuf(str);
+  std::unique_ptr<GfxShadingBitBuf> bitBuf(new GfxShadingBitBuf(str));
   while (1) {
     if (!bitBuf->getBits(flagBits, &flag)) {
       break;
@@ -5274,6 +5282,7 @@
 	break;
       case 1:
 	if (nPatchesA == 0) {
+          gfree(patchesA);
 	  return nullptr;
 	}
 	p->x[0][0] = patchesA[nPatchesA-1].x[0][3];
@@ -5309,6 +5318,7 @@
 	break;
       case 2:
 	if (nPatchesA == 0) {
+          gfree(patchesA);
 	  return nullptr;
 	}
 	p->x[0][0] = patchesA[nPatchesA-1].x[3][3];
@@ -5344,6 +5354,7 @@
 	break;
       case 3:
 	if (nPatchesA == 0) {
+          gfree(patchesA);
 	  return nullptr;
 	}
 	p->x[0][0] = patchesA[nPatchesA-1].x[3][0];
@@ -5422,6 +5433,7 @@
 	break;
       case 1:
 	if (nPatchesA == 0) {
+          gfree(patchesA);
 	  return nullptr;
 	}
 	p->x[0][0] = patchesA[nPatchesA-1].x[0][3];
@@ -5465,6 +5477,7 @@
 	break;
       case 2:
 	if (nPatchesA == 0) {
+          gfree(patchesA);
 	  return nullptr;
 	}
 	p->x[0][0] = patchesA[nPatchesA-1].x[3][3];
@@ -5508,6 +5521,7 @@
 	break;
       case 3:
 	if (nPatchesA == 0) {
+          gfree(patchesA);
 	  return nullptr;
 	}
 	p->x[0][0] = patchesA[nPatchesA-1].x[3][0];
@@ -5554,7 +5568,6 @@
     ++nPatchesA;
     bitBuf->flushBits();
   }
-  delete bitBuf;
 
   if (typeA == 6) {
     for (i = 0; i < nPatchesA; ++i) {

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/GlobalParams.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/GlobalParams.cc	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/GlobalParams.cc	2018-04-29 00:37:13 UTC (rev 47480)
@@ -37,6 +37,7 @@
 // Copyright (C) 2013, 2014 Jason Crain <jason at aquaticape.us>
 // Copyright (C) 2017 Christoph Cullmann <cullmann at kde.org>
 // Copyright (C) 2017 Jean Ghali <jghali at libertysurf.fr>
+// Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. 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
@@ -262,7 +263,7 @@
   ~SysFontList();
   SysFontList(const SysFontList &) = delete;
   SysFontList& operator=(const SysFontList &) = delete;
-  SysFontInfo *find(GooString *name, GBool isFixedWidth, GBool exact);
+  SysFontInfo *find(const GooString *name, GBool isFixedWidth, GBool exact);
 
 #ifdef _WIN32
   void scanWindowsFonts(GooString *winFontDir);
@@ -288,7 +289,7 @@
   deleteGooList(fonts, SysFontInfo);
 }
 
-SysFontInfo *SysFontList::find(GooString *name, GBool fixedWidth, GBool exact) {
+SysFontInfo *SysFontList::find(const GooString *name, GBool fixedWidth, GBool exact) {
   GooString *name2;
   GBool bold, italic, oblique;
   SysFontInfo *fi;
@@ -953,7 +954,7 @@
   return lang;
 }
 
-static FcPattern *buildFcPattern(GfxFont *font, GooString *base14Name)
+static FcPattern *buildFcPattern(GfxFont *font, const GooString *base14Name)
 {
   int weight = -1,
       slant = -1,
@@ -965,12 +966,13 @@
   FcPattern *p;
 
   // this is all heuristics will be overwritten if font had proper info
-  name = (base14Name == nullptr) ? font->getName()->getCString() : base14Name->getCString();
-  
+  GooString copiedNameGooString(((base14Name == nullptr) ? font->getName() : base14Name)->getCString());
+  name = copiedNameGooString.getCString();
+
   modifiers = strchr (name, ',');
   if (modifiers == nullptr)
     modifiers = strchr (name, '-');
-  
+
   // remove the - from the names, for some reason, Fontconfig does not
   // understand "MS-Mincho" but does with "MS Mincho"
   int len = strlen(name);
@@ -1106,7 +1108,7 @@
   SysFontInfo *fi = nullptr;
   FcPattern *p=nullptr;
   GooString *path = nullptr;
-  GooString *fontName = font->getName();
+  const GooString *fontName = font->getName();
   GooString substituteName;
   if (!fontName) return nullptr;
   lockGlobalParams;

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/GlobalParamsWin.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/GlobalParamsWin.cc	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/GlobalParamsWin.cc	2018-04-29 00:37:13 UTC (rev 47480)
@@ -10,6 +10,7 @@
    // Copyright (C) 2013 Dmytro Morgun <lztoad at gmail.com>
    // Copyright (C) 2017 Christoph Cullmann <cullmann at kde.org>
    // Copyright (C) 2017, 2018 Albert Astals Cid <aacid at kde.org>
+   // Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. Work sponsored by the LiMux project of the city of Munich
 
 TODO: instead of a fixed mapping defined in displayFontTab, it could
 scan the whole fonts directory, parse TTF files and build font
@@ -553,7 +554,7 @@
                                           GooString *base14Name) {
   SysFontInfo *fi;
   GooString *path = nullptr;
-  GooString *fontName = font->getName();
+  const GooString *fontName = font->getName();
   if (!fontName) return nullptr;
   lockGlobalParams;
   setupBaseFonts(nullptr);

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/JPEG2000Stream.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/JPEG2000Stream.cc	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/JPEG2000Stream.cc	2018-04-29 00:37:13 UTC (rev 47480)
@@ -4,7 +4,7 @@
 //
 // A JPX stream decoder using OpenJPEG
 //
-// Copyright 2008-2010, 2012, 2017 Albert Astals Cid <aacid at kde.org>
+// Copyright 2008-2010, 2012, 2017, 2018 Albert Astals Cid <aacid at kde.org>
 // Copyright 2011 Daniel Glöckner <daniel-gl at gmx.net>
 // Copyright 2014, 2016 Thomas Freitag <Thomas.Freitag at alfa.de>
 // Copyright 2013, 2014 Adrian Johnson <ajohnson at redneon.com>
@@ -39,7 +39,6 @@
   int ccounter;
   int npixels;
   int ncomps;
-  GBool indexed;
   GBool inited;
   int smaskInData;
   void init2(OPJ_CODEC_FORMAT format, unsigned char *data, int length, GBool indexed);
@@ -81,7 +80,6 @@
   priv->image = nullptr;
   priv->npixels = 0;
   priv->ncomps = 0;
-  priv->indexed = gFalse;
 }
 
 JPXStream::~JPXStream() {
@@ -223,9 +221,10 @@
   int bufSize = BUFFER_INITIAL_SIZE;
   if (oLen.isInt()) bufSize = oLen.getInt();
 
+  GBool indexed = gFalse;
   if (cspace.isArray() && cspace.arrayGetLength() > 0) {
-    Object cstype = cspace.arrayGet(0);
-    if (cstype.isName("Indexed")) priv->indexed = gTrue;
+    const Object cstype = cspace.arrayGet(0);
+    if (cstype.isName("Indexed")) indexed = gTrue;
   }
 
   priv->smaskInData = 0;
@@ -233,7 +232,7 @@
 
   int length = 0;
   unsigned char *buf = str->toUnsignedChars(&length, bufSize);
-  priv->init2(OPJ_CODEC_JP2, buf, length, priv->indexed);
+  priv->init2(OPJ_CODEC_JP2, buf, length, indexed);
   gfree(buf);
 
   if (priv->image) {
@@ -264,7 +263,7 @@
 	sgndcorr = 1 << (priv->image->comps[0].prec - 1);
       for (int i = 0; i < priv->npixels; i++) {
 	int r = priv->image->comps[component].data[i];
-	*(cdata++) = adjustComp(r, adjust, depth, sgndcorr, priv->indexed);
+	*(cdata++) = adjustComp(r, adjust, depth, sgndcorr, indexed);
       }
     }
   } else {

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/Link.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/Link.cc	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/Link.cc	2018-04-29 00:37:13 UTC (rev 47480)
@@ -16,10 +16,12 @@
 // Copyright (C) 2006, 2008 Pino Toscano <pino at kde.org>
 // Copyright (C) 2007, 2010, 2011 Carlos Garcia Campos <carlosgc at gnome.org>
 // Copyright (C) 2008 Hugo Mercier <hmercier31 at gmail.com>
-// Copyright (C) 2008-2010, 2012-2014, 2016, 2017 Albert Astals Cid <aacid at kde.org>
+// Copyright (C) 2008-2010, 2012-2014, 2016-2018 Albert Astals Cid <aacid at kde.org>
 // Copyright (C) 2009 Kovid Goyal <kovid at kovidgoyal.net>
 // Copyright (C) 2009 Ilya Gorenbein <igorenbein at finjan.com>
 // Copyright (C) 2012 Tobias Koening <tobias.koenig at kdab.com>
+// Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. Work sponsored by the LiMux project of the city of Munich
+// Copyright (C) 2018 Intevation GmbH <intevation at intevation.de>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -50,8 +52,14 @@
 //------------------------------------------------------------------------
 // LinkAction
 //------------------------------------------------------------------------
+LinkAction::LinkAction() : nextActionList(nullptr) {
+}
 
-LinkAction *LinkAction::parseDest(Object *obj) {
+LinkAction::~LinkAction() {
+  delete nextActionList;
+}
+
+LinkAction *LinkAction::parseDest(const Object *obj) {
   LinkAction *action;
 
   action = new LinkGoTo(obj);
@@ -62,7 +70,14 @@
   return action;
 }
 
-LinkAction *LinkAction::parseAction(Object *obj, GooString *baseURI) {
+LinkAction *LinkAction::parseAction(const Object *obj, const GooString *baseURI)
+{
+    std::set<int> seenNextActions;
+    return parseAction(obj, baseURI, &seenNextActions);
+}
+
+LinkAction *LinkAction::parseAction(const Object *obj, const GooString *baseURI,
+                                    std::set<int> *seenNextActions) {
   LinkAction *action;
 
   if (!obj->isDict()) {
@@ -119,6 +134,10 @@
   } else if (obj2.isName("SetOCGState")) {
     action = new LinkOCGState(obj);
 
+  // Hide action
+  } else if (obj2.isName("Hide")) {
+    action = new LinkHide(obj);
+
   // unknown action
   } else if (obj2.isName()) {
     action = new LinkUnknown(obj2.getName());
@@ -134,14 +153,73 @@
     delete action;
     return nullptr;
   }
+
+  if (!action) {
+    return nullptr;
+  }
+
+  // parse the next actions
+  const Object nextObj = obj->dictLookup("Next");
+  GooList *actionList = nullptr;
+  if (nextObj.isDict()) {
+
+    // Prevent circles in the tree by checking the ref against used refs in
+    // our current tree branch.
+    const Object nextRefObj = obj->dictLookupNF("Next");
+    if (nextRefObj.isRef()) {
+        const Ref ref = nextRefObj.getRef();
+        if (!seenNextActions->insert(ref.num).second) {
+            error(errSyntaxWarning, -1, "parseAction: Circular next actions detected.");
+            return action;
+        }
+    }
+
+    actionList = new GooList(1);
+    actionList->append(parseAction(&nextObj, nullptr, seenNextActions));
+  } else if (nextObj.isArray()) {
+    const Array *a = nextObj.getArray();
+    const int n = a->getLength();
+    actionList = new GooList(n);
+    for (int i = 0; i < n; ++i) {
+      const Object obj3 = a->get(i);
+      if (!obj3.isDict()) {
+        error(errSyntaxWarning, -1, "parseAction: Next array does not contain only dicts");
+        continue;
+      }
+
+      // Similar circle check as above.
+      const Object obj3Ref = a->getNF(i);
+      if (obj3Ref.isRef()) {
+          const Ref ref = obj3Ref.getRef();
+          if (!seenNextActions->insert(ref.num).second) {
+              error(errSyntaxWarning, -1, "parseAction: Circular next actions detected in array.");
+              return action;
+          }
+      }
+
+      actionList->append(parseAction(&obj3, nullptr, seenNextActions));
+    }
+  }
+
+  action->setNextActions(actionList);
+
   return action;
 }
 
+const GooList *LinkAction::nextActions() const {
+  return nextActionList;
+}
+
+void LinkAction::setNextActions(GooList *actions) {
+  delete nextActionList;
+  nextActionList = actions;
+}
+
 //------------------------------------------------------------------------
 // LinkDest
 //------------------------------------------------------------------------
 
-LinkDest::LinkDest(Array *a) {
+LinkDest::LinkDest(const Array *a) {
   // initialize fields
   left = bottom = right = top = zoom = 0;
   changeLeft = changeTop = changeZoom = gFalse;
@@ -339,7 +417,7 @@
   return;
 }
 
-LinkDest::LinkDest(LinkDest *dest) {
+LinkDest::LinkDest(const LinkDest *dest) {
   kind = dest->kind;
   pageIsRef = dest->pageIsRef;
   if (pageIsRef)
@@ -361,7 +439,7 @@
 // LinkGoTo
 //------------------------------------------------------------------------
 
-LinkGoTo::LinkGoTo(Object *destObj) {
+LinkGoTo::LinkGoTo(const Object *destObj) {
   dest = nullptr;
   namedDest = nullptr;
 
@@ -441,7 +519,7 @@
 // LinkLaunch
 //------------------------------------------------------------------------
 
-LinkLaunch::LinkLaunch(Object *actionObj) {
+LinkLaunch::LinkLaunch(const Object *actionObj) {
 
   fileName = nullptr;
   params = nullptr;
@@ -489,8 +567,8 @@
 // LinkURI
 //------------------------------------------------------------------------
 
-LinkURI::LinkURI(Object *uriObj, GooString *baseURI) {
-  GooString *uri2;
+LinkURI::LinkURI(const Object *uriObj, const GooString *baseURI) {
+  const GooString *uri2;
   int n;
   char c;
 
@@ -538,7 +616,7 @@
 // LinkNamed
 //------------------------------------------------------------------------
 
-LinkNamed::LinkNamed(Object *nameObj) {
+LinkNamed::LinkNamed(const Object *nameObj) {
   name = nullptr;
   if (nameObj->isName()) {
     name = new GooString(nameObj->getName());
@@ -555,7 +633,7 @@
 // LinkMovie
 //------------------------------------------------------------------------
 
-LinkMovie::LinkMovie(Object *obj) {
+LinkMovie::LinkMovie(const Object *obj) {
   annotRef.num = -1;
   annotTitle = nullptr;
 
@@ -576,7 +654,7 @@
 
   tmp = obj->dictLookup("Operation");
   if (tmp.isName()) {
-    char *name = tmp.getName();
+    const char *name = tmp.getName();
     
     if (!strcmp(name, "Play")) {
       operation = operationTypePlay;
@@ -603,7 +681,7 @@
 // LinkSound
 //------------------------------------------------------------------------
 
-LinkSound::LinkSound(Object *soundObj) {
+LinkSound::LinkSound(const Object *soundObj) {
   volume = 1.0;
   sync = gFalse;
   repeat = gFalse;
@@ -645,7 +723,7 @@
 // LinkRendition
 //------------------------------------------------------------------------
 
-LinkRendition::LinkRendition(Object *obj) {
+LinkRendition::LinkRendition(const Object *obj) {
   operation = NoRendition;
   media = nullptr;
   js = nullptr;
@@ -742,7 +820,7 @@
 //------------------------------------------------------------------------
 // LinkOCGState
 //------------------------------------------------------------------------
-LinkOCGState::LinkOCGState(Object *obj) {
+LinkOCGState::LinkOCGState(const Object *obj) {
   stateList = new GooList();
   preserveRB = gTrue;
 
@@ -756,7 +834,7 @@
         if (stList)
 	  stateList->append(stList);
 
-	char *name = obj2.getName();
+	const char *name = obj2.getName();
 	stList = new StateList();
 	stList->list = new GooList();
 	if (!strcmp (name, "ON")) {
@@ -810,10 +888,34 @@
 }
 
 //------------------------------------------------------------------------
+// LinkHide
+//------------------------------------------------------------------------
+
+LinkHide::LinkHide(const Object *hideObj) {
+  targetName = nullptr;
+  show = false; // Default
+
+  if (hideObj->isDict()) {
+      const Object targetObj = hideObj->dictLookup("T");
+      if (targetObj.isString()) {
+	targetName = targetObj.getString()->copy();
+      }
+      const Object shouldHide = hideObj->dictLookup("H");
+      if (shouldHide.isBool()) {
+	show = !shouldHide.getBool();
+      }
+  }
+}
+
+LinkHide::~LinkHide() {
+  delete targetName;
+}
+
+//------------------------------------------------------------------------
 // LinkUnknown
 //------------------------------------------------------------------------
 
-LinkUnknown::LinkUnknown(char *actionA) {
+LinkUnknown::LinkUnknown(const char *actionA) {
   action = new GooString(actionA);
 }
 

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/Link.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/Link.h	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/Link.h	2018-04-29 00:37:13 UTC (rev 47480)
@@ -18,6 +18,8 @@
 // Copyright (C) 2010, 2011 Carlos Garcia Campos <carlosgc at gnome.org>
 // Copyright (C) 2012 Tobias Koening <tobias.koenig at kdab.com>
 // Copyright (C) 2018 Albert Astals Cid <aacid at kde.org>
+// Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. Work sponsored by the LiMux project of the city of Munich
+// Copyright (C) 2018 Intevation GmbH <intevation at intevation.de>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -32,6 +34,8 @@
 #endif
 
 #include "Object.h"
+#include <memory>
+#include <set>
 
 class GooString;
 class GooList;
@@ -57,6 +61,7 @@
   actionSound,			// sound action
   actionJavaScript,		// JavaScript action
   actionOCGState,               // Set-OCG-State action
+  actionHide,			// Hide action
   actionUnknown			// anything else
 };
 
@@ -63,24 +68,36 @@
 class LinkAction {
 public:
 
-  LinkAction() = default;
+  LinkAction();
   LinkAction(const LinkAction &) = delete;
   LinkAction& operator=(const LinkAction &other) = delete;
 
   // Destructor.
-  virtual ~LinkAction() {}
+  virtual ~LinkAction();
 
   // Was the LinkAction created successfully?
-  virtual GBool isOk() = 0;
+  virtual GBool isOk() const = 0;
 
   // Check link action type.
-  virtual LinkActionKind getKind() = 0;
+  virtual LinkActionKind getKind() const = 0;
 
   // Parse a destination (old-style action) name, string, or array.
-  static LinkAction *parseDest(Object *obj);
+  static LinkAction *parseDest(const Object *obj);
 
   // Parse an action dictionary.
-  static LinkAction *parseAction(Object *obj, GooString *baseURI = NULL);
+  static LinkAction *parseAction(const Object *obj, const GooString *baseURI = nullptr);
+
+  // A List of the next actions to execute in order.
+  // The list contains pointer to LinkAction objects.
+  const GooList *nextActions() const;
+
+  // Sets the next action list. Takes ownership of the actions.
+  void setNextActions(GooList *actions);
+
+private:
+  static LinkAction *parseAction(const Object *obj, const GooString *baseURI, std::set<int> *seenNextActions);
+
+  GooList *nextActionList;
 };
 
 //------------------------------------------------------------------------
@@ -102,27 +119,27 @@
 public:
 
   // Build a LinkDest from the array.
-  LinkDest(Array *a);
+  LinkDest(const Array *a);
 
   // Copy a LinkDest.
-  LinkDest *copy() { return new LinkDest(this); }
+  LinkDest *copy() const { return new LinkDest(this); }
 
   // Was the LinkDest created successfully?
-  GBool isOk() { return ok; }
+  GBool isOk() const { return ok; }
 
   // Accessors.
-  LinkDestKind getKind() { return kind; }
-  GBool isPageRef() { return pageIsRef; }
-  int getPageNum() { return pageNum; }
-  Ref getPageRef() { return pageRef; }
-  double getLeft() { return left; }
-  double getBottom() { return bottom; }
-  double getRight() { return right; }
-  double getTop() { return top; }
-  double getZoom() { return zoom; }
-  GBool getChangeLeft() { return changeLeft; }
-  GBool getChangeTop() { return changeTop; }
-  GBool getChangeZoom() { return changeZoom; }
+  LinkDestKind getKind() const { return kind; }
+  GBool isPageRef() const { return pageIsRef; }
+  int getPageNum() const { return pageNum; }
+  Ref getPageRef() const { return pageRef; }
+  double getLeft() const { return left; }
+  double getBottom() const { return bottom; }
+  double getRight() const { return right; }
+  double getTop() const { return top; }
+  double getZoom() const { return zoom; }
+  GBool getChangeLeft() const { return changeLeft; }
+  GBool getChangeTop() const { return changeTop; }
+  GBool getChangeZoom() const { return changeZoom; }
 
 private:
 
@@ -141,7 +158,7 @@
 				//   destFitV/BV use changeLeft
   GBool ok;			// set if created successfully
 
-  LinkDest(LinkDest *dest);
+  LinkDest(const LinkDest *dest);
 };
 
 //------------------------------------------------------------------------
@@ -152,18 +169,18 @@
 public:
 
   // Build a LinkGoTo from a destination (dictionary, name, or string).
-  LinkGoTo(Object *destObj);
+  LinkGoTo(const Object *destObj);
 
   // Destructor.
   ~LinkGoTo();
 
   // Was the LinkGoTo created successfully?
-  GBool isOk() override { return dest || namedDest; }
+  GBool isOk() const override { return dest || namedDest; }
 
   // Accessors.
-  LinkActionKind getKind() override { return actionGoTo; }
-  LinkDest *getDest() { return dest; }
-  GooString *getNamedDest() { return namedDest; }
+  LinkActionKind getKind() const override { return actionGoTo; }
+  const LinkDest *getDest() const { return dest; }
+  const GooString *getNamedDest() const { return namedDest; }
 
 private:
 
@@ -188,13 +205,13 @@
   ~LinkGoToR();
 
   // Was the LinkGoToR created successfully?
-  GBool isOk() override { return fileName && (dest || namedDest); }
+  GBool isOk() const override { return fileName && (dest || namedDest); }
 
   // Accessors.
-  LinkActionKind getKind() override { return actionGoToR; }
-  GooString *getFileName() { return fileName; }
-  LinkDest *getDest() { return dest; }
-  GooString *getNamedDest() { return namedDest; }
+  LinkActionKind getKind() const override { return actionGoToR; }
+  const GooString *getFileName() const { return fileName; }
+  const LinkDest *getDest() const { return dest; }
+  const GooString *getNamedDest() const { return namedDest; }
 
 private:
 
@@ -213,18 +230,18 @@
 public:
 
   // Build a LinkLaunch from an action dictionary.
-  LinkLaunch(Object *actionObj);
+  LinkLaunch(const Object *actionObj);
 
   // Destructor.
   ~LinkLaunch();
 
   // Was the LinkLaunch created successfully?
-  GBool isOk() override { return fileName != NULL; }
+  GBool isOk() const override { return fileName != NULL; }
 
   // Accessors.
-  LinkActionKind getKind() override { return actionLaunch; }
-  GooString *getFileName() { return fileName; }
-  GooString *getParams() { return params; }
+  LinkActionKind getKind() const override { return actionLaunch; }
+  const GooString *getFileName() const { return fileName; }
+  const GooString *getParams() const { return params; }
 
 private:
 
@@ -240,17 +257,17 @@
 public:
 
   // Build a LinkURI given the URI (string) and base URI.
-  LinkURI(Object *uriObj, GooString *baseURI);
+  LinkURI(const Object *uriObj, const GooString *baseURI);
 
   // Destructor.
   ~LinkURI();
 
   // Was the LinkURI created successfully?
-  GBool isOk() override { return uri != NULL; }
+  GBool isOk() const override { return uri != NULL; }
 
   // Accessors.
-  LinkActionKind getKind() override { return actionURI; }
-  GooString *getURI() { return uri; }
+  LinkActionKind getKind() const override { return actionURI; }
+  const GooString *getURI() const { return uri; }
 
 private:
 
@@ -265,14 +282,14 @@
 public:
 
   // Build a LinkNamed given the action name.
-  LinkNamed(Object *nameObj);
+  LinkNamed(const Object *nameObj);
 
   ~LinkNamed();
 
-  GBool isOk() override { return name != NULL; }
+  GBool isOk() const override { return name != NULL; }
 
-  LinkActionKind getKind() override { return actionNamed; }
-  GooString *getName() { return name; }
+  LinkActionKind getKind() const override { return actionNamed; }
+  const GooString *getName() const { return name; }
 
 private:
 
@@ -294,21 +311,21 @@
     operationTypeStop
   };
 
-  LinkMovie(Object *obj);
+  LinkMovie(const Object *obj);
   ~LinkMovie();
 
-  GBool isOk() override { return annotRef.num >= 0 || annotTitle != NULL; }
-  LinkActionKind getKind() override { return actionMovie; }
+  GBool isOk() const override { return annotRef.num >= 0 || annotTitle != NULL; }
+  LinkActionKind getKind() const override { return actionMovie; }
 
   // a movie action stores either an indirect reference to a movie annotation
   // or the movie annotation title
 
-  GBool hasAnnotRef() { return annotRef.num >= 0; }
-  GBool hasAnnotTitle() { return annotTitle != NULL; }
-  Ref *getAnnotRef() { return &annotRef; }
-  GooString *getAnnotTitle() { return annotTitle; }
+  GBool hasAnnotRef() const { return annotRef.num >= 0; }
+  GBool hasAnnotTitle() const { return annotTitle != NULL; }
+  const Ref *getAnnotRef() const { return &annotRef; }
+  const GooString *getAnnotTitle() const { return annotTitle; }
 
-  OperationType getOperation() { return operation; }
+  OperationType getOperation() const { return operation; }
 
 private:
 
@@ -336,25 +353,25 @@
     ResumeRendition
   };
 
-  LinkRendition(Object *Obj);
+  LinkRendition(const Object *Obj);
 
   ~LinkRendition();
 
-  GBool isOk() override { return true; }
+  GBool isOk() const override { return true; }
 
-  LinkActionKind getKind() override { return actionRendition; }
+  LinkActionKind getKind() const override { return actionRendition; }
 
-  GBool hasRenditionObject() { return renditionObj.isDict(); }
-  Object* getRenditionObject() { return &renditionObj; }
+  GBool hasRenditionObject() const { return renditionObj.isDict(); }
+  const Object* getRenditionObject() const { return &renditionObj; }
 
-  GBool hasScreenAnnot() { return screenRef.isRef(); }
-  Ref getScreenAnnot() { return screenRef.getRef(); }
+  GBool hasScreenAnnot() const { return screenRef.isRef(); }
+  Ref getScreenAnnot() const { return screenRef.getRef(); }
 
-  RenditionOperation getOperation() { return operation; }
+  RenditionOperation getOperation() const { return operation; }
 
-  MediaRendition* getMedia() { return media; }
+  const MediaRendition* getMedia() const { return media; }
 
-  GooString *getScript() { return js; }
+  const GooString *getScript() const { return js; }
 
 private:
 
@@ -374,19 +391,19 @@
 class LinkSound: public LinkAction {
 public:
 
-  LinkSound(Object *soundObj);
+  LinkSound(const Object *soundObj);
 
   ~LinkSound();
 
-  GBool isOk() override { return sound != NULL; }
+  GBool isOk() const override { return sound != NULL; }
 
-  LinkActionKind getKind() override { return actionSound; }
+  LinkActionKind getKind() const override { return actionSound; }
 
-  double getVolume() { return volume; }
-  GBool getSynchronous() { return sync; }
-  GBool getRepeat() { return repeat; }
-  GBool getMix() { return mix; }
-  Sound *getSound() { return sound; }
+  double getVolume() const { return volume; }
+  GBool getSynchronous() const { return sync; }
+  GBool getRepeat() const { return repeat; }
+  GBool getMix() const { return mix; }
+  Sound *getSound() const { return sound; }
 
 private:
 
@@ -409,10 +426,10 @@
 
   ~LinkJavaScript();
 
-  GBool isOk() override { return js != NULL; }
+  GBool isOk() const override { return js != NULL; }
 
-  LinkActionKind getKind() override { return actionJavaScript; }
-  GooString *getScript() { return js; }
+  LinkActionKind getKind() const override { return actionJavaScript; }
+  const GooString *getScript() const { return js; }
 
 private:
 
@@ -424,13 +441,13 @@
 //------------------------------------------------------------------------
 class LinkOCGState: public LinkAction {
 public:
-  LinkOCGState(Object *obj);
+  LinkOCGState(const Object *obj);
 
   ~LinkOCGState();
 
-  GBool isOk() override { return stateList != NULL; }
+  GBool isOk() const override { return stateList != NULL; }
 
-  LinkActionKind getKind() override { return actionOCGState; }
+  LinkActionKind getKind() const override { return actionOCGState; }
 
   enum State { On, Off, Toggle};
   struct StateList {
@@ -442,8 +459,8 @@
     GooList *list;
   };
 
-  GooList *getStateList() { return stateList; }
-  GBool getPreserveRB() { return preserveRB; }
+  const GooList *getStateList() const { return stateList; }
+  GBool getPreserveRB() const { return preserveRB; }
 
 private:
   GooList *stateList;
@@ -451,6 +468,39 @@
 };
 
 //------------------------------------------------------------------------
+// LinkHide
+//------------------------------------------------------------------------
+
+class LinkHide: public LinkAction {
+public:
+  LinkHide(const Object *hideObj);
+
+  ~LinkHide();
+
+  GBool isOk() const override { return targetName != nullptr; }
+  LinkActionKind getKind() const override { return actionHide; }
+
+  // According to spec the target can be either:
+  // a) A text string containing the fully qualified name of the target
+  //    field.
+  // b) An indirect reference to an annotation dictionary.
+  // c) An array of "such dictionaries or text strings".
+  //
+  // While b / c appear to be very uncommon and can't easily be
+  // created with Adobe Acrobat DC. So only support hide
+  // actions with named targets (yet).
+  GBool hasTargetName() const { return targetName != nullptr; }
+  const GooString *getTargetName() const { return targetName; }
+
+  // Should this action show or hide.
+  GBool isShowAction() const { return show; }
+
+private:
+  GooString *targetName;
+  GBool show;
+};
+
+//------------------------------------------------------------------------
 // LinkUnknown
 //------------------------------------------------------------------------
 
@@ -458,17 +508,17 @@
 public:
 
   // Build a LinkUnknown with the specified action type.
-  LinkUnknown(char *actionA);
+  LinkUnknown(const char *actionA);
 
   // Destructor.
   ~LinkUnknown();
 
   // Was the LinkUnknown create successfully?
-  GBool isOk() override { return action != NULL; }
+  GBool isOk() const override { return action != NULL; }
 
   // Accessors.
-  LinkActionKind getKind() override { return actionUnknown; }
-  GooString *getAction() { return action; }
+  LinkActionKind getKind() const override { return actionUnknown; }
+  const GooString *getAction() const { return action; }
 
 private:
 

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/MarkedContentOutputDev.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/MarkedContentOutputDev.cc	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/MarkedContentOutputDev.cc	2018-04-29 00:37:13 UTC (rev 47480)
@@ -69,7 +69,7 @@
 }
 
 
-void MarkedContentOutputDev::beginMarkedContent(char *name, Dict *properties)
+void MarkedContentOutputDev::beginMarkedContent(const char *name, Dict *properties)
 {
   int id = -1;
   if (properties)

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/MarkedContentOutputDev.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/MarkedContentOutputDev.h	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/MarkedContentOutputDev.h	2018-04-29 00:37:13 UTC (rev 47480)
@@ -109,7 +109,7 @@
                         CharCode c, int nBytes,
                         Unicode *u, int uLen) override;
 
-  void beginMarkedContent(char *name, Dict *properties) override;
+  void beginMarkedContent(const char *name, Dict *properties) override;
   void endMarkedContent(GfxState *state) override;
 
   const TextSpanArray& getTextSpans() const;

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/Movie.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/Movie.cc	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/Movie.cc	2018-04-29 00:37:13 UTC (rev 47480)
@@ -6,7 +6,7 @@
 // Hugo Mercier <hmercier31[at]gmail.com> (c) 2008
 // Pino Toscano <pino at kde.org> (c) 2008
 // Carlos Garcia Campos <carlosgc at gnome.org> (c) 2010
-// Albert Astals Cid <aacid at kde.org> (c) 2010, 2017
+// Albert Astals Cid <aacid at kde.org> (c) 2010, 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
@@ -46,7 +46,7 @@
 MovieActivationParameters::~MovieActivationParameters() {
 }
 
-void MovieActivationParameters::parseMovieActivation(Object* aDict) {
+void MovieActivationParameters::parseMovieActivation(const Object* aDict) {
   Object obj1 = aDict->dictLookup("Start");
   if (obj1.isNull()) {
     if (obj1.isInt()) {
@@ -125,7 +125,7 @@
 
   obj1 = aDict->dictLookup("Mode");
   if (obj1.isName()) {
-    char* name = obj1.getName();
+    const char* name = obj1.getName();
     if (!strcmp(name, "Once")) {
       repeatMode = repeatModeOnce;
     } else if (!strcmp(name, "Open")) {
@@ -172,7 +172,7 @@
   }
 }
 
-void Movie::parseMovie (Object *movieDict) {
+void Movie::parseMovie (const Object *movieDict) {
   fileName = nullptr;
   rotationAngle = 0;
   width = -1;
@@ -230,7 +230,7 @@
   delete fileName;
 }
 
-Movie::Movie(Object *movieDict) {
+Movie::Movie(const Object *movieDict) {
   ok = gTrue;
 
   if (movieDict->isDict())
@@ -239,7 +239,7 @@
     ok = gFalse;
 }
 
-Movie::Movie(Object *movieDict, Object *aDict) {
+Movie::Movie(const Object *movieDict, const Object *aDict) {
   ok = gTrue;
 
   if (movieDict->isDict()) {
@@ -274,6 +274,6 @@
   *heightA = int(height * double(MA.znum) / MA.zdenum);
 }
 
-Movie* Movie::copy() {
+Movie* Movie::copy() const {
   return new Movie(*this);
 }

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/Movie.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/Movie.h	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/Movie.h	2018-04-29 00:37:13 UTC (rev 47480)
@@ -33,7 +33,7 @@
   ~MovieActivationParameters();
 
   // parse from a "Movie Activation" dictionary
-  void parseMovieActivation(Object* actObj);
+  void parseMovieActivation(const Object* actObj);
 
   enum MovieRepeatMode {
     repeatModeOnce,
@@ -70,30 +70,30 @@
 
 class Movie {
  public:
-  Movie(Object *objMovie, Object *objAct);
-  Movie(Object *objMovie);
+  Movie(const Object *objMovie, const Object *objAct);
+  Movie(const Object *objMovie);
   Movie(const Movie &movie);
   ~Movie();
   Movie& operator=(const Movie &) = delete;
 
-  GBool isOk() { return ok; }
-  MovieActivationParameters* getActivationParameters() { return &MA; }
+  GBool isOk() const { return ok; }
+  const MovieActivationParameters* getActivationParameters() const { return &MA; }
 
-  GooString* getFileName() { return fileName; }
+  const GooString* getFileName() const { return fileName; }
 
-  Gushort getRotationAngle() { return rotationAngle; }
-  void getAspect (int *widthA, int *heightA) { *widthA = width; *heightA = height; }
+  Gushort getRotationAngle() const { return rotationAngle; }
+  void getAspect (int *widthA, int *heightA) const { *widthA = width; *heightA = height; }
 
-  Object getPoster() { return poster.copy(); }
-  GBool getShowPoster() { return showPoster; }
+  Object getPoster() const { return poster.copy(); }
+  GBool getShowPoster() const { return showPoster; }
 
-  GBool getUseFloatingWindow() { return MA.floatingWindow; }
+  GBool getUseFloatingWindow() const { return MA.floatingWindow; }
   void  getFloatingWindowSize(int *width, int *height);
 
-  Movie* copy();
+  Movie* copy() const ;
 
  private:
-  void parseMovie (Object *movieDict);
+  void parseMovie (const Object *movieDict);
 
   GBool ok;
 

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/Object.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/Object.h	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/Object.h	2018-04-29 00:37:13 UTC (rev 47480)
@@ -22,6 +22,7 @@
 // Copyright (C) 2013, 2017, 2018 Adrian Johnson <ajohnson at redneon.com>
 // Copyright (C) 2013 Adrian Perez de Castro <aperez at igalia.com>
 // Copyright (C) 2016 Jakub Alba <jakubalba at gmail.com>
+// Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. 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
@@ -236,12 +237,12 @@
     }
     return type == objInt ? (double)intg : type == objInt64 ? (double)int64g : real;
   }
-  GooString *getString() const { OBJECT_TYPE_CHECK(objString); return string; }
+  const GooString *getString() const { OBJECT_TYPE_CHECK(objString); return string; }
   // 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 = nullptr; return s; }
-  char *getName() const { OBJECT_TYPE_CHECK(objName); return cString; }
+  const 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; }
   Stream *getStream() const { OBJECT_TYPE_CHECK(objStream); return stream; }

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/OptionalContent.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/OptionalContent.cc	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/OptionalContent.cc	2018-04-29 00:37:13 UTC (rev 47480)
@@ -5,7 +5,7 @@
 // Copyright 2007 Brad Hards <bradh at kde.org>
 // Copyright 2008 Pino Toscano <pino at kde.org>
 // Copyright 2008, 2010 Carlos Garcia Campos <carlosgc at gnome.org>
-// Copyright 2008, 2010, 2011, 2017 Albert Astals Cid <aacid at kde.org>
+// Copyright 2008, 2010, 2011, 2017, 2018 Albert Astals Cid <aacid at kde.org>
 // Copyright 2008 Mark Kaplan <mkaplan at finjan.com>
 //
 // Released under the GPL (version 2, or later, at your option)
@@ -133,7 +133,7 @@
 }
 
 
-bool OCGs::hasOCGs()
+bool OCGs::hasOCGs() const
 {
   return ( optionalContentGroups->getLength() > 0 );
 }
@@ -374,7 +374,7 @@
   m_state = On;
 }
 
-GooString* OptionalContentGroup::getName() const
+const GooString* OptionalContentGroup::getName() const
 {
   return m_name;
 }
@@ -447,7 +447,7 @@
   children = nullptr;
 }
 
-OCDisplayNode::OCDisplayNode(GooString *nameA) {
+OCDisplayNode::OCDisplayNode(const GooString *nameA) {
   name = new GooString(nameA);
   ocg = nullptr;
   children = nullptr;
@@ -489,7 +489,7 @@
   }
 }
 
-int OCDisplayNode::getNumChildren() {
+int OCDisplayNode::getNumChildren() const {
   if (!children) {
     return 0;
   }
@@ -496,6 +496,6 @@
   return children->getLength();
 }
 
-OCDisplayNode *OCDisplayNode::getChild(int idx) {
+OCDisplayNode *OCDisplayNode::getChild(int idx) const {
   return (OCDisplayNode *)children->get(idx);
 }

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/OptionalContent.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/OptionalContent.h	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/OptionalContent.h	2018-04-29 00:37:13 UTC (rev 47480)
@@ -39,9 +39,9 @@
   OCGs& operator=(const OCGs &) = delete;
 
   // Is OCGS valid?
-  GBool isOk() { return ok; }
+  GBool isOk() const { return ok; }
   
-  bool hasOCGs();
+  bool hasOCGs() const;
   GooList *getOCGs() const { return optionalContentGroups; }
 
   OptionalContentGroup* findOcgByRef( const Ref &ref);
@@ -96,7 +96,7 @@
   OptionalContentGroup(const OptionalContentGroup &) = delete;
   OptionalContentGroup& operator=(const OptionalContentGroup &) = delete;
 
-  GooString* getName() const;
+  const GooString* getName() const;
 
   Ref getRef() const;
   void setRef(const Ref ref);
@@ -127,14 +127,14 @@
   OCDisplayNode(const OCDisplayNode &) = delete;
   OCDisplayNode& operator=(const OCDisplayNode &) = delete;
 
-  GooString *getName() { return name; }
-  OptionalContentGroup *getOCG() { return ocg; }
-  int getNumChildren();
-  OCDisplayNode *getChild(int idx);
+  const GooString *getName() const { return name; }
+  const OptionalContentGroup *getOCG() const { return ocg; }
+  int getNumChildren() const;
+  OCDisplayNode *getChild(int idx) const;
 
 private:
 
-  OCDisplayNode(GooString *nameA);
+  OCDisplayNode(const GooString *nameA);
   OCDisplayNode(OptionalContentGroup *ocgA);
   void addChild(OCDisplayNode *child);
   void addChildren(GooList *childrenA);

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/Outline.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/Outline.cc	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/Outline.cc	2018-04-29 00:37:13 UTC (rev 47480)
@@ -14,10 +14,11 @@
 // under GPL version 2 or later
 //
 // Copyright (C) 2005 Marco Pesenti Gritti <mpg at redhat.com>
-// Copyright (C) 2008, 2016, 2017 Albert Astals Cid <aacid at kde.org>
+// Copyright (C) 2008, 2016-2018 Albert Astals Cid <aacid at kde.org>
 // Copyright (C) 2009 Nick Jones <nick.jones at network-box.com>
 // Copyright (C) 2016 Jason Crain <jason at aquaticape.us>
 // Copyright (C) 2017 Adrian Johnson <ajohnson at redneon.com>
+// Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. 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
@@ -41,7 +42,7 @@
 
 //------------------------------------------------------------------------
 
-Outline::Outline(Object *outlineObj, XRef *xref) {
+Outline::Outline(const Object *outlineObj, XRef *xref) {
   items = nullptr;
   if (!outlineObj->isDict()) {
     return;
@@ -58,7 +59,7 @@
 
 //------------------------------------------------------------------------
 
-OutlineItem::OutlineItem(Dict *dict, int refNumA, OutlineItem *parentA, XRef *xrefA) {
+OutlineItem::OutlineItem(const Dict *dict, int refNumA, OutlineItem *parentA, XRef *xrefA) {
   Object obj1;
 
   refNum = refNumA;
@@ -71,7 +72,7 @@
 
   obj1 = dict->lookup("Title");
   if (obj1.isString()) {
-    GooString *s = obj1.getString();
+    const GooString *s = obj1.getString();
     titleLen = TextStringToUCS4(s, &title);
   } else {
     titleLen = 0;
@@ -110,7 +111,7 @@
   }
 }
 
-GooList *OutlineItem::readItemList(OutlineItem *parent, Object *firstItemRef, XRef *xrefA) {
+GooList *OutlineItem::readItemList(OutlineItem *parent, const Object *firstItemRef, XRef *xrefA) {
   GooList *items = new GooList();
 
   char* alreadyRead = (char *)gmalloc(xrefA->getNumObjects());
@@ -122,7 +123,7 @@
     parentO = parentO->parent;
   }
 
-  Object *p = firstItemRef;
+  const Object *p = firstItemRef;
   while (p->isRef() && 
 	 (p->getRefNum() >= 0) && 
          (p->getRefNum() < xrefA->getNumObjects()) &&

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/Outline.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/Outline.h	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/Outline.h	2018-04-29 00:37:13 UTC (rev 47480)
@@ -41,13 +41,13 @@
 class Outline {
 public:
 
-  Outline(Object *outlineObj, XRef *xref);
+  Outline(const Object *outlineObj, XRef *xref);
   ~Outline();
 
   Outline(const Outline &) = delete;
   Outline& operator=(const Outline &) = delete;
 
-  GooList *getItems() { return items; }
+  const GooList *getItems() const { return items; }
 
 private:
 
@@ -60,23 +60,23 @@
 class OutlineItem {
 public:
 
-  OutlineItem(Dict *dict, int refNumA, OutlineItem *parentA, XRef *xrefA);
+  OutlineItem(const Dict *dict, int refNumA, OutlineItem *parentA, XRef *xrefA);
   ~OutlineItem();
 
   OutlineItem(const OutlineItem &) = delete;
   OutlineItem& operator=(const OutlineItem &) = delete;
 
-  static GooList *readItemList(OutlineItem *parent, Object *firstItemRef, XRef *xrefA);
+  static GooList *readItemList(OutlineItem *parent, const Object *firstItemRef, XRef *xrefA);
 
   void open();
   void close();
 
-  Unicode *getTitle() { return title; }
-  int getTitleLength() { return titleLen; }
-  LinkAction *getAction() { return action; }
-  GBool isOpen() { return startsOpen; }
-  GBool hasKids() { return firstRef.isRef(); }
-  GooList *getKids() { return kids; }
+  const Unicode *getTitle() const { return title; }
+  int getTitleLength() const { return titleLen; }
+  const LinkAction *getAction() const { return action; }
+  GBool isOpen() const { return startsOpen; }
+  GBool hasKids() const { return firstRef.isRef(); }
+  const GooList *getKids() const { return kids; }
 
 private:
 

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/OutputDev.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/OutputDev.cc	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/OutputDev.cc	2018-04-29 00:37:13 UTC (rev 47480)
@@ -160,13 +160,13 @@
 void OutputDev::endMarkedContent(GfxState *state) {
 }
 
-void OutputDev::beginMarkedContent(char *name, Dict *properties) {
+void OutputDev::beginMarkedContent(const char *name, Dict *properties) {
 }
 
-void OutputDev::markPoint(char *name) {
+void OutputDev::markPoint(const char *name) {
 }
 
-void OutputDev::markPoint(char *name, Dict *properties) {
+void OutputDev::markPoint(const char *name, Dict *properties) {
 }
 
 

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/OutputDev.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/OutputDev.h	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/OutputDev.h	2018-04-29 00:37:13 UTC (rev 47480)
@@ -23,7 +23,8 @@
 // Copyright (C) 2010 Christian Feuers\xE4nger <cfeuersaenger at googlemail.com>
 // Copyright (C) 2012 Fabio D'Urso <fabiodurso at hotmail.it>
 // Copyright (C) 2012 William Bader <williambader at hotmail.com>
-// Copyright (C) 2017 Oliver Sander <oliver.sander at tu-dresden.de>
+// Copyright (C) 2017, 2018 Oliver Sander <oliver.sander at tu-dresden.de>
+// Copyright (C) 2018 Klar\xE4lvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. 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
@@ -247,7 +248,7 @@
   //----- text drawing
   virtual void beginStringOp(GfxState * /*state*/) {}
   virtual void endStringOp(GfxState * /*state*/) {}
-  virtual void beginString(GfxState * /*state*/, GooString * /*s*/) {}
+  virtual void beginString(GfxState * /*state*/, const GooString * /*s*/) {}
   virtual void endString(GfxState * /*state*/) {}
 
   // Draw one glyph at a specified position
@@ -263,7 +264,7 @@
 			double /*dx*/, double /*dy*/,
 			double /*originX*/, double /*originY*/,
 			CharCode /*code*/, int /*nBytes*/, Unicode * /*u*/, int /*uLen*/) {}
-  virtual void drawString(GfxState * /*state*/, GooString * /*s*/) {}
+  virtual void drawString(GfxState * /*state*/, const GooString * /*s*/) {}
   virtual GBool beginType3Char(GfxState * /*state*/, double /*x*/, double /*y*/,
 			       double /*dx*/, double /*dy*/,
 			       CharCode /*code*/, Unicode * /*u*/, int /*uLen*/);
@@ -271,10 +272,15 @@
   virtual void beginTextObject(GfxState * /*state*/) {}
   virtual void endTextObject(GfxState * /*state*/) {}
   virtual void incCharCount(int /*nChars*/) {}
-  virtual void beginActualText(GfxState * /*state*/, GooString * /*text*/ ) {}
+  virtual void beginActualText(GfxState * /*state*/, const GooString * /*text*/ ) {}
   virtual void endActualText(GfxState * /*state*/) {}
 
   //----- image drawing
+  // Draw an image mask.  An image mask is a one-bit-per-pixel image, where each pixel
+  // can only be 'fill color' or 'transparent'.
+  //
+  // If 'invert' is false, a sample value of 0 marks the page with the current color,
+  // and a 1 leaves the previous contents unchanged. If 'invert' is true, these meanings are reversed.
   virtual void drawImageMask(GfxState *state, Object *ref, Stream *str,
 			     int width, int height, GBool invert, GBool interpolate,
 			     GBool inlineImg);
@@ -303,9 +309,9 @@
   //----- grouping operators
 
   virtual void endMarkedContent(GfxState *state);
-  virtual void beginMarkedContent(char *name, Dict *properties);
-  virtual void markPoint(char *name);
-  virtual void markPoint(char *name, Dict *properties);
+  virtual void beginMarkedContent(const char *name, Dict *properties);
+  virtual void markPoint(const char *name);
+  virtual void markPoint(const char *name, Dict *properties);
 
 
 

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/PDFDoc.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/PDFDoc.cc	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/PDFDoc.cc	2018-04-29 00:37:13 UTC (rev 47480)
@@ -38,6 +38,8 @@
 // Copyright (C) 2017 Jean Ghali <jghali at libertysurf.fr>
 // Copyright (C) 2017 Fredrik Fornwall <fredrik at fornwall.net>
 // Copyright (C) 2018 Ben Timby <btimby at gmail.com>
+// Copyright (C) 2018 Evangelos Foutras <evangelos at foutrelis.com>
+// Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. 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
@@ -409,24 +411,30 @@
   char *p;
   char *tokptr;
   int i;
-  int c;
+  int bytesRead;
 
   pdfMajorVersion = 0;
   pdfMinorVersion = 0;
+
+  // read up to headerSearchSize bytes from the beginning of the document
   for (i = 0; i < headerSearchSize; ++i) {
-    if ((c = str->getChar()) == EOF) {
-      error(errSyntaxWarning, -1, "EOF while reading header (continuing anyway)");
-      return;
-    }
+    const int c = str->getChar();
+    if (c == EOF)
+      break;
     hdrBuf[i] = c;
   }
-  hdrBuf[headerSearchSize] = '\0';
-  for (i = 0; i < headerSearchSize - 5; ++i) {
+  bytesRead = i;
+  hdrBuf[bytesRead] = '\0';
+
+  // find the start of the PDF header if it exists and parse the version
+  bool headerFound = false;
+  for (i = 0; i < bytesRead - 5; ++i) {
     if (!strncmp(&hdrBuf[i], "%PDF-", 5)) {
+      headerFound = true;
       break;
     }
   }
-  if (i >= headerSearchSize - 5) {
+  if (!headerFound) {
     error(errSyntaxWarning, -1, "May not be a PDF file (continuing anyway)");
     return;
   }
@@ -676,7 +684,7 @@
 }
 
 static GBool
-get_id (GooString *encodedidstring, GooString *id) {
+get_id (const GooString *encodedidstring, GooString *id) {
   const char *encodedid = encodedidstring->getCString();
   char pdfid[pdfIdLength + 1];
   int n;
@@ -1178,7 +1186,7 @@
   outStr->printf("\r\nendstream\r\n");
 }
 
-void PDFDoc::writeString (GooString* s, OutStream* outStr, Guchar *fileKey,
+void PDFDoc::writeString (const GooString* s, OutStream* outStr, Guchar *fileKey,
                           CryptAlgorithm encAlgorithm, int keyLength, int objNum, int objGen)
 {
   // Encrypt string if encryption is enabled

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/PDFDoc.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/PDFDoc.h	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/PDFDoc.h	2018-04-29 00:37:13 UTC (rev 47480)
@@ -30,6 +30,7 @@
 // Copyright (C) 2015 André Guerreiro <aguerreiro1985 at gmail.com>
 // Copyright (C) 2015 André Esser <bepandre at hotmail.com>
 // Copyright (C) 2016 Jakub Alba <jakubalba at gmail.com>
+// Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. 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
@@ -192,7 +193,7 @@
 
   // Find a named destination.  Returns the link destination, or
   // NULL if <name> is not a destination.
-  LinkDest *findDest(GooString *name)
+  LinkDest *findDest(const GooString *name)
     { return catalog->findDest(name); }
 
   // Process the links for a page.
@@ -329,7 +330,7 @@
   static void writeRawStream (Stream* str, OutStream* outStr);
   void writeXRefTableTrailer (Goffset uxrefOffset, XRef *uxref, GBool writeAllEntries,
                               int uxrefSize, OutStream* outStr, GBool incrUpdate);
-  static void writeString (GooString* s, OutStream* outStr, Guchar *fileKey,
+  static void writeString (const GooString* s, OutStream* outStr, Guchar *fileKey,
                            CryptAlgorithm encAlgorithm, int keyLength, int objNum, int objGen);
   void saveIncrementalUpdate (OutStream* outStr);
   void saveCompleteRewrite (OutStream* outStr);

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/PDFDocEncoding.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/PDFDocEncoding.h	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/PDFDocEncoding.h	2018-04-29 00:37:13 UTC (rev 47480)
@@ -29,6 +29,6 @@
 
 extern Unicode pdfDocEncoding[256];
 
-char* pdfDocEncodingToUTF16 (GooString* orig, int* length);
+char* pdfDocEncodingToUTF16 (const GooString* orig, int* length);
 
 #endif

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/PSOutputDev.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/PSOutputDev.cc	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/PSOutputDev.cc	2018-04-29 00:37:13 UTC (rev 47480)
@@ -31,6 +31,7 @@
 // Copyright (C) 2014 Till Kamppeter <till.kamppeter at gmail.com>
 // Copyright (C) 2015 Marek Kasik <mkasik at redhat.com>
 // Copyright (C) 2016 Caolán McNamara <caolanm at redhat.com>
+// Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. 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
@@ -1535,7 +1536,6 @@
 			      int pageRotate, char *psTitle) {
   PSOutPaperSize *size;
   double x1, y1, x2, y2;
-  int i;
 
   switch (mode) {
   case psModePS:
@@ -1581,7 +1581,7 @@
 
   switch (mode) {
   case psModePS:
-    for (i = 0; i < paperSizes->getLength(); ++i) {
+    for (int i = 0; i < paperSizes->getLength(); ++i) {
       size = (PSOutPaperSize *)paperSizes->get(i);
       writePSFmt("%%{0:s} {1:t} {2:d} {3:d} 0 () ()\n",
                  i==0 ? "DocumentMedia:" : "+", size->name, size->w, size->h);
@@ -2866,8 +2866,9 @@
 
 // Make a unique PS font name, based on the names given in the PDF
 // font object, and an object ID (font file object for 
-GooString *PSOutputDev::makePSFontName(GfxFont *font, Ref *id) {
-  GooString *psName, *s;
+GooString *PSOutputDev::makePSFontName(GfxFont *font, const Ref *id) {
+  GooString *psName;
+  const GooString *s;
 
   if ((s = font->getEmbeddedFontName())) {
     psName = filterPSName(s);
@@ -5007,13 +5008,13 @@
   }
 }
 
-void PSOutputDev::drawString(GfxState *state, GooString *s) {
+void PSOutputDev::drawString(GfxState *state, const GooString *s) {
   GfxFont *font;
   int wMode;
   int *codeToGID;
   GooString *s2;
   double dx, dy, originX, originY;
-  char *p;
+  const char *p;
   UnicodeMap *uMap;
   CharCode code;
   Unicode *u;
@@ -7433,7 +7434,7 @@
   va_end(args);
 }
 
-void PSOutputDev::writePSString(GooString *s) {
+void PSOutputDev::writePSString(const GooString *s) {
   Guchar *p;
   int n, line;
   char buf[8];
@@ -7479,7 +7480,7 @@
   }
 }
 
-GooString *PSOutputDev::filterPSName(GooString *name) {
+GooString *PSOutputDev::filterPSName(const GooString *name) {
   GooString *name2;
   char buf[8];
   int i;
@@ -7578,7 +7579,7 @@
 }
 
 // Write a DSC-compliant <textline>.
-void PSOutputDev::writePSTextLine(GooString *s) {
+void PSOutputDev::writePSTextLine(const GooString *s) {
   int i, j, step;
   int c;
 

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/PSOutputDev.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/PSOutputDev.h	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/PSOutputDev.h	2018-04-29 00:37:13 UTC (rev 47480)
@@ -24,6 +24,7 @@
 // Copyright (C) 2010 Hib Eris <hib at hiberis.nl>
 // Copyright (C) 2011, 2014, 2017 Adrian Johnson <ajohnson at redneon.com>
 // Copyright (C) 2012 Fabio D'Urso <fabiodurso at hotmail.it>
+// Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. 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
@@ -252,7 +253,7 @@
   void clipToStrokePath(GfxState *state) override;
 
   //----- text drawing
-  void drawString(GfxState *state, GooString *s) override;
+  void drawString(GfxState *state, const GooString *s) override;
   void beginTextObject(GfxState *state) override;
   void endTextObject(GfxState *state) override;
 
@@ -372,7 +373,7 @@
 				    GBool needVerticalMetrics);
   void setupEmbeddedOpenTypeCFFFont(GfxFont *font, Ref *id, GooString *psName);
   void setupType3Font(GfxFont *font, GooString *psName, Dict *parentResDict);
-  GooString *makePSFontName(GfxFont *font, Ref *id);
+  GooString *makePSFontName(GfxFont *font, const Ref *id);
   void setupImages(Dict *resDict);
   void setupImage(Ref id, Stream *str, GBool mask);
   void setupForms(Dict *resDict);
@@ -422,7 +423,7 @@
 		    double *x1, double *y1);
 #endif
   void cvtFunction(Function *func, GBool invertPSFunction = gFalse);
-  GooString *filterPSName(GooString *name);
+  GooString *filterPSName(const GooString *name);
 
   // Write the document-level setup.
   void writeDocSetup(PDFDoc *doc, Catalog *catalog, const std::vector<int> &pages, GBool duplexA);
@@ -431,10 +432,10 @@
   void writePS(const char *s);
   void writePSBuf(const char *s, int len);
   void writePSFmt(const char *fmt, ...);
-  void writePSString(GooString *s);
+  void writePSString(const GooString *s);
   void writePSName(const char *s);
   GooString *filterPSLabel(GooString *label, GBool *needParens=nullptr);
-  void writePSTextLine(GooString *s);
+  void writePSTextLine(const GooString *s);
 
   PSLevel level;		// PostScript level (1, 2, separation)
   PSOutMode mode;		// PostScript mode (PS, EPS, form)

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/Page.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/Page.h	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/Page.h	2018-04-29 00:37:13 UTC (rev 47480)
@@ -91,9 +91,9 @@
   PDFRectangle *getTrimBox() { return &trimBox; }
   PDFRectangle *getArtBox() { return &artBox; }
   int getRotate() { return rotate; }
-  GooString *getLastModified()
+  const GooString *getLastModified() const
     { return lastModified.isString()
-	? lastModified.getString() : (GooString *)NULL; }
+	? lastModified.getString() : nullptr; }
   Dict *getBoxColorInfo()
     { return boxColorInfo.isDict() ? boxColorInfo.getDict() : (Dict *)NULL; }
   Dict *getGroup()
@@ -171,7 +171,7 @@
   PDFRectangle *getTrimBox() { return attrs->getTrimBox(); }
   PDFRectangle *getArtBox() { return attrs->getArtBox(); }
   int getRotate() { return attrs->getRotate(); }
-  GooString *getLastModified() { return attrs->getLastModified(); }
+  const GooString *getLastModified() const { return attrs->getLastModified(); }
   Dict *getBoxColorInfo() { return attrs->getBoxColorInfo(); }
   Dict *getGroup() { return attrs->getGroup(); }
   Stream *getMetadata() { return attrs->getMetadata(); }

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/Parser.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/Parser.cc	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/Parser.cc	2018-04-29 00:37:13 UTC (rev 47480)
@@ -19,6 +19,7 @@
 // Copyright (C) 2012 Hib Eris <hib at hiberis.nl>
 // Copyright (C) 2013 Adrian Johnson <ajohnson at redneon.com>
 // Copyright (C) 2013 Thomas Freitag <Thomas.Freitag at alfa.de>
+// Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. 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
@@ -71,7 +72,8 @@
   Object obj;
   Stream *str;
   DecryptStream *decrypt;
-  GooString *s, *s2;
+  const GooString *s;
+  GooString *s2;
   int c;
 
   // refill buffer after inline image data

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/Rendition.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/Rendition.cc	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/Rendition.cc	2018-04-29 00:37:13 UTC (rev 47480)
@@ -7,7 +7,7 @@
 // Pino Toscano <pino at kde.org> (c) 2008
 // Carlos Garcia Campos <carlosgc at gnome.org> (c) 2010
 // Tobias Koenig <tobias.koenig at kdab.com> (c) 2012
-// Albert Astals Cid <aacid at kde.org> (C) 2017
+// Albert Astals Cid <aacid at kde.org> (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
@@ -177,7 +177,7 @@
   if (tmp.isDict()) {
     Object oname = tmp.dictLookup("S");
     if (oname.isName()) {
-      char* name = oname.getName();
+      const char* name = oname.getName();
       if (!strcmp(name, "F"))
 	duration = -1; // infinity
       else if (!strcmp(name, "T")) {
@@ -371,7 +371,7 @@
   
 }
 
-MediaRendition* MediaRendition::copy()
+MediaRendition* MediaRendition::copy() const
 {
   return new MediaRendition(*this);
 }

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/Rendition.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/Rendition.h	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/Rendition.h	2018-04-29 00:37:13 UTC (rev 47480)
@@ -123,21 +123,21 @@
   ~MediaRendition();
   MediaRendition& operator=(const MediaRendition &) = delete;
 
-  GBool isOk () { return ok; }
+  GBool isOk () const { return ok; }
 
-  MediaParameters* getMHParameters() { return &MH; }
-  MediaParameters* getBEParameters() { return &BE; }
+  const MediaParameters* getMHParameters() const { return &MH; }
+  const MediaParameters* getBEParameters() const { return &BE; }
 
-  GooString* getContentType() { return contentType; }
-  GooString* getFileName() { return fileName; }
+  const GooString* getContentType() const { return contentType; }
+  const GooString* getFileName() const { return fileName; }
 
-  GBool getIsEmbedded() { return isEmbedded; }
-  Stream* getEmbbededStream() { return isEmbedded ? embeddedStreamObject.getStream() : nullptr; }
-  Object* getEmbbededStreamObject() { return isEmbedded ? &embeddedStreamObject : nullptr; }
+  GBool getIsEmbedded() const { return isEmbedded; }
+  Stream* getEmbbededStream() const { return isEmbedded ? embeddedStreamObject.getStream() : nullptr; }
+  const Object* getEmbbededStreamObject() const { return isEmbedded ? &embeddedStreamObject : nullptr; }
   // write embedded stream to file
   void outputToFile(FILE*);
 
-  MediaRendition* copy();
+  MediaRendition* copy() const;
 
  private:
   GBool ok;

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/Sound.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/Sound.cc	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/Sound.cc	2018-04-29 00:37:13 UTC (rev 47480)
@@ -1,6 +1,6 @@
 /* Sound.cc - an object that holds the sound structure
  * Copyright (C) 2006-2007, Pino Toscano <pino at kde.org>
- * Copyright (C) 2009, 2017, Albert Astals Cid <aacid at kde.org>
+ * Copyright (C) 2009, 2017, 2018, Albert Astals Cid <aacid at kde.org>
  *
  * 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,7 +47,7 @@
   }
 }
 
-Sound::Sound(Object *obj, bool readAttrs)
+Sound::Sound(const Object *obj, bool readAttrs)
 {
   streamObj = obj->copy();
 
@@ -116,7 +116,7 @@
   return streamObj.getStream();
 }
 
-Sound *Sound::copy()
+Sound *Sound::copy() const
 {
   Sound *newsound = new Sound(&streamObj, false);
 

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/Sound.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/Sound.h	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/Sound.h	2018-04-29 00:37:13 UTC (rev 47480)
@@ -50,21 +50,21 @@
   Sound(const Sound &) = delete;
   Sound& operator=(const Sound &) = delete;
 
-  Object *getObject() { return &streamObj; }
+  const Object *getObject() const { return &streamObj; }
   Stream *getStream();
 
-  SoundKind getSoundKind() { return kind; }
-  GooString *getFileName() { return fileName; }
-  double getSamplingRate() { return samplingRate; }
-  int getChannels() { return channels; }
-  int getBitsPerSample() { return bitsPerSample; }
-  SoundEncoding getEncoding() { return encoding; }
+  SoundKind getSoundKind() const { return kind; }
+  const GooString *getFileName() const { return fileName; }
+  double getSamplingRate() const { return samplingRate; }
+  int getChannels() const { return channels; }
+  int getBitsPerSample() const { return bitsPerSample; }
+  SoundEncoding getEncoding() const { return encoding; }
 
-  Sound *copy();
+  Sound *copy() const;
 
 private:
   // Create a sound. The Object obj is ensured to be a Stream with a Dict
-  Sound(Object *obj, bool readAttrs = true);
+  Sound(const Object *obj, bool readAttrs = true);
 
   Object streamObj;
   SoundKind kind;

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/SplashOutputDev.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/SplashOutputDev.cc	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/SplashOutputDev.cc	2018-04-29 00:37:13 UTC (rev 47480)
@@ -38,6 +38,7 @@
 // Copyright (C) 2015 Kenji Uno <ku at digitaldolphins.jp>
 // Copyright (C) 2016 Takahiro Hashimoto <kenya888.en at gmail.com>
 // Copyright (C) 2017 Even Rouault <even.rouault at spatialys.com>
+// Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. 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
@@ -1196,7 +1197,7 @@
 class SplashOutFontFileID: public SplashFontFileID {
 public:
 
-  SplashOutFontFileID(Ref *rA) { r = *rA; }
+  SplashOutFontFileID(const Ref *rA) { r = *rA; }
 
   ~SplashOutFontFileID() {}
 
@@ -1222,7 +1223,7 @@
 class T3FontCache {
 public:
 
-  T3FontCache(Ref *fontID, double m11A, double m12A,
+  T3FontCache(const Ref *fontID, double m11A, double m12A,
 	      double m21A, double m22A,
 	      int glyphXA, int glyphYA, int glyphWA, int glyphHA,
 	      GBool aa, GBool validBBoxA);
@@ -1229,7 +1230,7 @@
   ~T3FontCache();
   T3FontCache(const T3FontCache &) = delete;
   T3FontCache& operator=(const T3FontCache &) = delete;
-  GBool matches(Ref *idA, double m11A, double m12A,
+  GBool matches(const Ref *idA, double m11A, double m12A,
 		double m21A, double m22A)
     { return fontID.num == idA->num && fontID.gen == idA->gen &&
 	     m11 == m11A && m12 == m12A && m21 == m21A && m22 == m22A; }
@@ -1246,7 +1247,7 @@
   T3FontCacheTag *cacheTags;	// cache tags, i.e., char codes
 };
 
-T3FontCache::T3FontCache(Ref *fontIDA, double m11A, double m12A,
+T3FontCache::T3FontCache(const Ref *fontIDA, double m11A, double m12A,
 			 double m21A, double m22A,
 			 int glyphXA, int glyphYA, int glyphWA, int glyphHA,
 			 GBool validBBoxA, GBool aa) {
@@ -2501,7 +2502,7 @@
 				      double dx, double dy,
 				      CharCode code, Unicode *u, int uLen) {
   GfxFont *gfxFont;
-  Ref *fontID;
+  const Ref *fontID;
   double *ctm, *bbox;
   T3FontCache *t3Font;
   T3GlyphStack *t3gs;
@@ -3978,8 +3979,7 @@
     maskStr->reset();
     maskStr->doGetChars(maskWidth * maskHeight, data);
     maskStr->close();
-    maskStr = new MemStream((char *)data, 0, maskWidth * maskHeight, maskStr->getDictObject()->copy());
-    ((MemStream *) maskStr)->setNeedFree(gTrue);
+    maskStr = new AutoFreeMemStream((char *)data, 0, maskWidth * maskHeight, maskStr->getDictObject()->copy());
   }
   imgMaskData.imgStr = new ImageStream(maskStr, maskWidth,
 				       maskColorMap->getNumPixelComps(),

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/SplashOutputDev.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/SplashOutputDev.h	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/SplashOutputDev.h	2018-04-29 00:37:13 UTC (rev 47480)
@@ -407,7 +407,7 @@
   SplashPattern *getColor(GfxCMYK *cmyk);
   SplashPattern *getColor(GfxColor *deviceN);
 #endif
-  void getMatteColor( SplashColorMode colorMode, GfxImageColorMap *colorMap, GfxColor * matteColor, SplashColor splashMatteColor);
+  static void getMatteColor( SplashColorMode colorMode, GfxImageColorMap *colorMap, GfxColor * matteColor, SplashColor splashMatteColor);
   void setOverprintMask(GfxColorSpace *colorSpace, GBool overprintFlag,
 			int overprintMode, GfxColor *singleColor, GBool grayIndexed = gFalse);
   SplashPath *convertPath(GfxState *state, GfxPath *path,

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/Stream.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/Stream.cc	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/Stream.cc	2018-04-29 00:37:13 UTC (rev 47480)
@@ -14,7 +14,7 @@
 // under GPL version 2 or later
 //
 // Copyright (C) 2005 Jeff Muizelaar <jeff at infidigm.net>
-// Copyright (C) 2006-2010, 2012-2014, 2016, 2017 Albert Astals Cid <aacid at kde.org>
+// Copyright (C) 2006-2010, 2012-2014, 2016, 2017, 2018 Albert Astals Cid <aacid at kde.org>
 // Copyright (C) 2007 Krzysztof Kowalczyk <kkowalczyk at gmail.com>
 // Copyright (C) 2008 Julien Rebetez <julien at fhtagn.net>
 // Copyright (C) 2009 Carlos Garcia Campos <carlosgc at gnome.org>
@@ -208,7 +208,7 @@
   return str;
 }
 
-Stream *Stream::makeFilter(char *name, Stream *str, Object *params, int recursion, Dict *dict) {
+Stream *Stream::makeFilter(const char *name, Stream *str, Object *params, int recursion, Dict *dict) {
   int pred;			// parameters
   int colors;
   int bits;
@@ -951,89 +951,6 @@
 }
 
 //------------------------------------------------------------------------
-// MemStream
-//------------------------------------------------------------------------
-
-MemStream::MemStream(char *bufA, Goffset startA, Goffset lengthA, Object &&dictA):
-    BaseStream(std::move(dictA), lengthA) {
-  buf = bufA;
-  start = startA;
-  length = lengthA;
-  bufEnd = buf + start + length;
-  bufPtr = buf + start;
-  needFree = gFalse;
-}
-
-MemStream::~MemStream() {
-  if (needFree) {
-    gfree(buf);
-  }
-}
-
-BaseStream *MemStream::copy() {
-  return new MemStream(buf, start, length, dict.copy());
-}
-
-Stream *MemStream::makeSubStream(Goffset startA, GBool limited,
-				 Goffset lengthA, Object &&dictA) {
-  MemStream *subStr;
-  Goffset newLength;
-
-  if (!limited || startA + lengthA > start + length) {
-    newLength = start + length - startA;
-  } else {
-    newLength = lengthA;
-  }
-  subStr = new MemStream(buf, startA, newLength, std::move(dictA));
-  return subStr;
-}
-
-void MemStream::reset() {
-  bufPtr = buf + start;
-}
-
-void MemStream::close() {
-}
-
-int MemStream::getChars(int nChars, Guchar *buffer) {
-  int n;
-
-  if (nChars <= 0) {
-    return 0;
-  }
-  if (bufEnd - bufPtr < nChars) {
-    n = (int)(bufEnd - bufPtr);
-  } else {
-    n = nChars;
-  }
-  memcpy(buffer, bufPtr, n);
-  bufPtr += n;
-  return n;
-}
-
-void MemStream::setPos(Goffset pos, int dir) {
-  Guint i;
-
-  if (dir >= 0) {
-    i = pos;
-  } else {
-    i = start + length - pos;
-  }
-  if (i < start) {
-    i = start;
-  } else if (i > start + length) {
-    i = start + length;
-  }
-  bufPtr = buf + i;
-}
-
-void MemStream::moveStart(Goffset delta) {
-  start += delta;
-  length -= delta;
-  bufPtr = buf + start;
-}
-
-//------------------------------------------------------------------------
 // EmbedStream
 //------------------------------------------------------------------------
 

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/Stream.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/Stream.h	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/Stream.h	2018-04-29 00:37:13 UTC (rev 47480)
@@ -238,7 +238,7 @@
   virtual GBool hasGetChars() { return false; }
   virtual int getChars(int nChars, Guchar *buffer);
 
-  Stream *makeFilter(char *name, Stream *str, Object *params, int recursion = 0, Dict *dict = nullptr);
+  Stream *makeFilter(const char *name, Stream *str, Object *params, int recursion = 0, Dict *dict = nullptr);
 
   int ref;			// reference count
 #ifdef MULTITHREADED
@@ -567,45 +567,125 @@
 // MemStream
 //------------------------------------------------------------------------
 
-class MemStream: public BaseStream {
+template<typename T>
+class BaseMemStream: public BaseStream {
 public:
 
-  MemStream(char *bufA, Goffset startA, Goffset lengthA, Object &&dictA);
-  ~MemStream();
-  BaseStream *copy() override;
-  Stream *makeSubStream(Goffset start, GBool limited,
-				Goffset lengthA, Object &&dictA) override;
+  BaseMemStream(T *bufA, Goffset startA, Goffset lengthA, Object &&dictA) : BaseStream(std::move(dictA), lengthA) {
+    buf = bufA;
+    start = startA;
+    length = lengthA;
+    bufEnd = buf + start + length;
+    bufPtr = buf + start;
+  }
+
+  BaseStream *copy() override {
+    return new BaseMemStream(buf, start, length, dict.copy());
+  }
+
+  Stream *makeSubStream(Goffset startA, GBool limited, Goffset lengthA, Object &&dictA) override {
+    Goffset newLength;
+
+    if (!limited || startA + lengthA > start + length) {
+      newLength = start + length - startA;
+    } else {
+      newLength = lengthA;
+    }
+    return new BaseMemStream(buf, startA, newLength, std::move(dictA));
+  }
+
   StreamKind getKind() override { return strWeird; }
-  void reset() override;
-  void close() override;
+
+  void reset() override {
+    bufPtr = buf + start;
+  }
+
+  void close() override { }
+
   int getChar() override
     { return (bufPtr < bufEnd) ? (*bufPtr++ & 0xff) : EOF; }
+
   int lookChar() override
     { return (bufPtr < bufEnd) ? (*bufPtr & 0xff) : EOF; }
+
   Goffset getPos() override { return (int)(bufPtr - buf); }
-  void setPos(Goffset pos, int dir = 0) override;
+
+  void setPos(Goffset pos, int dir = 0) override {
+    Guint i;
+
+    if (dir >= 0) {
+      i = pos;
+    } else {
+      i = start + length - pos;
+    }
+    if (i < start) {
+      i = start;
+    } else if (i > start + length) {
+      i = start + length;
+    }
+    bufPtr = buf + i;
+  }
+
   Goffset getStart() override { return start; }
-  void moveStart(Goffset delta) override;
 
-  //if needFree = true, the stream will delete buf when it is destroyed
-  //otherwise it will not touch it. Default value is false
-  virtual void setNeedFree (GBool val) { needFree = val; }
+  void moveStart(Goffset delta) override {
+    start += delta;
+    length -= delta;
+    bufPtr = buf + start;
+  }
 
   int getUnfilteredChar () override { return getChar(); }
+
   void unfilteredReset () override { reset (); } 
 
+protected:
+  T *buf;
+
 private:
 
   GBool hasGetChars() override { return true; }
-  int getChars(int nChars, Guchar *buffer) override;
 
-  char *buf;
+  int getChars(int nChars, Guchar *buffer) override {
+    int n;
+
+    if (nChars <= 0) {
+      return 0;
+    }
+    if (bufEnd - bufPtr < nChars) {
+      n = (int)(bufEnd - bufPtr);
+    } else {
+      n = nChars;
+    }
+    memcpy(buffer, bufPtr, n);
+    bufPtr += n;
+    return n;
+  }
+
   Goffset start;
-  char *bufEnd;
-  char *bufPtr;
-  GBool needFree;
+  T *bufEnd;
+  T *bufPtr;
 };
 
+class MemStream : public BaseMemStream<const char>
+{
+public:
+  MemStream(const char *bufA, Goffset startA, Goffset lengthA, Object &&dictA)
+   : BaseMemStream(bufA, startA, lengthA, std::move(dictA))
+   { }
+};
+
+class AutoFreeMemStream : public BaseMemStream<char>
+{
+public:
+  AutoFreeMemStream(char *bufA, Goffset startA, Goffset lengthA, Object &&dictA)
+   : BaseMemStream(bufA, startA, lengthA, std::move(dictA))
+   { }
+
+  ~AutoFreeMemStream()
+    { gfree(buf); }
+};
+
+
 //------------------------------------------------------------------------
 // EmbedStream
 //

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/StructElement.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/StructElement.cc	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/StructElement.cc	2018-04-29 00:37:13 UTC (rev 47480)
@@ -9,6 +9,7 @@
 // Copyright 2014, 2017, 2018 Albert Astals Cid <aacid at kde.org>
 // Copyright 2015 Dmytro Morgun <lztoad at gmail.com>
 // Copyright 2018 Adrian Johnson <ajohnson at redneon.com>
+// Copyright 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. Work sponsored by the LiMux project of the city of Munich
 //
 //========================================================================
 
@@ -777,7 +778,7 @@
 
   obj = property->lookup("N");
   if (obj.isString()) {
-    GooString *s = obj.getString();
+    const GooString *s = obj.getString();
     name = s->getCString();
     nameLen = s->getLength();
   } else if (obj.isName())

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/TextOutputDev.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/TextOutputDev.cc	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/TextOutputDev.cc	2018-04-29 00:37:13 UTC (rev 47480)
@@ -36,6 +36,7 @@
 // Copyright (C) 2013 Thomas Freitag <Thomas.Freitag at alfa.de>
 // Copyright (C) 2013 Ed Catmur <ed at catmur.co.uk>
 // Copyright (C) 2016 Khaled Hosny <khaledhosny at eglug.org>
+// Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. 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
@@ -5518,7 +5519,7 @@
   actualTextNBytes += nBytes;
 }
 
-void ActualText::begin(GfxState *state, GooString *text) {
+void ActualText::begin(GfxState *state, const GooString *text) {
   if (actualText)
     delete actualText;
   actualText = new GooString(text);
@@ -5641,7 +5642,7 @@
   text->updateFont(state);
 }
 
-void TextOutputDev::beginString(GfxState *state, GooString *s) {
+void TextOutputDev::beginString(GfxState *state, const GooString *s) {
 }
 
 void TextOutputDev::endString(GfxState *state) {
@@ -5658,7 +5659,7 @@
   text->incCharCount(nChars);
 }
 
-void TextOutputDev::beginActualText(GfxState *state, GooString *text)
+void TextOutputDev::beginActualText(GfxState *state, const GooString *text)
 {
   actualText->begin(state, text);
 }

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/TextOutputDev.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/TextOutputDev.h	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/TextOutputDev.h	2018-04-29 00:37:13 UTC (rev 47480)
@@ -21,6 +21,7 @@
 // Copyright (C) 2010 Brian Ewins <brian.ewins at gmail.com>
 // Copyright (C) 2012, 2013, 2015, 2016 Jason Crain <jason at aquaticape.us>
 // Copyright (C) 2013 Thomas Freitag <Thomas.Freitag at alfa.de>
+// Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. 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
@@ -732,7 +733,7 @@
   void addChar(GfxState *state, double x, double y,
 	       double dx, double dy,
 	       CharCode c, int nBytes, Unicode *u, int uLen);
-  void begin(GfxState *state, GooString *text);
+  void begin(GfxState *state, const GooString *text);
   void end(GfxState *state);
 
 private:
@@ -812,7 +813,7 @@
   void updateFont(GfxState *state) override;
 
   //----- text drawing
-  void beginString(GfxState *state, GooString *s) override;
+  void beginString(GfxState *state, const GooString *s) override;
   void endString(GfxState *state) override;
   void drawChar(GfxState *state, double x, double y,
 		double dx, double dy,
@@ -819,7 +820,7 @@
 		double originX, double originY,
 		CharCode c, int nBytes, Unicode *u, int uLen) override;
   void incCharCount(int nChars) override;
-  void beginActualText(GfxState *state, GooString *text) override;
+  void beginActualText(GfxState *state, const GooString *text) override;
   void endActualText(GfxState *state) override;
 
   //----- path painting

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/UTF.cc
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/UTF.cc	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/UTF.cc	2018-04-29 00:37:13 UTC (rev 47480)
@@ -18,6 +18,7 @@
 // Copyright (C) 2012 Hib Eris <hib at hiberis.nl>
 // Copyright (C) 2016, 2018 Albert Astals Cid <aacid at kde.org>
 // Copyright (C) 2016 Jason Crain <jason at aquaticape.us>
+// Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. 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
@@ -85,7 +86,7 @@
   return len;
 }
 
-int TextStringToUCS4(GooString *textStr, Unicode **ucs4)
+int TextStringToUCS4(const GooString *textStr, Unicode **ucs4)
 {
   int i, len;
   const char *s;

Modified: trunk/Build/source/libs/poppler/poppler-src/poppler/UTF.h
===================================================================
--- trunk/Build/source/libs/poppler/poppler-src/poppler/UTF.h	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/poppler-src/poppler/UTF.h	2018-04-29 00:37:13 UTC (rev 47480)
@@ -6,6 +6,7 @@
 //
 // Copyright (C) 2012, 2017 Adrian Johnson <ajohnson at redneon.com>
 // Copyright (C) 2016 Jason Crain <jason at aquaticape.us>
+// Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info at kdab.com>. Work sponsored by the LiMux project of the city of Munich
 //
 //========================================================================
 
@@ -34,7 +35,7 @@
 //   ucs4       - if the number of UCS-4 characters is > 0, allocates and
 //                returns UCS-4 string. Free with gfree.
 //   returns number of UCS-4 characters
-int TextStringToUCS4(GooString *textStr, Unicode **ucs4);
+int TextStringToUCS4(const GooString *textStr, Unicode **ucs4);
 
 // check if UCS-4 character is valid
 bool UnicodeIsValid(Unicode ucs4);

Modified: trunk/Build/source/libs/poppler/version.ac
===================================================================
--- trunk/Build/source/libs/poppler/version.ac	2018-04-29 00:23:53 UTC (rev 47479)
+++ trunk/Build/source/libs/poppler/version.ac	2018-04-29 00:37:13 UTC (rev 47480)
@@ -9,4 +9,4 @@
 dnl --------------------------------------------------------
 dnl
 dnl  m4-include this file to define the current poppler version
-m4_define([poppler_version], [0.63.0])
+m4_define([poppler_version], [0.64.0])



More information about the tex-live-commits mailing list