From f7ce8ac6ec7728d367cc06efbceb9bf744a58926 Mon Sep 17 00:00:00 2001 From: Akira Kakuto Date: Thu, 14 Jan 2016 04:46:03 +0000 Subject: poppler 0.40.0 git-svn-id: svn://tug.org/texlive/trunk@39383 c570f23f-e606-0410-a88d-b1316a301751 --- Build/source/libs/README | 4 +- Build/source/libs/poppler/ChangeLog | 5 + Build/source/libs/poppler/configure | 22 +- .../libs/poppler/poppler-src-PATCHES/ChangeLog | 7 + .../libs/poppler/poppler-src-PATCHES/TL-Changes | 3 +- .../poppler/poppler-src-PATCHES/patch-02-LLONG_MAX | 6 +- .../poppler-src-PATCHES/patch-03-Object-functions | 6 +- .../source/libs/poppler/poppler-src/CMakeLists.txt | 6 +- Build/source/libs/poppler/poppler-src/ChangeLog | 245 +++++++++++++++++++++ Build/source/libs/poppler/poppler-src/NEWS | 18 ++ Build/source/libs/poppler/poppler-src/configure.ac | 2 +- .../poppler/poppler-src/poppler/CairoOutputDev.cc | 49 ++--- .../libs/poppler/poppler-src/poppler/Function.cc | 6 +- .../poppler/poppler-src/poppler/TextOutputDev.cc | 195 +++++++++------- .../poppler-src/poppler/UnicodeTypeTable.cc | 20 +- .../poppler/poppler-src/poppler/UnicodeTypeTable.h | 7 +- .../poppler-src/poppler/poppler-config.h.cmake | 2 +- .../poppler-src/poppler/poppler-config.h.in | 2 +- Build/source/libs/poppler/version.ac | 2 +- 19 files changed, 461 insertions(+), 146 deletions(-) diff --git a/Build/source/libs/README b/Build/source/libs/README index cb8c9661453..4e1f474455c 100644 --- a/Build/source/libs/README +++ b/Build/source/libs/README @@ -24,7 +24,7 @@ gmp 6.1.0 - checked 28dec15 graphite2 1.3.3 - checked 27sep15 http://sourceforge.net/projects/silgraphite/files/graphite2/ -harfbuzz 1.1.3 - checked 12Jan16 +harfbuzz 1.1.3 - checked 12jan16 http://www.freedesktop.org/software/harfbuzz/release/ icu 56.1 (release) - checked 8oct15 @@ -49,7 +49,7 @@ mpfr 3.1.3 - checked 20jun15 pixman 0.32.8 - checked 27sep15 http://cairographics.org/releases/ -poppler 0.39.0 - checked 28dec15 +poppler 0.40.0 - checked 14jan16 http://poppler.freedesktop.org/ - used by luatex and xetex potrace 1.13 - checked 28dec15 diff --git a/Build/source/libs/poppler/ChangeLog b/Build/source/libs/poppler/ChangeLog index 71828d6f4ee..bfee65c2a50 100644 --- a/Build/source/libs/poppler/ChangeLog +++ b/Build/source/libs/poppler/ChangeLog @@ -1,3 +1,8 @@ +2016-01-14 Akira Kakuto + + Import poppler-0.40.0. + * version.ac: Adjust. + 2015-12-28 Akira Kakuto Import poppler-0.39.0. diff --git a/Build/source/libs/poppler/configure b/Build/source/libs/poppler/configure index 8493e4281b3..cf42e8e6840 100755 --- a/Build/source/libs/poppler/configure +++ b/Build/source/libs/poppler/configure @@ -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.39.0. +# Generated by GNU Autoconf 2.69 for poppler (TeX Live) 0.40.0. # # Report bugs to . # @@ -580,8 +580,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='poppler (TeX Live)' PACKAGE_TARNAME='poppler--tex-live-' -PACKAGE_VERSION='0.39.0' -PACKAGE_STRING='poppler (TeX Live) 0.39.0' +PACKAGE_VERSION='0.40.0' +PACKAGE_STRING='poppler (TeX Live) 0.40.0' PACKAGE_BUGREPORT='tex-k@tug.org' PACKAGE_URL='' @@ -1306,7 +1306,7 @@ if test "$ac_init_help" = "long"; then # 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.39.0 to adapt to many kinds of systems. +\`configure' configures poppler (TeX Live) 0.40.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1373,7 +1373,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of poppler (TeX Live) 0.39.0:";; + short | recursive ) echo "Configuration of poppler (TeX Live) 0.40.0:";; esac cat <<\_ACEOF @@ -1486,7 +1486,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -poppler (TeX Live) configure 0.39.0 +poppler (TeX Live) configure 0.40.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2076,7 +2076,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by poppler (TeX Live) $as_me 0.39.0, which was +It was created by poppler (TeX Live) $as_me 0.40.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3999,7 +3999,7 @@ fi # Define the identity of the package. PACKAGE='poppler--tex-live-' - VERSION='0.39.0' + VERSION='0.40.0' # Some tools Automake needs. @@ -6578,7 +6578,7 @@ ac_config_headers="$ac_config_headers poppler-config.h:poppler-src/poppler/poppl cat >>confdefs.h <<_ACEOF -#define POPPLER_VERSION "0.39.0" +#define POPPLER_VERSION "0.40.0" _ACEOF @@ -7272,7 +7272,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # 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.39.0, which was +This file was extended by poppler (TeX Live) $as_me 0.40.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -7338,7 +7338,7 @@ _ACEOF 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.39.0 +poppler (TeX Live) config.status 0.40.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/Build/source/libs/poppler/poppler-src-PATCHES/ChangeLog b/Build/source/libs/poppler/poppler-src-PATCHES/ChangeLog index d83fdb8fc60..0682274abde 100644 --- a/Build/source/libs/poppler/poppler-src-PATCHES/ChangeLog +++ b/Build/source/libs/poppler/poppler-src-PATCHES/ChangeLog @@ -1,3 +1,10 @@ +2016-01-14 Akira Kakuto + + Imported poppler-0.40.0 source tree from: + http://poppler.freedesktop.org/ + + * patch-02-LLONG_MAX, patch-03-Object-functions: Adapted. + 2015-12-28 Akira Kakuto Imported poppler-0.39.0 source tree from: diff --git a/Build/source/libs/poppler/poppler-src-PATCHES/TL-Changes b/Build/source/libs/poppler/poppler-src-PATCHES/TL-Changes index 0e0ed2e9e29..990ae4297cb 100644 --- a/Build/source/libs/poppler/poppler-src-PATCHES/TL-Changes +++ b/Build/source/libs/poppler/poppler-src-PATCHES/TL-Changes @@ -1,4 +1,4 @@ -Changes applied to the poppler-0.37.0 tree as obtained from: +Changes applied to the poppler-0.40.0 tree as obtained from: http://poppler.freedesktop.org/ Removed: @@ -27,4 +27,3 @@ Removed unused dirs: qt5 test utils - diff --git a/Build/source/libs/poppler/poppler-src-PATCHES/patch-02-LLONG_MAX b/Build/source/libs/poppler/poppler-src-PATCHES/patch-02-LLONG_MAX index 8a1f7334186..c2ea5b60be6 100644 --- a/Build/source/libs/poppler/poppler-src-PATCHES/patch-02-LLONG_MAX +++ b/Build/source/libs/poppler/poppler-src-PATCHES/patch-02-LLONG_MAX @@ -1,6 +1,6 @@ -diff -ur poppler-0.39.0.orig/goo/GooString.h poppler-0.39.0/goo/GooString.h ---- poppler-0.39.0.orig/goo/GooString.h Mon Jul 13 00:05:10 2015 -+++ poppler-0.39.0/goo/GooString.h Mon Dec 28 22:41:39 2015 +diff -ur poppler-0.40.0.orig/goo/GooString.h poppler-0.40.0/goo/GooString.h +--- poppler-0.40.0.orig/goo/GooString.h Mon Jul 13 00:05:10 2015 ++++ poppler-0.40.0/goo/GooString.h Thu Jan 14 13:17:20 2016 @@ -35,6 +35,21 @@ #endif diff --git a/Build/source/libs/poppler/poppler-src-PATCHES/patch-03-Object-functions b/Build/source/libs/poppler/poppler-src-PATCHES/patch-03-Object-functions index 657d43b97c4..d90fb2ac7be 100644 --- a/Build/source/libs/poppler/poppler-src-PATCHES/patch-03-Object-functions +++ b/Build/source/libs/poppler/poppler-src-PATCHES/patch-03-Object-functions @@ -1,6 +1,6 @@ -diff -ur poppler-0.39.0.orig/poppler/Object.h poppler-0.39.0/poppler/Object.h ---- poppler-0.39.0.orig/poppler/Object.h Mon Nov 16 06:05:22 2015 -+++ poppler-0.39.0/poppler/Object.h Mon Dec 28 22:45:05 2015 +diff -ur poppler-0.40.0.orig/poppler/Object.h poppler-0.40.0/poppler/Object.h +--- poppler-0.40.0.orig/poppler/Object.h Mon Nov 16 06:05:22 2015 ++++ poppler-0.40.0/poppler/Object.h Thu Jan 14 13:20:32 2016 @@ -140,7 +140,7 @@ Object *initStream(Stream *streamA); Object *initRef(int numA, int genA) diff --git a/Build/source/libs/poppler/poppler-src/CMakeLists.txt b/Build/source/libs/poppler/poppler-src/CMakeLists.txt index a1412d815b4..e58a41d5bdb 100644 --- a/Build/source/libs/poppler/poppler-src/CMakeLists.txt +++ b/Build/source/libs/poppler/poppler-src/CMakeLists.txt @@ -22,7 +22,7 @@ if (ECM_FOUND) endif() set(POPPLER_MAJOR_VERSION "0") -set(POPPLER_MINOR_VERSION "39") +set(POPPLER_MINOR_VERSION "40") set(POPPLER_MICRO_VERSION "0") set(POPPLER_VERSION "${POPPLER_MAJOR_VERSION}.${POPPLER_MINOR_VERSION}.${POPPLER_MICRO_VERSION}") @@ -442,7 +442,6 @@ elseif (LIBOPENJPEG2_FOUND) poppler/JPEG2000Stream.cc ) add_definitions(-DUSE_OPENJPEG2) -MESSAGE(${LIBOPENJPEG2_LIBRARIES}) set(poppler_LIBS ${poppler_LIBS} ${LIBOPENJPEG2_LIBRARIES}) else () set(poppler_SRCS ${poppler_SRCS} @@ -479,8 +478,7 @@ else(MSVC) add_library(poppler SHARED ${poppler_SRCS}) endif(MSVC) set_target_properties(poppler PROPERTIES VERSION 58.0.0 SOVERSION 58) -target_link_libraries(poppler ${poppler_LIBS}) -target_link_libraries(poppler LINK_INTERFACE_LIBRARIES "") +target_link_libraries(poppler LINK_PRIVATE ${poppler_LIBS}) install(TARGETS poppler RUNTIME DESTINATION bin LIBRARY DESTINATION lib${LIB_SUFFIX} ARCHIVE DESTINATION lib${LIB_SUFFIX}) if(ENABLE_XPDF_HEADERS) diff --git a/Build/source/libs/poppler/poppler-src/ChangeLog b/Build/source/libs/poppler/poppler-src/ChangeLog index 8d00b9d2e7c..0b23e0f8f1d 100644 --- a/Build/source/libs/poppler/poppler-src/ChangeLog +++ b/Build/source/libs/poppler/poppler-src/ChangeLog @@ -1,3 +1,248 @@ +commit 449d45fab8e61393d858549460e61599e4dbd7eb +Author: Albert Astals Cid +Date: Wed Jan 13 23:19:12 2016 +0100 + + 0.40.0 + NEWS + + CMakeLists.txt | 2 +- + NEWS | 18 ++++++++++++++++++ + configure.ac | 2 +- + cpp/Doxyfile | 2 +- + qt4/src/Doxyfile | 2 +- + qt5/src/Doxyfile | 2 +- + 6 files changed, 23 insertions(+), 5 deletions(-) + +commit e9740b57324cf5a09f6f4312165da13c7b3a576b +Author: Albert Astals Cid +Date: Wed Jan 13 23:14:35 2016 +0100 + + Update copyrights + + poppler/Function.cc | 2 +- + utils/pdftocairo.cc | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 3bfc45bfcca1a52447cedbb95afad1ef362ac6f0 +Author: Adrian Johnson +Date: Mon Jan 11 21:46:49 2016 +1030 + + pdftocairo: check for invalid use of -scale-to* and -paper[wh] options + + Bug 92195 + + utils/pdftocairo.cc | 12 +++++++++++- + 1 file changed, 11 insertions(+), 1 deletion(-) + +commit 819bea740b1fadb24833e0ecbdf4e75ddca8eb14 +Author: Adrian Johnson +Date: Mon Jan 11 19:44:14 2016 +1030 + + pdftocairo: ensure surface flushed before accessing image data + + utils/pdftocairo.cc | 1 + + 1 file changed, 1 insertion(+) + +commit f7542348b37cc881d854bbc36c3af0a4fe37d839 +Author: Adrian Johnson +Date: Mon Jan 11 19:39:34 2016 +1030 + + pdftocairo: document that -singlefile appends file type + + Bug 86254 + + utils/pdftocairo.1 | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +commit 9fa58b1ef6c97e2a30bb3197c11000fac3b059f4 +Author: Adrian Johnson +Date: Mon Jan 11 19:26:02 2016 +1030 + + pdftocairo: fix writing to stdout out with image output + + utils/pdftocairo.cc | 14 ++++++++------ + 1 file changed, 8 insertions(+), 6 deletions(-) + +commit 01d4bb222d63eda7dc5ec903c0735179edf77c0e +Author: Albert Astals Cid +Date: Sun Jan 3 13:01:31 2016 +0100 + + Happy New Year + + poppler/poppler-config.h.cmake | 2 +- + poppler/poppler-config.h.in | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit d8f418d2f2ec5966d77caf128a52c834fdd0efcf +Author: Khaled Hosny +Date: Mon Nov 23 13:52:10 2015 +0400 + + Fix finding Arabic Presentation Forms ligatures + + PDF text containing Arabic Presentation forms ligatures is still not + found after the previous commit. + + This because the ligatures are decomposed in logical order after + normalisation, while the whole string is in visual order. For example + the RTL text ABCD in visual order will be DCBA, and assuming B is a + ligature, it will be decomposed to B1B2 so the string after + normalization will be DCB1B2A while we are expecting it to be DCB2B1A. + + This patch reverses the order of the decomposition of RTL characters + to + work around this issue. + + poppler/TextOutputDev.cc | 4 +++- + poppler/UnicodeTypeTable.cc | 20 ++++++++++++++++---- + poppler/UnicodeTypeTable.h | 7 ++++++- + 3 files changed, 25 insertions(+), 6 deletions(-) + +commit 67645087477beb618304ea34cbdbafd40b199276 +Author: Khaled Hosny +Date: Wed Nov 18 14:47:28 2015 +0400 + + Handle right-to-left text in search + + Currently right-to-left text reversal is only done during text + dumping, + but not during search. This commit applies the same reversal logic + during PDF search as well. + + poppler/TextOutputDev.cc | 191 + ++++++++++++++++++++++++++--------------------- + 1 file changed, 107 insertions(+), 84 deletions(-) + +commit 00422d0c6baaba639fa0660e3a933cdb76b28f88 +Author: Jason Crain +Date: Sun Dec 20 09:54:43 2015 -0600 + + cairo: use shape mask with soft mask + + Clear target with the shape mask whether the soft mask is set or not. + Propagate the shape up to any higher level groups and destroy the + shape pattern when done. + + Fix a memory leak by removing a call to 'cairo_reference + (cairo_shape)'. + We already keep track of the lifetime of cairo_shape using + knockoutCount. + + bug 91931 + + poppler/CairoOutputDev.cc | 49 + ++++++++++++++++++++++------------------------- + 1 file changed, 23 insertions(+), 26 deletions(-) + +commit bc4cab272e4fe28b836cb2ef1ff672f0d79d243c +Author: Carlos Garcia Campos +Date: Sat Jan 2 09:49:27 2016 +0100 + + regtest: Fix the number of worker threads spawned reported in log + of run-tests command + + regtest/TestRun.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit ea75de614e666d8235c38048585315e0d7ff5522 +Author: Adam Reichold +Date: Sat Jan 2 09:48:03 2016 +0100 + + regtest: Limit the number of worker threads to the number of documents + to create references + + The same way we do for the run-tests command. + + regtest/TestReferences.py | 27 ++++++++++++++++++--------- + 1 file changed, 18 insertions(+), 9 deletions(-) + +commit 25bb59a81de8a1b6dd23fec871a97ccb11fe9d64 +Author: Carlos Garcia Campos +Date: Fri Jan 1 12:45:42 2016 +0100 + + regtest: Allow to interrupt run-tests and create-refs commands when + multiple threads are used + + The Queue join implementation uses a non-timed wait that blocks + the main + thread, making it impossible to interrupt it with CTRL+C or sending + SIGINT signal. Using any timeout value for wait would fix the problem, + but Queue doesn't allow to pass a timeout to the join method. The + Queue implementation is actually quite simple, so we can just add our + own implementation with only the things we really need and use + a timeout + value when calling wait() in join(). + + regtest/InterruptibleQueue.py | 68 + +++++++++++++++++++++++++++++++++++++++++++ + regtest/TestReferences.py | 4 +-- + regtest/TestRun.py | 4 +-- + 3 files changed, 72 insertions(+), 4 deletions(-) + +commit ffb3ff633b124c476ab48bbcfce04d7f418df9bc +Author: Adam Reichold +Date: Fri Jan 1 11:32:14 2016 +0100 + + regtest: Do not use the log printer with the TestReferences lock held + + regtest/TestReferences.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit e3b09727ad96a03ba1250f49486948899b4df793 +Author: Adam Reichold +Date: Fri Dec 25 14:10:03 2015 +0100 + + Make detection of version one of OpenJPEG prefer a pkg-config manifest + if it exists. + + CMakeLists.txt | 1 - + cmake/modules/FindLIBOPENJPEG.cmake | 37 + +++++++++++++++++++++++-------------- + 2 files changed, 23 insertions(+), 15 deletions(-) + +commit 7c880daecfcddac2f8181d5f3d506dd409812dbe +Author: Adam Reichold +Date: Fri Dec 25 14:10:03 2015 +0100 + + Make use of LINK_PRIVATE flag to fix warning on CMake policy 0022. + + CMakeLists.txt | 3 +-- + cpp/CMakeLists.txt | 3 +-- + 2 files changed, 2 insertions(+), 4 deletions(-) + +commit 4a413b9b95d5c6815c91adb815254cce97dd5b4b +Author: Adam Reichold +Date: Fri Dec 25 14:10:03 2015 +0100 + + Make target names for Qt4 and Qt5 builds unique so they can be built + at the same time using recent CMake and Ninja versions. + + qt4/tests/CMakeLists.txt | 44 +++++++++++++++++++++--------------------- + qt5/CMakeLists.txt | 2 ++ + qt5/demos/CMakeLists.txt | 2 -- + qt5/src/CMakeLists.txt | 2 -- + qt5/tests/CMakeLists.txt | 50 + +++++++++++++++++++++++------------------------- + 5 files changed, 48 insertions(+), 52 deletions(-) + +commit b3425dd3261679958cd56c0f71995c15d2124433 +Author: Albert Astals Cid +Date: Tue Dec 22 22:50:33 2015 +0100 + + Do not crash on invalid files + + Bug #93476 + + poppler/Function.cc | 4 ++++ + 1 file changed, 4 insertions(+) + +commit 5d57c34cbf9288eec6ddb149e905268405c19450 +Author: Pino Toscano +Date: Sun Dec 20 08:42:25 2015 +0100 + + typo fix: "occurence" -> "occurrence" + + utils/pdfunite.1 | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + commit 3eee5274abb24d5b5be05262aafe794652cdac35 Author: Albert Astals Cid Date: Thu Dec 17 00:09:37 2015 +0100 diff --git a/Build/source/libs/poppler/poppler-src/NEWS b/Build/source/libs/poppler/poppler-src/NEWS index ff547204a66..cbe433d7303 100644 --- a/Build/source/libs/poppler/poppler-src/NEWS +++ b/Build/source/libs/poppler/poppler-src/NEWS @@ -1,3 +1,21 @@ +Release 0.40.0 + core: + * CairoOutputDev: Use shape mask with soft mask. Bug #91931 + * TextOutputDev: Handle right-to-left text in search + * TextOutputDev: Fix finding Arabic Presentation Forms ligatures + * Fix crash in invalid file. Bug #93476 + * Regression test improvements + + utils: + * pdftocairo: fix writing to stdout out with image output + * pdftocairo: document that -singlefile appends file type. Bug #86254 + * pdftocairo: ensure surface flushed before accessing image data + * pdftocairo: check for invalid use of options. Bug #92195 + * pdfunite: Fix typo in manual + + build system: + * Improve cmake build system + Release 0.39.0 core: * Ignore the alternateSpace and tintTransform. Bug #92381 diff --git a/Build/source/libs/poppler/poppler-src/configure.ac b/Build/source/libs/poppler/poppler-src/configure.ac index b2fc6cf32e1..1e34506f760 100644 --- a/Build/source/libs/poppler/poppler-src/configure.ac +++ b/Build/source/libs/poppler/poppler-src/configure.ac @@ -1,5 +1,5 @@ m4_define([poppler_version_major],[0]) -m4_define([poppler_version_minor],[39]) +m4_define([poppler_version_minor],[40]) m4_define([poppler_version_micro],[0]) m4_define([poppler_version],[poppler_version_major.poppler_version_minor.poppler_version_micro]) diff --git a/Build/source/libs/poppler/poppler-src/poppler/CairoOutputDev.cc b/Build/source/libs/poppler/poppler-src/poppler/CairoOutputDev.cc index d06f3c72cc6..d0d6cb43f11 100644 --- a/Build/source/libs/poppler/poppler-src/poppler/CairoOutputDev.cc +++ b/Build/source/libs/poppler/poppler-src/poppler/CairoOutputDev.cc @@ -1597,8 +1597,6 @@ void CairoOutputDev::beginTransparencyGroup(GfxState * /*state*/, double * /*bbo cairo_get_matrix (cairo, &matrix); //printMatrix(&matrix); cairo_set_matrix (cairo_shape, &matrix); - } else { - cairo_reference (cairo_shape); } } if (groupColorSpaceStack->next && groupColorSpaceStack->next->knockout) { @@ -1638,33 +1636,22 @@ void CairoOutputDev::paintTransparencyGroup(GfxState * /*state*/, double * /*bbo cairo_save (cairo); cairo_set_matrix (cairo, &groupColorSpaceStack->group_matrix); - cairo_set_source (cairo, group); - - if (!mask) { - //XXX: deal with mask && shape case - if (shape) { - cairo_save (cairo); - - /* OPERATOR_SOURCE w/ a mask is defined as (src IN mask) ADD (dest OUT mask) - * however our source has already been clipped to mask so we only need to - * do ADD and OUT */ - /* clear the shape mask */ - cairo_set_source (cairo, shape); - cairo_set_operator (cairo, CAIRO_OPERATOR_DEST_OUT); - cairo_paint (cairo); - - cairo_set_operator (cairo, CAIRO_OPERATOR_ADD); - cairo_set_source (cairo, group); - cairo_paint (cairo); + if (shape) { + /* OPERATOR_SOURCE w/ a mask is defined as (src IN mask) ADD (dest OUT mask) + * however our source has already been clipped to mask so we only need to + * do ADD and OUT */ - cairo_restore (cairo); + /* clear the shape mask */ + cairo_set_source (cairo, shape); + cairo_set_operator (cairo, CAIRO_OPERATOR_DEST_OUT); + cairo_paint (cairo); + cairo_set_operator (cairo, CAIRO_OPERATOR_ADD); + } + cairo_set_source (cairo, group); - cairo_pattern_destroy (shape); - shape = NULL; - } else { - cairo_paint_with_alpha (cairo, fill_opacity); - } + if (!mask) { + cairo_paint_with_alpha (cairo, fill_opacity); cairo_status_t status = cairo_status(cairo); if (status) printf("BAD status: %s\n", cairo_status_to_string(status)); @@ -1684,6 +1671,16 @@ void CairoOutputDev::paintTransparencyGroup(GfxState * /*state*/, double * /*bbo mask = NULL; } + if (shape) { + if (cairo_shape) { + cairo_set_source (cairo_shape, shape); + cairo_paint (cairo_shape); + cairo_set_source_rgb (cairo_shape, 0, 0, 0); + } + cairo_pattern_destroy (shape); + shape = NULL; + } + popTransparencyGroup(); cairo_restore(cairo); } diff --git a/Build/source/libs/poppler/poppler-src/poppler/Function.cc b/Build/source/libs/poppler/poppler-src/poppler/Function.cc index 67283dffe9f..7f359b8eb05 100644 --- a/Build/source/libs/poppler/poppler-src/poppler/Function.cc +++ b/Build/source/libs/poppler/poppler-src/poppler/Function.cc @@ -13,7 +13,7 @@ // All changes made under the Poppler project to this file are licensed // under GPL version 2 or later // -// Copyright (C) 2006, 2008-2010, 2013, 2014 Albert Astals Cid +// Copyright (C) 2006, 2008-2010, 2013-2015 Albert Astals Cid // Copyright (C) 2006 Jeff Muizelaar // Copyright (C) 2010 Christian Feuersänger // Copyright (C) 2011 Andrea Canciani @@ -577,6 +577,10 @@ ExponentialFunction::ExponentialFunction(Object *funcObj, Dict *dict) { goto err2; } n = obj1.arrayGetLength(); + if (unlikely(n > funcMaxOutputs)) { + error(errSyntaxError, -1, "Function's C0 array is wrong length"); + n = funcMaxOutputs; + } for (i = 0; i < n; ++i) { obj1.arrayGet(i, &obj2); if (!obj2.isNum()) { diff --git a/Build/source/libs/poppler/poppler-src/poppler/TextOutputDev.cc b/Build/source/libs/poppler/poppler-src/poppler/TextOutputDev.cc index bbb371a30b8..fff3f05e830 100644 --- a/Build/source/libs/poppler/poppler-src/poppler/TextOutputDev.cc +++ b/Build/source/libs/poppler/poppler-src/poppler/TextOutputDev.cc @@ -35,6 +35,7 @@ // Copyright (C) 2013 José Aliste // Copyright (C) 2013 Thomas Freitag // Copyright (C) 2013 Ed Catmur +// Copyright (C) 2016 Khaled Hosny // // 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 @@ -178,6 +179,94 @@ #define combMaxMidDelta 0.3 #define combMaxBaseDelta 0.4 +static int reorderText(Unicode *text, int len, UnicodeMap *uMap, GBool primaryLR, GooString *s, Unicode* u) { + char lre[8], rle[8], popdf[8], buf[8]; + int lreLen = 0, rleLen = 0, popdfLen = 0, n; + int nCols, i, j, k; + + nCols = 0; + + if (s) { + lreLen = uMap->mapUnicode(0x202a, lre, sizeof(lre)); + rleLen = uMap->mapUnicode(0x202b, rle, sizeof(rle)); + popdfLen = uMap->mapUnicode(0x202c, popdf, sizeof(popdf)); + } + + if (primaryLR) { + i = 0; + while (i < len) { + // output a left-to-right section + for (j = i; j < len && !unicodeTypeR(text[j]); ++j) ; + for (k = i; k < j; ++k) { + if (s) { + n = uMap->mapUnicode(text[k], buf, sizeof(buf)); + s->append(buf, n); + } + if (u) u[nCols] = text[k]; + ++nCols; + } + i = j; + // output a right-to-left section + for (j = i; + j < len && !(unicodeTypeL(text[j]) || unicodeTypeNum(text[j])); + ++j) ; + if (j > i) { + if (s) s->append(rle, rleLen); + for (k = j - 1; k >= i; --k) { + if (s) { + n = uMap->mapUnicode(text[k], buf, sizeof(buf)); + s->append(buf, n); + } + if (u) u[nCols] = text[k]; + ++nCols; + } + if (s) s->append(popdf, popdfLen); + i = j; + } + } + } else { + // Note: This code treats numeric characters (European and + // Arabic/Indic) as left-to-right, which isn't strictly correct + // (incurs extra LRE/POPDF pairs), but does produce correct + // visual formatting. + if (s) s->append(rle, rleLen); + i = len - 1; + while (i >= 0) { + // output a right-to-left section + for (j = i; + j >= 0 && !(unicodeTypeL(text[j]) || unicodeTypeNum(text[j])); + --j) ; + for (k = i; k > j; --k) { + if (s) { + n = uMap->mapUnicode(text[k], buf, sizeof(buf)); + s->append(buf, n); + } + if (u) u[nCols] = text[k]; + ++nCols; + } + i = j; + // output a left-to-right section + for (j = i; j >= 0 && !unicodeTypeR(text[j]); --j) ; + if (j < i) { + if (s) s->append(lre, lreLen); + for (k = j + 1; k <= i; ++k) { + if (s) { + n = uMap->mapUnicode(text[k], buf, sizeof(buf)); + s->append(buf, n); + } + if (u) u[nCols] = text[k]; + ++nCols; + } + if (s) s->append(popdf, popdfLen); + i = j; + } + } + if (s) s->append(popdf, popdfLen); + } + + return nCols; +} + //------------------------------------------------------------------------ // TextUnderline //------------------------------------------------------------------------ @@ -3720,7 +3809,7 @@ GBool TextPage::findText(Unicode *s, int len, double *xMax, double *yMax) { TextBlock *blk; TextLine *line; - Unicode *s2, *txt; + Unicode *s2, *txt, *reordered; Unicode *p; int txtSize, m, i, j, k; double xStart, yStart, xStop, yStop; @@ -3728,20 +3817,23 @@ GBool TextPage::findText(Unicode *s, int len, double xMin1, yMin1, xMax1, yMax1; GBool found; - //~ needs to handle right-to-left text if (rawOrder) { return gFalse; } + // handle right-to-left text + reordered = (Unicode*)gmallocn(len, sizeof(Unicode)); + reorderText(s, len, NULL, primaryLR, NULL, reordered); + + // normalize the search string + s2 = unicodeNormalizeNFKC(reordered, len, &len, NULL); + // convert the search string to uppercase if (!caseSensitive) { - s2 = unicodeNormalizeNFKC(s, len, &len, NULL); for (i = 0; i < len; ++i) { s2[i] = unicodeToUpper(s2[i]); } - } else { - s2 = unicodeNormalizeNFKC(s, len, &len, NULL); } txt = NULL; @@ -3809,7 +3901,8 @@ GBool TextPage::findText(Unicode *s, int len, if (!line->normalized) line->normalized = unicodeNormalizeNFKC(line->text, line->len, &line->normalized_len, - &line->normalized_idx); + &line->normalized_idx, + true); // convert the line to uppercase m = line->normalized_len; if (!caseSensitive) { @@ -3915,6 +4008,7 @@ GBool TextPage::findText(Unicode *s, int len, } gfree(s2); + gfree(reordered); if (!caseSensitive) { gfree(txt); } @@ -5330,91 +5424,22 @@ void TextPage::assignColumns(TextLineFrag *frags, int nFrags, GBool oneRot) { int TextPage::dumpFragment(Unicode *text, int len, UnicodeMap *uMap, GooString *s) { - char lre[8], rle[8], popdf[8], buf[8]; - int lreLen, rleLen, popdfLen, n; - int nCols, i, j, k; - - nCols = 0; - if (uMap->isUnicode()) { + return reorderText(text, len, uMap, primaryLR, s, NULL); + } else { + int nCols = 0; - lreLen = uMap->mapUnicode(0x202a, lre, sizeof(lre)); - rleLen = uMap->mapUnicode(0x202b, rle, sizeof(rle)); - popdfLen = uMap->mapUnicode(0x202c, popdf, sizeof(popdf)); - - if (primaryLR) { - - i = 0; - while (i < len) { - // output a left-to-right section - for (j = i; j < len && !unicodeTypeR(text[j]); ++j) ; - for (k = i; k < j; ++k) { - n = uMap->mapUnicode(text[k], buf, sizeof(buf)); - s->append(buf, n); - ++nCols; - } - i = j; - // output a right-to-left section - for (j = i; - j < len && !(unicodeTypeL(text[j]) || unicodeTypeNum(text[j])); - ++j) ; - if (j > i) { - s->append(rle, rleLen); - for (k = j - 1; k >= i; --k) { - n = uMap->mapUnicode(text[k], buf, sizeof(buf)); - s->append(buf, n); - ++nCols; - } - s->append(popdf, popdfLen); - i = j; - } - } - - } else { - - // Note: This code treats numeric characters (European and - // Arabic/Indic) as left-to-right, which isn't strictly correct - // (incurs extra LRE/POPDF pairs), but does produce correct - // visual formatting. - s->append(rle, rleLen); - i = len - 1; - while (i >= 0) { - // output a right-to-left section - for (j = i; - j >= 0 && !(unicodeTypeL(text[j]) || unicodeTypeNum(text[j])); - --j) ; - for (k = i; k > j; --k) { - n = uMap->mapUnicode(text[k], buf, sizeof(buf)); - s->append(buf, n); - ++nCols; - } - i = j; - // output a left-to-right section - for (j = i; j >= 0 && !unicodeTypeR(text[j]); --j) ; - if (j < i) { - s->append(lre, lreLen); - for (k = j + 1; k <= i; ++k) { - n = uMap->mapUnicode(text[k], buf, sizeof(buf)); - s->append(buf, n); - ++nCols; - } - s->append(popdf, popdfLen); - i = j; - } - } - s->append(popdf, popdfLen); + char buf[8]; + int buflen = 0; + for (int i = 0; i < len; ++i) { + buflen = uMap->mapUnicode(text[i], buf, sizeof(buf)); + s->append(buf, buflen); + nCols += buflen; } - } else { - for (i = 0; i < len; ++i) { - n = uMap->mapUnicode(text[i], buf, sizeof(buf)); - s->append(buf, n); - nCols += n; - } + return nCols; } - - return nCols; } #if TEXTOUT_WORD_LIST diff --git a/Build/source/libs/poppler/poppler-src/poppler/UnicodeTypeTable.cc b/Build/source/libs/poppler/poppler-src/poppler/UnicodeTypeTable.cc index 721af9db6e5..c9f8e2a3b79 100644 --- a/Build/source/libs/poppler/poppler-src/poppler/UnicodeTypeTable.cc +++ b/Build/source/libs/poppler/poppler-src/poppler/UnicodeTypeTable.cc @@ -17,6 +17,7 @@ // Copyright (C) 2007 Jeff Muizelaar // Copyright (C) 2008 Albert Astals Cid // Copyright (C) 2012 Adrian Johnson +// Copyright (C) 2016 Khaled Hosny // // 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 @@ -1015,7 +1016,9 @@ Unicode unicodeToUpper(Unicode c) { // of characters written. @buf may be NULL, in which case the length of the // decomposition is returned but nothing is written. If @u is its own // decomposition, write @u into @buf and return 1. -static int decomp_compat(Unicode u, Unicode *buf) { +// If reverseRTL is true, then decompositions of RTL characters will be output +// in reverse order. +static int decomp_compat(Unicode u, Unicode *buf, GBool reverseRTL = false) { // decomposition tables stored as lists {character, decomp_length, offset} // so we do a binary search int start = 0, end = DECOMP_TABLE_LENGTH; @@ -1031,7 +1034,10 @@ static int decomp_compat(Unicode u, Unicode *buf) { int length = decomp_table[midpoint].length, i; if (buf) for (i = 0; i < length; ++i) - buf[i] = decomp_expansion[offset + i]; + if (unicodeTypeR(u) && reverseRTL) + buf[i] = decomp_expansion[offset + length - i - 1]; + else + buf[i] = decomp_expansion[offset + i]; return length; } } else if (midpoint == start) @@ -1125,8 +1131,14 @@ static GBool combine(Unicode base, Unicode add, Unicode *out) { // for each character in the normalized string giving the index in @in of the // corresponding unnormalized character. @indices is not guaranteed monotone or // onto. -Unicode *unicodeNormalizeNFKC(Unicode *in, int len, +Unicode *unicodeNormalizeNFKC(Unicode *in, int len, int *out_len, int **indices) { + return unicodeNormalizeNFKC(in, len, out_len, indices, false); +} + +Unicode *unicodeNormalizeNFKC(Unicode *in, int len, + int *out_len, int **indices, + GBool reverseRTL) { Unicode *out; int i, o, *classes, *idx = NULL; @@ -1174,7 +1186,7 @@ Unicode *unicodeNormalizeNFKC(Unicode *in, int len, u = in[j]; if (j != i && COMBINING_CLASS(u) == 0) break; - dlen = decomp_compat(u, out + p); + dlen = decomp_compat(u, out + p, reverseRTL); for (q = p; q < p + dlen; ++q) { classes[q] = COMBINING_CLASS(out[q]); if (indices) diff --git a/Build/source/libs/poppler/poppler-src/poppler/UnicodeTypeTable.h b/Build/source/libs/poppler/poppler-src/poppler/UnicodeTypeTable.h index 869aad9e6c6..978d889f691 100644 --- a/Build/source/libs/poppler/poppler-src/poppler/UnicodeTypeTable.h +++ b/Build/source/libs/poppler/poppler-src/poppler/UnicodeTypeTable.h @@ -15,6 +15,7 @@ // // Copyright (C) 2006 Ed Catmur // Copyright (C) 2012 Adrian Johnson +// Copyright (C) 2016 Khaled Hosny // // 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 @@ -38,7 +39,11 @@ extern GBool unicodeIsAlphabeticPresentationForm(Unicode c); extern Unicode unicodeToUpper(Unicode c); -extern Unicode *unicodeNormalizeNFKC(Unicode *in, int len, +extern Unicode *unicodeNormalizeNFKC(Unicode *in, int len, int *out_len, int **offsets); +extern Unicode *unicodeNormalizeNFKC(Unicode *in, int len, + int *out_len, int **offsets, + GBool reverseRTL); + #endif diff --git a/Build/source/libs/poppler/poppler-src/poppler/poppler-config.h.cmake b/Build/source/libs/poppler/poppler-src/poppler/poppler-config.h.cmake index b087a693f92..e3e2cfb7de9 100644 --- a/Build/source/libs/poppler/poppler-src/poppler/poppler-config.h.cmake +++ b/Build/source/libs/poppler/poppler-src/poppler/poppler-config.h.cmake @@ -134,7 +134,7 @@ //------------------------------------------------------------------------ // copyright notice -#define popplerCopyright "Copyright 2005-2015 The Poppler Developers - http://poppler.freedesktop.org" +#define popplerCopyright "Copyright 2005-2016 The Poppler Developers - http://poppler.freedesktop.org" #define xpdfCopyright "Copyright 1996-2011 Glyph & Cog, LLC" //------------------------------------------------------------------------ diff --git a/Build/source/libs/poppler/poppler-src/poppler/poppler-config.h.in b/Build/source/libs/poppler/poppler-src/poppler/poppler-config.h.in index f73d0f66ee9..cb77eb7674d 100644 --- a/Build/source/libs/poppler/poppler-src/poppler/poppler-config.h.in +++ b/Build/source/libs/poppler/poppler-src/poppler/poppler-config.h.in @@ -134,7 +134,7 @@ //------------------------------------------------------------------------ // copyright notice -#define popplerCopyright "Copyright 2005-2015 The Poppler Developers - http://poppler.freedesktop.org" +#define popplerCopyright "Copyright 2005-2016 The Poppler Developers - http://poppler.freedesktop.org" #define xpdfCopyright "Copyright 1996-2011 Glyph & Cog, LLC" //------------------------------------------------------------------------ diff --git a/Build/source/libs/poppler/version.ac b/Build/source/libs/poppler/version.ac index 8ec642ad837..14b56aa5271 100644 --- a/Build/source/libs/poppler/version.ac +++ b/Build/source/libs/poppler/version.ac @@ -8,4 +8,4 @@ dnl dnl -------------------------------------------------------- dnl dnl m4-include this file to define the current poppler version -m4_define([poppler_version], [0.39.0]) +m4_define([poppler_version], [0.40.0]) -- cgit v1.2.3