pippobertin commited on
Commit
ecf4b2e
·
verified ·
1 Parent(s): 60ad12f

Delete poppler-24.01.0

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. poppler-24.01.0/.clang-tidy +0 -8
  2. poppler-24.01.0/.git-blame-ignore-revs +0 -8
  3. poppler-24.01.0/.gitlab-ci.yml +0 -253
  4. poppler-24.01.0/.gitlab/merge_request_templates/merge_request_template.md +0 -3
  5. poppler-24.01.0/AUTHORS +0 -5
  6. poppler-24.01.0/CMakeLists.txt +0 -928
  7. poppler-24.01.0/COPYING +0 -339
  8. poppler-24.01.0/COPYING3 +0 -674
  9. poppler-24.01.0/ChangeLog +0 -0
  10. poppler-24.01.0/ConfigureChecks.cmake +0 -63
  11. poppler-24.01.0/INSTALL +0 -108
  12. poppler-24.01.0/NEWS +0 -0
  13. poppler-24.01.0/README-XPDF +0 -423
  14. poppler-24.01.0/README.contributors +0 -51
  15. poppler-24.01.0/README.md +0 -107
  16. poppler-24.01.0/_clang-format +0 -77
  17. poppler-24.01.0/cmake/modules/COPYING-CMAKE-SCRIPTS +0 -22
  18. poppler-24.01.0/cmake/modules/CheckFileOffsetBits.c +0 -13
  19. poppler-24.01.0/cmake/modules/CheckFileOffsetBits.cmake +0 -44
  20. poppler-24.01.0/cmake/modules/FindCairo.cmake +0 -62
  21. poppler-24.01.0/cmake/modules/FindGLIB.cmake +0 -20
  22. poppler-24.01.0/cmake/modules/FindGObjectIntrospection.cmake +0 -61
  23. poppler-24.01.0/cmake/modules/FindGTK.cmake +0 -21
  24. poppler-24.01.0/cmake/modules/FindLCMS2.cmake +0 -73
  25. poppler-24.01.0/cmake/modules/FindNSS3.cmake +0 -19
  26. poppler-24.01.0/cmake/modules/GObjectIntrospectionMacros.cmake +0 -95
  27. poppler-24.01.0/cmake/modules/MacroOptionalFindPackage.cmake +0 -48
  28. poppler-24.01.0/cmake/modules/PopplerDefaults.cmake +0 -9
  29. poppler-24.01.0/cmake/modules/PopplerMacros.cmake +0 -199
  30. poppler-24.01.0/config.h.cmake +0 -196
  31. poppler-24.01.0/cpp/CMakeLists.txt +0 -52
  32. poppler-24.01.0/cpp/Doxyfile +0 -1634
  33. poppler-24.01.0/cpp/Mainpage.dox +0 -9
  34. poppler-24.01.0/cpp/poppler-destination-private.h +0 -54
  35. poppler-24.01.0/cpp/poppler-destination.cpp +0 -273
  36. poppler-24.01.0/cpp/poppler-destination.h +0 -71
  37. poppler-24.01.0/cpp/poppler-document-private.h +0 -61
  38. poppler-24.01.0/cpp/poppler-document.cpp +0 -1230
  39. poppler-24.01.0/cpp/poppler-document.h +0 -141
  40. poppler-24.01.0/cpp/poppler-embedded-file-private.h +0 -41
  41. poppler-24.01.0/cpp/poppler-embedded-file.cpp +0 -199
  42. poppler-24.01.0/cpp/poppler-embedded-file.h +0 -57
  43. poppler-24.01.0/cpp/poppler-font-private.h +0 -68
  44. poppler-24.01.0/cpp/poppler-font.cpp +0 -190
  45. poppler-24.01.0/cpp/poppler-font.h +0 -95
  46. poppler-24.01.0/cpp/poppler-global.cpp +0 -403
  47. poppler-24.01.0/cpp/poppler-global.h +0 -138
  48. poppler-24.01.0/cpp/poppler-image-private.h +0 -51
  49. poppler-24.01.0/cpp/poppler-image.cpp +0 -515
  50. poppler-24.01.0/cpp/poppler-image.h +0 -74
poppler-24.01.0/.clang-tidy DELETED
@@ -1,8 +0,0 @@
1
- ---
2
- Checks: '-*,performance-*,bugprone-*,readability-inconsistent-declaration-parameter-name,readability-string-compare,readability-braces-around-statements,modernize-deprecated-headers,modernize-make-unique,modernize-make-shared,modernize-use-override,modernize-use-equals-delete,modernize-use-emplace,modernize-use-bool-literals,modernize-redundant-void-arg,modernize-loop-convert,google-explicit-constructor,-bugprone-narrowing-conversions,-bugprone-macro-parentheses,-bugprone-suspicious-string-compare,-bugprone-incorrect-roundings,-bugprone-undefined-memory-manipulation,-bugprone-sizeof-expression,-bugprone-branch-clone,-bugprone-reserved-identifier,-bugprone-suspicious-include,-performance-no-int-to-ptr,-bugprone-easily-swappable-parameters,-bugprone-implicit-widening-of-multiplication-result,-bugprone-assignment-in-if-condition,-bugprone-unchecked-optional-access'
3
- WarningsAsErrors: '*'
4
- HeaderFilterRegex: '.'
5
- AnalyzeTemporaryDtors: false
6
- FormatStyle: none
7
- User: user
8
- ...
 
 
 
 
 
 
 
 
 
poppler-24.01.0/.git-blame-ignore-revs DELETED
@@ -1,8 +0,0 @@
1
- # _clang_format added
2
- 814fbda28cc8a37fed3134c2db8da28f86fb5ee0
3
- # readability-braces-around-statements added
4
- f7466e31408ba884c44728f7da04227863177241
5
- # clang-format-14 wanted a bit of reformat
6
- a94a444e5acff86e04d1688d862e81a82108cf03
7
- # clang-format-15 wanted a bit of reformat also
8
- b5aa09403e0f106f51292683c1841908167337ea
 
 
 
 
 
 
 
 
 
poppler-24.01.0/.gitlab-ci.yml DELETED
@@ -1,253 +0,0 @@
1
- image: debian:unstable
2
-
3
- stages:
4
- - build
5
- - document
6
- - publish
7
-
8
- before_script:
9
- - echo 'deb-src http://deb.debian.org/debian unstable main' >> /etc/apt/sources.list
10
- - apt-get update
11
- - apt-get build-dep --yes --no-install-recommends poppler
12
- - apt-get install --yes --no-install-recommends ninja-build libcurl4-openssl-dev git ca-certificates locales libgtk-3-dev libbrotli-dev libboost-container-dev qt6-base-dev
13
- - echo 'en_US.UTF-8 UTF-8' >> /etc/locale.gen
14
- - locale-gen
15
-
16
- variables:
17
- LANG: en_US.UTF-8
18
- LANGUAGE: en_US:en
19
- LC_ALL: en_US.UTF-8
20
- DEBIAN_FRONTEND: noninteractive
21
- TEST_DATA_URL: https://gitlab.freedesktop.org/${CI_PROJECT_NAMESPACE}/test.git
22
- UPSTREAM_TEST_DATA_URL: https://gitlab.freedesktop.org/poppler/test.git
23
-
24
- cache:
25
- key: "$CI_JOB_NAME"
26
- paths:
27
- - build/
28
-
29
- clang_format:
30
- stage: build
31
- before_script:
32
- - apt-get update
33
- - apt-get install --yes --no-install-recommends git clang-format-16
34
- script:
35
- - find . \( -name "*.cpp" -or -name "*.h" -or -name "*.c" -or -name "*.cc" \) -exec clang-format-16 -i {} \;
36
- - git diff --exit-code
37
-
38
- build:
39
- stage: build
40
- script:
41
- - apt-get update
42
- - bash do-the-gnupg-2.4-dance.sh $PWD/build/gnupg/
43
- - git clone --branch ${CI_COMMIT_REF_NAME} --depth 1 ${TEST_DATA_URL} test-data || git clone --depth 1 ${UPSTREAM_TEST_DATA_URL} test-data
44
- - mkdir -p build && cd build
45
- - cmake -G Ninja -DTESTDATADIR=$PWD/../test-data -DCMAKE_PREFIX_PATH=$PWD/gnupg ..
46
- - ninja -j ${FDO_CI_CONCURRENT}
47
- - ctest --output-on-failure
48
-
49
- build_clang16_libcpp:
50
- stage: build
51
- script:
52
- - echo "We want to compile with C++23 here because it has some nice things like deleted std::string nullptr constructor"
53
- - sed -i -e "s@CMAKE_CXX_STANDARD 17@CMAKE_CXX_STANDARD 23@g" CMakeLists.txt
54
- - git clone --branch ${CI_COMMIT_REF_NAME} --depth 1 ${TEST_DATA_URL} test-data || git clone --depth 1 ${UPSTREAM_TEST_DATA_URL} test-data
55
- - apt-get install --yes --no-install-recommends libclang-16-dev llvm-16-dev libc++-16-dev libc++abi-16-dev clang-tidy-16 clang-16 libunwind-16-dev gperf jq
56
- - srcdir=`pwd` && mkdir -p /tmp/poppler_build && cd /tmp/poppler_build
57
- - clang++-16 -fPIC -shared -o goostring-format-checker.so $srcdir/test/goostring-format-checker/goostring-format-checker.cc -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS -I /usr/lib/llvm-16/include/
58
- - echo "We disable Qt6 tests since Qt6 exposes std::string in its ABI which makes it not build in this CI since we're using libc++ but Qt6 in debian is build with libstdc++"
59
- - CC=clang-16 CXX=clang++-16 cmake -DCMAKE_CXX_FLAGS="-stdlib=libc++ -Xclang -load -Xclang $PWD/goostring-format-checker.so -Xclang -add-plugin -Xclang goostring-format-checker -Werror -Wno-deprecated-declarations" -DTESTDATADIR=$srcdir/test-data -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DBUILD_QT6_TESTS=OFF -DENABLE_GPGME=OFF $srcdir
60
- - make -j ${FDO_CI_CONCURRENT}
61
- - ctest --output-on-failure
62
- - echo "This is a complex way of not running clang-tidy over autogenerated files, unfortunately -DCMAKE_CXX_CLANG_TIDY doesn't support that https://gitlab.kitware.com/cmake/cmake/-/issues/19772"
63
- - cat compile_commands.json | jq '[.[] | select(.file | contains("'"$srcdir"'"))]' > compile_commands.aux.json
64
- - cp compile_commands.aux.json compile_commands.json
65
- - echo "Cheat a bit and remove the moc includes so that we don't lint autogenerated code"
66
- - echo "Maybe we can replace this with NOLINTBEGIN in the future https://github.com/llvm/llvm-project/issues/56983"
67
- - find $srcdir/qt* -name *.cpp -exec sed -E -i '/#include .*moc"$/d' {} \;
68
- - cp "$srcdir/.clang-tidy" .
69
- - run-clang-tidy-16
70
-
71
- build_ubuntu_20_04:
72
- stage: build
73
- image: ubuntu:20.04
74
- before_script:
75
- - apt-get update
76
- - apt-get install --yes --no-install-recommends build-essential cmake ninja-build libjpeg-dev libopenjp2-7-dev qtbase5-dev gobject-introspection libglib2.0-dev libgtk-3-dev libgirepository1.0-dev libnss3-dev ca-certificates libcurl4-nss-dev liblcms2-dev libboost-container-dev libtiff-dev wget p7zip-full git
77
- - wget -r -l1 -np "https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_620/qt.qt6.620.gcc_64/" -A "6.2.0-0-*qtbase-Linux-RHEL_8_2-GCC-Linux-RHEL_8_2-X86_64.7z"
78
- - 7z x download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_620/qt.qt6.620.gcc_64/6.2.0-0-*qtbase-Linux-RHEL_8_2-GCC-Linux-RHEL_8_2-X86_64.7z
79
- - wget -r -l1 -np "https://download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_620/qt.qt6.620.gcc_64/" -A "6.2.0-0-*icu-linux-Rhel7.2-x64.7z"
80
- - 7z x download.qt.io/online/qtsdkrepository/linux_x64/desktop/qt6_620/qt.qt6.620.gcc_64/6.2.0-0-*icu-linux-Rhel7.2-x64.7z
81
- script:
82
- - git clone --branch ${CI_COMMIT_REF_NAME} --depth 1 ${TEST_DATA_URL} test-data || git clone --depth 1 ${UPSTREAM_TEST_DATA_URL} test-data
83
- - mkdir -p build && cd build
84
- - cmake -G Ninja -DENABLE_GPGME=OFF -DTESTDATADIR=$PWD/../test-data -DCMAKE_PREFIX_PATH=$PWD/../6.2.0/gcc_64/lib/cmake ..
85
- - ninja
86
- - ctest --output-on-failure
87
-
88
- build_mingw64_fedora39:
89
- stage: build
90
- image: fedora:39
91
- before_script:
92
- - dnf install -y 'dnf-command(builddep)'
93
- - dnf builddep -y mingw64-poppler
94
- - dnf -y install glibc-langpack-en make ninja-build mingw64-boost mingw64-curl mingw64-qt6-qtbase mingw64-gcc-c++ cmake-rpm-macros
95
- script:
96
- - mkdir -p build && cd build
97
- - mingw64-cmake -DENABLE_NSS3=OFF -DENABLE_GPGME=OFF -G Ninja ..
98
- - ninja
99
-
100
- build_clazy_clang16:
101
- stage: build
102
- script:
103
- - apt-get install --yes --no-install-recommends clazy clang-16
104
- - mkdir -p build && cd build
105
- - CC=clang-16 CXX=clazy CXXFLAGS="-Werror -Wno-deprecated-declarations" cmake -DENABLE_GPGME=OFF -G Ninja ..
106
- - CLAZY_CHECKS="level0,level1,level2,isempty-vs-count,qhash-with-char-pointer-key,tr-non-literal,no-non-pod-global-static" ninja -j ${FDO_CI_CONCURRENT}
107
-
108
- build_qt5_android:
109
- stage: build
110
- image: kdeorg/android-sdk
111
- before_script:
112
- - echo "workaround for ECM Android toolchain wanting all binaries to be shared libraries"
113
- - sed -i -e 's/<LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS>/<LINK_FLAGS>/g' /opt/nativetooling/share/ECM/toolchain/Android.cmake
114
- script:
115
- - mkdir -p build && cd build
116
- - 'ANDROID_ARCH_ABI=arm64-v8a cmake -G Ninja ..
117
- -DCMAKE_ANDROID_API=28
118
- -DCMAKE_PREFIX_PATH="/opt/Qt/;/opt/kdeandroid-arm64/"
119
- -DCMAKE_BUILD_TYPE=debug
120
- -DCMAKE_POSITION_INDEPENDENT_CODE=OFF
121
- -DENABLE_DCTDECODER=unmaintained
122
- -DENABLE_LIBOPENJPEG=unmaintained
123
- -DENABLE_BOOST=OFF
124
- -DENABLE_LCMS=OFF
125
- -DENABLE_LIBCURL=OFF
126
- -DENABLE_LIBTIFF=OFF
127
- -DENABLE_QT6=OFF
128
- -DENABLE_NSS3=OFF
129
- -DENABLE_GPGME=OFF
130
- -DCMAKE_CXX_FLAGS="-Werror -Wno-deprecated-declarations"
131
- -DCMAKE_TOOLCHAIN_FILE=/opt/nativetooling/share/ECM/toolchain/Android.cmake'
132
- - ninja -j ${FDO_CI_CONCURRENT}
133
-
134
- build_qt5_android_generic:
135
- stage: build
136
- image: kdeorg/android-sdk
137
- before_script:
138
- - echo "workaround for ECM Android toolchain wanting all binaries to be shared libraries"
139
- - sed -i -e 's/<LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS>/<LINK_FLAGS>/g' /opt/nativetooling/share/ECM/toolchain/Android.cmake
140
- script:
141
- - mkdir -p build && cd build
142
- - 'ANDROID_ARCH_ABI=arm64-v8a cmake -G Ninja ..
143
- -DCMAKE_ANDROID_API=28
144
- -DCMAKE_PREFIX_PATH="/opt/Qt/;/opt/kdeandroid-arm64/"
145
- -DCMAKE_BUILD_TYPE=debug
146
- -DCMAKE_POSITION_INDEPENDENT_CODE=OFF
147
- -DENABLE_DCTDECODER=unmaintained
148
- -DENABLE_LIBOPENJPEG=unmaintained
149
- -DENABLE_BOOST=OFF
150
- -DENABLE_LCMS=OFF
151
- -DENABLE_LIBCURL=OFF
152
- -DENABLE_LIBTIFF=OFF
153
- -DENABLE_QT6=OFF
154
- -DENABLE_NSS3=OFF
155
- -DENABLE_GPGME=OFF
156
- -DFONT_CONFIGURATION=generic
157
- -DCMAKE_CXX_FLAGS="-Werror -Wno-deprecated-declarations"
158
- -DCMAKE_TOOLCHAIN_FILE=/opt/nativetooling/share/ECM/toolchain/Android.cmake'
159
- - ninja -j ${FDO_CI_CONCURRENT}
160
-
161
- build_qt6_android:
162
- stage: build
163
- image: invent-registry.kde.org/sysadmin/ci-images/android-qt65
164
- before_script:
165
- - echo "workaround for ECM Android toolchain wanting all binaries to be shared libraries"
166
- - sed -i -e 's/<LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS>/<LINK_FLAGS>/g' /opt/nativetooling/share/ECM/toolchain/Android.cmake
167
- script:
168
- - mkdir -p build && cd build
169
- - 'ANDROID_ARCH_ABI=arm64-v8a cmake -G Ninja ..
170
- -DCMAKE_ANDROID_API=29
171
- -DCMAKE_PREFIX_PATH="/home/user/android-arm-clang"
172
- -DCMAKE_BUILD_TYPE=debug
173
- -DCMAKE_POSITION_INDEPENDENT_CODE=OFF
174
- -DENABLE_DCTDECODER=unmaintained
175
- -DENABLE_LIBOPENJPEG=unmaintained
176
- -DENABLE_BOOST=OFF
177
- -DENABLE_LCMS=OFF
178
- -DENABLE_LIBCURL=OFF
179
- -DENABLE_LIBTIFF=OFF
180
- -DENABLE_QT5=OFF
181
- -DENABLE_NSS3=OFF
182
- -DENABLE_GPGME=OFF
183
- -DCMAKE_CXX_FLAGS="-Werror -Wno-deprecated-declarations"
184
- -DCMAKE_TOOLCHAIN_FILE=/home/user/android-arm-clang/lib/cmake/Qt6/qt.toolchain.cmake
185
- -DQT_CHAINLOAD_TOOLCHAIN_FILE=/opt/nativetooling/share/ECM/toolchain/Android.cmake'
186
- - ninja -j ${FDO_CI_CONCURRENT}
187
-
188
- qt5_docs:
189
- only:
190
- - master
191
- stage: document
192
- variables:
193
- QT_SELECT: qt5
194
- script:
195
- - apt-get install --yes --no-install-recommends doxygen graphviz qtchooser qttools5-dev-tools
196
- - cd qt5/src
197
- - doxygen
198
- cache: {}
199
- artifacts:
200
- paths:
201
- - qt5/src/APIDOCS-html
202
-
203
- qt6_docs:
204
- only:
205
- - master
206
- stage: document
207
- script:
208
- - apt-get install --yes --no-install-recommends doxygen graphviz qt6-documentation-tools
209
- - cd qt6/src
210
- - ( cat Doxyfile ; echo "QHG_LOCATION=/usr/lib/qt6/bin/qhelpgenerator" ) | doxygen -
211
- cache: {}
212
- artifacts:
213
- paths:
214
- - qt6/src/APIDOCS-html
215
-
216
- cpp_docs:
217
- only:
218
- - master
219
- stage: document
220
- script:
221
- - apt-get install --yes --no-install-recommends doxygen graphviz
222
- - cd cpp
223
- - doxygen
224
- cache: {}
225
- artifacts:
226
- paths:
227
- - cpp/APIDOCS-html
228
-
229
- glib_docs:
230
- only:
231
- - master
232
- stage: document
233
- script:
234
- - apt-get install --yes --no-install-recommends gtk-doc-tools
235
- - mkdir -p build && cd build
236
- - cmake -G Ninja -DENABLE_GTK_DOC=YES -DENABLE_GPGME=OFF ..
237
- - ninja -j ${FDO_CI_CONCURRENT} glib-docs
238
- cache: {}
239
- artifacts:
240
- paths:
241
- - build/glib/reference/html
242
-
243
- trigger_pages:
244
- only:
245
- - master
246
- stage: publish
247
- image: alpine:latest
248
- before_script:
249
- - apk --update upgrade
250
- - apk add curl ca-certificates
251
- script:
252
- - 'curl --request POST --form "token=$WEB_PAGE_TRIGGER" --form ref=master https://gitlab.freedesktop.org/api/v4/projects/poppler%2Fpoppler-web-page/trigger/pipeline'
253
- cache: {}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/.gitlab/merge_request_templates/merge_request_template.md DELETED
@@ -1,3 +0,0 @@
1
- Please make sure you check the "Allow commits from members who can merge to the target branch" option at the bottom of the page.
2
-
3
- Makes our life much easier since we can rebase and merge from the web user interface.
 
 
 
 
poppler-24.01.0/AUTHORS DELETED
@@ -1,5 +0,0 @@
1
- xpdf is written by Derek Noonburg <[email protected]>
2
-
3
- libpoppler is a fork of xpdf-3.00
4
-
5
- Current Maintainer: Albert Astals Cid <[email protected]>
 
 
 
 
 
 
poppler-24.01.0/CMakeLists.txt DELETED
@@ -1,928 +0,0 @@
1
- cmake_minimum_required(VERSION 3.16.0 FATAL_ERROR)
2
-
3
- project(poppler)
4
-
5
- set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules)
6
-
7
- include(PopplerDefaults)
8
- include(PopplerMacros)
9
- # Ensure that the user-provided C_FLAGS are used for try_compile() calls.
10
- # This is needed since PopplerMacros.cmake clears CMAKE_C_FLAGS and if
11
- # CMAKE_TRY_COMPILE_CONFIGURATION is empty CMake only uses the flags
12
- # specified in CMAKE_C_FLAGS (https://gitlab.kitware.com/cmake/cmake/-/issues/22414
13
- # and https://gitlab.kitware.com/cmake/cmake/-/issues/19512).
14
- # We therefore have to explicitly set CMAKE_TRY_COMPILE_CONFIGURATION until we
15
- # depend on a CMake release that includes a fix for those issues.
16
- # This is set after including PopplerMacros since that sets the default
17
- # CMAKE_BUILD_TYPE and also sets _CMAKE_BUILD_TYPE_UPPER.
18
- set(CMAKE_TRY_COMPILE_CONFIGURATION "${_CMAKE_BUILD_TYPE_UPPER}")
19
-
20
- include(MacroOptionalFindPackage)
21
- find_package(PkgConfig)
22
- include(TestBigEndian)
23
- test_big_endian(WORDS_BIGENDIAN)
24
- include(CheckFileOffsetBits)
25
- CHECK_FILE_OFFSET_BITS()
26
-
27
- include(GenerateExportHeader)
28
- include(GNUInstallDirs)
29
- include(CMakePushCheckState)
30
-
31
- set(ENABLE_FUZZER FALSE)
32
-
33
- find_package (ECM 1.6.0 QUIET NO_MODULE)
34
- if (ECM_FOUND)
35
- include("${ECM_MODULE_DIR}/ECMEnableSanitizers.cmake")
36
-
37
- if(ECM_ENABLE_SANITIZERS MATCHES fuzzer)
38
- set(ENABLE_FUZZER TRUE)
39
- endif()
40
- endif()
41
-
42
- set(POPPLER_MAJOR_VERSION "24")
43
- set(POPPLER_MINOR_VERSION_STRING "01")
44
- # We want the string version to have 08 but the integer version can't have a leading 0 since otherwise it's considered octal
45
- # So strip a leading 0 if found in POPPLER_MINOR_VERSION_STRING and store the result in POPPLER_MINOR_VERSION
46
- string(REGEX REPLACE "^0?(.+)$" "\\1" POPPLER_MINOR_VERSION "${POPPLER_MINOR_VERSION_STRING}")
47
- set(POPPLER_MICRO_VERSION "0")
48
- set(POPPLER_VERSION "${POPPLER_MAJOR_VERSION}.${POPPLER_MINOR_VERSION_STRING}.${POPPLER_MICRO_VERSION}")
49
-
50
- set(CMAKE_CXX_STANDARD 17)
51
- set(CMAKE_CXX_STANDARD_REQUIRED ON)
52
- set(CMAKE_CXX_EXTENSIONS OFF)
53
- set(CMAKE_C_STANDARD 11)
54
- set(CMAKE_C_EXTENSIONS OFF)
55
- set(CMAKE_LINK_DEPENDS_NO_SHARED TRUE)
56
- set(CMAKE_C_VISIBILITY_PRESET hidden)
57
- set(CMAKE_CXX_VISIBILITY_PRESET hidden)
58
- set(CMAKE_VISIBILITY_INLINES_HIDDEN 1)
59
-
60
-
61
- # command line switches
62
- option(ENABLE_UNSTABLE_API_ABI_HEADERS "Install API/ABI unstable xpdf headers." OFF)
63
- option(BUILD_GTK_TESTS "Whether to compile the GTK+ test programs." ON)
64
- option(BUILD_QT5_TESTS "Whether to compile the Qt5 test programs." ON)
65
- option(BUILD_QT6_TESTS "Whether to compile the Qt6 test programs." ON)
66
- option(BUILD_CPP_TESTS "Whether to compile the CPP test programs." ON)
67
- option(BUILD_MANUAL_TESTS "Whether to compile manual test programs." ON)
68
- option(ENABLE_BOOST "Use boost (for Splash backend performance)." ON)
69
- option(ENABLE_UTILS "Compile poppler command line utils." ON)
70
- option(ENABLE_CPP "Compile poppler cpp wrapper." ON)
71
- option(ENABLE_GLIB "Compile poppler glib wrapper." ON)
72
- option(ENABLE_GOBJECT_INTROSPECTION "Whether to generate GObject introspection." ON)
73
- option(ENABLE_GTK_DOC "Whether to generate glib API documentation." OFF)
74
- option(ENABLE_QT5 "Compile poppler qt5 wrapper." ON)
75
- option(ENABLE_QT6 "Compile poppler qt6 wrapper." ON)
76
- 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")
77
- set(ENABLE_DCTDECODER "libjpeg" CACHE STRING "Use libjpeg for DCT streams. Possible values: libjpeg, unmaintained, none. will use libjpeg if available or fail if not. 'unmaintained' gives you the internal unmaintained decoder. Use at your own risk. 'none' compiles no DCT decoder at all. Default: libjpeg")
78
- option(ENABLE_LCMS "Use LCMS for color management." ON)
79
- option(ENABLE_LIBCURL "Build libcurl based HTTP support." ON)
80
- option(ENABLE_LIBTIFF "Build code to write images as TIFF (pdfimages/pdftocairo/etc)." ON)
81
- option(ENABLE_NSS3 "Build the NSS backend for cryptographic support" ON)
82
- option(ENABLE_GPGME "Build the GPG backend for cryptographic support" ON)
83
- option(ENABLE_ZLIB_UNCOMPRESS "Use zlib to uncompress flate streams (not totally safe)." OFF)
84
- option(USE_FLOAT "Use single precision arithmetic in the Splash backend" OFF)
85
- option(BUILD_SHARED_LIBS "Build poppler as a shared library" ON)
86
- option(RUN_GPERF_IF_PRESENT "Run gperf if it is found" ON)
87
- if(WIN32)
88
- option(ENABLE_RELOCATABLE "Do not hardcode the poppler library location (on Windows)." ON)
89
- else()
90
- set(ENABLE_RELOCATABLE OFF)
91
- endif()
92
- option(EXTRA_WARN "Enable extra compile warnings" OFF)
93
-
94
- set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
95
-
96
- set(TESTDATADIR "${CMAKE_SOURCE_DIR}/../test" CACHE STRING "Specify test data dir.")
97
- if(NOT (EXISTS ${TESTDATADIR} AND EXISTS ${TESTDATADIR}/test-poppler.c))
98
- message(WARNING "
99
- No test data found in $testdatadir.
100
- You will not be able to run 'make test' successfully.
101
-
102
- The test data is not included in the source packages
103
- and is also not part of the main git repository. Instead,
104
- you can checkout the test data from its own git
105
- repository with:
106
-
107
- git clone git://git.freedesktop.org/git/poppler/test
108
-
109
- You should checkout the test data as a sibling of your
110
- poppler source folder or specify the location of your
111
- checkout with -DTESTDATADIR=/path/to/checkoutdir/test.
112
- ")
113
- endif()
114
-
115
- if(WIN32)
116
- set(_default_fontconfiguration "win32")
117
- elseif(ANDROID)
118
- set(_default_fontconfiguration "android")
119
- else()
120
- set(_default_fontconfiguration "fontconfig")
121
- endif()
122
- set(FONT_CONFIGURATION "${_default_fontconfiguration}" CACHE STRING "The font configuration backend (win32|android|generic|fontconfig).")
123
- string(TOLOWER "${FONT_CONFIGURATION}" font_configuration)
124
- set(WITH_FONTCONFIGURATION_WIN32 OFF)
125
- set(WITH_FONTCONFIGURATION_FONTCONFIG OFF)
126
- set(WITH_FONTCONFIGURATION_ANDROID OFF)
127
- if(font_configuration STREQUAL "win32")
128
- set(WITH_FONTCONFIGURATION_WIN32 ON)
129
- elseif(font_configuration STREQUAL "fontconfig")
130
- set(WITH_FONTCONFIGURATION_FONTCONFIG ON)
131
- elseif(font_configuration STREQUAL "android")
132
- set(WITH_FONTCONFIGURATION_ANDROID ON)
133
- elseif(font_configuration STREQUAL "generic")
134
- message(STATUS "no win32, android, or fontconfig specific code")
135
- else()
136
- message(FATAL_ERROR "Invalid font configuration setting: ${FONT_CONFIGURATION}")
137
- endif()
138
-
139
- # Enable these unconditionally.
140
- set(OPI_SUPPORT ON)
141
- set(TEXTOUT_WORD_LIST ON)
142
-
143
- # setting the minimum required versions for some components
144
- set(CAIRO_VERSION "1.16.0")
145
- set(GLIB_REQUIRED "2.64")
146
- set(GTK_REQUIRED "3.24")
147
- set(GDK_PIXBUF_REQUIRED "2.40")
148
- set(FREETYPE_VERSION "2.10")
149
- set(FONTCONFIG_VERSION "2.13")
150
-
151
- find_package(Freetype ${FREETYPE_VERSION} REQUIRED)
152
- if(WITH_FONTCONFIGURATION_FONTCONFIG)
153
- find_package(Fontconfig ${FONTCONFIG_VERSION} REQUIRED)
154
- elseif(WITH_FONTCONFIGURATION_ANDROID)
155
- find_library(Androidlib NAMES android REQUIRED)
156
- endif()
157
-
158
- macro(find_soft_mandatory_package _enable_option _package_name _package_version)
159
- if(${_enable_option})
160
- find_package(${_package_name} ${_package_version})
161
- if(NOT ${_package_name}_FOUND)
162
- MESSAGE(FATAL_ERROR "Could not find the ${_package_version} version of ${_package_name}. If you're not interested in the features it provides set the cmake ${_enable_option} option to OFF")
163
- endif()
164
- endif()
165
- endmacro()
166
-
167
- find_soft_mandatory_package(ENABLE_NSS3 NSS3 3.68)
168
- find_soft_mandatory_package(ENABLE_GPGME Gpgmepp 1.19)
169
- find_soft_mandatory_package(ENABLE_LIBTIFF TIFF 4.1)
170
-
171
- macro_optional_find_package(JPEG)
172
- macro_optional_find_package(PNG)
173
- if(ENABLE_DCTDECODER STREQUAL "libjpeg")
174
- if(JPEG_FOUND)
175
- include(CheckCSourceCompiles)
176
- set(_save_CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}")
177
- set(CMAKE_REQUIRED_LIBRARIES JPEG::JPEG)
178
- check_c_source_compiles("
179
- #include <stddef.h>
180
- #include <stdio.h>
181
- #include <jpeglib.h>
182
- int main() { struct jpeg_decompress_struct info; jpeg_mem_src(&info, 0, 0); return 0; }" HAVE_JPEG_MEM_SRC)
183
- set(CMAKE_REQUIRED_LIBRARIES "${_save_CMAKE_REQUIRED_LIBRARIES}")
184
-
185
- if(NOT HAVE_JPEG_MEM_SRC)
186
- message(FATAL_ERROR "Your libjpeg is too old. Poppler needs one that provides jpeg_mem_src. That is provided in libjpeg >= 8 or libjpeg-turbo >= 1.1.0. You can \
187
- also decide to use the internal unmaintained DCT decoder or none at all.\n\
188
- Possible options are: -DENABLE_DCTDECODER=libjpeg, -DENABLE_DCTDECODER=none, \
189
- -DENABLE_DCTDECODER=unmaintained")
190
- endif()
191
-
192
- set(ENABLE_LIBJPEG ${JPEG_FOUND})
193
- else()
194
- message(STATUS "Could NOT find libjpeg.")
195
- message(FATAL_ERROR "Install libjpeg before trying to build poppler. You can \
196
- also decide to use the internal unmaintained DCT decoder or none at all.\n\
197
- Possible options are: -DENABLE_DCTDECODER=libjpeg, -DENABLE_DCTDECODER=none, \
198
- -DENABLE_DCTDECODER=unmaintained")
199
- endif()
200
- set(HAVE_DCT_DECODER ON)
201
- elseif(ENABLE_DCTDECODER STREQUAL "unmaintained")
202
- set(ENABLE_LIBJPEG OFF)
203
- set(HAVE_DCT_DECODER ON)
204
- elseif(ENABLE_DCTDECODER STREQUAL "none")
205
- set(ENABLE_LIBJPEG OFF)
206
- set(HAVE_DCT_DECODER OFF)
207
- else()
208
- message(FATAL_ERROR "Invalid ENABLE_DCTDECODER value.")
209
- endif()
210
-
211
- set(QT5_VERSION "5.12") # Update QT_DISABLE_DEPRECATED_BEFORE in qt5/CMakeLists.txt when changing this
212
- find_soft_mandatory_package(ENABLE_QT5 Qt5Core ${QT5_VERSION})
213
- find_soft_mandatory_package(ENABLE_QT5 Qt5Gui ${QT5_VERSION})
214
- find_soft_mandatory_package(ENABLE_QT5 Qt5Xml ${QT5_VERSION})
215
- find_soft_mandatory_package(ENABLE_QT5 Qt5Widgets ${QT5_VERSION})
216
- find_soft_mandatory_package(ENABLE_QT5 Qt5Test ${QT5_VERSION})
217
-
218
- set(QT6_VERSION "6.2")
219
- SET(QT_NO_CREATE_VERSIONLESS_TARGETS ON)
220
- find_soft_mandatory_package(ENABLE_QT6 Qt6Core ${QT6_VERSION})
221
- find_soft_mandatory_package(ENABLE_QT6 Qt6Gui ${QT6_VERSION})
222
- find_soft_mandatory_package(ENABLE_QT6 Qt6Widgets ${QT6_VERSION})
223
- find_soft_mandatory_package(ENABLE_QT6 Qt6Test ${QT6_VERSION})
224
-
225
- # Check for Cairo rendering backend
226
- macro_optional_find_package(Cairo ${CAIRO_VERSION})
227
-
228
- find_package(Boost 1.71.0)
229
- if(Boost_FOUND)
230
- set(USE_BOOST_HEADERS ON)
231
- elseif(ENABLE_BOOST)
232
- message(FATAL_ERROR "-- Boost recommended for Splash. Use ENABLE_BOOST=OFF to skip.")
233
- endif()
234
-
235
- if(CAIRO_FOUND)
236
- set(HAVE_CAIRO ${CAIRO_FOUND})
237
- set(CAIRO_FEATURE "#define POPPLER_HAS_CAIRO 1")
238
- set(CAIRO_REQ "cairo")
239
- set(POPPLER_GLIB_DISABLE_DEPRECATED "")
240
- set(POPPLER_GLIB_DISABLE_SINGLE_INCLUDES "")
241
- if(ENABLE_GLIB)
242
- macro_optional_find_package(GLIB)
243
- if(NOT GLIB_FOUND)
244
- set(ENABLE_GLIB OFF)
245
- endif()
246
- endif()
247
- if(ENABLE_GLIB)
248
- if(ENABLE_GOBJECT_INTROSPECTION)
249
- # Check for introspection
250
- macro_optional_find_package(GObjectIntrospection 1.64.0)
251
- set(HAVE_INTROSPECTION ${INTROSPECTION_FOUND})
252
- endif()
253
- set(POPPLER_GLIB_DISABLE_DEPRECATED "${POPPLER_GLIB_DISABLE_DEPRECATED} -DG_DISABLE_DEPRECATED")
254
- set(POPPLER_GLIB_DISABLE_SINGLE_INCLUDES "${POPPLER_GLIB_DISABLE_SINGLE_INCLUDES} -DG_DISABLE_SINGLE_INCLUDES")
255
- macro_optional_find_package(GTK)
256
- endif()
257
- else()
258
- set(CAIRO_FEATURE "#undef POPPLER_HAS_CAIRO")
259
- set(ENABLE_GLIB OFF)
260
- endif()
261
-
262
- # GTK API docs require both the gtk-doc package & python3 support
263
- if(ENABLE_GTK_DOC)
264
- # Stop the build & raise an error if the package is missing
265
- find_package(GtkDoc)
266
- if(NOT GtkDoc_FOUND)
267
- message(FATAL_ERROR "Install the gtk-doc package to generate GTK API documentation, or set ENABLE_GTK_DOC to Off.")
268
- endif()
269
- # NOTE: The FindPythonInterp module is deprecated, but the newer FindPython3 module requires CMake >=3.12
270
- find_package(PythonInterp 3)
271
- # Also bail out with an error if Python3 is missing
272
- if(NOT PYTHONINTERP_FOUND)
273
- message(FATAL_ERROR "Install python3 in order to generate GTK API documentation, or set ENABLE_GTK_DOC to Off.")
274
- endif()
275
- endif()
276
-
277
- if(ENABLE_CPP)
278
- cmake_push_check_state()
279
- find_package(Iconv REQUIRED)
280
- set(CMAKE_REQUIRED_LIBRARIES Iconv::Iconv)
281
- check_cxx_source_compiles("
282
- #include <iconv.h>
283
- int main(){
284
- iconv_t conv = 0;
285
- const char* in = 0;
286
- size_t ilen = 0;
287
- char* out = 0;
288
- size_t olen = 0;
289
- iconv(conv, &in, &ilen, &out, &olen);
290
- return 0;
291
- }
292
- " ICONV_SECOND_ARGUMENT_IS_CONST)
293
- cmake_pop_check_state()
294
- if(ICONV_SECOND_ARGUMENT_IS_CONST)
295
- set(ICONV_CONST "const")
296
- endif()
297
- endif()
298
- find_package(ZLIB REQUIRED)
299
-
300
- set(WITH_OPENJPEG FALSE)
301
- if(ENABLE_LIBOPENJPEG STREQUAL "openjpeg2")
302
- find_package(OpenJPEG)
303
- set(WITH_OPENJPEG ${OpenJPEG_FOUND})
304
- if(NOT OpenJPEG_FOUND OR OPENJPEG_MAJOR_VERSION VERSION_LESS 2)
305
- message(STATUS "Could NOT find openjpeg2.")
306
- message(FATAL_ERROR "Install libopenjpeg2 before trying to build poppler. You \
307
- can also decide to use the internal unmaintained JPX decoder or none at all.\n\
308
- Possible options are: -DENABLE_LIBOPENJPEG=openjpeg2, -DENABLE_LIBOPENJPEG=none, \
309
- -DENABLE_LIBOPENJPEG=unmaintained,")
310
- endif()
311
- set(HAVE_JPX_DECODER ON)
312
- elseif(ENABLE_LIBOPENJPEG STREQUAL "unmaintained")
313
- set(WITH_OPENJPEG OFF)
314
- set(HAVE_JPX_DECODER ON)
315
- elseif(ENABLE_LIBOPENJPEG STREQUAL "none")
316
- set(WITH_OPENJPEG OFF)
317
- set(HAVE_JPX_DECODER OFF)
318
- else()
319
- message(FATAL_ERROR "Invalid ENABLE_LIBOPENJPEG value: ${ENABLE_LIBOPENJPEG}")
320
- endif()
321
- set(ENABLE_LIBOPENJPEG "${WITH_OPENJPEG}")
322
-
323
- find_soft_mandatory_package(ENABLE_LCMS LCMS2 2.9)
324
- set(USE_CMS ${ENABLE_LCMS})
325
-
326
- find_soft_mandatory_package(ENABLE_LIBCURL CURL 7.68)
327
- set(POPPLER_HAS_CURL_SUPPORT ${ENABLE_LIBCURL})
328
-
329
- if(MINGW)
330
- # Use mingw's ansi stdio extensions
331
- add_definitions(-D__USE_MINGW_ANSI_STDIO=1)
332
- endif()
333
- if(WITH_FONTCONFIGURATION_WIN32)
334
- if(MINGW)
335
- # Set the minimum required Internet Explorer version to 5.0
336
- add_definitions(-D_WIN32_IE=0x0500)
337
- endif()
338
- endif()
339
- include_directories(
340
- ${CMAKE_CURRENT_SOURCE_DIR}
341
- ${CMAKE_CURRENT_SOURCE_DIR}/fofi
342
- ${CMAKE_CURRENT_SOURCE_DIR}/goo
343
- ${CMAKE_CURRENT_SOURCE_DIR}/poppler
344
- ${CMAKE_CURRENT_BINARY_DIR}
345
- ${CMAKE_CURRENT_BINARY_DIR}/poppler
346
- )
347
-
348
- if(PNG_FOUND)
349
- set(ENABLE_LIBPNG ON)
350
- endif()
351
-
352
- set(SIGNATURE_BACKENDS "")
353
- if(ENABLE_NSS3)
354
- list(APPEND SIGNATURE_BACKENDS "NSS")
355
- endif()
356
- if(ENABLE_GPGME)
357
- list(APPEND SIGNATURE_BACKENDS "GPG")
358
- endif()
359
-
360
- list(LENGTH SIGNATURE_BACKENDS _signing_backends_count)
361
- if (_signing_backends_count GREATER 0)
362
- if (NOT DEFAULT_SIGNATURE_BACKEND)
363
- # If not specified at compiletime, we take the first one added.
364
- # This means that the order we append them to the list is significant
365
- list(GET SIGNATURE_BACKENDS 0 DEFAULT_SIGNATURE_BACKEND)
366
- endif()
367
- set(ENABLE_SIGNATURES ON)
368
- endif()
369
- if (NOT DEFAULT_SIGNATURE_BACKEND)
370
- set(DEFAULT_SIGNATURE_BACKEND "None")
371
- endif()
372
-
373
- # Recent versions of poppler-data install a .pc file.
374
- # Use it to determine the encoding data path, if available.
375
- # Default to the same prefix otherwise.
376
- pkg_check_modules(POPPLER_DATA poppler-data)
377
- if(POPPLER_DATA_FOUND)
378
- execute_process(COMMAND "${PKG_CONFIG_EXECUTABLE}" --variable=poppler_datadir poppler-data
379
- RESULT_VARIABLE _result_var
380
- OUTPUT_VARIABLE _output_var OUTPUT_STRIP_TRAILING_WHITESPACE)
381
- if(_result_var STREQUAL "0" AND NOT _output_var STREQUAL "")
382
- set(POPPLER_DATADIR "${_output_var}")
383
- endif()
384
- endif()
385
- if(NOT DEFINED POPPLER_DATADIR)
386
- set(POPPLER_DATADIR "${CMAKE_INSTALL_PREFIX}/share/poppler")
387
- endif()
388
-
389
- if(EXTRA_WARN)
390
- set(CMAKE_C_FLAGS "-Wall ${CMAKE_C_FLAGS}")
391
- set(CMAKE_CXX_FLAGS "${DEFAULT_COMPILE_WARNINGS_EXTRA} ${CMAKE_CXX_FLAGS}")
392
- else()
393
- set(CMAKE_C_FLAGS "-Wall ${CMAKE_C_FLAGS}")
394
- set(CMAKE_CXX_FLAGS "${DEFAULT_COMPILE_WARNINGS} ${CMAKE_CXX_FLAGS}")
395
- endif()
396
-
397
- include(ConfigureChecks.cmake)
398
- configure_file(config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
399
- configure_file(poppler/poppler-config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/poppler/poppler-config.h)
400
-
401
- find_program(GPERF gperf)
402
- find_program(SED sed)
403
-
404
- set(poppler_SRCS
405
- goo/GooString.cc
406
- goo/GooTimer.cc
407
- goo/ImgWriter.cc
408
- goo/JpegWriter.cc
409
- goo/NetPBMWriter.cc
410
- goo/PNGWriter.cc
411
- goo/TiffWriter.cc
412
- goo/ft_utils.cc
413
- goo/gbase64.cc
414
- goo/gbasename.cc
415
- goo/gfile.cc
416
- goo/glibc.cc
417
- goo/glibc_strtok_r.cc
418
- goo/grandom.cc
419
- goo/gstrtod.cc
420
- fofi/FoFiBase.cc
421
- fofi/FoFiEncodings.cc
422
- fofi/FoFiTrueType.cc
423
- fofi/FoFiType1.cc
424
- fofi/FoFiType1C.cc
425
- fofi/FoFiIdentifier.cc
426
- poppler/Annot.cc
427
- poppler/AnnotStampImageHelper.cc
428
- poppler/Array.cc
429
- poppler/CachedFile.cc
430
- poppler/Catalog.cc
431
- poppler/CharCodeToUnicode.cc
432
- poppler/CMap.cc
433
- poppler/CryptoSignBackend.cc
434
- poppler/DateInfo.cc
435
- poppler/Decrypt.cc
436
- poppler/Dict.cc
437
- poppler/Error.cc
438
- poppler/FDPDFDocBuilder.cc
439
- poppler/FILECacheLoader.cc
440
- poppler/FileSpec.cc
441
- poppler/FlateEncoder.cc
442
- poppler/FontEncodingTables.cc
443
- poppler/Form.cc
444
- poppler/FontInfo.cc
445
- poppler/Function.cc
446
- poppler/Gfx.cc
447
- poppler/GfxFont.cc
448
- poppler/GfxState.cc
449
- poppler/GlobalParams.cc
450
- poppler/Hints.cc
451
- poppler/ImageEmbeddingUtils.cc
452
- poppler/JArithmeticDecoder.cc
453
- poppler/JBIG2Stream.cc
454
- poppler/JSInfo.cc
455
- poppler/Lexer.cc
456
- poppler/Link.cc
457
- poppler/Linearization.cc
458
- poppler/LocalPDFDocBuilder.cc
459
- poppler/MarkedContentOutputDev.cc
460
- poppler/NameToCharCode.cc
461
- poppler/Object.cc
462
- poppler/OptionalContent.cc
463
- poppler/Outline.cc
464
- poppler/OutputDev.cc
465
- poppler/Page.cc
466
- poppler/PageTransition.cc
467
- poppler/Parser.cc
468
- poppler/PDFDoc.cc
469
- poppler/PDFDocBuilder.cc
470
- poppler/PDFDocEncoding.cc
471
- poppler/PDFDocFactory.cc
472
- poppler/ProfileData.cc
473
- poppler/PreScanOutputDev.cc
474
- poppler/PSTokenizer.cc
475
- poppler/SignatureInfo.cc
476
- poppler/Stream.cc
477
- poppler/StructTreeRoot.cc
478
- poppler/StructElement.cc
479
- poppler/UnicodeMap.cc
480
- poppler/UnicodeMapFuncs.cc
481
- poppler/UnicodeTypeTable.cc
482
- poppler/UTF.cc
483
- poppler/XRef.cc
484
- poppler/PSOutputDev.cc
485
- poppler/TextOutputDev.cc
486
- poppler/PageLabelInfo.cc
487
- poppler/SecurityHandler.cc
488
- poppler/Sound.cc
489
- poppler/ViewerPreferences.cc
490
- poppler/Movie.cc
491
- poppler/Rendition.cc
492
- poppler/CertificateInfo.cc
493
- poppler/BBoxOutputDev.cc
494
- poppler/SplashOutputDev.cc
495
- splash/Splash.cc
496
- splash/SplashBitmap.cc
497
- splash/SplashClip.cc
498
- splash/SplashFTFont.cc
499
- splash/SplashFTFontEngine.cc
500
- splash/SplashFTFontFile.cc
501
- splash/SplashFont.cc
502
- splash/SplashFontEngine.cc
503
- splash/SplashFontFile.cc
504
- splash/SplashFontFileID.cc
505
- splash/SplashPath.cc
506
- splash/SplashPattern.cc
507
- splash/SplashScreen.cc
508
- splash/SplashState.cc
509
- splash/SplashXPath.cc
510
- splash/SplashXPathScanner.cc
511
- )
512
- set(poppler_LIBS Freetype::Freetype ZLIB::ZLIB)
513
- if(FONTCONFIG_FOUND)
514
- set(poppler_LIBS ${poppler_LIBS} Fontconfig::Fontconfig)
515
- endif()
516
-
517
- if(Androidlib)
518
- set(poppler_LIBS ${poppler_LIBS} ${Androidlib})
519
- endif()
520
-
521
- if(JPEG_FOUND)
522
- set(poppler_SRCS ${poppler_SRCS}
523
- poppler/DCTStream.cc
524
- )
525
- set(poppler_LIBS ${poppler_LIBS} JPEG::JPEG)
526
- endif()
527
- if(ENABLE_ZLIB_UNCOMPRESS)
528
- set(poppler_SRCS ${poppler_SRCS}
529
- poppler/FlateStream.cc
530
- )
531
- endif()
532
- if(ENABLE_LIBCURL)
533
- set(poppler_SRCS ${poppler_SRCS}
534
- poppler/CurlCachedFile.cc
535
- poppler/CurlPDFDocBuilder.cc
536
- )
537
- set(poppler_LIBS ${poppler_LIBS} CURL::libcurl)
538
- endif()
539
- if (ENABLE_NSS3)
540
- set(poppler_SRCS ${poppler_SRCS}
541
- poppler/NSSCryptoSignBackend.cc
542
- )
543
- set(poppler_LIBS ${poppler_LIBS} PkgConfig::NSS3)
544
- endif()
545
- if (ENABLE_GPGME)
546
- set(poppler_SRCS ${poppler_SRCS}
547
- poppler/GPGMECryptoSignBackend.cc
548
- )
549
- set(poppler_LIBS ${poppler_LIBS} Gpgmepp)
550
- endif()
551
- if (OpenJPEG_FOUND)
552
- set(poppler_SRCS ${poppler_SRCS}
553
- poppler/JPEG2000Stream.cc
554
- )
555
- set(poppler_LIBS ${poppler_LIBS} openjp2)
556
- else ()
557
- set(poppler_SRCS ${poppler_SRCS}
558
- poppler/JPXStream.cc
559
- )
560
- endif()
561
- if(USE_CMS)
562
- set(poppler_LIBS ${poppler_LIBS} ${LCMS2_LIBRARIES})
563
- endif()
564
- if(WIN32)
565
- # use clean APIs
566
- add_definitions(-DWIN32_LEAN_AND_MEAN)
567
- # gdi32 is needed under win32
568
- set(poppler_LIBS ${poppler_LIBS} gdi32)
569
- endif()
570
- if(PNG_FOUND)
571
- set(poppler_LIBS ${poppler_LIBS} PNG::PNG)
572
- endif()
573
- if(ENABLE_LIBTIFF)
574
- set(poppler_LIBS ${poppler_LIBS} TIFF::TIFF)
575
- endif()
576
- if(Boost_FOUND)
577
- set(poppler_LIBS ${poppler_LIBS} Boost::boost)
578
- endif()
579
-
580
- if (GPERF AND SED AND RUN_GPERF_IF_PRESENT)
581
- macro(ADD_GPERF_FILE input)
582
- add_custom_command(OUTPUT poppler/${input}.c
583
- COMMAND ${GPERF} poppler/${input}.gperf > ${CMAKE_CURRENT_BINARY_DIR}/poppler/${input}.c
584
- COMMAND ${GPERF} poppler/${input}.gperf > ${CMAKE_CURRENT_SOURCE_DIR}/poppler/${input}.pregenerated.c
585
- COMMAND ${SED} -i -e "s#${GPERF}#gperf#" ${CMAKE_CURRENT_SOURCE_DIR}/poppler/${input}.pregenerated.c
586
- COMMAND clang-format -i ${CMAKE_CURRENT_SOURCE_DIR}/poppler/${input}.pregenerated.c || true
587
- DEPENDS poppler/${input}.gperf
588
- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
589
-
590
- set(poppler_SRCS ${poppler_SRCS}
591
- poppler/${input}.c
592
- )
593
- endmacro()
594
- else()
595
- macro(ADD_GPERF_FILE input)
596
- set(poppler_SRCS ${poppler_SRCS}
597
- poppler/${input}.pregenerated.c
598
- )
599
- endmacro()
600
- endif()
601
-
602
- ADD_GPERF_FILE(CourierWidths)
603
- ADD_GPERF_FILE(CourierBoldWidths)
604
- ADD_GPERF_FILE(CourierBoldObliqueWidths)
605
- ADD_GPERF_FILE(CourierObliqueWidths)
606
- ADD_GPERF_FILE(HelveticaWidths)
607
- ADD_GPERF_FILE(HelveticaBoldWidths)
608
- ADD_GPERF_FILE(HelveticaBoldObliqueWidths)
609
- ADD_GPERF_FILE(HelveticaObliqueWidths)
610
- ADD_GPERF_FILE(SymbolWidths)
611
- ADD_GPERF_FILE(TimesBoldWidths)
612
- ADD_GPERF_FILE(TimesBoldItalicWidths)
613
- ADD_GPERF_FILE(TimesItalicWidths)
614
- ADD_GPERF_FILE(TimesRomanWidths)
615
- ADD_GPERF_FILE(ZapfDingbatsWidths)
616
-
617
- set(POPPLER_SOVERSION_NUMBER "133")
618
-
619
- set(LINKER_SCRIPT "${CMAKE_BINARY_DIR}/libpoppler.map")
620
- configure_file(
621
- "${CMAKE_SOURCE_DIR}/poppler/libpoppler.map.in"
622
- ${LINKER_SCRIPT})
623
-
624
- if(MSVC)
625
- add_definitions(-D_CRT_SECURE_NO_WARNINGS)
626
- endif()
627
- add_library(poppler ${poppler_SRCS} ${LINKER_SCRIPT})
628
- if (OpenJPEG_FOUND)
629
- # check if we can remove this when we depend on newer openjpeg versions, 2.5 seems fixed
630
- # target openjp2 may lack interface include directories
631
- target_include_directories(poppler SYSTEM PRIVATE ${OPENJPEG_INCLUDE_DIRS})
632
- endif()
633
- if(USE_CMS)
634
- target_include_directories(poppler SYSTEM PRIVATE ${LCMS2_INCLUDE_DIR})
635
- endif()
636
- generate_export_header(poppler BASE_NAME poppler-private EXPORT_FILE_NAME "${CMAKE_CURRENT_BINARY_DIR}/poppler_private_export.h")
637
- set_target_properties(poppler PROPERTIES
638
- VERSION ${POPPLER_SOVERSION_NUMBER}.0.0
639
- SOVERSION ${POPPLER_SOVERSION_NUMBER})
640
-
641
- if(UNIX AND (NOT APPLE))
642
- file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/linkerscript_test.map "VERS_1 {\nglobal:\n *;};\n")
643
-
644
- # once we require cmake 3.18,
645
- # the next set of lines can be changed
646
- # to the check_linker_flags function instead
647
- include(CheckCXXSourceCompiles)
648
- set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
649
- set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS} -Wl,--version-script=${CMAKE_CURRENT_BINARY_DIR}/linkerscript_test.map)
650
- check_cxx_source_compiles("
651
- int main(int, char**) {
652
- return 0;
653
- }
654
- " SUPPORT_VERSION_SCRIPT)
655
- set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS})
656
-
657
- file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/linkerscript_test.map)
658
- if (SUPPORT_VERSION_SCRIPT)
659
- set_target_properties(poppler PROPERTIES LINK_OPTIONS LINKER:--version-script=${LINKER_SCRIPT})
660
- endif()
661
- endif()
662
- if(MINGW AND BUILD_SHARED_LIBS)
663
- get_target_property(POPPLER_SOVERSION poppler SOVERSION)
664
- set_target_properties(poppler PROPERTIES SUFFIX "-${POPPLER_SOVERSION}${CMAKE_SHARED_LIBRARY_SUFFIX}")
665
- endif()
666
- target_link_libraries(poppler LINK_PRIVATE ${poppler_LIBS})
667
- install(TARGETS poppler RUNTIME DESTINATION bin LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
668
-
669
- if(ENABLE_UNSTABLE_API_ABI_HEADERS)
670
- install(FILES
671
- poppler/Annot.h
672
- poppler/AnnotStampImageHelper.h
673
- poppler/Array.h
674
- poppler/CachedFile.h
675
- poppler/Catalog.h
676
- poppler/CharCodeToUnicode.h
677
- poppler/CMap.h
678
- poppler/DateInfo.h
679
- poppler/Decrypt.h
680
- poppler/Dict.h
681
- poppler/Error.h
682
- poppler/FDPDFDocBuilder.h
683
- poppler/FILECacheLoader.h
684
- poppler/FileSpec.h
685
- poppler/FontEncodingTables.h
686
- poppler/FontInfo.h
687
- poppler/Form.h
688
- poppler/Function.h
689
- poppler/Gfx.h
690
- poppler/GfxFont.h
691
- poppler/GfxState.h
692
- poppler/GfxState_helpers.h
693
- poppler/GlobalParams.h
694
- poppler/Hints.h
695
- poppler/JArithmeticDecoder.h
696
- poppler/JBIG2Stream.h
697
- poppler/JSInfo.h
698
- poppler/Lexer.h
699
- poppler/Link.h
700
- poppler/Linearization.h
701
- poppler/LocalPDFDocBuilder.h
702
- poppler/MarkedContentOutputDev.h
703
- poppler/Movie.h
704
- poppler/NameToCharCode.h
705
- poppler/Object.h
706
- poppler/OptionalContent.h
707
- poppler/Outline.h
708
- poppler/OutputDev.h
709
- poppler/Page.h
710
- poppler/PageTransition.h
711
- poppler/Parser.h
712
- poppler/PDFDoc.h
713
- poppler/PDFDocBuilder.h
714
- poppler/PDFDocEncoding.h
715
- poppler/PDFDocFactory.h
716
- poppler/PopplerCache.h
717
- poppler/ProfileData.h
718
- poppler/PreScanOutputDev.h
719
- poppler/PSTokenizer.h
720
- poppler/Rendition.h
721
- poppler/CertificateInfo.h
722
- poppler/Stream-CCITT.h
723
- poppler/Stream.h
724
- poppler/StructElement.h
725
- poppler/StructTreeRoot.h
726
- poppler/UnicodeMap.h
727
- poppler/UnicodeMapFuncs.h
728
- poppler/UnicodeMapTables.h
729
- poppler/UnicodeTypeTable.h
730
- poppler/UnicodeCClassTables.h
731
- poppler/UnicodeCompTables.h
732
- poppler/UnicodeDecompTables.h
733
- poppler/ViewerPreferences.h
734
- poppler/XRef.h
735
- poppler/CharTypes.h
736
- poppler/ErrorCodes.h
737
- poppler/NameToUnicodeTable.h
738
- poppler/PSOutputDev.h
739
- poppler/TextOutputDev.h
740
- poppler/SecurityHandler.h
741
- poppler/BBoxOutputDev.h
742
- poppler/UTF.h
743
- poppler/Sound.h
744
- ${CMAKE_CURRENT_BINARY_DIR}/poppler_private_export.h
745
- ${CMAKE_CURRENT_BINARY_DIR}/poppler/poppler-config.h
746
- poppler/SplashOutputDev.h
747
- DESTINATION include/poppler)
748
- install(FILES
749
- goo/GooTimer.h
750
- goo/GooString.h
751
- goo/gmem.h
752
- goo/gdir.h
753
- goo/gfile.h
754
- goo/ImgWriter.h
755
- goo/GooCheckedOps.h
756
- goo/GooLikely.h
757
- goo/gstrtod.h
758
- goo/grandom.h
759
- DESTINATION include/poppler/goo)
760
- if(PNG_FOUND)
761
- install(FILES
762
- goo/PNGWriter.h
763
- DESTINATION include/poppler/goo)
764
- endif()
765
- if(ENABLE_LIBTIFF)
766
- install(FILES
767
- goo/TiffWriter.h
768
- DESTINATION include/poppler/goo)
769
- endif()
770
- if(JPEG_FOUND)
771
- install(FILES
772
- goo/JpegWriter.h
773
- DESTINATION include/poppler/goo)
774
- endif()
775
- install(FILES
776
- fofi/FoFiBase.h
777
- fofi/FoFiEncodings.h
778
- fofi/FoFiTrueType.h
779
- fofi/FoFiType1.h
780
- fofi/FoFiType1C.h
781
- fofi/FoFiIdentifier.h
782
- DESTINATION include/poppler/fofi)
783
- if(ENABLE_LIBCURL)
784
- install(FILES
785
- poppler/CurlCachedFile.h
786
- poppler/CurlPDFDocBuilder.h
787
- DESTINATION include/poppler)
788
- endif()
789
- if(OpenJPEG_FOUND)
790
- install(FILES
791
- poppler/JPEG2000Stream.h
792
- DESTINATION include/poppler)
793
- else()
794
- install(FILES
795
- poppler/JPXStream.h
796
- DESTINATION include/poppler)
797
- endif()
798
- install(FILES
799
- splash/Splash.h
800
- splash/SplashBitmap.h
801
- splash/SplashClip.h
802
- splash/SplashErrorCodes.h
803
- splash/SplashFTFont.h
804
- splash/SplashFTFontEngine.h
805
- splash/SplashFTFontFile.h
806
- splash/SplashFont.h
807
- splash/SplashFontEngine.h
808
- splash/SplashFontFile.h
809
- splash/SplashFontFileID.h
810
- splash/SplashGlyphBitmap.h
811
- splash/SplashMath.h
812
- splash/SplashPath.h
813
- splash/SplashPattern.h
814
- splash/SplashScreen.h
815
- splash/SplashState.h
816
- splash/SplashTypes.h
817
- splash/SplashXPath.h
818
- splash/SplashXPathScanner.h
819
- DESTINATION include/poppler/splash)
820
- if(CAIRO_FOUND)
821
- install(FILES
822
- poppler/CairoFontEngine.h
823
- poppler/CairoOutputDev.h
824
- poppler/CairoRescaleBox.h
825
- DESTINATION include/poppler)
826
- endif()
827
- endif()
828
-
829
-
830
- if(ENABLE_UTILS)
831
- add_subdirectory(utils)
832
- endif()
833
- if(ENABLE_GLIB)
834
- add_subdirectory(glib)
835
- endif()
836
- if (BUILD_MANUAL_TESTS)
837
- add_subdirectory(test)
838
- endif()
839
- if(ENABLE_QT5)
840
- add_subdirectory(qt5)
841
- endif()
842
- if(ENABLE_QT6)
843
- add_subdirectory(qt6)
844
- endif()
845
- if(ENABLE_CPP)
846
- add_subdirectory(cpp)
847
- endif()
848
-
849
- # Configure "Requires" field & install .pc files for packagers
850
- set(PC_REQUIRES "")
851
- set(PC_REQUIRES_PRIVATE "Requires.private: poppler = ${POPPLER_VERSION}")
852
-
853
- if(PKG_CONFIG_EXECUTABLE)
854
- poppler_create_install_pkgconfig(poppler.pc ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
855
- if(ENABLE_QT5)
856
- poppler_create_install_pkgconfig(poppler-qt5.pc ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
857
- endif()
858
- if(ENABLE_QT6)
859
- poppler_create_install_pkgconfig(poppler-qt6.pc ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
860
- endif()
861
- if(ENABLE_GLIB)
862
- poppler_create_install_pkgconfig(poppler-glib.pc ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
863
- endif()
864
- if(ENABLE_CPP)
865
- poppler_create_install_pkgconfig(poppler-cpp.pc ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
866
- endif()
867
- else()
868
- MESSAGE(STATUS ".pc files will not be installed becasue of missing 'pkg-config'!")
869
- endif()
870
-
871
- # Summarize build options & display warnings for user
872
- message("Building Poppler with support for:")
873
- show_end_message("font configuration" ${font_configuration})
874
- show_end_message_yesno("use boost (Splash)" ENABLE_BOOST)
875
- show_end_message_yesno("cairo output" CAIRO_FOUND)
876
- show_end_message_yesno("qt5 wrapper" ENABLE_QT5)
877
- show_end_message_yesno("qt6 wrapper" ENABLE_QT6)
878
- show_end_message_yesno("glib wrapper" ENABLE_GLIB)
879
- show_end_message_yesno(" introspection" INTROSPECTION_FOUND)
880
- show_end_message_yesno(" gtk-doc" ENABLE_GTK_DOC)
881
- show_end_message_yesno("cpp wrapper" ENABLE_CPP)
882
- show_end_message_yesno("use libjpeg" ENABLE_LIBJPEG)
883
- show_end_message_yesno("use libpng" ENABLE_LIBPNG)
884
- show_end_message_yesno("use libtiff" ENABLE_LIBTIFF)
885
- show_end_message_yesno("use zlib uncompress" ENABLE_ZLIB_UNCOMPRESS)
886
- show_end_message_yesno("use nss3" ENABLE_NSS3)
887
- show_end_message_yesno("use gpg" ENABLE_GPGME)
888
- show_end_message(" default signature backend" ${DEFAULT_SIGNATURE_BACKEND})
889
- show_end_message_yesno("use curl" ENABLE_LIBCURL)
890
- show_end_message_yesno("use libopenjpeg2" WITH_OPENJPEG)
891
- show_end_message_yesno("use lcms2" USE_CMS)
892
- show_end_message_yesno("command line utils" ENABLE_UTILS)
893
- show_end_message_yesno("fuzz target" ENABLE_FUZZER)
894
- show_end_message("test data dir" ${TESTDATADIR})
895
-
896
- if(NOT ENABLE_LIBJPEG AND HAVE_DCT_DECODER)
897
- message("Warning: Using libjpeg is recommended. The internal DCT decoder is unmaintained.")
898
- endif()
899
-
900
- if(NOT HAVE_DCT_DECODER)
901
- message("Warning: You're not compiling any DCT decoder. Some files will fail to display properly.")
902
- endif()
903
-
904
- if(ENABLE_ZLIB_UNCOMPRESS)
905
- message("Warning: Using zlib is not totally safe")
906
- endif()
907
-
908
- if(NOT WITH_OPENJPEG AND HAVE_JPX_DECODER)
909
- message("Warning: Using libopenjpeg2 is recommended. The internal JPX decoder is unmaintained.")
910
- endif()
911
-
912
- if(NOT HAVE_JPX_DECODER)
913
- message("Warning: You're not compiling any JPX decoder. Some files will fail to display properly.")
914
- endif()
915
-
916
- if(NOT ENABLE_BOOST)
917
- message("Warning: Use of boost is recommended for better performance.")
918
- endif()
919
-
920
- set(ARCHIVE_NAME ${CMAKE_PROJECT_NAME}-${POPPLER_VERSION})
921
- add_custom_target(dist
922
- COMMAND
923
- COMMAND git log --stat | fmt --split-only > ${CMAKE_BINARY_DIR}/ChangeLog
924
- COMMAND git archive --prefix=${ARCHIVE_NAME}/ HEAD > ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar
925
- COMMAND tar -C ${CMAKE_BINARY_DIR} -rf ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar ChangeLog --transform='s,,${ARCHIVE_NAME}/,' --owner root:0 --group root:0
926
- COMMAND tar -C ${CMAKE_BINARY_DIR} -rf ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar glib/reference/html --transform='s,,${ARCHIVE_NAME}/,' --owner root:0 --group root:0
927
- COMMAND xz -9 ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar
928
- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/COPYING DELETED
@@ -1,339 +0,0 @@
1
- GNU GENERAL PUBLIC LICENSE
2
- Version 2, June 1991
3
-
4
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
5
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
6
- Everyone is permitted to copy and distribute verbatim copies
7
- of this license document, but changing it is not allowed.
8
-
9
- Preamble
10
-
11
- The licenses for most software are designed to take away your
12
- freedom to share and change it. By contrast, the GNU General Public
13
- License is intended to guarantee your freedom to share and change free
14
- software--to make sure the software is free for all its users. This
15
- General Public License applies to most of the Free Software
16
- Foundation's software and to any other program whose authors commit to
17
- using it. (Some other Free Software Foundation software is covered by
18
- the GNU Lesser General Public License instead.) You can apply it to
19
- your programs, too.
20
-
21
- When we speak of free software, we are referring to freedom, not
22
- price. Our General Public Licenses are designed to make sure that you
23
- have the freedom to distribute copies of free software (and charge for
24
- this service if you wish), that you receive source code or can get it
25
- if you want it, that you can change the software or use pieces of it
26
- in new free programs; and that you know you can do these things.
27
-
28
- To protect your rights, we need to make restrictions that forbid
29
- anyone to deny you these rights or to ask you to surrender the rights.
30
- These restrictions translate to certain responsibilities for you if you
31
- distribute copies of the software, or if you modify it.
32
-
33
- For example, if you distribute copies of such a program, whether
34
- gratis or for a fee, you must give the recipients all the rights that
35
- you have. You must make sure that they, too, receive or can get the
36
- source code. And you must show them these terms so they know their
37
- rights.
38
-
39
- We protect your rights with two steps: (1) copyright the software, and
40
- (2) offer you this license which gives you legal permission to copy,
41
- distribute and/or modify the software.
42
-
43
- Also, for each author's protection and ours, we want to make certain
44
- that everyone understands that there is no warranty for this free
45
- software. If the software is modified by someone else and passed on, we
46
- want its recipients to know that what they have is not the original, so
47
- that any problems introduced by others will not reflect on the original
48
- authors' reputations.
49
-
50
- Finally, any free program is threatened constantly by software
51
- patents. We wish to avoid the danger that redistributors of a free
52
- program will individually obtain patent licenses, in effect making the
53
- program proprietary. To prevent this, we have made it clear that any
54
- patent must be licensed for everyone's free use or not licensed at all.
55
-
56
- The precise terms and conditions for copying, distribution and
57
- modification follow.
58
-
59
- GNU GENERAL PUBLIC LICENSE
60
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
61
-
62
- 0. This License applies to any program or other work which contains
63
- a notice placed by the copyright holder saying it may be distributed
64
- under the terms of this General Public License. The "Program", below,
65
- refers to any such program or work, and a "work based on the Program"
66
- means either the Program or any derivative work under copyright law:
67
- that is to say, a work containing the Program or a portion of it,
68
- either verbatim or with modifications and/or translated into another
69
- language. (Hereinafter, translation is included without limitation in
70
- the term "modification".) Each licensee is addressed as "you".
71
-
72
- Activities other than copying, distribution and modification are not
73
- covered by this License; they are outside its scope. The act of
74
- running the Program is not restricted, and the output from the Program
75
- is covered only if its contents constitute a work based on the
76
- Program (independent of having been made by running the Program).
77
- Whether that is true depends on what the Program does.
78
-
79
- 1. You may copy and distribute verbatim copies of the Program's
80
- source code as you receive it, in any medium, provided that you
81
- conspicuously and appropriately publish on each copy an appropriate
82
- copyright notice and disclaimer of warranty; keep intact all the
83
- notices that refer to this License and to the absence of any warranty;
84
- and give any other recipients of the Program a copy of this License
85
- along with the Program.
86
-
87
- You may charge a fee for the physical act of transferring a copy, and
88
- you may at your option offer warranty protection in exchange for a fee.
89
-
90
- 2. You may modify your copy or copies of the Program or any portion
91
- of it, thus forming a work based on the Program, and copy and
92
- distribute such modifications or work under the terms of Section 1
93
- above, provided that you also meet all of these conditions:
94
-
95
- a) You must cause the modified files to carry prominent notices
96
- stating that you changed the files and the date of any change.
97
-
98
- b) You must cause any work that you distribute or publish, that in
99
- whole or in part contains or is derived from the Program or any
100
- part thereof, to be licensed as a whole at no charge to all third
101
- parties under the terms of this License.
102
-
103
- c) If the modified program normally reads commands interactively
104
- when run, you must cause it, when started running for such
105
- interactive use in the most ordinary way, to print or display an
106
- announcement including an appropriate copyright notice and a
107
- notice that there is no warranty (or else, saying that you provide
108
- a warranty) and that users may redistribute the program under
109
- these conditions, and telling the user how to view a copy of this
110
- License. (Exception: if the Program itself is interactive but
111
- does not normally print such an announcement, your work based on
112
- the Program is not required to print an announcement.)
113
-
114
- These requirements apply to the modified work as a whole. If
115
- identifiable sections of that work are not derived from the Program,
116
- and can be reasonably considered independent and separate works in
117
- themselves, then this License, and its terms, do not apply to those
118
- sections when you distribute them as separate works. But when you
119
- distribute the same sections as part of a whole which is a work based
120
- on the Program, the distribution of the whole must be on the terms of
121
- this License, whose permissions for other licensees extend to the
122
- entire whole, and thus to each and every part regardless of who wrote it.
123
-
124
- Thus, it is not the intent of this section to claim rights or contest
125
- your rights to work written entirely by you; rather, the intent is to
126
- exercise the right to control the distribution of derivative or
127
- collective works based on the Program.
128
-
129
- In addition, mere aggregation of another work not based on the Program
130
- with the Program (or with a work based on the Program) on a volume of
131
- a storage or distribution medium does not bring the other work under
132
- the scope of this License.
133
-
134
- 3. You may copy and distribute the Program (or a work based on it,
135
- under Section 2) in object code or executable form under the terms of
136
- Sections 1 and 2 above provided that you also do one of the following:
137
-
138
- a) Accompany it with the complete corresponding machine-readable
139
- source code, which must be distributed under the terms of Sections
140
- 1 and 2 above on a medium customarily used for software interchange; or,
141
-
142
- b) Accompany it with a written offer, valid for at least three
143
- years, to give any third party, for a charge no more than your
144
- cost of physically performing source distribution, a complete
145
- machine-readable copy of the corresponding source code, to be
146
- distributed under the terms of Sections 1 and 2 above on a medium
147
- customarily used for software interchange; or,
148
-
149
- c) Accompany it with the information you received as to the offer
150
- to distribute corresponding source code. (This alternative is
151
- allowed only for noncommercial distribution and only if you
152
- received the program in object code or executable form with such
153
- an offer, in accord with Subsection b above.)
154
-
155
- The source code for a work means the preferred form of the work for
156
- making modifications to it. For an executable work, complete source
157
- code means all the source code for all modules it contains, plus any
158
- associated interface definition files, plus the scripts used to
159
- control compilation and installation of the executable. However, as a
160
- special exception, the source code distributed need not include
161
- anything that is normally distributed (in either source or binary
162
- form) with the major components (compiler, kernel, and so on) of the
163
- operating system on which the executable runs, unless that component
164
- itself accompanies the executable.
165
-
166
- If distribution of executable or object code is made by offering
167
- access to copy from a designated place, then offering equivalent
168
- access to copy the source code from the same place counts as
169
- distribution of the source code, even though third parties are not
170
- compelled to copy the source along with the object code.
171
-
172
- 4. You may not copy, modify, sublicense, or distribute the Program
173
- except as expressly provided under this License. Any attempt
174
- otherwise to copy, modify, sublicense or distribute the Program is
175
- void, and will automatically terminate your rights under this License.
176
- However, parties who have received copies, or rights, from you under
177
- this License will not have their licenses terminated so long as such
178
- parties remain in full compliance.
179
-
180
- 5. You are not required to accept this License, since you have not
181
- signed it. However, nothing else grants you permission to modify or
182
- distribute the Program or its derivative works. These actions are
183
- prohibited by law if you do not accept this License. Therefore, by
184
- modifying or distributing the Program (or any work based on the
185
- Program), you indicate your acceptance of this License to do so, and
186
- all its terms and conditions for copying, distributing or modifying
187
- the Program or works based on it.
188
-
189
- 6. Each time you redistribute the Program (or any work based on the
190
- Program), the recipient automatically receives a license from the
191
- original licensor to copy, distribute or modify the Program subject to
192
- these terms and conditions. You may not impose any further
193
- restrictions on the recipients' exercise of the rights granted herein.
194
- You are not responsible for enforcing compliance by third parties to
195
- this License.
196
-
197
- 7. If, as a consequence of a court judgment or allegation of patent
198
- infringement or for any other reason (not limited to patent issues),
199
- conditions are imposed on you (whether by court order, agreement or
200
- otherwise) that contradict the conditions of this License, they do not
201
- excuse you from the conditions of this License. If you cannot
202
- distribute so as to satisfy simultaneously your obligations under this
203
- License and any other pertinent obligations, then as a consequence you
204
- may not distribute the Program at all. For example, if a patent
205
- license would not permit royalty-free redistribution of the Program by
206
- all those who receive copies directly or indirectly through you, then
207
- the only way you could satisfy both it and this License would be to
208
- refrain entirely from distribution of the Program.
209
-
210
- If any portion of this section is held invalid or unenforceable under
211
- any particular circumstance, the balance of the section is intended to
212
- apply and the section as a whole is intended to apply in other
213
- circumstances.
214
-
215
- It is not the purpose of this section to induce you to infringe any
216
- patents or other property right claims or to contest validity of any
217
- such claims; this section has the sole purpose of protecting the
218
- integrity of the free software distribution system, which is
219
- implemented by public license practices. Many people have made
220
- generous contributions to the wide range of software distributed
221
- through that system in reliance on consistent application of that
222
- system; it is up to the author/donor to decide if he or she is willing
223
- to distribute software through any other system and a licensee cannot
224
- impose that choice.
225
-
226
- This section is intended to make thoroughly clear what is believed to
227
- be a consequence of the rest of this License.
228
-
229
- 8. If the distribution and/or use of the Program is restricted in
230
- certain countries either by patents or by copyrighted interfaces, the
231
- original copyright holder who places the Program under this License
232
- may add an explicit geographical distribution limitation excluding
233
- those countries, so that distribution is permitted only in or among
234
- countries not thus excluded. In such case, this License incorporates
235
- the limitation as if written in the body of this License.
236
-
237
- 9. The Free Software Foundation may publish revised and/or new versions
238
- of the General Public License from time to time. Such new versions will
239
- be similar in spirit to the present version, but may differ in detail to
240
- address new problems or concerns.
241
-
242
- Each version is given a distinguishing version number. If the Program
243
- specifies a version number of this License which applies to it and "any
244
- later version", you have the option of following the terms and conditions
245
- either of that version or of any later version published by the Free
246
- Software Foundation. If the Program does not specify a version number of
247
- this License, you may choose any version ever published by the Free Software
248
- Foundation.
249
-
250
- 10. If you wish to incorporate parts of the Program into other free
251
- programs whose distribution conditions are different, write to the author
252
- to ask for permission. For software which is copyrighted by the Free
253
- Software Foundation, write to the Free Software Foundation; we sometimes
254
- make exceptions for this. Our decision will be guided by the two goals
255
- of preserving the free status of all derivatives of our free software and
256
- of promoting the sharing and reuse of software generally.
257
-
258
- NO WARRANTY
259
-
260
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
261
- FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
262
- OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
263
- PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
264
- OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
265
- MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
266
- TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
267
- PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
268
- REPAIR OR CORRECTION.
269
-
270
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
271
- WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
272
- REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
273
- INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
274
- OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
275
- TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
276
- YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
277
- PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
278
- POSSIBILITY OF SUCH DAMAGES.
279
-
280
- END OF TERMS AND CONDITIONS
281
-
282
- How to Apply These Terms to Your New Programs
283
-
284
- If you develop a new program, and you want it to be of the greatest
285
- possible use to the public, the best way to achieve this is to make it
286
- free software which everyone can redistribute and change under these terms.
287
-
288
- To do so, attach the following notices to the program. It is safest
289
- to attach them to the start of each source file to most effectively
290
- convey the exclusion of warranty; and each file should have at least
291
- the "copyright" line and a pointer to where the full notice is found.
292
-
293
- <one line to give the program's name and a brief idea of what it does.>
294
- Copyright (C) <year> <name of author>
295
-
296
- This program is free software; you can redistribute it and/or modify
297
- it under the terms of the GNU General Public License as published by
298
- the Free Software Foundation; either version 2 of the License, or
299
- (at your option) any later version.
300
-
301
- This program is distributed in the hope that it will be useful,
302
- but WITHOUT ANY WARRANTY; without even the implied warranty of
303
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
304
- GNU General Public License for more details.
305
-
306
- You should have received a copy of the GNU General Public License along
307
- with this program; if not, write to the Free Software Foundation, Inc.,
308
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
309
-
310
- Also add information on how to contact you by electronic and paper mail.
311
-
312
- If the program is interactive, make it output a short notice like this
313
- when it starts in an interactive mode:
314
-
315
- Gnomovision version 69, Copyright (C) year name of author
316
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
317
- This is free software, and you are welcome to redistribute it
318
- under certain conditions; type `show c' for details.
319
-
320
- The hypothetical commands `show w' and `show c' should show the appropriate
321
- parts of the General Public License. Of course, the commands you use may
322
- be called something other than `show w' and `show c'; they could even be
323
- mouse-clicks or menu items--whatever suits your program.
324
-
325
- You should also get your employer (if you work as a programmer) or your
326
- school, if any, to sign a "copyright disclaimer" for the program, if
327
- necessary. Here is a sample; alter the names:
328
-
329
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
330
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
331
-
332
- <signature of Ty Coon>, 1 April 1989
333
- Ty Coon, President of Vice
334
-
335
- This General Public License does not permit incorporating your program into
336
- proprietary programs. If your program is a subroutine library, you may
337
- consider it more useful to permit linking proprietary applications with the
338
- library. If this is what you want to do, use the GNU Lesser General
339
- Public License instead of this License.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/COPYING3 DELETED
@@ -1,674 +0,0 @@
1
- GNU GENERAL PUBLIC LICENSE
2
- Version 3, 29 June 2007
3
-
4
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
5
- Everyone is permitted to copy and distribute verbatim copies
6
- of this license document, but changing it is not allowed.
7
-
8
- Preamble
9
-
10
- The GNU General Public License is a free, copyleft license for
11
- software and other kinds of works.
12
-
13
- The licenses for most software and other practical works are designed
14
- to take away your freedom to share and change the works. By contrast,
15
- the GNU General Public License is intended to guarantee your freedom to
16
- share and change all versions of a program--to make sure it remains free
17
- software for all its users. We, the Free Software Foundation, use the
18
- GNU General Public License for most of our software; it applies also to
19
- any other work released this way by its authors. You can apply it to
20
- your programs, too.
21
-
22
- When we speak of free software, we are referring to freedom, not
23
- price. Our General Public Licenses are designed to make sure that you
24
- have the freedom to distribute copies of free software (and charge for
25
- them if you wish), that you receive source code or can get it if you
26
- want it, that you can change the software or use pieces of it in new
27
- free programs, and that you know you can do these things.
28
-
29
- To protect your rights, we need to prevent others from denying you
30
- these rights or asking you to surrender the rights. Therefore, you have
31
- certain responsibilities if you distribute copies of the software, or if
32
- you modify it: responsibilities to respect the freedom of others.
33
-
34
- For example, if you distribute copies of such a program, whether
35
- gratis or for a fee, you must pass on to the recipients the same
36
- freedoms that you received. You must make sure that they, too, receive
37
- or can get the source code. And you must show them these terms so they
38
- know their rights.
39
-
40
- Developers that use the GNU GPL protect your rights with two steps:
41
- (1) assert copyright on the software, and (2) offer you this License
42
- giving you legal permission to copy, distribute and/or modify it.
43
-
44
- For the developers' and authors' protection, the GPL clearly explains
45
- that there is no warranty for this free software. For both users' and
46
- authors' sake, the GPL requires that modified versions be marked as
47
- changed, so that their problems will not be attributed erroneously to
48
- authors of previous versions.
49
-
50
- Some devices are designed to deny users access to install or run
51
- modified versions of the software inside them, although the manufacturer
52
- can do so. This is fundamentally incompatible with the aim of
53
- protecting users' freedom to change the software. The systematic
54
- pattern of such abuse occurs in the area of products for individuals to
55
- use, which is precisely where it is most unacceptable. Therefore, we
56
- have designed this version of the GPL to prohibit the practice for those
57
- products. If such problems arise substantially in other domains, we
58
- stand ready to extend this provision to those domains in future versions
59
- of the GPL, as needed to protect the freedom of users.
60
-
61
- Finally, every program is threatened constantly by software patents.
62
- States should not allow patents to restrict development and use of
63
- software on general-purpose computers, but in those that do, we wish to
64
- avoid the special danger that patents applied to a free program could
65
- make it effectively proprietary. To prevent this, the GPL assures that
66
- patents cannot be used to render the program non-free.
67
-
68
- The precise terms and conditions for copying, distribution and
69
- modification follow.
70
-
71
- TERMS AND CONDITIONS
72
-
73
- 0. Definitions.
74
-
75
- "This License" refers to version 3 of the GNU General Public License.
76
-
77
- "Copyright" also means copyright-like laws that apply to other kinds of
78
- works, such as semiconductor masks.
79
-
80
- "The Program" refers to any copyrightable work licensed under this
81
- License. Each licensee is addressed as "you". "Licensees" and
82
- "recipients" may be individuals or organizations.
83
-
84
- To "modify" a work means to copy from or adapt all or part of the work
85
- in a fashion requiring copyright permission, other than the making of an
86
- exact copy. The resulting work is called a "modified version" of the
87
- earlier work or a work "based on" the earlier work.
88
-
89
- A "covered work" means either the unmodified Program or a work based
90
- on the Program.
91
-
92
- To "propagate" a work means to do anything with it that, without
93
- permission, would make you directly or secondarily liable for
94
- infringement under applicable copyright law, except executing it on a
95
- computer or modifying a private copy. Propagation includes copying,
96
- distribution (with or without modification), making available to the
97
- public, and in some countries other activities as well.
98
-
99
- To "convey" a work means any kind of propagation that enables other
100
- parties to make or receive copies. Mere interaction with a user through
101
- a computer network, with no transfer of a copy, is not conveying.
102
-
103
- An interactive user interface displays "Appropriate Legal Notices"
104
- to the extent that it includes a convenient and prominently visible
105
- feature that (1) displays an appropriate copyright notice, and (2)
106
- tells the user that there is no warranty for the work (except to the
107
- extent that warranties are provided), that licensees may convey the
108
- work under this License, and how to view a copy of this License. If
109
- the interface presents a list of user commands or options, such as a
110
- menu, a prominent item in the list meets this criterion.
111
-
112
- 1. Source Code.
113
-
114
- The "source code" for a work means the preferred form of the work
115
- for making modifications to it. "Object code" means any non-source
116
- form of a work.
117
-
118
- A "Standard Interface" means an interface that either is an official
119
- standard defined by a recognized standards body, or, in the case of
120
- interfaces specified for a particular programming language, one that
121
- is widely used among developers working in that language.
122
-
123
- The "System Libraries" of an executable work include anything, other
124
- than the work as a whole, that (a) is included in the normal form of
125
- packaging a Major Component, but which is not part of that Major
126
- Component, and (b) serves only to enable use of the work with that
127
- Major Component, or to implement a Standard Interface for which an
128
- implementation is available to the public in source code form. A
129
- "Major Component", in this context, means a major essential component
130
- (kernel, window system, and so on) of the specific operating system
131
- (if any) on which the executable work runs, or a compiler used to
132
- produce the work, or an object code interpreter used to run it.
133
-
134
- The "Corresponding Source" for a work in object code form means all
135
- the source code needed to generate, install, and (for an executable
136
- work) run the object code and to modify the work, including scripts to
137
- control those activities. However, it does not include the work's
138
- System Libraries, or general-purpose tools or generally available free
139
- programs which are used unmodified in performing those activities but
140
- which are not part of the work. For example, Corresponding Source
141
- includes interface definition files associated with source files for
142
- the work, and the source code for shared libraries and dynamically
143
- linked subprograms that the work is specifically designed to require,
144
- such as by intimate data communication or control flow between those
145
- subprograms and other parts of the work.
146
-
147
- The Corresponding Source need not include anything that users
148
- can regenerate automatically from other parts of the Corresponding
149
- Source.
150
-
151
- The Corresponding Source for a work in source code form is that
152
- same work.
153
-
154
- 2. Basic Permissions.
155
-
156
- All rights granted under this License are granted for the term of
157
- copyright on the Program, and are irrevocable provided the stated
158
- conditions are met. This License explicitly affirms your unlimited
159
- permission to run the unmodified Program. The output from running a
160
- covered work is covered by this License only if the output, given its
161
- content, constitutes a covered work. This License acknowledges your
162
- rights of fair use or other equivalent, as provided by copyright law.
163
-
164
- You may make, run and propagate covered works that you do not
165
- convey, without conditions so long as your license otherwise remains
166
- in force. You may convey covered works to others for the sole purpose
167
- of having them make modifications exclusively for you, or provide you
168
- with facilities for running those works, provided that you comply with
169
- the terms of this License in conveying all material for which you do
170
- not control copyright. Those thus making or running the covered works
171
- for you must do so exclusively on your behalf, under your direction
172
- and control, on terms that prohibit them from making any copies of
173
- your copyrighted material outside their relationship with you.
174
-
175
- Conveying under any other circumstances is permitted solely under
176
- the conditions stated below. Sublicensing is not allowed; section 10
177
- makes it unnecessary.
178
-
179
- 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
180
-
181
- No covered work shall be deemed part of an effective technological
182
- measure under any applicable law fulfilling obligations under article
183
- 11 of the WIPO copyright treaty adopted on 20 December 1996, or
184
- similar laws prohibiting or restricting circumvention of such
185
- measures.
186
-
187
- When you convey a covered work, you waive any legal power to forbid
188
- circumvention of technological measures to the extent such circumvention
189
- is effected by exercising rights under this License with respect to
190
- the covered work, and you disclaim any intention to limit operation or
191
- modification of the work as a means of enforcing, against the work's
192
- users, your or third parties' legal rights to forbid circumvention of
193
- technological measures.
194
-
195
- 4. Conveying Verbatim Copies.
196
-
197
- You may convey verbatim copies of the Program's source code as you
198
- receive it, in any medium, provided that you conspicuously and
199
- appropriately publish on each copy an appropriate copyright notice;
200
- keep intact all notices stating that this License and any
201
- non-permissive terms added in accord with section 7 apply to the code;
202
- keep intact all notices of the absence of any warranty; and give all
203
- recipients a copy of this License along with the Program.
204
-
205
- You may charge any price or no price for each copy that you convey,
206
- and you may offer support or warranty protection for a fee.
207
-
208
- 5. Conveying Modified Source Versions.
209
-
210
- You may convey a work based on the Program, or the modifications to
211
- produce it from the Program, in the form of source code under the
212
- terms of section 4, provided that you also meet all of these conditions:
213
-
214
- a) The work must carry prominent notices stating that you modified
215
- it, and giving a relevant date.
216
-
217
- b) The work must carry prominent notices stating that it is
218
- released under this License and any conditions added under section
219
- 7. This requirement modifies the requirement in section 4 to
220
- "keep intact all notices".
221
-
222
- c) You must license the entire work, as a whole, under this
223
- License to anyone who comes into possession of a copy. This
224
- License will therefore apply, along with any applicable section 7
225
- additional terms, to the whole of the work, and all its parts,
226
- regardless of how they are packaged. This License gives no
227
- permission to license the work in any other way, but it does not
228
- invalidate such permission if you have separately received it.
229
-
230
- d) If the work has interactive user interfaces, each must display
231
- Appropriate Legal Notices; however, if the Program has interactive
232
- interfaces that do not display Appropriate Legal Notices, your
233
- work need not make them do so.
234
-
235
- A compilation of a covered work with other separate and independent
236
- works, which are not by their nature extensions of the covered work,
237
- and which are not combined with it such as to form a larger program,
238
- in or on a volume of a storage or distribution medium, is called an
239
- "aggregate" if the compilation and its resulting copyright are not
240
- used to limit the access or legal rights of the compilation's users
241
- beyond what the individual works permit. Inclusion of a covered work
242
- in an aggregate does not cause this License to apply to the other
243
- parts of the aggregate.
244
-
245
- 6. Conveying Non-Source Forms.
246
-
247
- You may convey a covered work in object code form under the terms
248
- of sections 4 and 5, provided that you also convey the
249
- machine-readable Corresponding Source under the terms of this License,
250
- in one of these ways:
251
-
252
- a) Convey the object code in, or embodied in, a physical product
253
- (including a physical distribution medium), accompanied by the
254
- Corresponding Source fixed on a durable physical medium
255
- customarily used for software interchange.
256
-
257
- b) Convey the object code in, or embodied in, a physical product
258
- (including a physical distribution medium), accompanied by a
259
- written offer, valid for at least three years and valid for as
260
- long as you offer spare parts or customer support for that product
261
- model, to give anyone who possesses the object code either (1) a
262
- copy of the Corresponding Source for all the software in the
263
- product that is covered by this License, on a durable physical
264
- medium customarily used for software interchange, for a price no
265
- more than your reasonable cost of physically performing this
266
- conveying of source, or (2) access to copy the
267
- Corresponding Source from a network server at no charge.
268
-
269
- c) Convey individual copies of the object code with a copy of the
270
- written offer to provide the Corresponding Source. This
271
- alternative is allowed only occasionally and noncommercially, and
272
- only if you received the object code with such an offer, in accord
273
- with subsection 6b.
274
-
275
- d) Convey the object code by offering access from a designated
276
- place (gratis or for a charge), and offer equivalent access to the
277
- Corresponding Source in the same way through the same place at no
278
- further charge. You need not require recipients to copy the
279
- Corresponding Source along with the object code. If the place to
280
- copy the object code is a network server, the Corresponding Source
281
- may be on a different server (operated by you or a third party)
282
- that supports equivalent copying facilities, provided you maintain
283
- clear directions next to the object code saying where to find the
284
- Corresponding Source. Regardless of what server hosts the
285
- Corresponding Source, you remain obligated to ensure that it is
286
- available for as long as needed to satisfy these requirements.
287
-
288
- e) Convey the object code using peer-to-peer transmission, provided
289
- you inform other peers where the object code and Corresponding
290
- Source of the work are being offered to the general public at no
291
- charge under subsection 6d.
292
-
293
- A separable portion of the object code, whose source code is excluded
294
- from the Corresponding Source as a System Library, need not be
295
- included in conveying the object code work.
296
-
297
- A "User Product" is either (1) a "consumer product", which means any
298
- tangible personal property which is normally used for personal, family,
299
- or household purposes, or (2) anything designed or sold for incorporation
300
- into a dwelling. In determining whether a product is a consumer product,
301
- doubtful cases shall be resolved in favor of coverage. For a particular
302
- product received by a particular user, "normally used" refers to a
303
- typical or common use of that class of product, regardless of the status
304
- of the particular user or of the way in which the particular user
305
- actually uses, or expects or is expected to use, the product. A product
306
- is a consumer product regardless of whether the product has substantial
307
- commercial, industrial or non-consumer uses, unless such uses represent
308
- the only significant mode of use of the product.
309
-
310
- "Installation Information" for a User Product means any methods,
311
- procedures, authorization keys, or other information required to install
312
- and execute modified versions of a covered work in that User Product from
313
- a modified version of its Corresponding Source. The information must
314
- suffice to ensure that the continued functioning of the modified object
315
- code is in no case prevented or interfered with solely because
316
- modification has been made.
317
-
318
- If you convey an object code work under this section in, or with, or
319
- specifically for use in, a User Product, and the conveying occurs as
320
- part of a transaction in which the right of possession and use of the
321
- User Product is transferred to the recipient in perpetuity or for a
322
- fixed term (regardless of how the transaction is characterized), the
323
- Corresponding Source conveyed under this section must be accompanied
324
- by the Installation Information. But this requirement does not apply
325
- if neither you nor any third party retains the ability to install
326
- modified object code on the User Product (for example, the work has
327
- been installed in ROM).
328
-
329
- The requirement to provide Installation Information does not include a
330
- requirement to continue to provide support service, warranty, or updates
331
- for a work that has been modified or installed by the recipient, or for
332
- the User Product in which it has been modified or installed. Access to a
333
- network may be denied when the modification itself materially and
334
- adversely affects the operation of the network or violates the rules and
335
- protocols for communication across the network.
336
-
337
- Corresponding Source conveyed, and Installation Information provided,
338
- in accord with this section must be in a format that is publicly
339
- documented (and with an implementation available to the public in
340
- source code form), and must require no special password or key for
341
- unpacking, reading or copying.
342
-
343
- 7. Additional Terms.
344
-
345
- "Additional permissions" are terms that supplement the terms of this
346
- License by making exceptions from one or more of its conditions.
347
- Additional permissions that are applicable to the entire Program shall
348
- be treated as though they were included in this License, to the extent
349
- that they are valid under applicable law. If additional permissions
350
- apply only to part of the Program, that part may be used separately
351
- under those permissions, but the entire Program remains governed by
352
- this License without regard to the additional permissions.
353
-
354
- When you convey a copy of a covered work, you may at your option
355
- remove any additional permissions from that copy, or from any part of
356
- it. (Additional permissions may be written to require their own
357
- removal in certain cases when you modify the work.) You may place
358
- additional permissions on material, added by you to a covered work,
359
- for which you have or can give appropriate copyright permission.
360
-
361
- Notwithstanding any other provision of this License, for material you
362
- add to a covered work, you may (if authorized by the copyright holders of
363
- that material) supplement the terms of this License with terms:
364
-
365
- a) Disclaiming warranty or limiting liability differently from the
366
- terms of sections 15 and 16 of this License; or
367
-
368
- b) Requiring preservation of specified reasonable legal notices or
369
- author attributions in that material or in the Appropriate Legal
370
- Notices displayed by works containing it; or
371
-
372
- c) Prohibiting misrepresentation of the origin of that material, or
373
- requiring that modified versions of such material be marked in
374
- reasonable ways as different from the original version; or
375
-
376
- d) Limiting the use for publicity purposes of names of licensors or
377
- authors of the material; or
378
-
379
- e) Declining to grant rights under trademark law for use of some
380
- trade names, trademarks, or service marks; or
381
-
382
- f) Requiring indemnification of licensors and authors of that
383
- material by anyone who conveys the material (or modified versions of
384
- it) with contractual assumptions of liability to the recipient, for
385
- any liability that these contractual assumptions directly impose on
386
- those licensors and authors.
387
-
388
- All other non-permissive additional terms are considered "further
389
- restrictions" within the meaning of section 10. If the Program as you
390
- received it, or any part of it, contains a notice stating that it is
391
- governed by this License along with a term that is a further
392
- restriction, you may remove that term. If a license document contains
393
- a further restriction but permits relicensing or conveying under this
394
- License, you may add to a covered work material governed by the terms
395
- of that license document, provided that the further restriction does
396
- not survive such relicensing or conveying.
397
-
398
- If you add terms to a covered work in accord with this section, you
399
- must place, in the relevant source files, a statement of the
400
- additional terms that apply to those files, or a notice indicating
401
- where to find the applicable terms.
402
-
403
- Additional terms, permissive or non-permissive, may be stated in the
404
- form of a separately written license, or stated as exceptions;
405
- the above requirements apply either way.
406
-
407
- 8. Termination.
408
-
409
- You may not propagate or modify a covered work except as expressly
410
- provided under this License. Any attempt otherwise to propagate or
411
- modify it is void, and will automatically terminate your rights under
412
- this License (including any patent licenses granted under the third
413
- paragraph of section 11).
414
-
415
- However, if you cease all violation of this License, then your
416
- license from a particular copyright holder is reinstated (a)
417
- provisionally, unless and until the copyright holder explicitly and
418
- finally terminates your license, and (b) permanently, if the copyright
419
- holder fails to notify you of the violation by some reasonable means
420
- prior to 60 days after the cessation.
421
-
422
- Moreover, your license from a particular copyright holder is
423
- reinstated permanently if the copyright holder notifies you of the
424
- violation by some reasonable means, this is the first time you have
425
- received notice of violation of this License (for any work) from that
426
- copyright holder, and you cure the violation prior to 30 days after
427
- your receipt of the notice.
428
-
429
- Termination of your rights under this section does not terminate the
430
- licenses of parties who have received copies or rights from you under
431
- this License. If your rights have been terminated and not permanently
432
- reinstated, you do not qualify to receive new licenses for the same
433
- material under section 10.
434
-
435
- 9. Acceptance Not Required for Having Copies.
436
-
437
- You are not required to accept this License in order to receive or
438
- run a copy of the Program. Ancillary propagation of a covered work
439
- occurring solely as a consequence of using peer-to-peer transmission
440
- to receive a copy likewise does not require acceptance. However,
441
- nothing other than this License grants you permission to propagate or
442
- modify any covered work. These actions infringe copyright if you do
443
- not accept this License. Therefore, by modifying or propagating a
444
- covered work, you indicate your acceptance of this License to do so.
445
-
446
- 10. Automatic Licensing of Downstream Recipients.
447
-
448
- Each time you convey a covered work, the recipient automatically
449
- receives a license from the original licensors, to run, modify and
450
- propagate that work, subject to this License. You are not responsible
451
- for enforcing compliance by third parties with this License.
452
-
453
- An "entity transaction" is a transaction transferring control of an
454
- organization, or substantially all assets of one, or subdividing an
455
- organization, or merging organizations. If propagation of a covered
456
- work results from an entity transaction, each party to that
457
- transaction who receives a copy of the work also receives whatever
458
- licenses to the work the party's predecessor in interest had or could
459
- give under the previous paragraph, plus a right to possession of the
460
- Corresponding Source of the work from the predecessor in interest, if
461
- the predecessor has it or can get it with reasonable efforts.
462
-
463
- You may not impose any further restrictions on the exercise of the
464
- rights granted or affirmed under this License. For example, you may
465
- not impose a license fee, royalty, or other charge for exercise of
466
- rights granted under this License, and you may not initiate litigation
467
- (including a cross-claim or counterclaim in a lawsuit) alleging that
468
- any patent claim is infringed by making, using, selling, offering for
469
- sale, or importing the Program or any portion of it.
470
-
471
- 11. Patents.
472
-
473
- A "contributor" is a copyright holder who authorizes use under this
474
- License of the Program or a work on which the Program is based. The
475
- work thus licensed is called the contributor's "contributor version".
476
-
477
- A contributor's "essential patent claims" are all patent claims
478
- owned or controlled by the contributor, whether already acquired or
479
- hereafter acquired, that would be infringed by some manner, permitted
480
- by this License, of making, using, or selling its contributor version,
481
- but do not include claims that would be infringed only as a
482
- consequence of further modification of the contributor version. For
483
- purposes of this definition, "control" includes the right to grant
484
- patent sublicenses in a manner consistent with the requirements of
485
- this License.
486
-
487
- Each contributor grants you a non-exclusive, worldwide, royalty-free
488
- patent license under the contributor's essential patent claims, to
489
- make, use, sell, offer for sale, import and otherwise run, modify and
490
- propagate the contents of its contributor version.
491
-
492
- In the following three paragraphs, a "patent license" is any express
493
- agreement or commitment, however denominated, not to enforce a patent
494
- (such as an express permission to practice a patent or covenant not to
495
- sue for patent infringement). To "grant" such a patent license to a
496
- party means to make such an agreement or commitment not to enforce a
497
- patent against the party.
498
-
499
- If you convey a covered work, knowingly relying on a patent license,
500
- and the Corresponding Source of the work is not available for anyone
501
- to copy, free of charge and under the terms of this License, through a
502
- publicly available network server or other readily accessible means,
503
- then you must either (1) cause the Corresponding Source to be so
504
- available, or (2) arrange to deprive yourself of the benefit of the
505
- patent license for this particular work, or (3) arrange, in a manner
506
- consistent with the requirements of this License, to extend the patent
507
- license to downstream recipients. "Knowingly relying" means you have
508
- actual knowledge that, but for the patent license, your conveying the
509
- covered work in a country, or your recipient's use of the covered work
510
- in a country, would infringe one or more identifiable patents in that
511
- country that you have reason to believe are valid.
512
-
513
- If, pursuant to or in connection with a single transaction or
514
- arrangement, you convey, or propagate by procuring conveyance of, a
515
- covered work, and grant a patent license to some of the parties
516
- receiving the covered work authorizing them to use, propagate, modify
517
- or convey a specific copy of the covered work, then the patent license
518
- you grant is automatically extended to all recipients of the covered
519
- work and works based on it.
520
-
521
- A patent license is "discriminatory" if it does not include within
522
- the scope of its coverage, prohibits the exercise of, or is
523
- conditioned on the non-exercise of one or more of the rights that are
524
- specifically granted under this License. You may not convey a covered
525
- work if you are a party to an arrangement with a third party that is
526
- in the business of distributing software, under which you make payment
527
- to the third party based on the extent of your activity of conveying
528
- the work, and under which the third party grants, to any of the
529
- parties who would receive the covered work from you, a discriminatory
530
- patent license (a) in connection with copies of the covered work
531
- conveyed by you (or copies made from those copies), or (b) primarily
532
- for and in connection with specific products or compilations that
533
- contain the covered work, unless you entered into that arrangement,
534
- or that patent license was granted, prior to 28 March 2007.
535
-
536
- Nothing in this License shall be construed as excluding or limiting
537
- any implied license or other defenses to infringement that may
538
- otherwise be available to you under applicable patent law.
539
-
540
- 12. No Surrender of Others' Freedom.
541
-
542
- If conditions are imposed on you (whether by court order, agreement or
543
- otherwise) that contradict the conditions of this License, they do not
544
- excuse you from the conditions of this License. If you cannot convey a
545
- covered work so as to satisfy simultaneously your obligations under this
546
- License and any other pertinent obligations, then as a consequence you may
547
- not convey it at all. For example, if you agree to terms that obligate you
548
- to collect a royalty for further conveying from those to whom you convey
549
- the Program, the only way you could satisfy both those terms and this
550
- License would be to refrain entirely from conveying the Program.
551
-
552
- 13. Use with the GNU Affero General Public License.
553
-
554
- Notwithstanding any other provision of this License, you have
555
- permission to link or combine any covered work with a work licensed
556
- under version 3 of the GNU Affero General Public License into a single
557
- combined work, and to convey the resulting work. The terms of this
558
- License will continue to apply to the part which is the covered work,
559
- but the special requirements of the GNU Affero General Public License,
560
- section 13, concerning interaction through a network will apply to the
561
- combination as such.
562
-
563
- 14. Revised Versions of this License.
564
-
565
- The Free Software Foundation may publish revised and/or new versions of
566
- the GNU General Public License from time to time. Such new versions will
567
- be similar in spirit to the present version, but may differ in detail to
568
- address new problems or concerns.
569
-
570
- Each version is given a distinguishing version number. If the
571
- Program specifies that a certain numbered version of the GNU General
572
- Public License "or any later version" applies to it, you have the
573
- option of following the terms and conditions either of that numbered
574
- version or of any later version published by the Free Software
575
- Foundation. If the Program does not specify a version number of the
576
- GNU General Public License, you may choose any version ever published
577
- by the Free Software Foundation.
578
-
579
- If the Program specifies that a proxy can decide which future
580
- versions of the GNU General Public License can be used, that proxy's
581
- public statement of acceptance of a version permanently authorizes you
582
- to choose that version for the Program.
583
-
584
- Later license versions may give you additional or different
585
- permissions. However, no additional obligations are imposed on any
586
- author or copyright holder as a result of your choosing to follow a
587
- later version.
588
-
589
- 15. Disclaimer of Warranty.
590
-
591
- THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
592
- APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
593
- HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
594
- OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
595
- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
596
- PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
597
- IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
598
- ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
599
-
600
- 16. Limitation of Liability.
601
-
602
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
603
- WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
604
- THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
605
- GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
606
- USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
607
- DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
608
- PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
609
- EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
610
- SUCH DAMAGES.
611
-
612
- 17. Interpretation of Sections 15 and 16.
613
-
614
- If the disclaimer of warranty and limitation of liability provided
615
- above cannot be given local legal effect according to their terms,
616
- reviewing courts shall apply local law that most closely approximates
617
- an absolute waiver of all civil liability in connection with the
618
- Program, unless a warranty or assumption of liability accompanies a
619
- copy of the Program in return for a fee.
620
-
621
- END OF TERMS AND CONDITIONS
622
-
623
- How to Apply These Terms to Your New Programs
624
-
625
- If you develop a new program, and you want it to be of the greatest
626
- possible use to the public, the best way to achieve this is to make it
627
- free software which everyone can redistribute and change under these terms.
628
-
629
- To do so, attach the following notices to the program. It is safest
630
- to attach them to the start of each source file to most effectively
631
- state the exclusion of warranty; and each file should have at least
632
- the "copyright" line and a pointer to where the full notice is found.
633
-
634
- <one line to give the program's name and a brief idea of what it does.>
635
- Copyright (C) <year> <name of author>
636
-
637
- This program is free software: you can redistribute it and/or modify
638
- it under the terms of the GNU General Public License as published by
639
- the Free Software Foundation, either version 3 of the License, or
640
- (at your option) any later version.
641
-
642
- This program is distributed in the hope that it will be useful,
643
- but WITHOUT ANY WARRANTY; without even the implied warranty of
644
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
645
- GNU General Public License for more details.
646
-
647
- You should have received a copy of the GNU General Public License
648
- along with this program. If not, see <http://www.gnu.org/licenses/>.
649
-
650
- Also add information on how to contact you by electronic and paper mail.
651
-
652
- If the program does terminal interaction, make it output a short
653
- notice like this when it starts in an interactive mode:
654
-
655
- <program> Copyright (C) <year> <name of author>
656
- This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
657
- This is free software, and you are welcome to redistribute it
658
- under certain conditions; type `show c' for details.
659
-
660
- The hypothetical commands `show w' and `show c' should show the appropriate
661
- parts of the General Public License. Of course, your program's commands
662
- might be different; for a GUI interface, you would use an "about box".
663
-
664
- You should also get your employer (if you work as a programmer) or school,
665
- if any, to sign a "copyright disclaimer" for the program, if necessary.
666
- For more information on this, and how to apply and follow the GNU GPL, see
667
- <http://www.gnu.org/licenses/>.
668
-
669
- The GNU General Public License does not permit incorporating your program
670
- into proprietary programs. If your program is a subroutine library, you
671
- may consider it more useful to permit linking proprietary applications with
672
- the library. If this is what you want to do, use the GNU Lesser General
673
- Public License instead of this License. But first, please read
674
- <http://www.gnu.org/philosophy/why-not-lgpl.html>.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/ChangeLog DELETED
The diff for this file is too large to render. See raw diff
 
poppler-24.01.0/ConfigureChecks.cmake DELETED
@@ -1,63 +0,0 @@
1
- # Copyright 2008 Pino Toscano, <[email protected]>
2
- #
3
- # Redistribution and use is allowed according to the terms of the BSD license.
4
- # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
5
-
6
- include(CheckIncludeFile)
7
- include(CheckIncludeFileCXX)
8
- include(CheckIncludeFiles)
9
- include(CheckSymbolExists)
10
- include(CheckFunctionExists)
11
- include(CheckLibraryExists)
12
- include(CheckTypeSize)
13
- include(CheckCSourceCompiles)
14
- include(CMakePushCheckState)
15
-
16
- cmake_push_check_state()
17
- # this is going to be defined via config.h, and impacts Android's stdio.h
18
- if (_FILE_OFFSET_BITS)
19
- set(CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} -D_FILE_OFFSET_BITS=${_FILE_OFFSET_BITS})
20
- endif()
21
-
22
- check_include_files(dlfcn.h HAVE_DLFCN_H)
23
- check_include_files(fcntl.h HAVE_FCNTL_H)
24
- check_include_files(stdlib.h HAVE_STDLIB_H)
25
- check_include_files(sys/mman.h HAVE_SYS_MMAN_H)
26
- check_include_files(sys/stat.h HAVE_SYS_STAT_H)
27
- check_include_files(unistd.h HAVE_UNISTD_H)
28
-
29
- check_function_exists(fseek64 HAVE_FSEEK64)
30
- check_symbol_exists(fseeko "stdio.h" HAVE_FSEEKO)
31
- check_function_exists(ftell64 HAVE_FTELL64)
32
- check_function_exists(pread64 HAVE_PREAD64)
33
- check_function_exists(lseek64 HAVE_LSEEK64)
34
- check_function_exists(gmtime_r HAVE_GMTIME_R)
35
- check_function_exists(timegm HAVE_TIMEGM)
36
- check_function_exists(gettimeofday HAVE_GETTIMEOFDAY)
37
- check_function_exists(localtime_r HAVE_LOCALTIME_R)
38
- check_function_exists(popen HAVE_POPEN)
39
- check_function_exists(mkstemp HAVE_MKSTEMP)
40
- check_function_exists(strtok_r HAVE_STRTOK_R)
41
-
42
- macro(CHECK_FOR_DIR include var)
43
- check_c_source_compiles(
44
- "#include <${include}>
45
-
46
- int main(int argc, char *argv[])
47
- {
48
- DIR* d = 0;
49
- return 0;
50
- }
51
- " ${var})
52
- endmacro(CHECK_FOR_DIR)
53
- check_for_dir("dirent.h" HAVE_DIRENT_H)
54
- check_for_dir("ndir.h" HAVE_NDIR_H)
55
- check_for_dir("sys/dir.h" HAVE_SYS_DIR_H)
56
- check_for_dir("sys/ndir.h" HAVE_SYS_NDIR_H)
57
-
58
- check_function_exists("nanosleep" HAVE_NANOSLEEP)
59
- if(NOT HAVE_NANOSLEEP)
60
- check_library_exists("rt" "nanosleep" "" LIB_RT_HAS_NANOSLEEP)
61
- endif(NOT HAVE_NANOSLEEP)
62
-
63
- cmake_pop_check_state()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/INSTALL DELETED
@@ -1,108 +0,0 @@
1
- Installation Instructions
2
- *************************
3
-
4
- Basic Installation
5
- ==================
6
-
7
- mkdir build
8
- cd build
9
- cmake ..
10
- make
11
- make install
12
-
13
-
14
- CMake configuration options can be set using the -D option. eg
15
-
16
- cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=release
17
-
18
-
19
- Build Options
20
- =============
21
-
22
- Set install prefix:
23
-
24
- -DCMAKE_INSTALL_PREFIX=<path>
25
-
26
- Set build type. This sets the standard compiler flags for the build
27
- type.
28
-
29
- -DCMAKE_BUILD_TYPE=debug or -DCMAKE_BUILD_TYPE=release
30
-
31
- Set compiler flags:
32
-
33
- -DCMAKE_CXX_FLAGS=<flags> or set CXXFLAGS environment variable
34
-
35
- Set linker flags:
36
-
37
- -DCMAKE_LD_FLAGS=<flags> or set LDFLAGS environment variable
38
-
39
-
40
- Optional Features
41
- =================
42
-
43
- -D<FEATURE>=<ON|OFF>
44
-
45
- eg
46
-
47
- -DENABLE_LIBCURL=ON -DBUILD_GTK_TESTS=OFF
48
-
49
- A list of all options can be display with the commmand:
50
-
51
- egrep '^ *(option|set.*STRING)' CMakeLists.txt
52
-
53
- Alternatively, the options can be edited by running "ccmake ." in the
54
- build directory.
55
-
56
-
57
- Cross Compiling
58
- ===============
59
-
60
- A toolchain file is required to specify the target specific compiler
61
- tools. Run cmake with the option:
62
-
63
- -DCMAKE_TOOLCHAIN_FILE=<Toolchain file>
64
-
65
- A sample toolchain for a 64-bit mingw build is shown below. Replace
66
- /path/to/win/root with the install prefix for the target environment.
67
-
68
- set(CMAKE_SYSTEM_NAME Windows)
69
- set(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc)
70
- set(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++)
71
- set(CMAKE_RC_COMPILER x86_64-w64-mingw32-windres)
72
- set(CMAKE_FIND_ROOT_PATH /usr/x86_64-w64-mingw32 /path/to/win/root )
73
- set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
74
- set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
75
- set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
76
-
77
-
78
- Debugging Options
79
- =================
80
-
81
- Debug Build Types
82
- -----------------
83
- Release build with debugging information:
84
- -DCMAKE_BUILD_TYPE=relwithdebinfo
85
-
86
- Debug build with optimization except for some code re-ordering optimizations:
87
- -DCMAKE_BUILD_TYPE=debug
88
-
89
- Debug build with no optimization:
90
- -DCMAKE_BUILD_TYPE=debugfull
91
-
92
- Release build with debugging and profiling information:
93
- -DCMAKE_BUILD_TYPE=profile
94
-
95
-
96
- Address Sanitizer
97
- -----------------
98
- Ensure the extra cmake modules are available (may be a separate
99
- package) then use -DECM_ENABLE_SANITIZERS to specify the santizers. eg
100
-
101
- -DECM_ENABLE_SANITIZERS='address;leak;undefined'
102
-
103
- Some options may only be available with clang. Use
104
- -DCMAKE_CXX_COMPILER=clang++ to build with clang.
105
-
106
- The sanitizer can also be combined with fuzz testing by using Clang 6.0
107
- or later and additionally enabling the sanitizer fuzzer which
108
- will enable the fuzz target cpp/tests/pdf_fuzzer.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/NEWS DELETED
The diff for this file is too large to render. See raw diff
 
poppler-24.01.0/README-XPDF DELETED
@@ -1,423 +0,0 @@
1
- Xpdf
2
- ====
3
-
4
- version 3.03
5
- 2011-aug-15
6
-
7
- The Xpdf software and documentation are
8
- copyright 1996-2011, 2022 Glyph & Cog, LLC.
9
-
10
11
- WWW: http://www.foolabs.com/xpdf/
12
-
13
- The PDF data structures, operators, and specification are
14
- copyright 1985-2006 Adobe Systems Inc.
15
-
16
-
17
- What is Xpdf?
18
- -------------
19
-
20
- Xpdf is an open source viewer for Portable Document Format (PDF)
21
- files. (These are also sometimes also called 'Acrobat' files, from
22
- the name of Adobe's PDF software.) The Xpdf project also includes a
23
- PDF text extractor, PDF-to-PostScript converter, and various other
24
- utilities.
25
-
26
- Xpdf runs under the X Window System on UNIX, VMS, and OS/2. The non-X
27
- components (pdftops, pdftotext, etc.) also run on Windows and Mac OSX
28
- systems and should run on pretty much any system with a decent C++
29
- compiler. Xpdf will run on 32-bit and 64-bit machines.
30
-
31
-
32
- License & Distribution
33
- ----------------------
34
-
35
- Xpdf is licensed under the GNU General Pulbic License (GPL), version 2
36
- or 3. This means that you can distribute derivatives of Xpdf under
37
- any of the following:
38
- - GPL v2 only
39
- - GPL v3 only
40
- - GPL v2 or v3
41
-
42
- The Xpdf source package includes the text of both GPL versions:
43
- COPYING for GPL v2, COPYING3 for GPL v3.
44
-
45
- Please note that Xpdf is NOT licensed under "any later version" of the
46
- GPL, as I have no idea what those versions will look like.
47
-
48
- If you are redistributing unmodified copies of Xpdf (or any of the
49
- Xpdf tools) in binary form, you need to include all of the
50
- documentation: README, man pages (or help files), COPYING, and
51
- COPYING3.
52
-
53
- If you want to incorporate the Xpdf source code into another program
54
- (or create a modified version of Xpdf), and you are distributing that
55
- program, you have two options: release your program under the GPL (v2
56
- and/or v3), or purchase a commercial Xpdf source license.
57
-
58
- If you're interested in commercial licensing, please see the Glyph &
59
- Cog web site:
60
-
61
- http://www.glyphandcog.com/
62
-
63
-
64
- Compatibility
65
- -------------
66
-
67
- Xpdf is developed and tested on Linux.
68
-
69
- In addition, it has been compiled by others on Solaris, AIX, HP-UX,
70
- Digital Unix, Irix, and numerous other Unix implementations, as well
71
- as VMS and OS/2. It should work on pretty much any system which runs
72
- X11 and has Unix-like libraries. You'll need ANSI C++ and C compilers
73
- to compile it.
74
-
75
- The non-X components of Xpdf (pdftops, pdftotext, pdfinfo, pdffonts,
76
- pdfdetach, pdftoppm, and pdfimages) can also be compiled on Windows
77
- and Mac OSX systems. See the Xpdf web page for details.
78
-
79
- If you compile Xpdf for a system not listed on the web page, please
80
- let me know. If you're willing to make your binary available by ftp
81
- or on the web, I'll be happy to add a link from the Xpdf web page. I
82
- have decided not to host any binaries I didn't compile myself (for
83
- disk space and support reasons).
84
-
85
- If you can't get Xpdf to compile on your system, send me email and
86
- I'll try to help.
87
-
88
- Xpdf has been ported to the Acorn, Amiga, BeOS, and EPOC. See the
89
- Xpdf web page for links.
90
-
91
-
92
- Getting Xpdf
93
- ------------
94
-
95
- The latest version is available from:
96
-
97
- http://www.foolabs.com/xpdf/
98
-
99
- or:
100
-
101
- ftp://ftp.foolabs.com/pub/xpdf/
102
-
103
- Source code and several precompiled executables are available.
104
-
105
- Announcements of new versions are posted to comp.text.pdf and emailed
106
- to a list of people. If you'd like to receive email notification of
107
- new versions, just let me know.
108
-
109
-
110
- Running Xpdf
111
- ------------
112
-
113
- To run xpdf, simply type:
114
-
115
- xpdf file.pdf
116
-
117
- To generate a PostScript file, hit the "print" button in xpdf, or run
118
- pdftops:
119
-
120
- pdftops file.pdf
121
-
122
- To generate a plain text file, run pdftotext:
123
-
124
- pdftotext file.pdf
125
-
126
- There are five additional utilities (which are fully described in
127
- their man pages):
128
-
129
- pdfinfo -- dumps a PDF file's Info dictionary (plus some other
130
- useful information)
131
- pdffonts -- lists the fonts used in a PDF file along with various
132
- information for each font
133
- pdfdetach -- lists or extracts embedded files (attachments) from a
134
- PDF file
135
- pdftoppm -- converts a PDF file to a series of PPM/PGM/PBM-format
136
- bitmaps
137
- pdfimages -- extracts the images from a PDF file
138
-
139
- Command line options and many other details are described in the man
140
- pages (xpdf(1), etc.) and the VMS help files (xpdf.hlp, etc.).
141
-
142
- All of these utilities read an optional configuration file: see the
143
- xpdfrc(5) man page.
144
-
145
-
146
- Upgrading from Xpdf 3.02 (and earlier)
147
- --------------------------------------
148
-
149
- The font configuration system has been changed. Previous versions
150
- used mostly separate commands to configure fonts for display and for
151
- PostScript output. As of 3.03, configuration options that make sense
152
- for both display and PS output have been unified.
153
-
154
- The following xpdfrc commands have been removed:
155
- * displayFontT1, displayFontTT: replaced with fontFile
156
- * displayNamedCIDFontT1, displayNamedCIDFontTT: replaced with fontFile
157
- * displayCIDFontT1, displayCIDFontTT: replaced with fontFileCC
158
- * psFont: replaced with psResidentFont
159
- * psNamedFont16: replaced with psResidentFont16
160
- * psFont16: replaced with psResidentFontCC
161
-
162
- See the xpdfrc(5) man page for more information on the new commands.
163
-
164
- Pdftops will now embed external 16-bit fonts (configured with the
165
- fontFileCC command) when the PDF file refers to a non-embedded font.
166
- It does not do any subsetting (yet), so the resulting PS files will be
167
- large.
168
-
169
-
170
- Compiling Xpdf
171
- --------------
172
-
173
- See the separate file, INSTALL.
174
-
175
-
176
- Bugs
177
- ----
178
-
179
- If you find a bug in Xpdf, i.e., if it prints an error message,
180
- crashes, or incorrectly displays a document, and you don't see that
181
- bug listed here, please send me email, with a pointer (URL, ftp site,
182
- etc.) to the PDF file.
183
-
184
-
185
- Acknowledgments
186
- ---------------
187
-
188
- Thanks to:
189
-
190
- * Patrick Voigt for help with the remote server code.
191
- * Patrick Moreau, Martin P.J. Zinser, and David Mathog for the VMS
192
- port.
193
- * David Boldt and Rick Rodgers for sample man pages.
194
- * Brendan Miller for the icon idea.
195
- * Olly Betts for help testing pdftotext.
196
- * Peter Ganten for the OS/2 port.
197
- * Michael Richmond for the Win32 port of pdftops and pdftotext and the
198
- xpdf/cygwin/XFree86 build instructions.
199
- * Frank M. Siegert for improvements in the PostScript code.
200
- * Leo Smiers for the decryption patches.
201
- * Rainer Menzner for creating t1lib, and for helping me adapt it to
202
- xpdf.
203
- * Pine Tree Systems A/S for funding the OPI and EPS support in
204
- pdftops.
205
- * Easy Software Products for funding several improvements to the
206
- PostScript output code.
207
- * Tom Kacvinsky for help with FreeType and for being my interface to
208
- the FreeType team.
209
- * Theppitak Karoonboonyanan for help with Thai support.
210
- * Leonard Rosenthol for help and contributions on a bunch of things.
211
- * Alexandros Diamantidis and Maria Adaloglou for help with Greek
212
- support.
213
- * Lawrence Lai for help with the CJK Unicode maps.
214
-
215
- Various people have contributed modifications made for use by the
216
- pdftex project:
217
-
218
- * Han The Thanh
219
- * Martin Schröder of ArtCom GmbH
220
-
221
-
222
- References
223
- ----------
224
-
225
- Adobe Systems Inc., _PDF Reference, sixth edition: Adobe Portable
226
- Document Format version 1.7_.
227
- http://www.adobe.com/devnet/pdf/pdf_reference.html
228
- [The manual for PDF version 1.7.]
229
-
230
- Adobe Systems Inc., "Errata for the PDF Reference, sixth edition,
231
- version 1.7", October 16, 2006.
232
- http://www.adobe.com/devnet/pdf/pdf_reference.html
233
- [The errata for the PDF 1.7 spec.]
234
-
235
- Adobe Systems Inc., _PostScript Language Reference_, 3rd ed.
236
- Addison-Wesley, 1999, ISBN 0-201-37922-8.
237
- [The official PostScript manual.]
238
-
239
- Adobe Systems, Inc., _The Type 42 Font Format Specification_,
240
- Adobe Developer Support Technical Specification #5012. 1998.
241
- http://partners.adobe.com/asn/developer/pdfs/tn/5012.Type42_Spec.pdf
242
- [Type 42 is the format used to embed TrueType fonts in PostScript
243
- files.]
244
-
245
- Adobe Systems, Inc., _Adobe CMap and CIDFont Files Specification_,
246
- Adobe Developer Support Technical Specification #5014. 1995.
247
- http://www.adobe.com/supportservice/devrelations/PDFS/TN/5014.CIDFont_Spec.pdf
248
- [CMap file format needed for Japanese and Chinese font support.]
249
-
250
- Adobe Systems, Inc., _Adobe-Japan1-4 Character Collection for
251
- CID-Keyed Fonts_, Adobe Developer Support Technical Note #5078.
252
- 2000.
253
- http://partners.adobe.com/asn/developer/PDFS/TN/5078.CID_Glyph.pdf
254
- [The Adobe Japanese character set.]
255
-
256
- Adobe Systems, Inc., _Adobe-GB1-4 Character Collection for
257
- CID-Keyed Fonts_, Adobe Developer Support Technical Note #5079.
258
- 2000.
259
- http://partners.adobe.com/asn/developer/pdfs/tn/5079.Adobe-GB1-4.pdf
260
- [The Adobe Chinese GB (simplified) character set.]
261
-
262
- Adobe Systems, Inc., _Adobe-CNS1-3 Character Collection for
263
- CID-Keyed Fonts_, Adobe Developer Support Technical Note #5080.
264
- 2000.
265
- http://partners.adobe.com/asn/developer/PDFS/TN/5080.CNS_CharColl.pdf
266
- [The Adobe Chinese CNS (traditional) character set.]
267
-
268
- Adobe Systems Inc., _Supporting the DCT Filters in PostScript Level
269
- 2_, Adobe Developer Support Technical Note #5116. 1992.
270
- http://www.adobe.com/supportservice/devrelations/PDFS/TN/5116.PS2_DCT.PDF
271
- [Description of the DCTDecode filter parameters.]
272
-
273
- Adobe Systems Inc., _Open Prepress Interface (OPI) Specification -
274
- Version 2.0_, Adobe Developer Support Technical Note #5660. 2000.
275
- http://partners.adobe.com/asn/developer/PDFS/TN/5660.OPI_2.0.pdf
276
-
277
- Adobe Systems Inc., CMap files.
278
- ftp://ftp.oreilly.com/pub/examples/nutshell/cjkv/adobe/
279
- [The actual CMap files for the 16-bit CJK encodings.]
280
-
281
- Adobe Systems Inc., Unicode glyph lists.
282
- http://partners.adobe.com/asn/developer/type/unicodegn.html
283
- http://partners.adobe.com/asn/developer/type/glyphlist.txt
284
- http://partners.adobe.com/asn/developer/type/corporateuse.txt
285
- http://partners.adobe.com/asn/developer/type/zapfdingbats.txt
286
- [Mappings between character names to Unicode.]
287
-
288
- Adobe Systems Inc., OpenType Specification v. 1.4.
289
- http://partners.adobe.com/public/developer/opentype/index_spec.html
290
- [The OpenType font format spec.]
291
-
292
- Aldus Corp., _OPI: Open Prepress Interface Specification 1.3_. 1993.
293
- http://partners.adobe.com/asn/developer/PDFS/TN/OPI_13.pdf
294
-
295
- Anonymous, RC4 source code.
296
- ftp://ftp.ox.ac.uk/pub/crypto/misc/rc4.tar.gz
297
- ftp://idea.sec.dsi.unimi.it/pub/crypt/code/rc4.tar.gz
298
- [This is the algorithm used to encrypt PDF files.]
299
-
300
- T. Boutell, et al., "PNG (Portable Network Graphics) Specification,
301
- Version 1.0". RFC 2083.
302
- [PDF uses the PNG filter algorithms.]
303
-
304
- CCITT, "Information Technology - Digital Compression and Coding of
305
- Continuous-tone Still Images - Requirements and Guidelines", CCITT
306
- Recommendation T.81.
307
- http://www.w3.org/Graphics/JPEG/
308
- [The official JPEG spec.]
309
-
310
- A. Chernov, "Registration of a Cyrillic Character Set". RFC 1489.
311
- [Documentation for the KOI8-R Cyrillic encoding.]
312
-
313
- Roman Czyborra, "The ISO 8859 Alphabet Soup".
314
- http://czyborra.com/charsets/iso8859.html
315
- [Documentation on the various ISO 859 encodings.]
316
-
317
- L. Peter Deutsch, "ZLIB Compressed Data Format Specification version
318
- 3.3". RFC 1950.
319
- [Information on the general format used in FlateDecode streams.]
320
-
321
- L. Peter Deutsch, "DEFLATE Compressed Data Format Specification
322
- version 1.3". RFC 1951.
323
- [The definition of the compression algorithm used in FlateDecode
324
- streams.]
325
-
326
- Morris Dworkin, "Recommendation for Block Cipher Modes of Operation",
327
- National Institute of Standards, NIST Special Publication 800-38A,
328
- 2001.
329
- [The cipher block chaining (CBC) mode used with AES in PDF files.]
330
-
331
- Federal Information Processing Standards Publication 197 (FIPS PUBS
332
- 197), "Advanced Encryption Standard (AES)", November 26, 2001.
333
- [AES encryption, used in PDF 1.6.]
334
-
335
- Jim Flowers, "X Logical Font Description Conventions", Version 1.5, X
336
- Consortium Standard, X Version 11, Release 6.1.
337
- ftp://ftp.x.org/pub/R6.1/xc/doc/hardcopy/XLFD/xlfd.PS.Z
338
- [The official specification of X font descriptors, including font
339
- transformation matrices.]
340
-
341
- Foley, van Dam, Feiner, and Hughes, _Computer Graphics: Principles and
342
- Practice_, 2nd ed. Addison-Wesley, 1990, ISBN 0-201-12110-7.
343
- [Colorspace conversion functions, Bezier spline math.]
344
-
345
- Robert L. Hummel, _Programmer's Technical Reference: Data and Fax
346
- Communications_. Ziff-Davis Press, 1993, ISBN 1-56276-077-7.
347
- [CCITT Group 3 and 4 fax decoding.]
348
-
349
- ISO/IEC, _Information technology -- Lossy/lossless coding of bi-level
350
- images_. ISO/IEC 14492, First edition (2001-12-15).
351
- http://webstore.ansi.org/
352
- [The official JBIG2 standard. The final draft of this spec is
353
- available from http://www.jpeg.org/jbighomepage.html.]
354
-
355
- ISO/IEC, _Information technology -- JPEG 2000 image coding system --
356
- Part 1: Core coding system_. ISO/IEC 15444-1, First edition
357
- (2000-12-15).
358
- http://webstore.ansi.org/
359
- [The official JPEG 2000 standard. The final committee draft of this
360
- spec is available from http://www.jpeg.org/JPEG2000.html, but there
361
- were changes made to the bitstream format between that draft and the
362
- published spec.]
363
-
364
- ITU, "Standardization of Group 3 facsimile terminals for document
365
- transmission", ITU-T Recommendation T.4, 1999.
366
- ITU, "Facsimile coding schemes and coding control functions for Group 4
367
- facsimile apparatus", ITU-T Recommendation T.6, 1993.
368
- http://www.itu.int/
369
- [The official Group 3 and 4 fax standards - used by the CCITTFaxDecode
370
- stream, as well as the JBIG2Decode stream.]
371
-
372
- B. Kaliski, "PKCS #5: Password-Based Cryptography Specification,
373
- Version 2.0". RFC 2898.
374
- [Defines the padding scheme used with AES encryption in PDF files.]
375
-
376
- Christoph Loeffler, Adriaan Ligtenberg, George S. Moschytz, "Practical
377
- Fast 1-D DCT Algorithms with 11 Multiplications". IEEE Intl. Conf. on
378
- Acoustics, Speech & Signal Processing, 1989, 988-991.
379
- [The fast IDCT algorithm used in the DCTDecode filter.]
380
-
381
- Microsoft, _TrueType 1.0 Font Files_, rev. 1.66. 1995.
382
- http://www.microsoft.com/typography/tt/tt.htm
383
- [The TrueType font spec (in MS Word format, naturally).]
384
-
385
- V. Ostromoukhov, R.D. Hersch, "Stochastic Clustered-Dot Dithering",
386
- Conf. Color Imaging: Device-Independent Color, Color Hardcopy, and
387
- Graphic Arts IV, 1999, SPIE Vol. 3648, 496-505.
388
- http://diwww.epfl.ch/w3lsp/publications/colour/scd.html
389
- [The stochastic dithering algorithm used in Xpdf.]
390
-
391
- P. Peterlin, "ISO 8859-2 (Latin 2) Resources".
392
- http://sizif.mf.uni-lj.si/linux/cee/iso8859-2.html
393
- [This is a web page with all sorts of useful Latin-2 character set and
394
- font information.]
395
-
396
- Charles Poynton, "Color FAQ".
397
- http://www.inforamp.net/~poynton/ColorFAQ.html
398
- [The mapping from the CIE 1931 (XYZ) color space to RGB.]
399
-
400
- R. Rivest, "The MD5 Message-Digest Algorithm". RFC 1321.
401
- [MD5 is used in PDF document encryption.]
402
-
403
- Thai Industrial Standard, "Standard for Thai Character Codes for
404
- Computers", TIS-620-2533 (1990).
405
- http://www.nectec.or.th/it-standards/std620/std620.htm
406
- [The TIS-620 Thai encoding.]
407
-
408
- Unicode Consortium, "Unicode Home Page".
409
- http://www.unicode.org/
410
- [Online copy of the Unicode spec.]
411
-
412
- W3C Recommendation, "PNG (Portable Network Graphics) Specification
413
- Version 1.0".
414
- http://www.w3.org/Graphics/PNG/
415
- [Defines the PNG image predictor.]
416
-
417
- Gregory K. Wallace, "The JPEG Still Picture Compression Standard".
418
- ftp://ftp.uu.net/graphics/jpeg/wallace.ps.gz
419
- [Good description of the JPEG standard. Also published in CACM, April
420
- 1991, and submitted to IEEE Transactions on Consumer Electronics.]
421
-
422
- F. Yergeau, "UTF-8, a transformation format of ISO 10646". RFC 2279.
423
- [A commonly used Unicode encoding.]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/README.contributors DELETED
@@ -1,51 +0,0 @@
1
- If you want to become or are a poppler contributor, this is a README for you, keep reading!
2
-
3
- Licensing
4
- ---------
5
- Only send patches to poppler if you agree to license (or relicense) them under
6
- GPLv2 and later (or something more permissive that can be "upgraded" to GPLv2
7
- and later). If you do not agree to this license, please explain the problem / bug
8
- and how you would solve it in words instead of code.
9
-
10
- By default all patches attached to the gitlab instance or sent to the mailing list
11
- will be assumed to agree with the licensing expressed here.
12
-
13
- Channels of contact
14
- -------------------
15
- Poppler has three main channels of contact:
16
- * The poppler mailing list http://lists.freedesktop.org/mailman/listinfo/poppler
17
- * The poppler gitlab instance https://gitlab.freedesktop.org/poppler/poppler/
18
- * The #poppler channel at the IRC freenode network
19
- Do not hesitate to drop by talk to people there.
20
-
21
- clang-format
22
- ------------
23
- We introduced clang-format mandatory usage in July 2020.
24
- If you want git blame to ignore the revision in which we did the mass change you can do
25
- git config blame.ignoreRevsFile .git-blame-ignore-revs
26
- on your clone
27
-
28
- To get the clang-format warnings locally instead at CI time we recommend you
29
- to copy the hooks/pre-commit to your .git
30
- cp hooks/pre-commit .git/hooks/
31
-
32
- We are using clang-format 15 on CI. Unfortunately clang-format is not totally
33
- compatible with older versions of itself. If CI gives you trouble but your local
34
- clang-format disagrees, just apply the changes suggested by CI and then commit
35
- with the --no-verify flag. If you get stuck, don't hesitate to ask the reviewer
36
- to help and they will reformat your commits :)
37
-
38
- Merge requests
39
- --------------
40
-
41
- When creating a new merge request on gitlab make sure it has a clear title and
42
- the description includes any extra details that might be helpful for the
43
- reviewer, such as what the aim of the change is and decisions made during
44
- implementation.
45
-
46
- Also, check "Allow commits from members who can merge to the target branch" as
47
- that enables rebase on landing. See the gitlab docs for details:
48
-
49
- https://docs.gitlab.com/ee/user/project/merge_requests/allow_collaboration.html
50
-
51
- And keep hacking on poppler!
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/README.md DELETED
@@ -1,107 +0,0 @@
1
- Poppler, a PDF rendering library
2
- ================================
3
-
4
- This is Poppler, a library for rendering PDF files, and examining or
5
- modifying their structure. Poppler originally came from the XPDF
6
- sources; please see the file [README-XPDF](README-XPDF) for the
7
- original xpdf-3.03 README.
8
-
9
- Note that **Poppler is licensed under the GPL**, not the LGPL, so
10
- programs which call Poppler must be licensed under the GPL as well.
11
- See the section [History and GPL
12
- licensing](#history-and-gpl-licensing) for more information.
13
-
14
- # Source code
15
-
16
- Poppler's source code is maintained as a Git repository in
17
- [`gitlab.freedesktop.org`][gitlab]. You can fork that repository and
18
- submit merge requests.
19
-
20
- [gitlab]: https://gitlab.freedesktop.org/poppler/poppler
21
-
22
- # Reporting bugs
23
-
24
- Please report bugs at
25
- https://gitlab.freedesktop.org/poppler/poppler/issues
26
-
27
- If you want to report a rendering or parsing bug, or a missing PDF
28
- feature, please provide an example PDF file as an attachment to your
29
- bug report. It really helps if you can minimize the PDF to only the
30
- items required to reproduce the bug or the missing feature, but it is
31
- not absolutely required. **Please be careful** of publishing PDF
32
- files that you don't want other people to see, or files whose
33
- copyright does not allow redistribution; the bug tracker is a public
34
- resource and attachments are visible to everyone.
35
-
36
- # Security
37
-
38
- Poppler is highly sensitive to security bugs, since it deals mainly
39
- with untrusted files downloaded from the Internet.
40
-
41
- If you find a crash in Poppler, or if a tool like
42
- Valgrind/asan/ubsan/msan detect a problem, please report a bug at
43
- https://gitlab.freedesktop.org/poppler/poppler/issues
44
-
45
- # Stable and unstable APIs
46
-
47
- Poppler provides stable, public APIs for its various front-ends, and
48
- an unstable API for Poppler's own internal use. The following
49
- directories in Poppler's source tree have the **stable APIs**:
50
-
51
- * [cpp](cpp) - Stable C++ API for examining the structure of a PDF
52
- file and rendering it to a raster image.
53
-
54
- * [glib](glib) - Stable C API with Glib/GObject idioms, to examine the
55
- structure of a PDF file, and to render its pages to [Cairo]
56
- contexts.
57
-
58
- * [qt5](qt5) - Stable C++ API with [Qt5] idioms, to examine the
59
- structure of a PDF file, and to render its pages to `QPainter` or
60
- `QImage` objects.
61
-
62
- **WARNING:** Poppler also provides direct access to its internals,
63
- since various tools historically use the C++ header files that came
64
- from XPDF and which became the basis for Poppler.
65
-
66
- * [poppler](poppler) - **UNSTABLE, INTERNAL C++ API** to operate
67
- directly on Poppler's internal representation of PDF files. *If you
68
- use this API, you are on your own*. This API may change at any
69
- time, even among minor versions of Poppler!
70
-
71
- [Cairo]: https://www.cairographics.org/
72
- [Qt5]: https://www.qt.io/
73
-
74
- # History and GPL licensing
75
-
76
- Poppler is a fork of the xpdf PDF viewer developed by Derek Noonburg
77
- of Glyph and Cog, LLC. The purpose of forking xpdf is twofold.
78
- First, we want to provide PDF rendering functionality as a shared
79
- library, to centralize the maintenance effort. Today a number of
80
- applications incorporate the xpdf code base, and whenever a security
81
- issue is discovered, all these applications exchange patches and put
82
- out new releases. In turn, all distributions must package and release
83
- new version of these xpdf based viewers. It's safe to say that
84
- there's a lot of duplicated effort with the current situation. Even if
85
- poppler in the short term introduces yet another xpdf derived code
86
- base to the world, we hope that over time these applications will
87
- adopt poppler. After all, we only need one application to use poppler
88
- to break even.
89
-
90
- Second, we would like to move libpoppler forward in a number of areas
91
- that don't fit within the goals of xpdf. By design, xpdf depends on
92
- very few libraries and runs a wide range of X based platforms. This
93
- is a strong feature and reasonable design goal. However, with poppler
94
- we would like to replace parts of xpdf that are now available as
95
- standard components of modern Unix desktop environments. One such
96
- example is fontconfig, which solves the problem of matching and
97
- locating fonts on the system, in a standardized and well understood
98
- way. Another example is cairo, which provides high quality 2D
99
- rendering.
100
-
101
- Please note that xpdf, and thus poppler, is licensed under the GPL,
102
- not the LGPL. Consequently, any application using poppler must also
103
- be licensed under the GPL. If you want to incorporate Xpdf based PDF
104
- rendering in a closed source product, please contact Glyph & Cog
105
- (www.glyphandcog.com) for commercial licensing options. Note that
106
- this only allows you to use xpdf in a closed source product,
107
- not poppler itself.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/_clang-format DELETED
@@ -1,77 +0,0 @@
1
- # Copyright (C) 2016 Olivier Goffart <[email protected]>
2
- #
3
- # You may use this file under the terms of the 3-clause BSD license.
4
- # See the file LICENSE from this package for details.
5
-
6
- ---
7
- BasedOnStyle: WebKit
8
-
9
- Standard: Cpp11
10
-
11
- ColumnLimit: 240
12
- # How much weight do extra characters after the line length limit have.
13
- # PenaltyExcessCharacter: 4
14
-
15
- # Disable reflow of qdoc comments: indentation rules are different.
16
- # Translation comments are also excluded.
17
- CommentPragmas: "^!|^:"
18
-
19
- # We want a space between the type and the star for pointer types.
20
- PointerBindsToType: false
21
-
22
- # We use template< without space.
23
- SpaceAfterTemplateKeyword: false
24
-
25
- # We want to break before the operators, but not before a '='.
26
- BreakBeforeBinaryOperators: NonAssignment
27
-
28
- # Braces are usually attached, but not after functions or class declarations.
29
- BreakBeforeBraces: Custom
30
- BraceWrapping:
31
- AfterClass: true
32
- AfterControlStatement: false
33
- AfterEnum: true
34
- AfterFunction: true
35
- AfterNamespace: false
36
- AfterObjCDeclaration: false
37
- AfterStruct: true
38
- AfterUnion: false
39
- BeforeCatch: false
40
- BeforeElse: false
41
- IndentBraces: false
42
-
43
- # When constructor initializers do not fit on one line, put them each on a new line.
44
- ConstructorInitializerAllOnOneLineOrOnePerLine: true
45
- # Indent initializers by 4 spaces
46
- ConstructorInitializerIndentWidth: 4
47
-
48
- # Indent width for line continuations.
49
- ContinuationIndentWidth: 8
50
-
51
- # No indentation for namespaces.
52
- NamespaceIndentation: None
53
-
54
- # Allow indentation for preprocessing directives (if/ifdef/endif). https://reviews.llvm.org/rL312125
55
- IndentPPDirectives: AfterHash
56
-
57
- # Horizontally align arguments after an open bracket.
58
- # The coding style does not specify the following, but this is what gives
59
- # results closest to the existing code.
60
- AlignAfterOpenBracket: true
61
- AlwaysBreakTemplateDeclarations: true
62
-
63
- # Ideally we should also allow less short function in a single line, but
64
- # clang-format does not handle that.
65
- AllowShortFunctionsOnASingleLine: Inline
66
-
67
- # The coding style specifies some include order categories, but also tells to
68
- # separate categories with an empty line. It does not specify the order within
69
- # the categories. Since the SortInclude feature of clang-format does not
70
- # re-order includes separated by empty lines, the feature is not used.
71
- SortIncludes: false
72
-
73
- # macros for which the opening brace stays attached.
74
- ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH, forever, Q_FOREVER, QBENCHMARK, QBENCHMARK_ONCE ]
75
-
76
- # Break constructor initializers before the colon and after the commas.
77
- BreakConstructorInitializers: BeforeColon
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/cmake/modules/COPYING-CMAKE-SCRIPTS DELETED
@@ -1,22 +0,0 @@
1
- Redistribution and use in source and binary forms, with or without
2
- modification, are permitted provided that the following conditions
3
- are met:
4
-
5
- 1. Redistributions of source code must retain the copyright
6
- notice, this list of conditions and the following disclaimer.
7
- 2. Redistributions in binary form must reproduce the copyright
8
- notice, this list of conditions and the following disclaimer in the
9
- documentation and/or other materials provided with the distribution.
10
- 3. The name of the author may not be used to endorse or promote products
11
- derived from this software without specific prior written permission.
12
-
13
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
14
- IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
15
- OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
16
- IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
17
- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
18
- NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
19
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
20
- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
22
- THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/cmake/modules/CheckFileOffsetBits.c DELETED
@@ -1,13 +0,0 @@
1
- #include <sys/types.h>
2
-
3
- #define KB ((off_t)1024)
4
- #define MB ((off_t)1024 * KB)
5
- #define GB ((off_t)1024 * MB)
6
- #define TB ((off_t)1024 * GB)
7
- int t2[(((64 * GB - 1) % 671088649) == 268434537) && (((TB - (64 * GB - 1) + 255) % 1792151290) == 305159546) ? 1 : -1];
8
-
9
- int main()
10
- {
11
- ;
12
- return 0;
13
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/cmake/modules/CheckFileOffsetBits.cmake DELETED
@@ -1,44 +0,0 @@
1
- # - Check if _FILE_OFFSET_BITS macro needed for large files
2
- # CHECK_FILE_OFFSET_BITS ()
3
- #
4
- # The following variables may be set before calling this macro to
5
- # modify the way the check is run:
6
- #
7
- # CMAKE_REQUIRED_FLAGS = string of compile command line flags
8
- # CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar)
9
- # CMAKE_REQUIRED_INCLUDES = list of include directories
10
- # Copyright (c) 2009, Michihiro NAKAJIMA
11
- #
12
- # Redistribution and use is allowed according to the terms of the BSD license.
13
- # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
14
-
15
- #INCLUDE(CheckCXXSourceCompiles)
16
-
17
- GET_FILENAME_COMPONENT(_selfdir_CheckFileOffsetBits
18
- "${CMAKE_CURRENT_LIST_FILE}" PATH)
19
-
20
- MACRO (CHECK_FILE_OFFSET_BITS)
21
- IF(NOT DEFINED _FILE_OFFSET_BITS)
22
- MESSAGE(STATUS "Checking _FILE_OFFSET_BITS for large files")
23
- TRY_COMPILE(__WITHOUT_FILE_OFFSET_BITS_64
24
- ${CMAKE_CURRENT_BINARY_DIR}
25
- ${_selfdir_CheckFileOffsetBits}/CheckFileOffsetBits.c
26
- COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS})
27
- IF(NOT __WITHOUT_FILE_OFFSET_BITS_64)
28
- TRY_COMPILE(__WITH_FILE_OFFSET_BITS_64
29
- ${CMAKE_CURRENT_BINARY_DIR}
30
- ${_selfdir_CheckFileOffsetBits}/CheckFileOffsetBits.c
31
- COMPILE_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} -D_FILE_OFFSET_BITS=64)
32
- ENDIF(NOT __WITHOUT_FILE_OFFSET_BITS_64)
33
-
34
- IF(NOT __WITHOUT_FILE_OFFSET_BITS_64 AND __WITH_FILE_OFFSET_BITS_64)
35
- SET(_FILE_OFFSET_BITS 64 CACHE INTERNAL "_FILE_OFFSET_BITS macro needed for large files")
36
- MESSAGE(STATUS "Checking _FILE_OFFSET_BITS for large files - needed")
37
- ELSE(NOT __WITHOUT_FILE_OFFSET_BITS_64 AND __WITH_FILE_OFFSET_BITS_64)
38
- SET(_FILE_OFFSET_BITS "" CACHE INTERNAL "_FILE_OFFSET_BITS macro needed for large files")
39
- MESSAGE(STATUS "Checking _FILE_OFFSET_BITS for large files - not needed")
40
- ENDIF(NOT __WITHOUT_FILE_OFFSET_BITS_64 AND __WITH_FILE_OFFSET_BITS_64)
41
- ENDIF(NOT DEFINED _FILE_OFFSET_BITS)
42
-
43
- ENDMACRO (CHECK_FILE_OFFSET_BITS)
44
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/cmake/modules/FindCairo.cmake DELETED
@@ -1,62 +0,0 @@
1
- # - try to find Cairo
2
- # Once done this will define
3
- #
4
- # CAIRO_FOUND - system has Cairo
5
- # CAIRO_CFLAGS - the Cairo CFlags
6
- # CAIRO_INCLUDE_DIRS - the Cairo include directories
7
- # CAIRO_LIBRARIES - Link these to use Cairo
8
- #
9
- # Copyright (C) 2007, 2010, Pino Toscano, <[email protected]>
10
- #
11
- # Redistribution and use is allowed according to the terms of the BSD license.
12
- # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
13
-
14
- if(CAIRO_INCLUDE_DIRS AND CAIRO_LIBRARIES)
15
-
16
- # in cache already
17
- set(CAIRO_FOUND TRUE)
18
-
19
- else(CAIRO_INCLUDE_DIRS AND CAIRO_LIBRARIES)
20
-
21
- if(NOT WIN32)
22
- # use pkg-config to get the directories and then use these values
23
- # in the FIND_PATH() and FIND_LIBRARY() calls
24
- find_package(PkgConfig REQUIRED)
25
- if(Cairo_FIND_VERSION_COUNT GREATER 0)
26
- set(_cairo_version_cmp ">=${Cairo_FIND_VERSION}")
27
- endif(Cairo_FIND_VERSION_COUNT GREATER 0)
28
- pkg_check_modules(_pc_cairo cairo${_cairo_version_cmp})
29
- if(_pc_cairo_FOUND)
30
- set(CAIRO_FOUND TRUE)
31
- endif(_pc_cairo_FOUND)
32
- else(NOT WIN32)
33
- # assume so, for now
34
- set(CAIRO_FOUND TRUE)
35
- endif(NOT WIN32)
36
-
37
- if(CAIRO_FOUND)
38
- # set it back as false
39
- set(CAIRO_FOUND FALSE)
40
-
41
- find_library(CAIRO_LIBRARY cairo
42
- HINTS ${_pc_cairo_LIBRARY_DIRS}
43
- )
44
- set(CAIRO_LIBRARIES "${CAIRO_LIBRARY}")
45
-
46
- find_path(CAIRO_INCLUDE_DIR cairo.h
47
- HINTS ${_pc_cairo_INCLUDE_DIRS}
48
- PATH_SUFFIXES cairo
49
- )
50
- set(CAIRO_INCLUDE_DIRS "${CAIRO_INCLUDE_DIR};${_pc_cairo_INCLUDE_DIRS}")
51
-
52
- include(FindPackageHandleStandardArgs)
53
- find_package_handle_standard_args(Cairo DEFAULT_MSG CAIRO_LIBRARIES CAIRO_INCLUDE_DIRS)
54
- endif(CAIRO_FOUND)
55
-
56
- endif(CAIRO_INCLUDE_DIRS AND CAIRO_LIBRARIES)
57
-
58
- mark_as_advanced(
59
- CAIRO_CFLAGS
60
- CAIRO_INCLUDE_DIRS
61
- CAIRO_LIBRARIES
62
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/cmake/modules/FindGLIB.cmake DELETED
@@ -1,20 +0,0 @@
1
- # - try to find the GLIB libraries
2
- # Once done this will define
3
- #
4
- # GLIB_FOUND - system has GLib
5
- # GLIB2_CFLAGS - the GLib CFlags
6
- # GLIB2_LIBRARIES - Link these to use GLib
7
- #
8
- # Copyright 2008-2010 Pino Toscano, <[email protected]>
9
- # Copyright 2013 Michael Weiser, <[email protected]>
10
- #
11
- # Redistribution and use is allowed according to the terms of the BSD license.
12
- # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
13
-
14
- include(FindPackageHandleStandardArgs)
15
-
16
- find_package(PkgConfig REQUIRED)
17
-
18
- pkg_check_modules(GLIB2 IMPORTED_TARGET "glib-2.0>=${GLIB_REQUIRED}" "gobject-2.0>=${GLIB_REQUIRED}" "gio-2.0>=${GLIB_REQUIRED}")
19
-
20
- find_package_handle_standard_args(GLIB DEFAULT_MSG GLIB2_LIBRARIES GLIB2_CFLAGS)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/cmake/modules/FindGObjectIntrospection.cmake DELETED
@@ -1,61 +0,0 @@
1
- # - try to find gobject-introspection
2
- #
3
- # Once done this will define
4
- #
5
- # INTROSPECTION_FOUND - system has gobject-introspection
6
- # INTROSPECTION_SCANNER - the gobject-introspection scanner, g-ir-scanner
7
- # INTROSPECTION_COMPILER - the gobject-introspection compiler, g-ir-compiler
8
- # INTROSPECTION_GENERATE - the gobject-introspection generate, g-ir-generate
9
- # INTROSPECTION_GIRDIR
10
- # INTROSPECTION_TYPELIBDIR
11
- # INTROSPECTION_CFLAGS
12
- # INTROSPECTION_LIBS
13
- #
14
- # Copyright (C) 2010, Pino Toscano, <[email protected]>
15
- #
16
- # Redistribution and use is allowed according to the terms of the BSD license.
17
- # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
18
-
19
- macro(_GIR_GET_PKGCONFIG_VAR _outvar _varname)
20
- execute_process(
21
- COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=${_varname} gobject-introspection-1.0
22
- OUTPUT_VARIABLE _result
23
- RESULT_VARIABLE _null
24
- )
25
-
26
- if (_null)
27
- else()
28
- string(REGEX REPLACE "[\r\n]" " " _result "${_result}")
29
- string(REGEX REPLACE " +$" "" _result "${_result}")
30
- separate_arguments(_result)
31
- set(${_outvar} ${_result} CACHE INTERNAL "")
32
- endif()
33
- endmacro(_GIR_GET_PKGCONFIG_VAR)
34
-
35
- find_package(PkgConfig)
36
- if(PKG_CONFIG_FOUND)
37
- if(PACKAGE_FIND_VERSION_COUNT GREATER 0)
38
- set(_gir_version_cmp ">=${PACKAGE_FIND_VERSION}")
39
- endif()
40
- pkg_check_modules(_pc_gir gobject-introspection-1.0${_gir_version_cmp})
41
- if(_pc_gir_FOUND)
42
- set(INTROSPECTION_FOUND TRUE)
43
- _gir_get_pkgconfig_var(INTROSPECTION_SCANNER "g_ir_scanner")
44
- _gir_get_pkgconfig_var(INTROSPECTION_COMPILER "g_ir_compiler")
45
- _gir_get_pkgconfig_var(INTROSPECTION_GENERATE "g_ir_generate")
46
- _gir_get_pkgconfig_var(INTROSPECTION_GIRDIR "girdir")
47
- _gir_get_pkgconfig_var(INTROSPECTION_TYPELIBDIR "typelibdir")
48
- set(INTROSPECTION_CFLAGS "${_pc_gir_CFLAGS}")
49
- set(INTROSPECTION_LIBS "${_pc_gir_LIBS}")
50
- endif()
51
- endif()
52
-
53
- mark_as_advanced(
54
- INTROSPECTION_SCANNER
55
- INTROSPECTION_COMPILER
56
- INTROSPECTION_GENERATE
57
- INTROSPECTION_GIRDIR
58
- INTROSPECTION_TYPELIBDIR
59
- INTROSPECTION_CFLAGS
60
- INTROSPECTION_LIBS
61
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/cmake/modules/FindGTK.cmake DELETED
@@ -1,21 +0,0 @@
1
- # - try to find GTK libraries
2
- # Once done this will define
3
- #
4
- # GTK_FOUND - system has GTK
5
- # GTK3_CFLAGS - the GTK CFlags
6
- # GTK3_LIBRARIES - Link these to use GTK
7
- #
8
- # Copyright 2008-2010 Pino Toscano, <[email protected]>
9
- #
10
- # Redistribution and use is allowed according to the terms of the BSD license.
11
- # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
12
-
13
- # NOTE: As of cmake v3.18, built-in FindGTK is *only* valid for GTK1
14
-
15
- include(FindPackageHandleStandardArgs)
16
-
17
- find_package(PkgConfig REQUIRED)
18
-
19
- pkg_check_modules(GTK3 IMPORTED_TARGET "gtk+-3.0>=${GTK_REQUIRED}" "gdk-pixbuf-2.0>=${GDK_PIXBUF_REQUIRED}")
20
-
21
- find_package_handle_standard_args(GTK DEFAULT_MSG GTK3_LIBRARIES GTK3_CFLAGS)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/cmake/modules/FindLCMS2.cmake DELETED
@@ -1,73 +0,0 @@
1
- # - Find LCMS2
2
- # Find the LCMS2 includes and library
3
- # This module defines
4
- # LCMS2_INCLUDE_DIR, where to find lcms.h
5
- # LCMS2_LIBRARIES, the libraries needed to use LCMS2.
6
- # LCMS2_VERSION, The value of LCMS_VERSION defined in lcms.h
7
- # LCMS2_FOUND, If false, do not try to use LCMS2.
8
-
9
-
10
- # Copyright (c) 2008, Adrian Page, <[email protected]>
11
- # Copyright (c) 2009, Cyrille Berger, <[email protected]>
12
- #
13
- # Redistribution and use is allowed according to the terms of the BSD license.
14
- # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
15
-
16
-
17
- # use pkg-config to get the directories and then use these values
18
- # in the FIND_PATH() and FIND_LIBRARY() calls
19
- if(NOT WIN32)
20
- find_package(PkgConfig)
21
- pkg_check_modules(PC_LCMS2 lcms2)
22
- set(LCMS2_DEFINITIONS ${PC_LCMS2_CFLAGS_OTHER})
23
- endif(NOT WIN32)
24
-
25
- find_path(LCMS2_INCLUDE_DIR lcms2.h
26
- PATHS
27
- ${PC_LCMS2_INCLUDEDIR}
28
- ${PC_LCMS2_INCLUDE_DIRS}
29
- PATH_SUFFIXES lcms2 liblcms2
30
- )
31
-
32
- find_library(LCMS2_LIBRARIES NAMES lcms2 liblcms2 lcms-2 liblcms-2
33
- PATHS
34
- ${PC_LCMS2_LIBDIR}
35
- ${PC_LCMS2_LIBRARY_DIRS}
36
- PATH_SUFFIXES lcms2
37
- )
38
-
39
- if(LCMS2_INCLUDE_DIR AND LCMS2_LIBRARIES)
40
- set(LCMS2_FOUND TRUE)
41
- else(LCMS2_INCLUDE_DIR AND LCMS2_LIBRARIES)
42
- set(LCMS2_FOUND FALSE)
43
- endif(LCMS2_INCLUDE_DIR AND LCMS2_LIBRARIES)
44
-
45
- if(LCMS2_FOUND)
46
- file(READ ${LCMS2_INCLUDE_DIR}/lcms2.h LCMS2_VERSION_CONTENT)
47
- string(REGEX MATCH "#define LCMS_VERSION[ ]*[0-9]*\n" LCMS2_VERSION_MATCH ${LCMS2_VERSION_CONTENT})
48
- if(LCMS2_VERSION_MATCH)
49
- string(REGEX REPLACE "#define LCMS_VERSION[ ]*([0-9]*)\n" "\\1" LCMS2_VERSION ${LCMS2_VERSION_MATCH})
50
- if(NOT LCMS2_FIND_QUIETLY)
51
- string(SUBSTRING ${LCMS2_VERSION} 0 1 LCMS2_MAJOR_VERSION)
52
- string(SUBSTRING ${LCMS2_VERSION} 1 2 LCMS2_MINOR_VERSION)
53
- message(STATUS "Found lcms version ${LCMS2_MAJOR_VERSION}.${LCMS2_MINOR_VERSION}, ${LCMS2_LIBRARIES}")
54
- endif(NOT LCMS2_FIND_QUIETLY)
55
- else(LCMS2_VERSION_MATCH)
56
- if(NOT LCMS2_FIND_QUIETLY)
57
- message(STATUS "Found lcms2 but failed to find version ${LCMS2_LIBRARIES}")
58
- endif(NOT LCMS2_FIND_QUIETLY)
59
- set(LCMS2_VERSION NOTFOUND)
60
- endif(LCMS2_VERSION_MATCH)
61
- else(LCMS2_FOUND)
62
- if(NOT LCMS2_FIND_QUIETLY)
63
- if(LCMS2_FIND_REQUIRED)
64
- message(FATAL_ERROR "Required package lcms2 NOT found")
65
- else(LCMS2_FIND_REQUIRED)
66
- message(STATUS "lcms2 NOT found")
67
- endif(LCMS2_FIND_REQUIRED)
68
- endif(NOT LCMS2_FIND_QUIETLY)
69
- endif(LCMS2_FOUND)
70
-
71
- mark_as_advanced(LCMS2_INCLUDE_DIR LCMS2_LIBRARIES LCMS2_VERSION)
72
-
73
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/cmake/modules/FindNSS3.cmake DELETED
@@ -1,19 +0,0 @@
1
- # - try to find NSS3 libraries
2
- # Once done this will define
3
- #
4
- # NSS3_FOUND - system has NSS3
5
- # PkgConfig::NSS3 - Use this in target_link_libraries to bring both includes and link libraries
6
- #
7
- # Copyright 2015 André Guerreiro, <[email protected]>
8
- # Copyright 2022 Albert Astals Cid, <[email protected]>
9
- #
10
- # Redistribution and use is allowed according to the terms of the BSD license.
11
- # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
12
-
13
- include(FindPackageHandleStandardArgs)
14
-
15
- find_package(PkgConfig REQUIRED)
16
-
17
- pkg_check_modules(NSS3 IMPORTED_TARGET "nss>=3.49")
18
-
19
- find_package_handle_standard_args(NSS3 DEFAULT_MSG NSS3_LIBRARIES NSS3_CFLAGS)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/cmake/modules/GObjectIntrospectionMacros.cmake DELETED
@@ -1,95 +0,0 @@
1
- # Copyright (C) 2010, Pino Toscano, <[email protected]>
2
- #
3
- # Redistribution and use is allowed according to the terms of the BSD license.
4
- # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
5
-
6
- macro(_gir_list_prefix _outvar _listvar _prefix)
7
- set(${_outvar})
8
- foreach(_item IN LISTS ${_listvar})
9
- list(APPEND ${_outvar} ${_prefix}${_item})
10
- endforeach()
11
- endmacro(_gir_list_prefix)
12
-
13
- macro(gir_add_introspections introspections_girs)
14
-
15
- set(_gir_girs)
16
- set(_gir_typelibs)
17
-
18
- foreach(gir IN LISTS ${introspections_girs})
19
-
20
- set(_gir_name "${gir}")
21
-
22
- ## Transform the gir filename to something which can reference through a variable
23
- ## without automake/make complaining, eg Gtk-2.0.gir -> Gtk_2_0_gir
24
- string(REPLACE "-" "_" _gir_name "${_gir_name}")
25
- string(REPLACE "." "_" _gir_name "${_gir_name}")
26
-
27
- # Namespace and Version is either fetched from the gir filename
28
- # or the _NAMESPACE/_VERSION variable combo
29
- set(_gir_namespace "${${_gir_name}_NAMESPACE}")
30
- if (_gir_namespace STREQUAL "")
31
- string(REGEX REPLACE "([^-]+)-.*" "\\1" _gir_namespace "${gir}")
32
- endif ()
33
- set(_gir_version "${${_gir_name}_VERSION}")
34
- if (_gir_version STREQUAL "")
35
- string(REGEX REPLACE ".*-([^-]+).gir" "\\1" _gir_version "${gir}")
36
- endif ()
37
-
38
- # _PROGRAM is an optional variable which needs it's own --program argument
39
- set(_gir_program "${${_gir_name}_PROGRAM}")
40
- if (NOT _gir_program STREQUAL "")
41
- set(_gir_program "--program=${_gir_program}")
42
- endif ()
43
-
44
- # Variables which provides a list of things
45
- _gir_list_prefix(_gir_libraries ${_gir_name}_LIBS "--library=")
46
- _gir_list_prefix(_gir_packages ${_gir_name}_PACKAGES "--pkg=")
47
- _gir_list_prefix(_gir_includes ${_gir_name}_INCLUDES "--include=")
48
- _gir_list_prefix(_gir_export_packages ${_gir_name}_EXPORT_PACKAGES "--pkg-export=")
49
-
50
- # Reuse the LIBTOOL variable from by automake if it's set
51
- set(_gir_libtool "--no-libtool")
52
-
53
- add_custom_command(
54
- COMMAND ${INTROSPECTION_SCANNER}
55
- ${INTROSPECTION_SCANNER_ARGS}
56
- --namespace=${_gir_namespace}
57
- --nsversion=${_gir_version}
58
- ${_gir_libtool}
59
- ${_gir_program}
60
- ${_gir_libraries}
61
- ${_gir_packages}
62
- ${_gir_includes}
63
- ${_gir_export_packages}
64
- ${${_gir_name}_SCANNERFLAGS}
65
- ${${_gir_name}_CFLAGS}
66
- ${${_gir_name}_FILES}
67
- --output ${CMAKE_CURRENT_BINARY_DIR}/${gir}
68
- DEPENDS ${${_gir_name}_FILES}
69
- ${${_gir_name}_LIBS}
70
- OUTPUT ${gir}
71
- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
72
- VERBATIM
73
- )
74
- list(APPEND _gir_girs ${CMAKE_CURRENT_BINARY_DIR}/${gir})
75
- install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${gir} DESTINATION ${CMAKE_INSTALL_DATADIR}/gir-1.0)
76
-
77
- string(REPLACE ".gir" ".typelib" _typelib "${gir}")
78
- add_custom_command(
79
- COMMAND ${INTROSPECTION_COMPILER}
80
- ${INTROSPECTION_COMPILER_ARGS}
81
- --includedir=.
82
- ${CMAKE_CURRENT_BINARY_DIR}/${gir}
83
- -o ${CMAKE_CURRENT_BINARY_DIR}/${_typelib}
84
- DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${gir}
85
- OUTPUT ${_typelib}
86
- WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
87
- )
88
- list(APPEND _gir_typelibs ${CMAKE_CURRENT_BINARY_DIR}/${_typelib})
89
- install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${_typelib} DESTINATION ${CMAKE_INSTALL_LIBDIR}/girepository-1.0)
90
-
91
- endforeach()
92
-
93
- add_custom_target(gir-typelibs ALL DEPENDS ${_gir_typelibs})
94
-
95
- endmacro(gir_add_introspections)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/cmake/modules/MacroOptionalFindPackage.cmake DELETED
@@ -1,48 +0,0 @@
1
- # - MACRO_OPTIONAL_FIND_PACKAGE() combines FIND_PACKAGE() with an OPTION()
2
- # MACRO_OPTIONAL_FIND_PACKAGE( <name> [QUIT] )
3
- # This macro is a combination of OPTION() and FIND_PACKAGE(), it
4
- # works like FIND_PACKAGE(), but additionally it automatically creates
5
- # an option name WITH_<name>, which can be disabled via the cmake GUI.
6
- # or via -DWITH_<name>=OFF
7
- # The standard <name>_FOUND variables can be used in the same way
8
- # as when using the normal FIND_PACKAGE()
9
-
10
- # Copyright (c) 2006-2010 Alexander Neundorf, <[email protected]>
11
- #
12
- # Redistribution and use is allowed according to the terms of the BSD license.
13
- # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
14
-
15
- # This is just a helper macro to set a bunch of variables empty.
16
- # We don't know whether the package uses UPPERCASENAME or CamelCaseName, so we try both:
17
- macro(_MOFP_SET_EMPTY_IF_DEFINED _name _var)
18
- if(DEFINED ${_name}_${_var})
19
- set(${_name}_${_var} "")
20
- endif(DEFINED ${_name}_${_var})
21
-
22
- string(TOUPPER ${_name} _nameUpper)
23
- if(DEFINED ${_nameUpper}_${_var})
24
- set(${_nameUpper}_${_var} "")
25
- endif(DEFINED ${_nameUpper}_${_var})
26
- endmacro(_MOFP_SET_EMPTY_IF_DEFINED _package _var)
27
-
28
-
29
- macro (MACRO_OPTIONAL_FIND_PACKAGE _name )
30
- option(WITH_${_name} "Search for ${_name} package" ON)
31
- if (WITH_${_name})
32
- find_package(${_name} ${ARGN})
33
- else (WITH_${_name})
34
- string(TOUPPER ${_name} _nameUpper)
35
- set(${_name}_FOUND FALSE)
36
- set(${_nameUpper}_FOUND FALSE)
37
-
38
- _mofp_set_empty_if_defined(${_name} INCLUDE_DIRS)
39
- _mofp_set_empty_if_defined(${_name} INCLUDE_DIR)
40
- _mofp_set_empty_if_defined(${_name} INCLUDES)
41
- _mofp_set_empty_if_defined(${_name} LIBRARY)
42
- _mofp_set_empty_if_defined(${_name} LIBRARIES)
43
- _mofp_set_empty_if_defined(${_name} LIBS)
44
- _mofp_set_empty_if_defined(${_name} FLAGS)
45
- _mofp_set_empty_if_defined(${_name} DEFINITIONS)
46
- endif (WITH_${_name})
47
- endmacro (MACRO_OPTIONAL_FIND_PACKAGE)
48
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/cmake/modules/PopplerDefaults.cmake DELETED
@@ -1,9 +0,0 @@
1
- # enable the testing facilities
2
- enable_testing()
3
-
4
- # put the include directories of the sources before other include paths
5
- # (eg, system includes)
6
- set(CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE ON)
7
-
8
- # colored output
9
- set(CMAKE_COLOR_MAKEFILE ON)
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/cmake/modules/PopplerMacros.cmake DELETED
@@ -1,199 +0,0 @@
1
- # Copyright 2008 Pino Toscano, <[email protected]>
2
- #
3
- # Redistribution and use is allowed according to the terms of the BSD license.
4
- # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
5
-
6
- macro(POPPLER_ADD_TEST exe build_flag)
7
- set(build_test ${${build_flag}})
8
-
9
- # Omit the disabled test binaries from the "all" target
10
- if(NOT build_test)
11
- set(_add_executable_param ${_add_executable_param} EXCLUDE_FROM_ALL)
12
- endif(NOT build_test)
13
-
14
- add_executable(${exe} ${_add_executable_param} ${ARGN})
15
-
16
- # if the tests are EXCLUDE_FROM_ALL, add a target "buildtests" to build all tests
17
- # Don't try to use custom targets if building with Visual Studio
18
- if(NOT build_test AND NOT MSVC_IDE)
19
- get_property(_buildtestsAdded GLOBAL PROPERTY BUILDTESTS_ADDED)
20
- if(NOT _buildtestsAdded)
21
- add_custom_target(buildtests)
22
- set_property(GLOBAL PROPERTY BUILDTESTS_ADDED TRUE)
23
- endif(NOT _buildtestsAdded)
24
- add_dependencies(buildtests ${exe})
25
- endif(NOT build_test AND NOT MSVC_IDE)
26
- endmacro(POPPLER_ADD_TEST)
27
-
28
- macro(POPPLER_CREATE_INSTALL_PKGCONFIG generated_file install_location)
29
- configure_file(${generated_file}.cmake ${CMAKE_CURRENT_BINARY_DIR}/${generated_file} @ONLY)
30
- install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${generated_file} DESTINATION ${install_location})
31
- endmacro(POPPLER_CREATE_INSTALL_PKGCONFIG)
32
-
33
- macro(SHOW_END_MESSAGE what value)
34
- string(LENGTH ${what} length_what)
35
- math(EXPR left_char "20 - ${length_what}")
36
- set(blanks)
37
- foreach(_i RANGE 1 ${left_char})
38
- set(blanks "${blanks} ")
39
- endforeach(_i)
40
-
41
- message(" ${what}:${blanks} ${value}")
42
- endmacro(SHOW_END_MESSAGE)
43
-
44
- macro(SHOW_END_MESSAGE_YESNO what enabled)
45
- if(${enabled})
46
- set(enabled_string "yes")
47
- else(${enabled})
48
- set(enabled_string "no")
49
- endif(${enabled})
50
-
51
- show_end_message("${what}" "${enabled_string}")
52
- endmacro(SHOW_END_MESSAGE_YESNO)
53
-
54
- macro(POPPLER_CHECK_LINK_FLAG flag var)
55
- set(_save_CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}")
56
- include(CheckCXXSourceCompiles)
57
- set(CMAKE_REQUIRED_LIBRARIES "${flag}")
58
- check_cxx_source_compiles("int main() { return 0; }" ${var})
59
- set(CMAKE_REQUIRED_LIBRARIES "${_save_CMAKE_REQUIRED_LIBRARIES}")
60
- endmacro(POPPLER_CHECK_LINK_FLAG)
61
-
62
-
63
- set(CMAKE_SYSTEM_INCLUDE_PATH ${CMAKE_SYSTEM_INCLUDE_PATH}
64
- "${CMAKE_INSTALL_PREFIX}/include" )
65
-
66
- set(CMAKE_SYSTEM_PROGRAM_PATH ${CMAKE_SYSTEM_PROGRAM_PATH}
67
- "${CMAKE_INSTALL_PREFIX}/bin" )
68
-
69
- set(CMAKE_SYSTEM_LIBRARY_PATH ${CMAKE_SYSTEM_LIBRARY_PATH}
70
- "${CMAKE_INSTALL_PREFIX}/lib" )
71
-
72
- # under Windows dlls may be also installed in bin/
73
- if(WIN32)
74
- set(CMAKE_SYSTEM_LIBRARY_PATH ${CMAKE_SYSTEM_LIBRARY_PATH}
75
- "${CMAKE_INSTALL_PREFIX}/bin" )
76
- endif(WIN32)
77
-
78
- if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
79
- set(CMAKE_BUILD_TYPE RelWithDebInfo)
80
- endif(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
81
-
82
- string(TOUPPER "${CMAKE_BUILD_TYPE}" _CMAKE_BUILD_TYPE_UPPER)
83
- set(_known_build_types RELWITHDEBINFO;RELEASE;DEBUG;DEBUGFULL;PROFILE)
84
- # We override CMAKE_CXX_FLAGS_${_CMAKE_BUILD_TYPE_UPPER} below. If the user
85
- # selects a CMAKE_BUILD_TYPE that is not handled by the logic below, we will
86
- # end up dropping the previous flags (e.g. those set in a cross-compilation
87
- # CMake toolchain file). To avoid surprising compilation errors, we emit an
88
- # error in that case, so that the user can handle the passed CMAKE_BUILD_TYPE
89
- # in the compiler flags logic below.
90
- if (NOT "${_CMAKE_BUILD_TYPE_UPPER}" IN_LIST _known_build_types)
91
- message(FATAL_ERROR "Unsupported CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")
92
- endif()
93
- set(_save_cflags "${CMAKE_C_FLAGS}")
94
- set(_save_cxxflags "${CMAKE_CXX_FLAGS}")
95
-
96
- if(CMAKE_COMPILER_IS_GNUCXX)
97
- # set the default compile warnings
98
- set(_warn "-Wall -Wextra -Wpedantic")
99
- set(_warn "${_warn} -Wno-unused-parameter")
100
- set(_warn "${_warn} -Wcast-align")
101
- set(_warn "${_warn} -Wformat-security")
102
- set(_warn "${_warn} -Wframe-larger-than=65536")
103
- set(_warn "${_warn} -Wlogical-op")
104
- set(_warn "${_warn} -Wmissing-format-attribute")
105
- set(_warn "${_warn} -Wnon-virtual-dtor")
106
- set(_warn "${_warn} -Woverloaded-virtual")
107
- set(_warn "${_warn} -Wmissing-declarations")
108
- set(_warn "${_warn} -Wundef")
109
- set(_warn "${_warn} -Wzero-as-null-pointer-constant")
110
- set(_warn "${_warn} -Wshadow")
111
- set(_warn "${_warn} -Wsuggest-override")
112
-
113
- # set extra warnings
114
- set(_warnx "${_warnx} -Wconversion")
115
- set(_warnx "${_warnx} -Wuseless-cast")
116
-
117
- set(DEFAULT_COMPILE_WARNINGS "${_warn}")
118
- set(DEFAULT_COMPILE_WARNINGS_EXTRA "${_warn} ${_warnx}")
119
-
120
- set(CMAKE_CXX_FLAGS "-fno-exceptions -fno-check-new -fno-common -fno-operator-names -D_DEFAULT_SOURCE")
121
- set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g")
122
- set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG")
123
- set(CMAKE_CXX_FLAGS_DEBUG "-g -O2 -fno-reorder-blocks -fno-schedule-insns -fno-inline")
124
- set(CMAKE_CXX_FLAGS_DEBUGFULL "-g3 -fno-inline")
125
- set(CMAKE_CXX_FLAGS_PROFILE "-g3 -fno-inline -ftest-coverage -fprofile-arcs")
126
- set(CMAKE_C_FLAGS "-std=c99 -D_DEFAULT_SOURCE")
127
- set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g")
128
- set(CMAKE_C_FLAGS_RELEASE "-O2 -DNDEBUG")
129
- set(CMAKE_C_FLAGS_DEBUG "-g -O2 -fno-reorder-blocks -fno-schedule-insns -fno-inline")
130
- set(CMAKE_C_FLAGS_DEBUGFULL "-g3 -fno-inline")
131
- set(CMAKE_C_FLAGS_PROFILE "-g3 -fno-inline -ftest-coverage -fprofile-arcs")
132
-
133
- poppler_check_link_flag("-Wl,--as-needed" GCC_HAS_AS_NEEDED)
134
- if(GCC_HAS_AS_NEEDED)
135
- set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--as-needed")
136
- set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--as-needed")
137
- set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--as-needed")
138
- endif(GCC_HAS_AS_NEEDED)
139
- set(_compiler_flags_changed 1)
140
- endif (CMAKE_COMPILER_IS_GNUCXX)
141
-
142
- if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
143
- # set the default compile warnings
144
- set(_warn "-Wall -Wextra -Wpedantic")
145
- set(_warn "${_warn} -Wno-unused-parameter")
146
- set(_warn "${_warn} -Wcast-align")
147
- set(_warn "${_warn} -Wformat-security")
148
- set(_warn "${_warn} -Wframe-larger-than=65536")
149
- set(_warn "${_warn} -Wmissing-format-attribute")
150
- set(_warn "${_warn} -Wnon-virtual-dtor")
151
- set(_warn "${_warn} -Woverloaded-virtual")
152
- set(_warn "${_warn} -Wmissing-declarations")
153
- set(_warn "${_warn} -Wundef")
154
- set(_warn "${_warn} -Wzero-as-null-pointer-constant")
155
- set(_warn "${_warn} -Wshadow")
156
- set(_warn "${_warn} -Wweak-vtables")
157
-
158
- # set extra warnings
159
- set(_warnx "${_warnx} -Wconversion")
160
-
161
- set(DEFAULT_COMPILE_WARNINGS "${_warn}")
162
- set(DEFAULT_COMPILE_WARNINGS_EXTRA "${_warn} ${_warnx}")
163
-
164
- set(CMAKE_CXX_FLAGS "-fno-exceptions -fno-check-new -fno-common -D_DEFAULT_SOURCE")
165
- set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g")
166
- set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG")
167
- # clang does not support -fno-reorder-blocks -fno-schedule-insns, so do not use -O2
168
- set(CMAKE_CXX_FLAGS_DEBUG "-g")
169
- set(CMAKE_CXX_FLAGS_DEBUGFULL "-g3 -fno-inline")
170
- set(CMAKE_CXX_FLAGS_PROFILE "-g3 -fno-inline -ftest-coverage -fprofile-arcs")
171
- set(CMAKE_C_FLAGS "-std=c99 -D_DEFAULT_SOURCE")
172
- set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g")
173
- set(CMAKE_C_FLAGS_RELEASE "-O2 -DNDEBUG")
174
- # clang does not support -fno-reorder-blocks -fno-schedule-insns, so do not use -O2
175
- set(CMAKE_C_FLAGS_DEBUG "-g")
176
- set(CMAKE_C_FLAGS_DEBUGFULL "-g3 -fno-inline")
177
- set(CMAKE_C_FLAGS_PROFILE "-g3 -fno-inline -ftest-coverage -fprofile-arcs")
178
- set(_compiler_flags_changed 1)
179
- endif()
180
-
181
- if(CMAKE_C_COMPILER MATCHES "icc")
182
- set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g")
183
- set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG")
184
- set(CMAKE_CXX_FLAGS_DEBUG "-O2 -g -0b0 -noalign")
185
- set(CMAKE_CXX_FLAGS_DEBUGFULL "-g -Ob0 -noalign")
186
- set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g")
187
- set(CMAKE_C_FLAGS_RELEASE "-O2 -DNDEBUG")
188
- set(CMAKE_C_FLAGS_DEBUG "-O2 -g -Ob0 -noalign")
189
- set(CMAKE_C_FLAGS_DEBUGFULL "-g -Ob0 -noalign")
190
- set(_compiler_flags_changed 1)
191
- endif(CMAKE_C_COMPILER MATCHES "icc")
192
-
193
- if(_compiler_flags_changed)
194
- # Ensure that the previous CMAKE_{C,CXX}_FLAGS are included in the current configuration flags.
195
- foreach(_build_type ${_known_build_types})
196
- set(CMAKE_CXX_FLAGS_${_build_type} "${CMAKE_CXX_FLAGS_${_build_type}} ${_save_cxxflags}")
197
- set(CMAKE_C_FLAGS_${_build_type} "${CMAKE_C_FLAGS_${_build_type}} ${_save_cflags}")
198
- endforeach()
199
- endif()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/config.h.cmake DELETED
@@ -1,196 +0,0 @@
1
- /* config.h. Generated from config.h.cmake by cmake. */
2
-
3
- /* Build against libcurl. */
4
- #cmakedefine ENABLE_LIBCURL 1
5
-
6
- /* Use libjpeg instead of builtin jpeg decoder. */
7
- #cmakedefine ENABLE_LIBJPEG 1
8
-
9
- /* Use libopenjpeg instead of builtin jpeg2000 decoder. */
10
- #cmakedefine ENABLE_LIBOPENJPEG 1
11
-
12
- /* Build against libtiff. */
13
- #cmakedefine ENABLE_LIBTIFF 1
14
-
15
- /* Build against libpng. */
16
- #cmakedefine ENABLE_LIBPNG 1
17
-
18
- /* Do not hardcode the library location */
19
- #cmakedefine ENABLE_RELOCATABLE 1
20
-
21
- /* Use zlib instead of builtin zlib decoder to uncompress flate streams. */
22
- #cmakedefine ENABLE_ZLIB_UNCOMPRESS 1
23
-
24
- /* Build against libnss3 for digital signature validation */
25
- #cmakedefine ENABLE_NSS3 1
26
-
27
- /* Build against libgpgme for digital signature validation */
28
- #cmakedefine ENABLE_GPGME 1
29
-
30
- /* Signatures enabled */
31
- #cmakedefine ENABLE_SIGNATURES 1
32
-
33
- /* Default signature backend */
34
- #cmakedefine DEFAULT_SIGNATURE_BACKEND "${DEFAULT_SIGNATURE_BACKEND}"
35
-
36
- /* Use cairo for rendering. */
37
- #cmakedefine HAVE_CAIRO 1
38
-
39
- /* Do we have any DCT decoder?. */
40
- #cmakedefine HAVE_DCT_DECODER 1
41
-
42
- /* Do we have any JPX decoder?. */
43
- #cmakedefine HAVE_JPX_DECODER 1
44
-
45
- /* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
46
- */
47
- #cmakedefine HAVE_DIRENT_H 1
48
-
49
- /* Define to 1 if you have the <dlfcn.h> header file. */
50
- #cmakedefine HAVE_DLFCN_H 1
51
-
52
- /* Define to 1 if you have the <fcntl.h> header file. */
53
- #cmakedefine HAVE_FCNTL_H 1
54
-
55
- /* Define to 1 if you have the `fseek64' function. */
56
- #cmakedefine HAVE_FSEEK64 1
57
-
58
- /* Define to 1 if fseeko (and presumably ftello) exists and is declared. */
59
- #cmakedefine HAVE_FSEEKO 1
60
-
61
- /* Define to 1 if you have the `ftell64' function. */
62
- #cmakedefine HAVE_FTELL64 1
63
-
64
- /* Define to 1 if you have the `pread64' function. */
65
- #cmakedefine HAVE_PREAD64 1
66
-
67
- /* Define to 1 if you have the `lseek64' function. */
68
- #cmakedefine HAVE_LSEEK64 1
69
-
70
- /* Defines if gettimeofday is available on your system */
71
- #cmakedefine HAVE_GETTIMEOFDAY 1
72
-
73
- /* Defines if gmtime_r is available on your system */
74
- #cmakedefine HAVE_GMTIME_R 1
75
-
76
- /* Defines if timegm is available on your system */
77
- #cmakedefine HAVE_TIMEGM 1
78
-
79
- /* Define to 1 if you have the `z' library (-lz). */
80
- #cmakedefine HAVE_LIBZ 1
81
-
82
- /* Defines if localtime_r is available on your system */
83
- #cmakedefine HAVE_LOCALTIME_R 1
84
-
85
- /* Define to 1 if you have the `mkstemp' function. */
86
- #cmakedefine HAVE_MKSTEMP 1
87
-
88
- /* Defines if strtok_r is available on your system */
89
- #cmakedefine HAVE_STRTOK_R 1
90
-
91
- /* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
92
- #cmakedefine HAVE_NDIR_H 1
93
-
94
- /* Define to 1 if you have the `popen' function. */
95
- #cmakedefine HAVE_POPEN 1
96
-
97
- /* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
98
- */
99
- #cmakedefine HAVE_SYS_DIR_H 1
100
-
101
- /* Define to 1 if you have the <sys/mman.h> header file. */
102
- #cmakedefine HAVE_SYS_MMAN_H 1
103
-
104
- /* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
105
- */
106
- #cmakedefine HAVE_SYS_NDIR_H 1
107
-
108
- /* Define to 1 if you have the <sys/stat.h> header file. */
109
- #cmakedefine HAVE_SYS_STAT_H 1
110
-
111
- /* Define to 1 if you have the <unistd.h> header file. */
112
- #cmakedefine HAVE_UNISTD_H 1
113
-
114
- /* Define to 1 if you have a big endian machine */
115
- #cmakedefine WORDS_BIGENDIAN 1
116
-
117
- /* Define as const if the declaration of iconv() needs const. */
118
- #define ICONV_CONST ${ICONV_CONST}
119
-
120
- /* Generate OPI comments in PS output. */
121
- #cmakedefine OPI_SUPPORT 1
122
-
123
- /* Name of package */
124
- #define PACKAGE "poppler"
125
-
126
- /* Define to the address where bug reports for this package should be sent. */
127
- #define PACKAGE_BUGREPORT "https://bugs.freedesktop.org/enter_bug.cgi?product=poppler"
128
-
129
- /* Define to the full name of this package. */
130
- #define PACKAGE_NAME "poppler"
131
-
132
- /* Define to the full name and version of this package. */
133
- #define PACKAGE_STRING "poppler ${POPPLER_VERSION}"
134
-
135
- /* Define to the one symbol short name of this package. */
136
- #define PACKAGE_TARNAME "poppler"
137
-
138
- /* Define to the home page for this package. */
139
- #define PACKAGE_URL ""
140
-
141
- /* Define to the version of this package. */
142
- #define PACKAGE_VERSION "${POPPLER_VERSION}"
143
-
144
- /* Poppler data dir */
145
- #define POPPLER_DATADIR "${POPPLER_DATADIR}"
146
-
147
- /* Support for curl based doc builder is compiled in. */
148
- #cmakedefine POPPLER_HAS_CURL_SUPPORT 1
149
-
150
- /* Enable word list support. */
151
- #cmakedefine TEXTOUT_WORD_LIST 1
152
-
153
- /* Defines if use cms */
154
- #cmakedefine USE_CMS 1
155
-
156
- /* Use single precision arithmetic in the Splash backend */
157
- #cmakedefine USE_FLOAT 1
158
-
159
- /* Version number of package */
160
- #define VERSION "${POPPLER_VERSION}"
161
-
162
- /* Use fontconfig font configuration backend */
163
- #cmakedefine WITH_FONTCONFIGURATION_FONTCONFIG 1
164
-
165
- /* Use win32 font configuration backend */
166
- #cmakedefine WITH_FONTCONFIGURATION_WIN32 1
167
-
168
- /* Use android font configuration backend */
169
- #cmakedefine WITH_FONTCONFIGURATION_ANDROID 1
170
-
171
- /* OpenJPEG with the OPJ_DPARAMETERS_IGNORE_PCLR_CMAP_CDEF_FLAG flag */
172
- #cmakedefine WITH_OPENJPEG_IGNORE_PCLR_CMAP_CDEF_FLAG 1
173
-
174
- /* MS defined snprintf as deprecated but then added it in Visual Studio 2015. */
175
- #if defined(_MSC_VER) && _MSC_VER < 1900
176
- #define snprintf _snprintf
177
- #endif
178
-
179
- //------------------------------------------------------------------------
180
- // popen
181
- //------------------------------------------------------------------------
182
- #if defined(_MSC_VER) || defined(__BORLANDC__)
183
- #define popen _popen
184
- #define pclose _pclose
185
- #define strncasecmp _strnicmp
186
- #define strcasecmp _stricmp
187
- #endif
188
-
189
- /* Number of bits in a file offset, on hosts where this is settable. */
190
- #cmakedefine _FILE_OFFSET_BITS @_FILE_OFFSET_BITS@
191
-
192
- /* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */
193
- /* TODO This is wrong, port if needed #undef _LARGEFILE_SOURCE */
194
-
195
- /* Define for large files, on AIX-style hosts. */
196
- /* TODO This is wrong, port if needed #undef _LARGE_FILES */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/cpp/CMakeLists.txt DELETED
@@ -1,52 +0,0 @@
1
- include_directories(
2
- ${CMAKE_CURRENT_SOURCE_DIR}
3
- ${CMAKE_CURRENT_BINARY_DIR}
4
- )
5
-
6
- configure_file(poppler-version.h.in ${CMAKE_CURRENT_BINARY_DIR}/poppler-version.h @ONLY)
7
-
8
- add_subdirectory(tests)
9
-
10
- set(poppler_cpp_SRCS
11
- poppler-destination.cpp
12
- poppler-document.cpp
13
- poppler-embedded-file.cpp
14
- poppler-font.cpp
15
- poppler-global.cpp
16
- poppler-image.cpp
17
- poppler-page.cpp
18
- poppler-page-renderer.cpp
19
- poppler-page-transition.cpp
20
- poppler-private.cpp
21
- poppler-rectangle.cpp
22
- poppler-toc.cpp
23
- poppler-version.cpp
24
- )
25
-
26
- add_library(poppler-cpp ${poppler_cpp_SRCS})
27
- generate_export_header(poppler-cpp BASE_NAME poppler-cpp EXPORT_FILE_NAME "${CMAKE_CURRENT_BINARY_DIR}/poppler_cpp_export.h")
28
- set_target_properties(poppler-cpp PROPERTIES VERSION 0.11.0 SOVERSION 0)
29
- if(MINGW AND BUILD_SHARED_LIBS)
30
- get_target_property(POPPLER_CPP_SOVERSION poppler-cpp SOVERSION)
31
- set_target_properties(poppler-cpp PROPERTIES SUFFIX "-${POPPLER_CPP_SOVERSION}${CMAKE_SHARED_LIBRARY_SUFFIX}")
32
- endif()
33
- target_link_libraries(poppler-cpp poppler Iconv::Iconv)
34
- install(TARGETS poppler-cpp RUNTIME DESTINATION bin LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
35
-
36
- install(FILES
37
- poppler-destination.h
38
- poppler-document.h
39
- poppler-embedded-file.h
40
- poppler-font.h
41
- poppler-font-private.h
42
- poppler-global.h
43
- poppler-image.h
44
- poppler-page.h
45
- poppler-page-renderer.h
46
- poppler-page-transition.h
47
- poppler-rectangle.h
48
- poppler-toc.h
49
- ${CMAKE_CURRENT_BINARY_DIR}/poppler_cpp_export.h
50
- ${CMAKE_CURRENT_BINARY_DIR}/poppler-version.h
51
- DESTINATION include/poppler/cpp)
52
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/cpp/Doxyfile DELETED
@@ -1,1634 +0,0 @@
1
- # Doxyfile 1.7.1
2
-
3
- # This file describes the settings to be used by the documentation system
4
- # doxygen (www.doxygen.org) for a project
5
- #
6
- # All text after a hash (#) is considered a comment and will be ignored
7
- # The format is:
8
- # TAG = value [value, ...]
9
- # For lists items can also be appended using:
10
- # TAG += value [value, ...]
11
- # Values that contain spaces should be placed between quotes (" ")
12
-
13
- #---------------------------------------------------------------------------
14
- # Project related configuration options
15
- #---------------------------------------------------------------------------
16
-
17
- # This tag specifies the encoding used for all characters in the config file
18
- # that follow. The default is UTF-8 which is also the encoding used for all
19
- # text before the first occurrence of this tag. Doxygen uses libiconv (or the
20
- # iconv built into libc) for the transcoding. See
21
- # http://www.gnu.org/software/libiconv for the list of possible encodings.
22
-
23
- DOXYFILE_ENCODING = UTF-8
24
-
25
- # The PROJECT_NAME tag is a single word (or a sequence of words surrounded
26
- # by quotes) that should identify the project.
27
-
28
- PROJECT_NAME = "Poppler CPP"
29
-
30
- # The PROJECT_NUMBER tag can be used to enter a project or revision number.
31
- # This could be handy for archiving the generated documentation or
32
- # if some version control system is used.
33
-
34
- PROJECT_NUMBER = 24.01.0
35
-
36
- # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
37
- # base path where the generated documentation will be put.
38
- # If a relative path is entered, it will be relative to the location
39
- # where doxygen was started. If left blank the current directory will be used.
40
-
41
- OUTPUT_DIRECTORY =
42
-
43
- # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
44
- # 4096 sub-directories (in 2 levels) under the output directory of each output
45
- # format and will distribute the generated files over these directories.
46
- # Enabling this option can be useful when feeding doxygen a huge amount of
47
- # source files, where putting all generated files in the same directory would
48
- # otherwise cause performance problems for the file system.
49
-
50
- CREATE_SUBDIRS = NO
51
-
52
- # The OUTPUT_LANGUAGE tag is used to specify the language in which all
53
- # documentation generated by doxygen is written. Doxygen will use this
54
- # information to generate all constant output in the proper language.
55
- # The default language is English, other supported languages are:
56
- # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
57
- # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
58
- # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
59
- # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
60
- # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak,
61
- # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
62
-
63
- OUTPUT_LANGUAGE = English
64
-
65
- # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
66
- # include brief member descriptions after the members that are listed in
67
- # the file and class documentation (similar to JavaDoc).
68
- # Set to NO to disable this.
69
-
70
- BRIEF_MEMBER_DESC = NO
71
-
72
- # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
73
- # the brief description of a member or function before the detailed description.
74
- # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
75
- # brief descriptions will be completely suppressed.
76
-
77
- REPEAT_BRIEF = YES
78
-
79
- # This tag implements a quasi-intelligent brief description abbreviator
80
- # that is used to form the text in various listings. Each string
81
- # in this list, if found as the leading text of the brief description, will be
82
- # stripped from the text and the result after processing the whole list, is
83
- # used as the annotated text. Otherwise, the brief description is used as-is.
84
- # If left blank, the following values are used ("$name" is automatically
85
- # replaced with the name of the entity): "The $name class" "The $name widget"
86
- # "The $name file" "is" "provides" "specifies" "contains"
87
- # "represents" "a" "an" "the"
88
-
89
- ABBREVIATE_BRIEF =
90
-
91
- # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
92
- # Doxygen will generate a detailed section even if there is only a brief
93
- # description.
94
-
95
- ALWAYS_DETAILED_SEC = YES
96
-
97
- # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
98
- # inherited members of a class in the documentation of that class as if those
99
- # members were ordinary class members. Constructors, destructors and assignment
100
- # operators of the base classes will not be shown.
101
-
102
- INLINE_INHERITED_MEMB = NO
103
-
104
- # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
105
- # path before files name in the file list and in the header files. If set
106
- # to NO the shortest path that makes the file name unique will be used.
107
-
108
- FULL_PATH_NAMES = YES
109
-
110
- # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
111
- # can be used to strip a user-defined part of the path. Stripping is
112
- # only done if one of the specified strings matches the left-hand part of
113
- # the path. The tag can be used to show relative paths in the file list.
114
- # If left blank the directory from which doxygen is run is used as the
115
- # path to strip.
116
-
117
- STRIP_FROM_PATH =
118
-
119
- # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
120
- # the path mentioned in the documentation of a class, which tells
121
- # the reader which header file to include in order to use a class.
122
- # If left blank only the name of the header file containing the class
123
- # definition is used. Otherwise one should specify the include paths that
124
- # are normally passed to the compiler using the -I flag.
125
-
126
- STRIP_FROM_INC_PATH =
127
-
128
- # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
129
- # (but less readable) file names. This can be useful is your file systems
130
- # doesn't support long names like on DOS, Mac, or CD-ROM.
131
-
132
- SHORT_NAMES = NO
133
-
134
- # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
135
- # will interpret the first line (until the first dot) of a JavaDoc-style
136
- # comment as the brief description. If set to NO, the JavaDoc
137
- # comments will behave just like regular Qt-style comments
138
- # (thus requiring an explicit @brief command for a brief description.)
139
-
140
- JAVADOC_AUTOBRIEF = YES
141
-
142
- # If the QT_AUTOBRIEF tag is set to YES then Doxygen will
143
- # interpret the first line (until the first dot) of a Qt-style
144
- # comment as the brief description. If set to NO, the comments
145
- # will behave just like regular Qt-style comments (thus requiring
146
- # an explicit \brief command for a brief description.)
147
-
148
- QT_AUTOBRIEF = NO
149
-
150
- # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
151
- # treat a multi-line C++ special comment block (i.e. a block of //! or ///
152
- # comments) as a brief description. This used to be the default behaviour.
153
- # The new default is to treat a multi-line C++ comment block as a detailed
154
- # description. Set this tag to YES if you prefer the old behaviour instead.
155
-
156
- MULTILINE_CPP_IS_BRIEF = NO
157
-
158
- # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
159
- # member inherits the documentation from any documented member that it
160
- # re-implements.
161
-
162
- INHERIT_DOCS = YES
163
-
164
- # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
165
- # a new page for each member. If set to NO, the documentation of a member will
166
- # be part of the file/class/namespace that contains it.
167
-
168
- SEPARATE_MEMBER_PAGES = NO
169
-
170
- # The TAB_SIZE tag can be used to set the number of spaces in a tab.
171
- # Doxygen uses this value to replace tabs by spaces in code fragments.
172
-
173
- TAB_SIZE = 8
174
-
175
- # This tag can be used to specify a number of aliases that acts
176
- # as commands in the documentation. An alias has the form "name=value".
177
- # For example adding "sideeffect=\par Side Effects:\n" will allow you to
178
- # put the command \sideeffect (or @sideeffect) in the documentation, which
179
- # will result in a user-defined paragraph with heading "Side Effects:".
180
- # You can put \n's in the value part of an alias to insert newlines.
181
-
182
- ALIASES =
183
-
184
- # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
185
- # sources only. Doxygen will then generate output that is more tailored for C.
186
- # For instance, some of the names that are used will be different. The list
187
- # of all members will be omitted, etc.
188
-
189
- OPTIMIZE_OUTPUT_FOR_C = NO
190
-
191
- # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
192
- # sources only. Doxygen will then generate output that is more tailored for
193
- # Java. For instance, namespaces will be presented as packages, qualified
194
- # scopes will look different, etc.
195
-
196
- OPTIMIZE_OUTPUT_JAVA = NO
197
-
198
- # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
199
- # sources only. Doxygen will then generate output that is more tailored for
200
- # Fortran.
201
-
202
- OPTIMIZE_FOR_FORTRAN = NO
203
-
204
- # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
205
- # sources. Doxygen will then generate output that is tailored for
206
- # VHDL.
207
-
208
- OPTIMIZE_OUTPUT_VHDL = NO
209
-
210
- # Doxygen selects the parser to use depending on the extension of the files it
211
- # parses. With this tag you can assign which parser to use for a given extension.
212
- # Doxygen has a built-in mapping, but you can override or extend it using this
213
- # tag. The format is ext=language, where ext is a file extension, and language
214
- # is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C,
215
- # C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make
216
- # doxygen treat .inc files as Fortran files (default is PHP), and .f files as C
217
- # (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions
218
- # you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.
219
-
220
- EXTENSION_MAPPING = in=C++
221
-
222
- # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
223
- # to include (a tag file for) the STL sources as input, then you should
224
- # set this tag to YES in order to let doxygen match functions declarations and
225
- # definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
226
- # func(std::string) {}). This also make the inheritance and collaboration
227
- # diagrams that involve STL classes more complete and accurate.
228
-
229
- BUILTIN_STL_SUPPORT = YES
230
-
231
- # If you use Microsoft's C++/CLI language, you should set this option to YES to
232
- # enable parsing support.
233
-
234
- CPP_CLI_SUPPORT = NO
235
-
236
- # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
237
- # Doxygen will parse them like normal C++ but will assume all classes use public
238
- # instead of private inheritance when no explicit protection keyword is present.
239
-
240
- SIP_SUPPORT = NO
241
-
242
- # For Microsoft's IDL there are propget and propput attributes to indicate getter
243
- # and setter methods for a property. Setting this option to YES (the default)
244
- # will make doxygen to replace the get and set methods by a property in the
245
- # documentation. This will only work if the methods are indeed getting or
246
- # setting a simple type. If this is not the case, or you want to show the
247
- # methods anyway, you should set this option to NO.
248
-
249
- IDL_PROPERTY_SUPPORT = YES
250
-
251
- # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
252
- # tag is set to YES, then doxygen will reuse the documentation of the first
253
- # member in the group (if any) for the other members of the group. By default
254
- # all members of a group must be documented explicitly.
255
-
256
- DISTRIBUTE_GROUP_DOC = NO
257
-
258
- # Set the SUBGROUPING tag to YES (the default) to allow class member groups of
259
- # the same type (for instance a group of public functions) to be put as a
260
- # subgroup of that type (e.g. under the Public Functions section). Set it to
261
- # NO to prevent subgrouping. Alternatively, this can be done per class using
262
- # the \nosubgrouping command.
263
-
264
- SUBGROUPING = YES
265
-
266
- # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
267
- # is documented as struct, union, or enum with the name of the typedef. So
268
- # typedef struct TypeS {} TypeT, will appear in the documentation as a struct
269
- # with name TypeT. When disabled the typedef will appear as a member of a file,
270
- # namespace, or class. And the struct will be named TypeS. This can typically
271
- # be useful for C code in case the coding convention dictates that all compound
272
- # types are typedef'ed and only the typedef is referenced, never the tag name.
273
-
274
- TYPEDEF_HIDES_STRUCT = NO
275
-
276
- # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
277
- # determine which symbols to keep in memory and which to flush to disk.
278
- # When the cache is full, less often used symbols will be written to disk.
279
- # For small to medium size projects (<1000 input files) the default value is
280
- # probably good enough. For larger projects a too small cache size can cause
281
- # doxygen to be busy swapping symbols to and from disk most of the time
282
- # causing a significant performance penality.
283
- # If the system has enough physical memory increasing the cache will improve the
284
- # performance by keeping more symbols in memory. Note that the value works on
285
- # a logarithmic scale so increasing the size by one will rougly double the
286
- # memory usage. The cache size is given by this formula:
287
- # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
288
- # corresponding to a cache size of 2^16 = 65536 symbols
289
-
290
- SYMBOL_CACHE_SIZE = 0
291
-
292
- #---------------------------------------------------------------------------
293
- # Build related configuration options
294
- #---------------------------------------------------------------------------
295
-
296
- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
297
- # documentation are documented, even if no documentation was available.
298
- # Private class members and static file members will be hidden unless
299
- # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
300
-
301
- EXTRACT_ALL = NO
302
-
303
- # If the EXTRACT_PRIVATE tag is set to YES all private members of a class
304
- # will be included in the documentation.
305
-
306
- EXTRACT_PRIVATE = NO
307
-
308
- # If the EXTRACT_STATIC tag is set to YES all static members of a file
309
- # will be included in the documentation.
310
-
311
- EXTRACT_STATIC = NO
312
-
313
- # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
314
- # defined locally in source files will be included in the documentation.
315
- # If set to NO only classes defined in header files are included.
316
-
317
- EXTRACT_LOCAL_CLASSES = NO
318
-
319
- # This flag is only useful for Objective-C code. When set to YES local
320
- # methods, which are defined in the implementation section but not in
321
- # the interface are included in the documentation.
322
- # If set to NO (the default) only methods in the interface are included.
323
-
324
- EXTRACT_LOCAL_METHODS = NO
325
-
326
- # If this flag is set to YES, the members of anonymous namespaces will be
327
- # extracted and appear in the documentation as a namespace called
328
- # 'anonymous_namespace{file}', where file will be replaced with the base
329
- # name of the file that contains the anonymous namespace. By default
330
- # anonymous namespace are hidden.
331
-
332
- EXTRACT_ANON_NSPACES = NO
333
-
334
- # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
335
- # undocumented members of documented classes, files or namespaces.
336
- # If set to NO (the default) these members will be included in the
337
- # various overviews, but no documentation section is generated.
338
- # This option has no effect if EXTRACT_ALL is enabled.
339
-
340
- HIDE_UNDOC_MEMBERS = NO
341
-
342
- # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
343
- # undocumented classes that are normally visible in the class hierarchy.
344
- # If set to NO (the default) these classes will be included in the various
345
- # overviews. This option has no effect if EXTRACT_ALL is enabled.
346
-
347
- HIDE_UNDOC_CLASSES = NO
348
-
349
- # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
350
- # friend (class|struct|union) declarations.
351
- # If set to NO (the default) these declarations will be included in the
352
- # documentation.
353
-
354
- HIDE_FRIEND_COMPOUNDS = YES
355
-
356
- # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
357
- # documentation blocks found inside the body of a function.
358
- # If set to NO (the default) these blocks will be appended to the
359
- # function's detailed documentation block.
360
-
361
- HIDE_IN_BODY_DOCS = NO
362
-
363
- # The INTERNAL_DOCS tag determines if documentation
364
- # that is typed after a \internal command is included. If the tag is set
365
- # to NO (the default) then the documentation will be excluded.
366
- # Set it to YES to include the internal documentation.
367
-
368
- INTERNAL_DOCS = NO
369
-
370
- # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
371
- # file names in lower-case letters. If set to YES upper-case letters are also
372
- # allowed. This is useful if you have classes or files whose names only differ
373
- # in case and if your file system supports case sensitive file names. Windows
374
- # and Mac users are advised to set this option to NO.
375
-
376
- CASE_SENSE_NAMES = YES
377
-
378
- # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
379
- # will show members with their full class and namespace scopes in the
380
- # documentation. If set to YES the scope will be hidden.
381
-
382
- HIDE_SCOPE_NAMES = NO
383
-
384
- # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
385
- # will put a list of the files that are included by a file in the documentation
386
- # of that file.
387
-
388
- SHOW_INCLUDE_FILES = YES
389
-
390
- # If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
391
- # will list include files with double quotes in the documentation
392
- # rather than with sharp brackets.
393
-
394
- FORCE_LOCAL_INCLUDES = NO
395
-
396
- # If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
397
- # is inserted in the documentation for inline members.
398
-
399
- INLINE_INFO = NO
400
-
401
- # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
402
- # will sort the (detailed) documentation of file and class members
403
- # alphabetically by member name. If set to NO the members will appear in
404
- # declaration order.
405
-
406
- SORT_MEMBER_DOCS = YES
407
-
408
- # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
409
- # brief documentation of file, namespace and class members alphabetically
410
- # by member name. If set to NO (the default) the members will appear in
411
- # declaration order.
412
-
413
- SORT_BRIEF_DOCS = YES
414
-
415
- # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
416
- # will sort the (brief and detailed) documentation of class members so that
417
- # constructors and destructors are listed first. If set to NO (the default)
418
- # the constructors will appear in the respective orders defined by
419
- # SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
420
- # This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
421
- # and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
422
-
423
- SORT_MEMBERS_CTORS_1ST = YES
424
-
425
- # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
426
- # hierarchy of group names into alphabetical order. If set to NO (the default)
427
- # the group names will appear in their defined order.
428
-
429
- SORT_GROUP_NAMES = NO
430
-
431
- # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
432
- # sorted by fully-qualified names, including namespaces. If set to
433
- # NO (the default), the class list will be sorted only by class name,
434
- # not including the namespace part.
435
- # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
436
- # Note: This option applies only to the class list, not to the
437
- # alphabetical list.
438
-
439
- SORT_BY_SCOPE_NAME = YES
440
-
441
- # The GENERATE_TODOLIST tag can be used to enable (YES) or
442
- # disable (NO) the todo list. This list is created by putting \todo
443
- # commands in the documentation.
444
-
445
- GENERATE_TODOLIST = YES
446
-
447
- # The GENERATE_TESTLIST tag can be used to enable (YES) or
448
- # disable (NO) the test list. This list is created by putting \test
449
- # commands in the documentation.
450
-
451
- GENERATE_TESTLIST = YES
452
-
453
- # The GENERATE_BUGLIST tag can be used to enable (YES) or
454
- # disable (NO) the bug list. This list is created by putting \bug
455
- # commands in the documentation.
456
-
457
- GENERATE_BUGLIST = YES
458
-
459
- # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
460
- # disable (NO) the deprecated list. This list is created by putting
461
- # \deprecated commands in the documentation.
462
-
463
- GENERATE_DEPRECATEDLIST= YES
464
-
465
- # The ENABLED_SECTIONS tag can be used to enable conditional
466
- # documentation sections, marked by \if sectionname ... \endif.
467
-
468
- ENABLED_SECTIONS =
469
-
470
- # The MAX_INITIALIZER_LINES tag determines the maximum number of lines
471
- # the initial value of a variable or define consists of for it to appear in
472
- # the documentation. If the initializer consists of more lines than specified
473
- # here it will be hidden. Use a value of 0 to hide initializers completely.
474
- # The appearance of the initializer of individual variables and defines in the
475
- # documentation can be controlled using \showinitializer or \hideinitializer
476
- # command in the documentation regardless of this setting.
477
-
478
- MAX_INITIALIZER_LINES = 30
479
-
480
- # Set the SHOW_USED_FILES tag to NO to disable the list of files generated
481
- # at the bottom of the documentation of classes and structs. If set to YES the
482
- # list will mention the files that were used to generate the documentation.
483
-
484
- SHOW_USED_FILES = NO
485
-
486
- # If the sources in your project are distributed over multiple directories
487
- # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
488
- # in the documentation. The default is NO.
489
-
490
- SHOW_DIRECTORIES = NO
491
-
492
- # Set the SHOW_FILES tag to NO to disable the generation of the Files page.
493
- # This will remove the Files entry from the Quick Index and from the
494
- # Folder Tree View (if specified). The default is YES.
495
-
496
- SHOW_FILES = YES
497
-
498
- # Set the SHOW_NAMESPACES tag to NO to disable the generation of the
499
- # Namespaces page.
500
- # This will remove the Namespaces entry from the Quick Index
501
- # and from the Folder Tree View (if specified). The default is YES.
502
-
503
- SHOW_NAMESPACES = YES
504
-
505
- # The FILE_VERSION_FILTER tag can be used to specify a program or script that
506
- # doxygen should invoke to get the current version for each file (typically from
507
- # the version control system). Doxygen will invoke the program by executing (via
508
- # popen()) the command <command> <input-file>, where <command> is the value of
509
- # the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
510
- # provided by doxygen. Whatever the program writes to standard output
511
- # is used as the file version. See the manual for examples.
512
-
513
- FILE_VERSION_FILTER =
514
-
515
- # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
516
- # by doxygen. The layout file controls the global structure of the generated
517
- # output files in an output format independent way. The create the layout file
518
- # that represents doxygen's defaults, run doxygen with the -l option.
519
- # You can optionally specify a file name after the option, if omitted
520
- # DoxygenLayout.xml will be used as the name of the layout file.
521
-
522
- LAYOUT_FILE =
523
-
524
- #---------------------------------------------------------------------------
525
- # configuration options related to warning and progress messages
526
- #---------------------------------------------------------------------------
527
-
528
- # The QUIET tag can be used to turn on/off the messages that are generated
529
- # by doxygen. Possible values are YES and NO. If left blank NO is used.
530
-
531
- QUIET = NO
532
-
533
- # The WARNINGS tag can be used to turn on/off the warning messages that are
534
- # generated by doxygen. Possible values are YES and NO. If left blank
535
- # NO is used.
536
-
537
- WARNINGS = YES
538
-
539
- # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
540
- # for undocumented members. If EXTRACT_ALL is set to YES then this flag will
541
- # automatically be disabled.
542
-
543
- WARN_IF_UNDOCUMENTED = YES
544
-
545
- # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
546
- # potential errors in the documentation, such as not documenting some
547
- # parameters in a documented function, or documenting parameters that
548
- # don't exist or using markup commands wrongly.
549
-
550
- WARN_IF_DOC_ERROR = YES
551
-
552
- # This WARN_NO_PARAMDOC option can be abled to get warnings for
553
- # functions that are documented, but have no documentation for their parameters
554
- # or return value. If set to NO (the default) doxygen will only warn about
555
- # wrong or incomplete parameter documentation, but not about the absence of
556
- # documentation.
557
-
558
- WARN_NO_PARAMDOC = NO
559
-
560
- # The WARN_FORMAT tag determines the format of the warning messages that
561
- # doxygen can produce. The string should contain the $file, $line, and $text
562
- # tags, which will be replaced by the file and line number from which the
563
- # warning originated and the warning text. Optionally the format may contain
564
- # $version, which will be replaced by the version of the file (if it could
565
- # be obtained via FILE_VERSION_FILTER)
566
-
567
- WARN_FORMAT = "$file:$line: $text "
568
-
569
- # The WARN_LOGFILE tag can be used to specify a file to which warning
570
- # and error messages should be written. If left blank the output is written
571
- # to stderr.
572
-
573
- WARN_LOGFILE =
574
-
575
- #---------------------------------------------------------------------------
576
- # configuration options related to the input files
577
- #---------------------------------------------------------------------------
578
-
579
- # The INPUT tag can be used to specify the files and/or directories that contain
580
- # documented source files. You may enter file names like "myfile.cpp" or
581
- # directories like "/usr/src/myproject". Separate the files or directories
582
- # with spaces.
583
-
584
- INPUT =
585
-
586
- # This tag can be used to specify the character encoding of the source files
587
- # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
588
- # also the default input encoding. Doxygen uses libiconv (or the iconv built
589
- # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
590
- # the list of possible encodings.
591
-
592
- INPUT_ENCODING = UTF-8
593
-
594
- # If the value of the INPUT tag contains directories, you can use the
595
- # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
596
- # and *.h) to filter out the source-files in the directories. If left
597
- # blank the following patterns are tested:
598
- # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
599
- # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
600
-
601
- FILE_PATTERNS = *.cpp \
602
- *.h \
603
- *.h.in \
604
- *.dox
605
-
606
- # The RECURSIVE tag can be used to turn specify whether or not subdirectories
607
- # should be searched for input files as well. Possible values are YES and NO.
608
- # If left blank NO is used.
609
-
610
- RECURSIVE = NO
611
-
612
- # The EXCLUDE tag can be used to specify files and/or directories that should
613
- # excluded from the INPUT source files. This way you can easily exclude a
614
- # subdirectory from a directory tree whose root is specified with the INPUT tag.
615
-
616
- EXCLUDE =
617
-
618
- # The EXCLUDE_SYMLINKS tag can be used select whether or not files or
619
- # directories that are symbolic links (a Unix filesystem feature) are excluded
620
- # from the input.
621
-
622
- EXCLUDE_SYMLINKS = NO
623
-
624
- # If the value of the INPUT tag contains directories, you can use the
625
- # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
626
- # certain files from those directories. Note that the wildcards are matched
627
- # against the file with absolute path, so to exclude all test directories
628
- # for example use the pattern */test/*
629
-
630
- EXCLUDE_PATTERNS = *-private.*
631
-
632
- # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
633
- # (namespaces, classes, functions, etc.) that should be excluded from the
634
- # output. The symbol name can be a fully qualified name, a word, or if the
635
- # wildcard * is used, a substring. Examples: ANamespace, AClass,
636
- # AClass::ANamespace, ANamespace::*Test
637
-
638
- EXCLUDE_SYMBOLS = poppler::detail, \
639
- poppler::*_private
640
-
641
- # The EXAMPLE_PATH tag can be used to specify one or more files or
642
- # directories that contain example code fragments that are included (see
643
- # the \include command).
644
-
645
- EXAMPLE_PATH =
646
-
647
- # If the value of the EXAMPLE_PATH tag contains directories, you can use the
648
- # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
649
- # and *.h) to filter out the source-files in the directories. If left
650
- # blank all files are included.
651
-
652
- EXAMPLE_PATTERNS =
653
-
654
- # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
655
- # searched for input files to be used with the \include or \dontinclude
656
- # commands irrespective of the value of the RECURSIVE tag.
657
- # Possible values are YES and NO. If left blank NO is used.
658
-
659
- EXAMPLE_RECURSIVE = NO
660
-
661
- # The IMAGE_PATH tag can be used to specify one or more files or
662
- # directories that contain image that are included in the documentation (see
663
- # the \image command).
664
-
665
- IMAGE_PATH =
666
-
667
- # The INPUT_FILTER tag can be used to specify a program that doxygen should
668
- # invoke to filter for each input file. Doxygen will invoke the filter program
669
- # by executing (via popen()) the command <filter> <input-file>, where <filter>
670
- # is the value of the INPUT_FILTER tag, and <input-file> is the name of an
671
- # input file. Doxygen will then use the output that the filter program writes
672
- # to standard output.
673
- # If FILTER_PATTERNS is specified, this tag will be
674
- # ignored.
675
-
676
- INPUT_FILTER =
677
-
678
- # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
679
- # basis.
680
- # Doxygen will compare the file name with each pattern and apply the
681
- # filter if there is a match.
682
- # The filters are a list of the form:
683
- # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
684
- # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
685
- # is applied to all files.
686
-
687
- FILTER_PATTERNS =
688
-
689
- # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
690
- # INPUT_FILTER) will be used to filter the input files when producing source
691
- # files to browse (i.e. when SOURCE_BROWSER is set to YES).
692
-
693
- FILTER_SOURCE_FILES = NO
694
-
695
- #---------------------------------------------------------------------------
696
- # configuration options related to source browsing
697
- #---------------------------------------------------------------------------
698
-
699
- # If the SOURCE_BROWSER tag is set to YES then a list of source files will
700
- # be generated. Documented entities will be cross-referenced with these sources.
701
- # Note: To get rid of all source code in the generated output, make sure also
702
- # VERBATIM_HEADERS is set to NO.
703
-
704
- SOURCE_BROWSER = NO
705
-
706
- # Setting the INLINE_SOURCES tag to YES will include the body
707
- # of functions and classes directly in the documentation.
708
-
709
- INLINE_SOURCES = NO
710
-
711
- # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
712
- # doxygen to hide any special comment blocks from generated source code
713
- # fragments. Normal C and C++ comments will always remain visible.
714
-
715
- STRIP_CODE_COMMENTS = YES
716
-
717
- # If the REFERENCED_BY_RELATION tag is set to YES
718
- # then for each documented function all documented
719
- # functions referencing it will be listed.
720
-
721
- REFERENCED_BY_RELATION = NO
722
-
723
- # If the REFERENCES_RELATION tag is set to YES
724
- # then for each documented function all documented entities
725
- # called/used by that function will be listed.
726
-
727
- REFERENCES_RELATION = NO
728
-
729
- # If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
730
- # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
731
- # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
732
- # link to the source code.
733
- # Otherwise they will link to the documentation.
734
-
735
- REFERENCES_LINK_SOURCE = YES
736
-
737
- # If the USE_HTAGS tag is set to YES then the references to source code
738
- # will point to the HTML generated by the htags(1) tool instead of doxygen
739
- # built-in source browser. The htags tool is part of GNU's global source
740
- # tagging system (see http://www.gnu.org/software/global/global.html). You
741
- # will need version 4.8.6 or higher.
742
-
743
- USE_HTAGS = NO
744
-
745
- # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
746
- # will generate a verbatim copy of the header file for each class for
747
- # which an include is specified. Set to NO to disable this.
748
-
749
- VERBATIM_HEADERS = YES
750
-
751
- #---------------------------------------------------------------------------
752
- # configuration options related to the alphabetical class index
753
- #---------------------------------------------------------------------------
754
-
755
- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
756
- # of all compounds will be generated. Enable this if the project
757
- # contains a lot of classes, structs, unions or interfaces.
758
-
759
- ALPHABETICAL_INDEX = YES
760
-
761
- # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
762
- # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
763
- # in which this list will be split (can be a number in the range [1..20])
764
-
765
- COLS_IN_ALPHA_INDEX = 4
766
-
767
- # In case all classes in a project start with a common prefix, all
768
- # classes will be put under the same header in the alphabetical index.
769
- # The IGNORE_PREFIX tag can be used to specify one or more prefixes that
770
- # should be ignored while generating the index headers.
771
-
772
- IGNORE_PREFIX =
773
-
774
- #---------------------------------------------------------------------------
775
- # configuration options related to the HTML output
776
- #---------------------------------------------------------------------------
777
-
778
- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will
779
- # generate HTML output.
780
-
781
- GENERATE_HTML = YES
782
-
783
- # The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
784
- # If a relative path is entered the value of OUTPUT_DIRECTORY will be
785
- # put in front of it. If left blank `html' will be used as the default path.
786
-
787
- HTML_OUTPUT = APIDOCS-html
788
-
789
- # The HTML_FILE_EXTENSION tag can be used to specify the file extension for
790
- # each generated HTML page (for example: .htm,.php,.asp). If it is left blank
791
- # doxygen will generate files with .html extension.
792
-
793
- HTML_FILE_EXTENSION = .html
794
-
795
- # The HTML_HEADER tag can be used to specify a personal HTML header for
796
- # each generated HTML page. If it is left blank doxygen will generate a
797
- # standard header.
798
-
799
- HTML_HEADER =
800
-
801
- # The HTML_FOOTER tag can be used to specify a personal HTML footer for
802
- # each generated HTML page. If it is left blank doxygen will generate a
803
- # standard footer.
804
-
805
- HTML_FOOTER =
806
-
807
- # The HTML_STYLESHEET tag can be used to specify a user-defined cascading
808
- # style sheet that is used by each HTML page. It can be used to
809
- # fine-tune the look of the HTML output. If the tag is left blank doxygen
810
- # will generate a default style sheet. Note that doxygen will try to copy
811
- # the style sheet file to the HTML output directory, so don't put your own
812
- # stylesheet in the HTML output directory as well, or it will be erased!
813
-
814
- HTML_STYLESHEET =
815
-
816
- # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
817
- # Doxygen will adjust the colors in the stylesheet and background images
818
- # according to this color. Hue is specified as an angle on a colorwheel,
819
- # see http://en.wikipedia.org/wiki/Hue for more information.
820
- # For instance the value 0 represents red, 60 is yellow, 120 is green,
821
- # 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
822
- # The allowed range is 0 to 359.
823
-
824
- HTML_COLORSTYLE_HUE = 220
825
-
826
- # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of
827
- # the colors in the HTML output. For a value of 0 the output will use
828
- # grayscales only. A value of 255 will produce the most vivid colors.
829
-
830
- HTML_COLORSTYLE_SAT = 100
831
-
832
- # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to
833
- # the luminance component of the colors in the HTML output. Values below
834
- # 100 gradually make the output lighter, whereas values above 100 make
835
- # the output darker. The value divided by 100 is the actual gamma applied,
836
- # so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
837
- # and 100 does not change the gamma.
838
-
839
- HTML_COLORSTYLE_GAMMA = 80
840
-
841
- # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
842
- # page will contain the date and time when the page was generated. Setting
843
- # this to NO can help when comparing the output of multiple runs.
844
-
845
- HTML_TIMESTAMP = NO
846
-
847
- # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
848
- # files or namespaces will be aligned in HTML using tables. If set to
849
- # NO a bullet list will be used.
850
-
851
- HTML_ALIGN_MEMBERS = YES
852
-
853
- # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
854
- # documentation will contain sections that can be hidden and shown after the
855
- # page has loaded. For this to work a browser that supports
856
- # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
857
- # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
858
-
859
- HTML_DYNAMIC_SECTIONS = NO
860
-
861
- # If the GENERATE_DOCSET tag is set to YES, additional index files
862
- # will be generated that can be used as input for Apple's Xcode 3
863
- # integrated development environment, introduced with OSX 10.5 (Leopard).
864
- # To create a documentation set, doxygen will generate a Makefile in the
865
- # HTML output directory. Running make will produce the docset in that
866
- # directory and running "make install" will install the docset in
867
- # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
868
- # it at startup.
869
- # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
870
- # for more information.
871
-
872
- GENERATE_DOCSET = NO
873
-
874
- # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
875
- # feed. A documentation feed provides an umbrella under which multiple
876
- # documentation sets from a single provider (such as a company or product suite)
877
- # can be grouped.
878
-
879
- DOCSET_FEEDNAME = "Doxygen generated docs"
880
-
881
- # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
882
- # should uniquely identify the documentation set bundle. This should be a
883
- # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
884
- # will append .docset to the name.
885
-
886
- DOCSET_BUNDLE_ID = org.doxygen.Project
887
-
888
- # When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify
889
- # the documentation publisher. This should be a reverse domain-name style
890
- # string, e.g. com.mycompany.MyDocSet.documentation.
891
-
892
- DOCSET_PUBLISHER_ID = org.doxygen.Publisher
893
-
894
- # The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
895
-
896
- DOCSET_PUBLISHER_NAME = Publisher
897
-
898
- # If the GENERATE_HTMLHELP tag is set to YES, additional index files
899
- # will be generated that can be used as input for tools like the
900
- # Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
901
- # of the generated HTML documentation.
902
-
903
- GENERATE_HTMLHELP = NO
904
-
905
- # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
906
- # be used to specify the file name of the resulting .chm file. You
907
- # can add a path in front of the file if the result should not be
908
- # written to the html output directory.
909
-
910
- CHM_FILE =
911
-
912
- # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
913
- # be used to specify the location (absolute path including file name) of
914
- # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
915
- # the HTML help compiler on the generated index.hhp.
916
-
917
- HHC_LOCATION =
918
-
919
- # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
920
- # controls if a separate .chi index file is generated (YES) or that
921
- # it should be included in the master .chm file (NO).
922
-
923
- GENERATE_CHI = NO
924
-
925
- # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
926
- # is used to encode HtmlHelp index (hhk), content (hhc) and project file
927
- # content.
928
-
929
- CHM_INDEX_ENCODING =
930
-
931
- # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
932
- # controls whether a binary table of contents is generated (YES) or a
933
- # normal table of contents (NO) in the .chm file.
934
-
935
- BINARY_TOC = NO
936
-
937
- # The TOC_EXPAND flag can be set to YES to add extra items for group members
938
- # to the contents of the HTML help documentation and to the tree view.
939
-
940
- TOC_EXPAND = NO
941
-
942
- # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
943
- # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated
944
- # that can be used as input for Qt's qhelpgenerator to generate a
945
- # Qt Compressed Help (.qch) of the generated HTML documentation.
946
-
947
- GENERATE_QHP = NO
948
-
949
- # If the QHG_LOCATION tag is specified, the QCH_FILE tag can
950
- # be used to specify the file name of the resulting .qch file.
951
- # The path specified is relative to the HTML output folder.
952
-
953
- QCH_FILE =
954
-
955
- # The QHP_NAMESPACE tag specifies the namespace to use when generating
956
- # Qt Help Project output. For more information please see
957
- # http://doc.trolltech.com/qthelpproject.html#namespace
958
-
959
- QHP_NAMESPACE = org.doxygen.Project
960
-
961
- # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
962
- # Qt Help Project output. For more information please see
963
- # http://doc.trolltech.com/qthelpproject.html#virtual-folders
964
-
965
- QHP_VIRTUAL_FOLDER = doc
966
-
967
- # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
968
- # add. For more information please see
969
- # http://doc.trolltech.com/qthelpproject.html#custom-filters
970
-
971
- QHP_CUST_FILTER_NAME =
972
-
973
- # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
974
- # custom filter to add. For more information please see
975
- # <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">
976
- # Qt Help Project / Custom Filters</a>.
977
-
978
- QHP_CUST_FILTER_ATTRS =
979
-
980
- # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
981
- # project's
982
- # filter section matches.
983
- # <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">
984
- # Qt Help Project / Filter Attributes</a>.
985
-
986
- QHP_SECT_FILTER_ATTRS =
987
-
988
- # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
989
- # be used to specify the location of Qt's qhelpgenerator.
990
- # If non-empty doxygen will try to run qhelpgenerator on the generated
991
- # .qhp file.
992
-
993
- QHG_LOCATION =
994
-
995
- # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
996
- # will be generated, which together with the HTML files, form an Eclipse help
997
- # plugin. To install this plugin and make it available under the help contents
998
- # menu in Eclipse, the contents of the directory containing the HTML and XML
999
- # files needs to be copied into the plugins directory of eclipse. The name of
1000
- # the directory within the plugins directory should be the same as
1001
- # the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
1002
- # the help appears.
1003
-
1004
- GENERATE_ECLIPSEHELP = NO
1005
-
1006
- # A unique identifier for the eclipse help plugin. When installing the plugin
1007
- # the directory name containing the HTML and XML files should also have
1008
- # this name.
1009
-
1010
- ECLIPSE_DOC_ID = org.doxygen.Project
1011
-
1012
- # The DISABLE_INDEX tag can be used to turn on/off the condensed index at
1013
- # top of each HTML page. The value NO (the default) enables the index and
1014
- # the value YES disables it.
1015
-
1016
- DISABLE_INDEX = NO
1017
-
1018
- # This tag can be used to set the number of enum values (range [1..20])
1019
- # that doxygen will group on one line in the generated HTML documentation.
1020
-
1021
- ENUM_VALUES_PER_LINE = 1
1022
-
1023
- # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
1024
- # structure should be generated to display hierarchical information.
1025
- # If the tag value is set to YES, a side panel will be generated
1026
- # containing a tree-like index structure (just like the one that
1027
- # is generated for HTML Help). For this to work a browser that supports
1028
- # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
1029
- # Windows users are probably better off using the HTML help feature.
1030
-
1031
- GENERATE_TREEVIEW = NO
1032
-
1033
- # By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories,
1034
- # and Class Hierarchy pages using a tree view instead of an ordered list.
1035
-
1036
- USE_INLINE_TREES = NO
1037
-
1038
- # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
1039
- # used to set the initial width (in pixels) of the frame in which the tree
1040
- # is shown.
1041
-
1042
- TREEVIEW_WIDTH = 250
1043
-
1044
- # When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open
1045
- # links to external symbols imported via tag files in a separate window.
1046
-
1047
- EXT_LINKS_IN_WINDOW = NO
1048
-
1049
- # Use this tag to change the font size of Latex formulas included
1050
- # as images in the HTML documentation. The default is 10. Note that
1051
- # when you change the font size after a successful doxygen run you need
1052
- # to manually remove any form_*.png images from the HTML output directory
1053
- # to force them to be regenerated.
1054
-
1055
- FORMULA_FONTSIZE = 10
1056
-
1057
- # Use the FORMULA_TRANPARENT tag to determine whether or not the images
1058
- # generated for formulas are transparent PNGs. Transparent PNGs are
1059
- # not supported properly for IE 6.0, but are supported on all modern browsers.
1060
- # Note that when changing this option you need to delete any form_*.png files
1061
- # in the HTML output before the changes have effect.
1062
-
1063
- FORMULA_TRANSPARENT = YES
1064
-
1065
- # When the SEARCHENGINE tag is enabled doxygen will generate a search box
1066
- # for the HTML output. The underlying search engine uses javascript
1067
- # and DHTML and should work on any modern browser. Note that when using
1068
- # HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
1069
- # (GENERATE_DOCSET) there is already a search function so this one should
1070
- # typically be disabled. For large projects the javascript based search engine
1071
- # can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
1072
-
1073
- SEARCHENGINE = NO
1074
-
1075
- # When the SERVER_BASED_SEARCH tag is enabled the search engine will be
1076
- # implemented using a PHP enabled web server instead of at the web client
1077
- # using Javascript. Doxygen will generate the search PHP script and index
1078
- # file to put on the web server. The advantage of the server
1079
- # based approach is that it scales better to large projects and allows
1080
- # full text search. The disadvances is that it is more difficult to setup
1081
- # and does not have live searching capabilities.
1082
-
1083
- SERVER_BASED_SEARCH = NO
1084
-
1085
- #---------------------------------------------------------------------------
1086
- # configuration options related to the LaTeX output
1087
- #---------------------------------------------------------------------------
1088
-
1089
- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
1090
- # generate Latex output.
1091
-
1092
- GENERATE_LATEX = NO
1093
-
1094
- # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
1095
- # If a relative path is entered the value of OUTPUT_DIRECTORY will be
1096
- # put in front of it. If left blank `latex' will be used as the default path.
1097
-
1098
- LATEX_OUTPUT = APIDOCS-latex
1099
-
1100
- # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
1101
- # invoked. If left blank `latex' will be used as the default command name.
1102
- # Note that when enabling USE_PDFLATEX this option is only used for
1103
- # generating bitmaps for formulas in the HTML output, but not in the
1104
- # Makefile that is written to the output directory.
1105
-
1106
- LATEX_CMD_NAME = latex
1107
-
1108
- # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
1109
- # generate index for LaTeX. If left blank `makeindex' will be used as the
1110
- # default command name.
1111
-
1112
- MAKEINDEX_CMD_NAME = makeindex
1113
-
1114
- # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
1115
- # LaTeX documents. This may be useful for small projects and may help to
1116
- # save some trees in general.
1117
-
1118
- COMPACT_LATEX = NO
1119
-
1120
- # The PAPER_TYPE tag can be used to set the paper type that is used
1121
- # by the printer. Possible values are: a4, a4wide, letter, legal and
1122
- # executive. If left blank a4wide will be used.
1123
-
1124
- PAPER_TYPE = a4wide
1125
-
1126
- # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
1127
- # packages that should be included in the LaTeX output.
1128
-
1129
- EXTRA_PACKAGES =
1130
-
1131
- # The LATEX_HEADER tag can be used to specify a personal LaTeX header for
1132
- # the generated latex document. The header should contain everything until
1133
- # the first chapter. If it is left blank doxygen will generate a
1134
- # standard header. Notice: only use this tag if you know what you are doing!
1135
-
1136
- LATEX_HEADER =
1137
-
1138
- # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
1139
- # is prepared for conversion to pdf (using ps2pdf). The pdf file will
1140
- # contain links (just like the HTML output) instead of page references
1141
- # This makes the output suitable for online browsing using a pdf viewer.
1142
-
1143
- PDF_HYPERLINKS = NO
1144
-
1145
- # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
1146
- # plain latex in the generated Makefile. Set this option to YES to get a
1147
- # higher quality PDF documentation.
1148
-
1149
- USE_PDFLATEX = NO
1150
-
1151
- # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
1152
- # command to the generated LaTeX files. This will instruct LaTeX to keep
1153
- # running if errors occur, instead of asking the user for help.
1154
- # This option is also used when generating formulas in HTML.
1155
-
1156
- LATEX_BATCHMODE = NO
1157
-
1158
- # If LATEX_HIDE_INDICES is set to YES then doxygen will not
1159
- # include the index chapters (such as File Index, Compound Index, etc.)
1160
- # in the output.
1161
-
1162
- LATEX_HIDE_INDICES = NO
1163
-
1164
- # If LATEX_SOURCE_CODE is set to YES then doxygen will include
1165
- # source code with syntax highlighting in the LaTeX output.
1166
- # Note that which sources are shown also depends on other settings
1167
- # such as SOURCE_BROWSER.
1168
-
1169
- LATEX_SOURCE_CODE = NO
1170
-
1171
- #---------------------------------------------------------------------------
1172
- # configuration options related to the RTF output
1173
- #---------------------------------------------------------------------------
1174
-
1175
- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
1176
- # The RTF output is optimized for Word 97 and may not look very pretty with
1177
- # other RTF readers or editors.
1178
-
1179
- GENERATE_RTF = NO
1180
-
1181
- # The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
1182
- # If a relative path is entered the value of OUTPUT_DIRECTORY will be
1183
- # put in front of it. If left blank `rtf' will be used as the default path.
1184
-
1185
- RTF_OUTPUT = rtf
1186
-
1187
- # If the COMPACT_RTF tag is set to YES Doxygen generates more compact
1188
- # RTF documents. This may be useful for small projects and may help to
1189
- # save some trees in general.
1190
-
1191
- COMPACT_RTF = NO
1192
-
1193
- # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
1194
- # will contain hyperlink fields. The RTF file will
1195
- # contain links (just like the HTML output) instead of page references.
1196
- # This makes the output suitable for online browsing using WORD or other
1197
- # programs which support those fields.
1198
- # Note: wordpad (write) and others do not support links.
1199
-
1200
- RTF_HYPERLINKS = NO
1201
-
1202
- # Load stylesheet definitions from file. Syntax is similar to doxygen's
1203
- # config file, i.e. a series of assignments. You only have to provide
1204
- # replacements, missing definitions are set to their default value.
1205
-
1206
- RTF_STYLESHEET_FILE =
1207
-
1208
- # Set optional variables used in the generation of an rtf document.
1209
- # Syntax is similar to doxygen's config file.
1210
-
1211
- RTF_EXTENSIONS_FILE =
1212
-
1213
- #---------------------------------------------------------------------------
1214
- # configuration options related to the man page output
1215
- #---------------------------------------------------------------------------
1216
-
1217
- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will
1218
- # generate man pages
1219
-
1220
- GENERATE_MAN = NO
1221
-
1222
- # The MAN_OUTPUT tag is used to specify where the man pages will be put.
1223
- # If a relative path is entered the value of OUTPUT_DIRECTORY will be
1224
- # put in front of it. If left blank `man' will be used as the default path.
1225
-
1226
- MAN_OUTPUT = man
1227
-
1228
- # The MAN_EXTENSION tag determines the extension that is added to
1229
- # the generated man pages (default is the subroutine's section .3)
1230
-
1231
- MAN_EXTENSION = .3
1232
-
1233
- # If the MAN_LINKS tag is set to YES and Doxygen generates man output,
1234
- # then it will generate one additional man file for each entity
1235
- # documented in the real man page(s). These additional files
1236
- # only source the real man page, but without them the man command
1237
- # would be unable to find the correct page. The default is NO.
1238
-
1239
- MAN_LINKS = NO
1240
-
1241
- #---------------------------------------------------------------------------
1242
- # configuration options related to the XML output
1243
- #---------------------------------------------------------------------------
1244
-
1245
- # If the GENERATE_XML tag is set to YES Doxygen will
1246
- # generate an XML file that captures the structure of
1247
- # the code including all documentation.
1248
-
1249
- GENERATE_XML = NO
1250
-
1251
- # The XML_OUTPUT tag is used to specify where the XML pages will be put.
1252
- # If a relative path is entered the value of OUTPUT_DIRECTORY will be
1253
- # put in front of it. If left blank `xml' will be used as the default path.
1254
-
1255
- XML_OUTPUT = xml
1256
-
1257
- # The XML_SCHEMA tag can be used to specify an XML schema,
1258
- # which can be used by a validating XML parser to check the
1259
- # syntax of the XML files.
1260
-
1261
- XML_SCHEMA =
1262
-
1263
- # The XML_DTD tag can be used to specify an XML DTD,
1264
- # which can be used by a validating XML parser to check the
1265
- # syntax of the XML files.
1266
-
1267
- XML_DTD =
1268
-
1269
- # If the XML_PROGRAMLISTING tag is set to YES Doxygen will
1270
- # dump the program listings (including syntax highlighting
1271
- # and cross-referencing information) to the XML output. Note that
1272
- # enabling this will significantly increase the size of the XML output.
1273
-
1274
- XML_PROGRAMLISTING = YES
1275
-
1276
- #---------------------------------------------------------------------------
1277
- # configuration options for the AutoGen Definitions output
1278
- #---------------------------------------------------------------------------
1279
-
1280
- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
1281
- # generate an AutoGen Definitions (see autogen.sf.net) file
1282
- # that captures the structure of the code including all
1283
- # documentation. Note that this feature is still experimental
1284
- # and incomplete at the moment.
1285
-
1286
- GENERATE_AUTOGEN_DEF = NO
1287
-
1288
- #---------------------------------------------------------------------------
1289
- # configuration options related to the Perl module output
1290
- #---------------------------------------------------------------------------
1291
-
1292
- # If the GENERATE_PERLMOD tag is set to YES Doxygen will
1293
- # generate a Perl module file that captures the structure of
1294
- # the code including all documentation. Note that this
1295
- # feature is still experimental and incomplete at the
1296
- # moment.
1297
-
1298
- GENERATE_PERLMOD = NO
1299
-
1300
- # If the PERLMOD_LATEX tag is set to YES Doxygen will generate
1301
- # the necessary Makefile rules, Perl scripts and LaTeX code to be able
1302
- # to generate PDF and DVI output from the Perl module output.
1303
-
1304
- PERLMOD_LATEX = NO
1305
-
1306
- # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
1307
- # nicely formatted so it can be parsed by a human reader.
1308
- # This is useful
1309
- # if you want to understand what is going on.
1310
- # On the other hand, if this
1311
- # tag is set to NO the size of the Perl module output will be much smaller
1312
- # and Perl will parse it just the same.
1313
-
1314
- PERLMOD_PRETTY = YES
1315
-
1316
- # The names of the make variables in the generated doxyrules.make file
1317
- # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
1318
- # This is useful so different doxyrules.make files included by the same
1319
- # Makefile don't overwrite each other's variables.
1320
-
1321
- PERLMOD_MAKEVAR_PREFIX =
1322
-
1323
- #---------------------------------------------------------------------------
1324
- # Configuration options related to the preprocessor
1325
- #---------------------------------------------------------------------------
1326
-
1327
- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
1328
- # evaluate all C-preprocessor directives found in the sources and include
1329
- # files.
1330
-
1331
- ENABLE_PREPROCESSING = YES
1332
-
1333
- # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
1334
- # names in the source code. If set to NO (the default) only conditional
1335
- # compilation will be performed. Macro expansion can be done in a controlled
1336
- # way by setting EXPAND_ONLY_PREDEF to YES.
1337
-
1338
- MACRO_EXPANSION = YES
1339
-
1340
- # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
1341
- # then the macro expansion is limited to the macros specified with the
1342
- # PREDEFINED and EXPAND_AS_DEFINED tags.
1343
-
1344
- EXPAND_ONLY_PREDEF = YES
1345
-
1346
- # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
1347
- # in the INCLUDE_PATH (see below) will be search if a #include is found.
1348
-
1349
- SEARCH_INCLUDES = YES
1350
-
1351
- # The INCLUDE_PATH tag can be used to specify one or more directories that
1352
- # contain include files that are not input files but should be processed by
1353
- # the preprocessor.
1354
-
1355
- INCLUDE_PATH =
1356
-
1357
- # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
1358
- # patterns (like *.h and *.hpp) to filter out the header-files in the
1359
- # directories. If left blank, the patterns specified with FILE_PATTERNS will
1360
- # be used.
1361
-
1362
- INCLUDE_FILE_PATTERNS =
1363
-
1364
- # The PREDEFINED tag can be used to specify one or more macro names that
1365
- # are defined before the preprocessor is started (similar to the -D option of
1366
- # gcc). The argument of the tag is a list of macros of the form: name
1367
- # or name=definition (no spaces). If the definition and the = are
1368
- # omitted =1 is assumed. To prevent a macro definition from being
1369
- # undefined via #undef or recursively expanded use the := operator
1370
- # instead of the = operator.
1371
-
1372
- PREDEFINED = "POPPLER_CPP_EXPORT="
1373
-
1374
- # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
1375
- # this tag can be used to specify a list of macro names that should be expanded.
1376
- # The macro definition that is found in the sources will be used.
1377
- # Use the PREDEFINED tag if you want to use a different macro definition.
1378
-
1379
- EXPAND_AS_DEFINED =
1380
-
1381
- # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
1382
- # doxygen's preprocessor will remove all function-like macros that are alone
1383
- # on a line, have an all uppercase name, and do not end with a semicolon. Such
1384
- # function macros are typically used for boiler-plate code, and will confuse
1385
- # the parser if not removed.
1386
-
1387
- SKIP_FUNCTION_MACROS = YES
1388
-
1389
- #---------------------------------------------------------------------------
1390
- # Configuration::additions related to external references
1391
- #---------------------------------------------------------------------------
1392
-
1393
- # The TAGFILES option can be used to specify one or more tagfiles.
1394
- # Optionally an initial location of the external documentation
1395
- # can be added for each tagfile. The format of a tag file without
1396
- # this location is as follows:
1397
- #
1398
- # TAGFILES = file1 file2 ...
1399
- # Adding location for the tag files is done as follows:
1400
- #
1401
- # TAGFILES = file1=loc1 "file2 = loc2" ...
1402
- # where "loc1" and "loc2" can be relative or absolute paths or
1403
- # URLs. If a location is present for each tag, the installdox tool
1404
- # does not have to be run to correct the links.
1405
- # Note that each tag file must have a unique name
1406
- # (where the name does NOT include the path)
1407
- # If a tag file is not located in the directory in which doxygen
1408
- # is run, you must also specify the path to the tagfile here.
1409
-
1410
- TAGFILES =
1411
-
1412
- # When a file name is specified after GENERATE_TAGFILE, doxygen will create
1413
- # a tag file that is based on the input files it reads.
1414
-
1415
- GENERATE_TAGFILE =
1416
-
1417
- # If the ALLEXTERNALS tag is set to YES all external classes will be listed
1418
- # in the class index. If set to NO only the inherited external classes
1419
- # will be listed.
1420
-
1421
- ALLEXTERNALS = NO
1422
-
1423
- # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
1424
- # in the modules index. If set to NO, only the current project's groups will
1425
- # be listed.
1426
-
1427
- EXTERNAL_GROUPS = YES
1428
-
1429
- # The PERL_PATH should be the absolute path and name of the perl script
1430
- # interpreter (i.e. the result of `which perl').
1431
-
1432
- PERL_PATH = /usr/bin/perl
1433
-
1434
- #---------------------------------------------------------------------------
1435
- # Configuration options related to the dot tool
1436
- #---------------------------------------------------------------------------
1437
-
1438
- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
1439
- # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
1440
- # or super classes. Setting the tag to NO turns the diagrams off. Note that
1441
- # this option is superseded by the HAVE_DOT option below. This is only a
1442
- # fallback. It is recommended to install and use dot, since it yields more
1443
- # powerful graphs.
1444
-
1445
- CLASS_DIAGRAMS = YES
1446
-
1447
- # You can define message sequence charts within doxygen comments using the \msc
1448
- # command. Doxygen will then run the mscgen tool (see
1449
- # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
1450
- # documentation. The MSCGEN_PATH tag allows you to specify the directory where
1451
- # the mscgen tool resides. If left empty the tool is assumed to be found in the
1452
- # default search path.
1453
-
1454
- MSCGEN_PATH =
1455
-
1456
- # If set to YES, the inheritance and collaboration graphs will hide
1457
- # inheritance and usage relations if the target is undocumented
1458
- # or is not a class.
1459
-
1460
- HIDE_UNDOC_RELATIONS = YES
1461
-
1462
- # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
1463
- # available from the path. This tool is part of Graphviz, a graph visualization
1464
- # toolkit from AT&T and Lucent Bell Labs. The other options in this section
1465
- # have no effect if this option is set to NO (the default)
1466
-
1467
- HAVE_DOT = YES
1468
-
1469
- # The DOT_NUM_THREADS specifies the number of dot invocations doxygen is
1470
- # allowed to run in parallel. When set to 0 (the default) doxygen will
1471
- # base this on the number of processors available in the system. You can set it
1472
- # explicitly to a value larger than 0 to get control over the balance
1473
- # between CPU load and processing speed.
1474
-
1475
- DOT_NUM_THREADS = 0
1476
-
1477
- # By default doxygen will write a font called FreeSans.ttf to the output
1478
- # directory and reference it in all dot files that doxygen generates. This
1479
- # font does not include all possible unicode characters however, so when you need
1480
- # these (or just want a differently looking font) you can specify the font name
1481
- # using DOT_FONTNAME. You need need to make sure dot is able to find the font,
1482
- # which can be done by putting it in a standard location or by setting the
1483
- # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory
1484
- # containing the font.
1485
-
1486
- DOT_FONTNAME = FreeSans
1487
-
1488
- # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
1489
- # The default size is 10pt.
1490
-
1491
- DOT_FONTSIZE = 10
1492
-
1493
- # By default doxygen will tell dot to use the output directory to look for the
1494
- # FreeSans.ttf font (which doxygen will put there itself). If you specify a
1495
- # different font using DOT_FONTNAME you can set the path where dot
1496
- # can find it using this tag.
1497
-
1498
- DOT_FONTPATH =
1499
-
1500
- # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
1501
- # will generate a graph for each documented class showing the direct and
1502
- # indirect inheritance relations. Setting this tag to YES will force the
1503
- # the CLASS_DIAGRAMS tag to NO.
1504
-
1505
- CLASS_GRAPH = YES
1506
-
1507
- # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
1508
- # will generate a graph for each documented class showing the direct and
1509
- # indirect implementation dependencies (inheritance, containment, and
1510
- # class references variables) of the class with other documented classes.
1511
-
1512
- COLLABORATION_GRAPH = NO
1513
-
1514
- # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
1515
- # will generate a graph for groups, showing the direct groups dependencies
1516
-
1517
- GROUP_GRAPHS = YES
1518
-
1519
- # If the UML_LOOK tag is set to YES doxygen will generate inheritance and
1520
- # collaboration diagrams in a style similar to the OMG's Unified Modeling
1521
- # Language.
1522
-
1523
- UML_LOOK = NO
1524
-
1525
- # If set to YES, the inheritance and collaboration graphs will show the
1526
- # relations between templates and their instances.
1527
-
1528
- TEMPLATE_RELATIONS = NO
1529
-
1530
- # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
1531
- # tags are set to YES then doxygen will generate a graph for each documented
1532
- # file showing the direct and indirect include dependencies of the file with
1533
- # other documented files.
1534
-
1535
- INCLUDE_GRAPH = YES
1536
-
1537
- # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
1538
- # HAVE_DOT tags are set to YES then doxygen will generate a graph for each
1539
- # documented header file showing the documented files that directly or
1540
- # indirectly include this file.
1541
-
1542
- INCLUDED_BY_GRAPH = YES
1543
-
1544
- # If the CALL_GRAPH and HAVE_DOT options are set to YES then
1545
- # doxygen will generate a call dependency graph for every global function
1546
- # or class method. Note that enabling this option will significantly increase
1547
- # the time of a run. So in most cases it will be better to enable call graphs
1548
- # for selected functions only using the \callgraph command.
1549
-
1550
- CALL_GRAPH = NO
1551
-
1552
- # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
1553
- # doxygen will generate a caller dependency graph for every global function
1554
- # or class method. Note that enabling this option will significantly increase
1555
- # the time of a run. So in most cases it will be better to enable caller
1556
- # graphs for selected functions only using the \callergraph command.
1557
-
1558
- CALLER_GRAPH = NO
1559
-
1560
- # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
1561
- # will graphical hierarchy of all classes instead of a textual one.
1562
-
1563
- GRAPHICAL_HIERARCHY = YES
1564
-
1565
- # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
1566
- # then doxygen will show the dependencies a directory has on other directories
1567
- # in a graphical way. The dependency relations are determined by the #include
1568
- # relations between the files in the directories.
1569
-
1570
- DIRECTORY_GRAPH = YES
1571
-
1572
- # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
1573
- # generated by dot. Possible values are png, jpg, or gif
1574
- # If left blank png will be used.
1575
-
1576
- DOT_IMAGE_FORMAT = png
1577
-
1578
- # The tag DOT_PATH can be used to specify the path where the dot tool can be
1579
- # found. If left blank, it is assumed the dot tool can be found in the path.
1580
-
1581
- DOT_PATH =
1582
-
1583
- # The DOTFILE_DIRS tag can be used to specify one or more directories that
1584
- # contain dot files that are included in the documentation (see the
1585
- # \dotfile command).
1586
-
1587
- DOTFILE_DIRS =
1588
-
1589
- # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
1590
- # nodes that will be shown in the graph. If the number of nodes in a graph
1591
- # becomes larger than this value, doxygen will truncate the graph, which is
1592
- # visualized by representing a node as a red box. Note that doxygen if the
1593
- # number of direct children of the root node in a graph is already larger than
1594
- # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
1595
- # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
1596
-
1597
- DOT_GRAPH_MAX_NODES = 50
1598
-
1599
- # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
1600
- # graphs generated by dot. A depth value of 3 means that only nodes reachable
1601
- # from the root by following a path via at most 3 edges will be shown. Nodes
1602
- # that lay further from the root node will be omitted. Note that setting this
1603
- # option to 1 or 2 may greatly reduce the computation time needed for large
1604
- # code bases. Also note that the size of a graph can be further restricted by
1605
- # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
1606
-
1607
- MAX_DOT_GRAPH_DEPTH = 0
1608
-
1609
- # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
1610
- # background. This is disabled by default, because dot on Windows does not
1611
- # seem to support this out of the box. Warning: Depending on the platform used,
1612
- # enabling this option may lead to badly anti-aliased labels on the edges of
1613
- # a graph (i.e. they become hard to read).
1614
-
1615
- DOT_TRANSPARENT = NO
1616
-
1617
- # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
1618
- # files in one run (i.e. multiple -o and -T options on the command line). This
1619
- # makes dot run faster, but since only newer versions of dot (>1.8.10)
1620
- # support this, this feature is disabled by default.
1621
-
1622
- DOT_MULTI_TARGETS = NO
1623
-
1624
- # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
1625
- # generate a legend page explaining the meaning of the various boxes and
1626
- # arrows in the dot generated graphs.
1627
-
1628
- GENERATE_LEGEND = YES
1629
-
1630
- # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
1631
- # remove the intermediate dot files that are used to generate
1632
- # the various graphs.
1633
-
1634
- DOT_CLEANUP = YES
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/cpp/Mainpage.dox DELETED
@@ -1,9 +0,0 @@
1
- /**
2
- \mainpage The Poppler CPP interface library
3
-
4
- The Poppler CPP interface library, called libpoppler-cpp, is a library that
5
- allows C++ programmers to easily load and render PDF files using the Poppler
6
- library. Unlike the other Poppler frontends, it has no additional
7
- requirements, so can be used in any C++ application.
8
-
9
- */
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/cpp/poppler-destination-private.h DELETED
@@ -1,54 +0,0 @@
1
- /*
2
- * Copyright (C) 2019, Masamichi Hosoda <[email protected]>
3
- *
4
- * This program is free software; you can redistribute it and/or modify
5
- * it under the terms of the GNU General Public License as published by
6
- * the Free Software Foundation; either version 2, or (at your option)
7
- * any later version.
8
- *
9
- * This program is distributed in the hope that it will be useful,
10
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
- * GNU General Public License for more details.
13
- *
14
- * You should have received a copy of the GNU General Public License
15
- * along with this program; if not, write to the Free Software
16
- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
17
- */
18
-
19
- #ifndef POPPLER_DESTINATION_PRIVATE_H
20
- #define POPPLER_DESTINATION_PRIVATE_H
21
-
22
- #include "poppler-global.h"
23
- #include "poppler-destination.h"
24
-
25
- #include "Object.h"
26
-
27
- class PDFDoc;
28
- class LinkDest;
29
-
30
- namespace poppler {
31
-
32
- class destination_private
33
- {
34
- public:
35
- destination_private(const LinkDest *ld, PDFDoc *doc);
36
-
37
- destination::type_enum type;
38
- bool page_number_unresolved;
39
- union {
40
- Ref page_ref;
41
- int page_number;
42
- };
43
- double left, bottom;
44
- double right, top;
45
- double zoom;
46
- bool change_left : 1, change_top : 1;
47
- bool change_zoom : 1;
48
-
49
- PDFDoc *pdf_doc;
50
- };
51
-
52
- }
53
-
54
- #endif
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/cpp/poppler-destination.cpp DELETED
@@ -1,273 +0,0 @@
1
- /*
2
- * Copyright (C) 2019, Masamichi Hosoda <[email protected]>
3
- * Copyright (C) 2019 Albert Astals Cid <[email protected]>
4
- * Copyright (C) 2022, Oliver Sander <[email protected]>
5
- *
6
- * This program is free software; you can redistribute it and/or modify
7
- * it under the terms of the GNU General Public License as published by
8
- * the Free Software Foundation; either version 2, or (at your option)
9
- * any later version.
10
- *
11
- * This program is distributed in the hope that it will be useful,
12
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- * GNU General Public License for more details.
15
- *
16
- * You should have received a copy of the GNU General Public License
17
- * along with this program; if not, write to the Free Software
18
- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
19
- */
20
-
21
- /**
22
- \file poppler-destination.h
23
- */
24
- #include "poppler-destination.h"
25
-
26
- #include "poppler-destination-private.h"
27
-
28
- #include "PDFDoc.h"
29
- #include "Link.h"
30
-
31
- #include <utility>
32
-
33
- using namespace poppler;
34
-
35
- destination_private::destination_private(const LinkDest *ld, PDFDoc *doc) : pdf_doc(doc)
36
- {
37
- if (!ld) {
38
- type = destination::unknown;
39
- return;
40
- }
41
-
42
- switch (ld->getKind()) {
43
- case ::destXYZ:
44
- type = destination::xyz;
45
- break;
46
- case ::destFit:
47
- type = destination::fit;
48
- break;
49
- case ::destFitH:
50
- type = destination::fit_h;
51
- break;
52
- case ::destFitV:
53
- type = destination::fit_v;
54
- break;
55
- case ::destFitR:
56
- type = destination::fit_r;
57
- break;
58
- case ::destFitB:
59
- type = destination::fit_b;
60
- break;
61
- case ::destFitBH:
62
- type = destination::fit_b_h;
63
- break;
64
- case ::destFitBV:
65
- type = destination::fit_b_v;
66
- break;
67
- default:
68
- type = destination::unknown;
69
- break;
70
- }
71
-
72
- if (!ld->isPageRef()) {
73
- // The page number has been resolved.
74
- page_number_unresolved = false;
75
- page_number = ld->getPageNum();
76
- } else if (doc) {
77
- // It is necessary to resolve the page number by its accessor.
78
- page_number_unresolved = true;
79
- page_ref = ld->getPageRef();
80
- } else {
81
- // The page number cannot be resolved because there is no PDFDoc.
82
- page_number_unresolved = false;
83
- page_number = 0;
84
- }
85
-
86
- left = ld->getLeft();
87
- bottom = ld->getBottom();
88
- right = ld->getRight();
89
- top = ld->getTop();
90
- zoom = ld->getZoom();
91
- change_left = ld->getChangeLeft();
92
- change_top = ld->getChangeTop();
93
- change_zoom = ld->getChangeZoom();
94
- }
95
-
96
- /**
97
- \class poppler::destination poppler-destination.h "poppler/cpp/poppler-destination.h"
98
-
99
- The information about a destination used in a PDF %document.
100
- */
101
-
102
- /**
103
- \enum poppler::destination::type_enum
104
-
105
- The various types of destinations available in a PDF %document.
106
- */
107
- /**
108
- \var poppler::destination::type_enum poppler::destination::unknown
109
-
110
- unknown destination
111
- */
112
- /**
113
- \var poppler::destination::type_enum poppler::destination::xyz
114
-
115
- go to page with coordinates (left, top) positioned at the upper-left
116
- corner of the window and the contents of the page magnified
117
- by the factor zoom
118
- */
119
- /**
120
- \var poppler::destination::type_enum poppler::destination::fit
121
-
122
- go to page with its contents magnified just enough to fit the entire page
123
- within the window both horizontally and vertically
124
- */
125
- /**
126
- \var poppler::destination::type_enum poppler::destination::fit_h
127
-
128
- go to page with the vertical coordinate top positioned at the top edge
129
- of the window and the contents of the page magnified just enough to fit
130
- the entire width of the page within the window
131
- */
132
- /**
133
- \var poppler::destination::type_enum poppler::destination::fit_v
134
-
135
- go to page with the horizontal coordinate left positioned at the left edge
136
- of the window and the contents of the page magnified just enough to fit
137
- the entire height of the page within the window
138
- */
139
- /**
140
- \var poppler::destination::type_enum poppler::destination::fit_r
141
-
142
- go to page with its contents magnified just enough to fit the rectangle
143
- specified by the coordinates left, bottom, right, and top entirely
144
- within the window both horizontally and vertically
145
- */
146
- /**
147
- \var poppler::destination::type_enum poppler::destination::fit_b
148
-
149
- go to page with its contents magnified just enough to fit its bounding box
150
- entirely within the window both horizontally and vertically
151
- */
152
- /**
153
- \var poppler::destination::type_enum poppler::destination::fit_b_h
154
-
155
- go to page with the vertical coordinate top positioned at the top edge
156
- of the window and the contents of the page magnified just enough to fit
157
- the entire width of its bounding box within the window
158
- */
159
- /**
160
- \var poppler::destination::type_enum poppler::destination::fit_b_v
161
-
162
- go to page with the horizontal coordinate left positioned at the left edge
163
- of the window and the contents of the page magnified just enough to fit
164
- the entire height of its bounding box within the window
165
- */
166
-
167
- destination::destination(destination_private *dd) : d(dd) { }
168
-
169
- /**
170
- Move constructor.
171
- */
172
- destination::destination(destination &&other) noexcept
173
- {
174
- *this = std::move(other);
175
- }
176
-
177
- /**
178
- \returns the type of the destination
179
- */
180
- destination::type_enum destination::type() const
181
- {
182
- return d->type;
183
- }
184
-
185
- /**
186
- \note It is necessary not to destruct parent poppler::document
187
- before calling this function for the first time.
188
-
189
- \returns the page number of the destination
190
- */
191
- int destination::page_number() const
192
- {
193
- if (d->page_number_unresolved) {
194
- d->page_number_unresolved = false;
195
- d->page_number = d->pdf_doc->findPage(d->page_ref);
196
- }
197
-
198
- return d->page_number;
199
- }
200
-
201
- /**
202
- \returns the left coordinate of the destination
203
- */
204
- double destination::left() const
205
- {
206
- return d->left;
207
- }
208
-
209
- /**
210
- \returns the bottom coordinate of the destination
211
- */
212
- double destination::bottom() const
213
- {
214
- return d->bottom;
215
- }
216
-
217
- /**
218
- \returns the right coordinate of the destination
219
- */
220
- double destination::right() const
221
- {
222
- return d->right;
223
- }
224
-
225
- /**
226
- \returns the top coordinate of the destination
227
- */
228
- double destination::top() const
229
- {
230
- return d->top;
231
- }
232
-
233
- /**
234
- \returns the scale factor of the destination
235
- */
236
- double destination::zoom() const
237
- {
238
- return d->zoom;
239
- }
240
-
241
- /**
242
- \returns whether left coordinate should be changed
243
- */
244
- bool destination::is_change_left() const
245
- {
246
- return d->change_left;
247
- }
248
-
249
- /**
250
- \returns whether top coordinate should be changed
251
- */
252
- bool destination::is_change_top() const
253
- {
254
- return d->change_top;
255
- }
256
-
257
- /**
258
- \returns whether scale factor should be changed
259
- */
260
- bool destination::is_change_zoom() const
261
- {
262
- return d->change_zoom;
263
- }
264
-
265
- /**
266
- Move assignment operator.
267
- */
268
- destination &destination::operator=(destination &&other) noexcept = default;
269
-
270
- /**
271
- Destructor.
272
- */
273
- destination::~destination() = default;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/cpp/poppler-destination.h DELETED
@@ -1,71 +0,0 @@
1
- /*
2
- * Copyright (C) 2019, Masamichi Hosoda <[email protected]>
3
- * Copyright (C) 2019, 2021, Albert Astals Cid <[email protected]>
4
- * Copyright (C) 2022, Oliver Sander <[email protected]>
5
- *
6
- * This program is free software; you can redistribute it and/or modify
7
- * it under the terms of the GNU General Public License as published by
8
- * the Free Software Foundation; either version 2, or (at your option)
9
- * any later version.
10
- *
11
- * This program is distributed in the hope that it will be useful,
12
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- * GNU General Public License for more details.
15
- *
16
- * You should have received a copy of the GNU General Public License
17
- * along with this program; if not, write to the Free Software
18
- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
19
- */
20
-
21
- #ifndef POPPLER_DESTINATION_H
22
- #define POPPLER_DESTINATION_H
23
-
24
- #include <memory>
25
- #include "poppler-global.h"
26
-
27
- namespace poppler {
28
- class destination_private;
29
-
30
- class POPPLER_CPP_EXPORT destination : public poppler::noncopyable
31
- {
32
- public:
33
- enum type_enum
34
- {
35
- unknown,
36
- xyz,
37
- fit,
38
- fit_h,
39
- fit_v,
40
- fit_r,
41
- fit_b,
42
- fit_b_h,
43
- fit_b_v
44
- };
45
-
46
- ~destination();
47
- destination(destination &&other) noexcept;
48
-
49
- type_enum type() const;
50
- int page_number() const;
51
- double left() const;
52
- double bottom() const;
53
- double right() const;
54
- double top() const;
55
- double zoom() const;
56
- bool is_change_left() const;
57
- bool is_change_top() const;
58
- bool is_change_zoom() const;
59
-
60
- destination &operator=(destination &&other) noexcept;
61
-
62
- private:
63
- explicit destination(destination_private *dd);
64
-
65
- std::unique_ptr<destination_private> d;
66
- friend class document;
67
- };
68
-
69
- }
70
-
71
- #endif
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/cpp/poppler-document-private.h DELETED
@@ -1,61 +0,0 @@
1
- /*
2
- * Copyright (C) 2009-2011, Pino Toscano <[email protected]>
3
- * Copyright (C) 2018, 2020, 2022, Albert Astals Cid <[email protected]>
4
- * Copyright (C) 2018, 2020, Adam Reichold <[email protected]>
5
- *
6
- * This program is free software; you can redistribute it and/or modify
7
- * it under the terms of the GNU General Public License as published by
8
- * the Free Software Foundation; either version 2, or (at your option)
9
- * any later version.
10
- *
11
- * This program is distributed in the hope that it will be useful,
12
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- * GNU General Public License for more details.
15
- *
16
- * You should have received a copy of the GNU General Public License
17
- * along with this program; if not, write to the Free Software
18
- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
19
- */
20
-
21
- #ifndef POPPLER_DOCUMENT_PRIVATE_H
22
- #define POPPLER_DOCUMENT_PRIVATE_H
23
-
24
- #include "poppler-global.h"
25
-
26
- #include "poppler-config.h"
27
- #include "GooString.h"
28
- #include "PDFDoc.h"
29
- #include "GlobalParams.h"
30
-
31
- #include <vector>
32
-
33
- namespace poppler {
34
-
35
- class document;
36
- class embedded_file;
37
-
38
- class document_private : private GlobalParamsIniter
39
- {
40
- public:
41
- document_private(std::unique_ptr<GooString> &&file_path, const std::string &owner_password, const std::string &user_password);
42
- document_private(byte_array *file_data, const std::string &owner_password, const std::string &user_password);
43
- document_private(const char *file_data, int file_data_length, const std::string &owner_password, const std::string &user_password);
44
- ~document_private();
45
-
46
- static document *check_document(document_private *doc, byte_array *file_data);
47
-
48
- PDFDoc *doc;
49
- byte_array doc_data;
50
- const char *raw_doc_data;
51
- int raw_doc_data_length;
52
- bool is_locked;
53
- std::vector<embedded_file *> embedded_files;
54
-
55
- private:
56
- document_private();
57
- };
58
-
59
- }
60
-
61
- #endif
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/cpp/poppler-document.cpp DELETED
@@ -1,1230 +0,0 @@
1
- /*
2
- * Copyright (C) 2009-2011, Pino Toscano <[email protected]>
3
- * Copyright (C) 2016 Jakub Alba <[email protected]>
4
- * Copyright (C) 2017, 2022, Albert Astals Cid <[email protected]>
5
- * Copyright (C) 2018, 2020, Adam Reichold <[email protected]>
6
- * Copyright (C) 2019, Masamichi Hosoda <[email protected]>
7
- * Copyright (C) 2019, 2020, Oliver Sander <[email protected]>
8
- *
9
- * This program is free software; you can redistribute it and/or modify
10
- * it under the terms of the GNU General Public License as published by
11
- * the Free Software Foundation; either version 2, or (at your option)
12
- * any later version.
13
- *
14
- * This program is distributed in the hope that it will be useful,
15
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
- * GNU General Public License for more details.
18
- *
19
- * You should have received a copy of the GNU General Public License
20
- * along with this program; if not, write to the Free Software
21
- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
22
- */
23
-
24
- /**
25
- \file poppler-document.h
26
- */
27
- #include "poppler-destination.h"
28
- #include "poppler-document.h"
29
- #include "poppler-embedded-file.h"
30
- #include "poppler-page.h"
31
- #include "poppler-toc.h"
32
-
33
- #include "poppler-destination-private.h"
34
- #include "poppler-document-private.h"
35
- #include "poppler-embedded-file-private.h"
36
- #include "poppler-page-private.h"
37
- #include "poppler-private.h"
38
- #include "poppler-toc-private.h"
39
-
40
- #include "Catalog.h"
41
- #include "DateInfo.h"
42
- #include "ErrorCodes.h"
43
- #include "GlobalParams.h"
44
- #include "Link.h"
45
- #include "Outline.h"
46
-
47
- #include <algorithm>
48
- #include <iterator>
49
- #include <memory>
50
-
51
- using namespace poppler;
52
-
53
- document_private::document_private(std::unique_ptr<GooString> &&file_path, const std::string &owner_password, const std::string &user_password) : document_private()
54
- {
55
- doc = new PDFDoc(std::move(file_path), GooString(owner_password.c_str()), GooString(user_password.c_str()));
56
- }
57
-
58
- document_private::document_private(byte_array *file_data, const std::string &owner_password, const std::string &user_password) : document_private()
59
- {
60
- file_data->swap(doc_data);
61
- MemStream *memstr = new MemStream(&doc_data[0], 0, doc_data.size(), Object(objNull));
62
- doc = new PDFDoc(memstr, GooString(owner_password.c_str()), GooString(user_password.c_str()));
63
- }
64
-
65
- document_private::document_private(const char *file_data, int file_data_length, const std::string &owner_password, const std::string &user_password) : document_private()
66
- {
67
- raw_doc_data = file_data;
68
- raw_doc_data_length = file_data_length;
69
- MemStream *memstr = new MemStream(raw_doc_data, 0, raw_doc_data_length, Object(objNull));
70
- doc = new PDFDoc(memstr, GooString(owner_password.c_str()), GooString(user_password.c_str()));
71
- }
72
-
73
- document_private::document_private() : GlobalParamsIniter(detail::error_function), doc(nullptr), raw_doc_data(nullptr), raw_doc_data_length(0), is_locked(false) { }
74
-
75
- document_private::~document_private()
76
- {
77
- delete_all(embedded_files);
78
-
79
- delete doc;
80
- }
81
-
82
- document *document_private::check_document(document_private *doc, byte_array *file_data)
83
- {
84
- if (doc->doc->isOk() || doc->doc->getErrorCode() == errEncrypted) {
85
- if (doc->doc->getErrorCode() == errEncrypted) {
86
- doc->is_locked = true;
87
- }
88
- return new document(*doc);
89
- } else {
90
- // put back the document data where it was before
91
- if (file_data) {
92
- file_data->swap(doc->doc_data);
93
- }
94
- delete doc;
95
- }
96
- return nullptr;
97
- }
98
-
99
- /**
100
- \class poppler::document poppler-document.h "poppler/cpp/poppler-document.h"
101
-
102
- Represents a PDF %document.
103
- */
104
-
105
- /**
106
- \enum poppler::document::page_mode_enum
107
-
108
- The various page modes available in a PDF %document.
109
- */
110
- /**
111
- \var poppler::document::page_mode_enum poppler::document::use_none
112
-
113
- The %document specifies no particular page mode.
114
- */
115
- /**
116
- \var poppler::document::page_mode_enum poppler::document::use_outlines
117
-
118
- The %document specifies its TOC (table of contents) should be open.
119
- */
120
- /**
121
- \var poppler::document::page_mode_enum poppler::document::use_thumbs
122
-
123
- The %document specifies that should be open a view of the thumbnails of its
124
- pages.
125
- */
126
- /**
127
- \var poppler::document::page_mode_enum poppler::document::fullscreen
128
-
129
- The %document specifies it wants to be open in a fullscreen mode.
130
- */
131
- /**
132
- \var poppler::document::page_mode_enum poppler::document::use_oc
133
-
134
- The %document specifies that should be open a view of its Optional Content
135
- (also known as layers).
136
- */
137
- /**
138
- \var poppler::document::page_mode_enum poppler::document::use_attach
139
-
140
- The %document specifies that should be open a view of its %document-level
141
- attachments.
142
- */
143
-
144
- document::document(document_private &dd) : d(&dd) { }
145
-
146
- document::~document()
147
- {
148
- delete d;
149
- }
150
-
151
- /**
152
- \returns whether the current %document is locked
153
- */
154
- bool document::is_locked() const
155
- {
156
- return d->is_locked;
157
- }
158
-
159
- /**
160
- Unlocks the current document, if locked.
161
-
162
- \returns the new locking status of the document
163
- */
164
- bool document::unlock(const std::string &owner_password, const std::string &user_password)
165
- {
166
- if (d->is_locked) {
167
- document_private *newdoc = nullptr;
168
- if (d->doc_data.size() > 0) {
169
- newdoc = new document_private(&d->doc_data, owner_password, user_password);
170
- } else if (d->raw_doc_data) {
171
- newdoc = new document_private(d->raw_doc_data, d->raw_doc_data_length, owner_password, user_password);
172
- } else {
173
- newdoc = new document_private(std::make_unique<GooString>(d->doc->getFileName()), owner_password, user_password);
174
- }
175
- if (!newdoc->doc->isOk()) {
176
- d->doc_data.swap(newdoc->doc_data);
177
- delete newdoc;
178
- } else {
179
- delete d;
180
- d = newdoc;
181
- d->is_locked = false;
182
- }
183
- }
184
- return d->is_locked;
185
- }
186
-
187
- /**
188
- \returns the eventual page mode specified by the current PDF %document
189
- */
190
- document::page_mode_enum document::page_mode() const
191
- {
192
- switch (d->doc->getCatalog()->getPageMode()) {
193
- case Catalog::pageModeNone:
194
- return use_none;
195
- case Catalog::pageModeOutlines:
196
- return use_outlines;
197
- case Catalog::pageModeThumbs:
198
- return use_thumbs;
199
- case Catalog::pageModeFullScreen:
200
- return fullscreen;
201
- case Catalog::pageModeOC:
202
- return use_oc;
203
- case Catalog::pageModeAttach:
204
- return use_attach;
205
- default:
206
- return use_none;
207
- }
208
- }
209
-
210
- /**
211
- \returns the eventual page layout specified by the current PDF %document
212
- */
213
- document::page_layout_enum document::page_layout() const
214
- {
215
- switch (d->doc->getCatalog()->getPageLayout()) {
216
- case Catalog::pageLayoutNone:
217
- return no_layout;
218
- case Catalog::pageLayoutSinglePage:
219
- return single_page;
220
- case Catalog::pageLayoutOneColumn:
221
- return one_column;
222
- case Catalog::pageLayoutTwoColumnLeft:
223
- return two_column_left;
224
- case Catalog::pageLayoutTwoColumnRight:
225
- return two_column_right;
226
- case Catalog::pageLayoutTwoPageLeft:
227
- return two_page_left;
228
- case Catalog::pageLayoutTwoPageRight:
229
- return two_page_right;
230
- default:
231
- return no_layout;
232
- }
233
- }
234
-
235
- /**
236
- Gets the version of the current PDF %document.
237
-
238
- Example:
239
- \code
240
- poppler::document *doc = ...;
241
- // for example, if the document is PDF 1.6:
242
- int major = 0, minor = 0;
243
- doc->get_pdf_version(&major, &minor);
244
- // major == 1
245
- // minor == 6
246
- \endcode
247
-
248
- \param major if not NULL, will be set to the "major" number of the version
249
- \param minor if not NULL, will be set to the "minor" number of the version
250
- */
251
- void document::get_pdf_version(int *major, int *minor) const
252
- {
253
- if (major) {
254
- *major = d->doc->getPDFMajorVersion();
255
- }
256
- if (minor) {
257
- *minor = d->doc->getPDFMinorVersion();
258
- }
259
- }
260
-
261
- /**
262
- \returns all the information keys available in the %document
263
- \see info_key, info_date
264
- */
265
- std::vector<std::string> document::info_keys() const
266
- {
267
- if (d->is_locked) {
268
- return std::vector<std::string>();
269
- }
270
-
271
- Object info = d->doc->getDocInfo();
272
- if (!info.isDict()) {
273
- return std::vector<std::string>();
274
- }
275
-
276
- Dict *info_dict = info.getDict();
277
- std::vector<std::string> keys(info_dict->getLength());
278
- for (int i = 0; i < info_dict->getLength(); ++i) {
279
- keys[i] = std::string(info_dict->getKey(i));
280
- }
281
-
282
- return keys;
283
- }
284
-
285
- /**
286
- Gets the value of the specified \p key of the document information.
287
-
288
- \returns the value for the \p key, or an empty string if not available
289
- \see info_keys, info_date
290
- */
291
- ustring document::info_key(const std::string &key) const
292
- {
293
- if (d->is_locked) {
294
- return ustring();
295
- }
296
-
297
- std::unique_ptr<GooString> goo_value(d->doc->getDocInfoStringEntry(key.c_str()));
298
- if (!goo_value.get()) {
299
- return ustring();
300
- }
301
-
302
- return detail::unicode_GooString_to_ustring(goo_value.get());
303
- }
304
-
305
- /**
306
- Sets the value of the specified \p key of the %document information to \p val.
307
- If \p val is empty, the entry specified by \p key is removed.
308
-
309
- \returns true on success, false on failure
310
- */
311
- bool document::set_info_key(const std::string &key, const ustring &val)
312
- {
313
- if (d->is_locked) {
314
- return false;
315
- }
316
-
317
- GooString *goo_val;
318
-
319
- if (val.empty()) {
320
- goo_val = nullptr;
321
- } else {
322
- goo_val = detail::ustring_to_unicode_GooString(val);
323
- }
324
-
325
- d->doc->setDocInfoStringEntry(key.c_str(), goo_val);
326
- return true;
327
- }
328
-
329
- /**
330
- Gets the time_type value of the specified \p key of the document
331
- information.
332
-
333
- \returns the time_t value for the \p key
334
- \see info_keys, info_date
335
- */
336
- time_type document::info_date(const std::string &key) const
337
- {
338
- if (d->is_locked) {
339
- return time_type(-1);
340
- }
341
-
342
- std::unique_ptr<GooString> goo_date(d->doc->getDocInfoStringEntry(key.c_str()));
343
- if (!goo_date.get()) {
344
- return time_type(-1);
345
- }
346
-
347
- return static_cast<time_type>(dateStringToTime(goo_date.get()));
348
- }
349
-
350
- /**
351
- Gets the time_t value of the specified \p key of the document
352
- information.
353
-
354
- \returns the time_t value for the \p key
355
- \see info_keys, info_date
356
- */
357
- time_t document::info_date_t(const std::string &key) const
358
- {
359
- if (d->is_locked) {
360
- return time_t(-1);
361
- }
362
-
363
- std::unique_ptr<GooString> goo_date(d->doc->getDocInfoStringEntry(key.c_str()));
364
- if (!goo_date.get()) {
365
- return time_t(-1);
366
- }
367
-
368
- return dateStringToTime(goo_date.get());
369
- }
370
-
371
- /**
372
- Sets the time_type value of the specified \p key of the %document information
373
- to \p val.
374
- If \p val == time_type(-1), the entry specified by \p key is removed.
375
-
376
- \returns true on success, false on failure
377
- */
378
- bool document::set_info_date(const std::string &key, time_type val)
379
- {
380
- if (d->is_locked) {
381
- return false;
382
- }
383
-
384
- GooString *goo_date;
385
-
386
- if (val == time_type(-1)) {
387
- goo_date = nullptr;
388
- } else {
389
- time_t t = static_cast<time_t>(val);
390
- goo_date = timeToDateString(&t);
391
- }
392
-
393
- d->doc->setDocInfoStringEntry(key.c_str(), goo_date);
394
- return true;
395
- }
396
-
397
- /**
398
- Sets the time_t value of the specified \p key of the %document information
399
- to \p val.
400
- If \p val == time_t(-1), the entry specified by \p key is removed.
401
-
402
- \returns true on success, false on failure
403
- */
404
- bool document::set_info_date_t(const std::string &key, time_t val)
405
- {
406
- if (d->is_locked) {
407
- return false;
408
- }
409
-
410
- GooString *goo_date;
411
-
412
- if (val == time_t(-1)) {
413
- goo_date = nullptr;
414
- } else {
415
- goo_date = timeToDateString(&val);
416
- }
417
-
418
- d->doc->setDocInfoStringEntry(key.c_str(), goo_date);
419
- return true;
420
- }
421
-
422
- /**
423
- Gets the %document's title.
424
-
425
- \returns the document's title, or an empty string if not available
426
- \see set_title, info_key
427
- */
428
- ustring document::get_title() const
429
- {
430
- if (d->is_locked) {
431
- return ustring();
432
- }
433
-
434
- std::unique_ptr<GooString> goo_title(d->doc->getDocInfoTitle());
435
- if (!goo_title.get()) {
436
- return ustring();
437
- }
438
-
439
- return detail::unicode_GooString_to_ustring(goo_title.get());
440
- }
441
-
442
- /**
443
- Sets the %document's title to \p title.
444
- If \p title is empty, the %document's title is removed.
445
-
446
- \returns true on success, false on failure
447
- */
448
- bool document::set_title(const ustring &title)
449
- {
450
- if (d->is_locked) {
451
- return false;
452
- }
453
-
454
- GooString *goo_title;
455
-
456
- if (title.empty()) {
457
- goo_title = nullptr;
458
- } else {
459
- goo_title = detail::ustring_to_unicode_GooString(title);
460
- }
461
-
462
- d->doc->setDocInfoTitle(goo_title);
463
- return true;
464
- }
465
-
466
- /**
467
- Gets the document's author.
468
-
469
- \returns the document's author, or an empty string if not available
470
- \see set_author, info_key
471
- */
472
- ustring document::get_author() const
473
- {
474
- if (d->is_locked) {
475
- return ustring();
476
- }
477
-
478
- std::unique_ptr<GooString> goo_author(d->doc->getDocInfoAuthor());
479
- if (!goo_author.get()) {
480
- return ustring();
481
- }
482
-
483
- return detail::unicode_GooString_to_ustring(goo_author.get());
484
- }
485
-
486
- /**
487
- Sets the %document's author to \p author.
488
- If \p author is empty, the %document's author is removed.
489
-
490
- \returns true on success, false on failure
491
- */
492
- bool document::set_author(const ustring &author)
493
- {
494
- if (d->is_locked) {
495
- return false;
496
- }
497
-
498
- GooString *goo_author;
499
-
500
- if (author.empty()) {
501
- goo_author = nullptr;
502
- } else {
503
- goo_author = detail::ustring_to_unicode_GooString(author);
504
- }
505
-
506
- d->doc->setDocInfoAuthor(goo_author);
507
- return true;
508
- }
509
-
510
- /**
511
- Gets the document's subject.
512
-
513
- \returns the document's subject, or an empty string if not available
514
- \see set_subject, info_key
515
- */
516
- ustring document::get_subject() const
517
- {
518
- if (d->is_locked) {
519
- return ustring();
520
- }
521
-
522
- std::unique_ptr<GooString> goo_subject(d->doc->getDocInfoSubject());
523
- if (!goo_subject.get()) {
524
- return ustring();
525
- }
526
-
527
- return detail::unicode_GooString_to_ustring(goo_subject.get());
528
- }
529
-
530
- /**
531
- Sets the %document's subject to \p subject.
532
- If \p subject is empty, the %document's subject is removed.
533
-
534
- \returns true on success, false on failure
535
- */
536
- bool document::set_subject(const ustring &subject)
537
- {
538
- if (d->is_locked) {
539
- return false;
540
- }
541
-
542
- GooString *goo_subject;
543
-
544
- if (subject.empty()) {
545
- goo_subject = nullptr;
546
- } else {
547
- goo_subject = detail::ustring_to_unicode_GooString(subject);
548
- }
549
-
550
- d->doc->setDocInfoSubject(goo_subject);
551
- return true;
552
- }
553
-
554
- /**
555
- Gets the document's keywords.
556
-
557
- \returns the document's keywords, or an empty string if not available
558
- \see set_keywords, info_key
559
- */
560
- ustring document::get_keywords() const
561
- {
562
- if (d->is_locked) {
563
- return ustring();
564
- }
565
-
566
- std::unique_ptr<GooString> goo_keywords(d->doc->getDocInfoKeywords());
567
- if (!goo_keywords.get()) {
568
- return ustring();
569
- }
570
-
571
- return detail::unicode_GooString_to_ustring(goo_keywords.get());
572
- }
573
-
574
- /**
575
- Sets the %document's keywords to \p keywords.
576
- If \p keywords is empty, the %document's keywords are removed.
577
-
578
- \returns true on success, false on failure
579
- */
580
- bool document::set_keywords(const ustring &keywords)
581
- {
582
- if (d->is_locked) {
583
- return false;
584
- }
585
-
586
- GooString *goo_keywords;
587
-
588
- if (keywords.empty()) {
589
- goo_keywords = nullptr;
590
- } else {
591
- goo_keywords = detail::ustring_to_unicode_GooString(keywords);
592
- }
593
-
594
- d->doc->setDocInfoKeywords(goo_keywords);
595
- return true;
596
- }
597
-
598
- /**
599
- Gets the document's creator.
600
-
601
- \returns the document's creator, or an empty string if not available
602
- \see set_creator, info_key
603
- */
604
- ustring document::get_creator() const
605
- {
606
- if (d->is_locked) {
607
- return ustring();
608
- }
609
-
610
- std::unique_ptr<GooString> goo_creator(d->doc->getDocInfoCreator());
611
- if (!goo_creator.get()) {
612
- return ustring();
613
- }
614
-
615
- return detail::unicode_GooString_to_ustring(goo_creator.get());
616
- }
617
-
618
- /**
619
- Sets the %document's creator to \p creator.
620
- If \p creator is empty, the %document's creator is removed.
621
-
622
- \returns true on success, false on failure
623
- */
624
- bool document::set_creator(const ustring &creator)
625
- {
626
- if (d->is_locked) {
627
- return false;
628
- }
629
-
630
- GooString *goo_creator;
631
-
632
- if (creator.empty()) {
633
- goo_creator = nullptr;
634
- } else {
635
- goo_creator = detail::ustring_to_unicode_GooString(creator);
636
- }
637
-
638
- d->doc->setDocInfoCreator(goo_creator);
639
- return true;
640
- }
641
-
642
- /**
643
- Gets the document's producer.
644
-
645
- \returns the document's producer, or an empty string if not available
646
- \see set_producer, info_key
647
- */
648
- ustring document::get_producer() const
649
- {
650
- if (d->is_locked) {
651
- return ustring();
652
- }
653
-
654
- std::unique_ptr<GooString> goo_producer(d->doc->getDocInfoProducer());
655
- if (!goo_producer.get()) {
656
- return ustring();
657
- }
658
-
659
- return detail::unicode_GooString_to_ustring(goo_producer.get());
660
- }
661
-
662
- /**
663
- Sets the %document's producer to \p producer.
664
- If \p producer is empty, the %document's producer is removed.
665
-
666
- \returns true on success, false on failure
667
- */
668
- bool document::set_producer(const ustring &producer)
669
- {
670
- if (d->is_locked) {
671
- return false;
672
- }
673
-
674
- GooString *goo_producer;
675
-
676
- if (producer.empty()) {
677
- goo_producer = nullptr;
678
- } else {
679
- goo_producer = detail::ustring_to_unicode_GooString(producer);
680
- }
681
-
682
- d->doc->setDocInfoProducer(goo_producer);
683
- return true;
684
- }
685
-
686
- /**
687
- Gets the document's creation date as a time_type value.
688
-
689
- \returns the document's creation date as a time_type value
690
- \see set_creation_date, info_date
691
- */
692
- time_type document::get_creation_date() const
693
- {
694
- if (d->is_locked) {
695
- return time_type(-1);
696
- }
697
-
698
- std::unique_ptr<GooString> goo_creation_date(d->doc->getDocInfoCreatDate());
699
- if (!goo_creation_date.get()) {
700
- return time_type(-1);
701
- }
702
-
703
- return static_cast<time_type>(dateStringToTime(goo_creation_date.get()));
704
- }
705
-
706
- /**
707
- Gets the document's creation date as a time_t value.
708
-
709
- \returns the document's creation date as a time_t value
710
- \see set_creation_date, info_date
711
- */
712
- time_t document::get_creation_date_t() const
713
- {
714
- if (d->is_locked) {
715
- return time_t(-1);
716
- }
717
-
718
- std::unique_ptr<GooString> goo_creation_date(d->doc->getDocInfoCreatDate());
719
- if (!goo_creation_date.get()) {
720
- return time_t(-1);
721
- }
722
-
723
- return dateStringToTime(goo_creation_date.get());
724
- }
725
-
726
- /**
727
- Sets the %document's creation date to \p creation_date.
728
- If \p creation_date == time_type(-1), the %document's creation date is removed.
729
-
730
- \returns true on success, false on failure
731
- */
732
- bool document::set_creation_date(time_type creation_date)
733
- {
734
- if (d->is_locked) {
735
- return false;
736
- }
737
-
738
- GooString *goo_creation_date;
739
-
740
- if (creation_date == time_type(-1)) {
741
- goo_creation_date = nullptr;
742
- } else {
743
- time_t t = static_cast<time_t>(creation_date);
744
- goo_creation_date = timeToDateString(&t);
745
- }
746
-
747
- d->doc->setDocInfoCreatDate(goo_creation_date);
748
- return true;
749
- }
750
-
751
- /**
752
- Sets the %document's creation date to \p creation_date.
753
- If \p creation_date == time_t(-1), the %document's creation date is removed.
754
-
755
- \returns true on success, false on failure
756
- */
757
- bool document::set_creation_date_t(time_t creation_date)
758
- {
759
- if (d->is_locked) {
760
- return false;
761
- }
762
-
763
- GooString *goo_creation_date;
764
-
765
- if (creation_date == time_t(-1)) {
766
- goo_creation_date = nullptr;
767
- } else {
768
- goo_creation_date = timeToDateString(&creation_date);
769
- }
770
-
771
- d->doc->setDocInfoCreatDate(goo_creation_date);
772
- return true;
773
- }
774
-
775
- /**
776
- Gets the document's modification date as a time_type value.
777
-
778
- \returns the document's modification date as a time_type value
779
- \see set_modification_date, info_date
780
- */
781
- time_type document::get_modification_date() const
782
- {
783
- if (d->is_locked) {
784
- return time_type(-1);
785
- }
786
-
787
- std::unique_ptr<GooString> goo_modification_date(d->doc->getDocInfoModDate());
788
- if (!goo_modification_date.get()) {
789
- return time_type(-1);
790
- }
791
-
792
- return static_cast<time_type>(dateStringToTime(goo_modification_date.get()));
793
- }
794
-
795
- /**
796
- Gets the document's modification date as a time_t value.
797
-
798
- \returns the document's modification date as a time_t value
799
- \see set_modification_date, info_date
800
- */
801
- time_t document::get_modification_date_t() const
802
- {
803
- if (d->is_locked) {
804
- return time_t(-1);
805
- }
806
-
807
- std::unique_ptr<GooString> goo_modification_date(d->doc->getDocInfoModDate());
808
- if (!goo_modification_date.get()) {
809
- return time_t(-1);
810
- }
811
-
812
- return dateStringToTime(goo_modification_date.get());
813
- }
814
-
815
- /**
816
- Sets the %document's modification date to \p mod_date.
817
- If \p mod_date == time_type(-1), the %document's modification date is removed.
818
-
819
- \returns true on success, false on failure
820
- */
821
- bool document::set_modification_date(time_type mod_date)
822
- {
823
- if (d->is_locked) {
824
- return false;
825
- }
826
-
827
- GooString *goo_mod_date;
828
-
829
- if (mod_date == time_type(-1)) {
830
- goo_mod_date = nullptr;
831
- } else {
832
- time_t t = static_cast<time_t>(mod_date);
833
- goo_mod_date = timeToDateString(&t);
834
- }
835
-
836
- d->doc->setDocInfoModDate(goo_mod_date);
837
- return true;
838
- }
839
-
840
- /**
841
- Sets the %document's modification date to \p mod_date.
842
- If \p mod_date == time_t(-1), the %document's modification date is removed.
843
-
844
- \returns true on success, false on failure
845
- */
846
- bool document::set_modification_date_t(time_t mod_date)
847
- {
848
- if (d->is_locked) {
849
- return false;
850
- }
851
-
852
- GooString *goo_mod_date;
853
-
854
- if (mod_date == time_t(-1)) {
855
- goo_mod_date = nullptr;
856
- } else {
857
- goo_mod_date = timeToDateString(&mod_date);
858
- }
859
-
860
- d->doc->setDocInfoModDate(goo_mod_date);
861
- return true;
862
- }
863
-
864
- /**
865
- Removes the %document's Info dictionary.
866
-
867
- \returns true on success, false on failure
868
- */
869
- bool document::remove_info()
870
- {
871
- if (d->is_locked) {
872
- return false;
873
- }
874
-
875
- d->doc->removeDocInfo();
876
- return true;
877
- }
878
-
879
- /**
880
- \returns whether the document is encrypted
881
- */
882
- bool document::is_encrypted() const
883
- {
884
- return d->doc->isEncrypted();
885
- }
886
-
887
- /**
888
- \returns whether the document is linearized
889
- */
890
- bool document::is_linearized() const
891
- {
892
- return d->doc->isLinearized();
893
- }
894
-
895
- /**
896
- Check for available "document permission".
897
-
898
- \returns whether the specified permission is allowed
899
- */
900
- bool document::has_permission(permission_enum which) const
901
- {
902
- switch (which) {
903
- case perm_print:
904
- return d->doc->okToPrint();
905
- case perm_change:
906
- return d->doc->okToChange();
907
- case perm_copy:
908
- return d->doc->okToCopy();
909
- case perm_add_notes:
910
- return d->doc->okToAddNotes();
911
- case perm_fill_forms:
912
- return d->doc->okToFillForm();
913
- case perm_accessibility:
914
- return d->doc->okToAccessibility();
915
- case perm_assemble:
916
- return d->doc->okToAssemble();
917
- case perm_print_high_resolution:
918
- return d->doc->okToPrintHighRes();
919
- }
920
- return true;
921
- }
922
-
923
- /**
924
- Reads the %document metadata string.
925
-
926
- \return the %document metadata string
927
- */
928
- ustring document::metadata() const
929
- {
930
- std::unique_ptr<GooString> md(d->doc->getCatalog()->readMetadata());
931
- if (md.get()) {
932
- return detail::unicode_GooString_to_ustring(md.get());
933
- }
934
- return ustring();
935
- }
936
-
937
- /**
938
- Gets the IDs of the current PDF %document, if available.
939
-
940
- \param permanent_id if not NULL, will be set to the permanent ID of the %document
941
- \param update_id if not NULL, will be set to the update ID of the %document
942
-
943
- \returns whether the document has the IDs
944
-
945
- \since 0.16
946
- */
947
- bool document::get_pdf_id(std::string *permanent_id, std::string *update_id) const
948
- {
949
- GooString goo_permanent_id;
950
- GooString goo_update_id;
951
-
952
- if (!d->doc->getID(permanent_id ? &goo_permanent_id : nullptr, update_id ? &goo_update_id : nullptr)) {
953
- return false;
954
- }
955
-
956
- if (permanent_id) {
957
- *permanent_id = goo_permanent_id.c_str();
958
- }
959
- if (update_id) {
960
- *update_id = goo_update_id.c_str();
961
- }
962
-
963
- return true;
964
- }
965
-
966
- /**
967
- Document page count.
968
-
969
- \returns the number of pages of the document
970
- */
971
- int document::pages() const
972
- {
973
- return d->doc->getNumPages();
974
- }
975
-
976
- /**
977
- Document page by label reading.
978
-
979
- This creates a new page representing the %document %page whose label is the
980
- specified \p label. If there is no page with that \p label, NULL is returned.
981
-
982
- \returns a new page object or NULL
983
- */
984
- page *document::create_page(const ustring &label) const
985
- {
986
- std::unique_ptr<GooString> goolabel(detail::ustring_to_unicode_GooString(label));
987
- int index = 0;
988
-
989
- if (!d->doc->getCatalog()->labelToIndex(goolabel.get(), &index)) {
990
- return nullptr;
991
- }
992
- return create_page(index);
993
- }
994
-
995
- /**
996
- Document page by index reading.
997
-
998
- This creates a new page representing the \p index -th %page of the %document.
999
- \note the page indexes are in the range [0, pages()[.
1000
-
1001
- \returns a new page object or NULL
1002
- */
1003
- page *document::create_page(int index) const
1004
- {
1005
- if (index >= 0 && index < d->doc->getNumPages()) {
1006
- page *p = new page(d, index);
1007
- if (p->d->page) {
1008
- return p;
1009
- } else {
1010
- delete p;
1011
- return nullptr;
1012
- }
1013
- } else {
1014
- return nullptr;
1015
- }
1016
- }
1017
-
1018
- /**
1019
- Reads all the font information of the %document.
1020
-
1021
- \note this can be slow for big documents; prefer the use of a font_iterator
1022
- to read incrementally page by page
1023
- \see create_font_iterator
1024
- */
1025
- std::vector<font_info> document::fonts() const
1026
- {
1027
- std::vector<font_info> result;
1028
- font_iterator it(0, d);
1029
- while (it.has_next()) {
1030
- const std::vector<font_info> l = it.next();
1031
- std::copy(l.begin(), l.end(), std::back_inserter(result));
1032
- }
1033
- return result;
1034
- }
1035
-
1036
- /**
1037
- Creates a new font iterator.
1038
-
1039
- This creates a new font iterator for reading the font information of the
1040
- %document page by page, starting at the specified \p start_page (0 if not
1041
- specified).
1042
-
1043
- \returns a new font iterator
1044
- */
1045
- font_iterator *document::create_font_iterator(int start_page) const
1046
- {
1047
- return new font_iterator(start_page, d);
1048
- }
1049
-
1050
- /**
1051
- Reads the TOC (table of contents) of the %document.
1052
-
1053
- \returns a new toc object if a TOC is available, NULL otherwise
1054
- */
1055
- toc *document::create_toc() const
1056
- {
1057
- return toc_private::load_from_outline(d->doc->getOutline());
1058
- }
1059
-
1060
- /**
1061
- Reads whether the current document has %document-level embedded files
1062
- (attachments).
1063
-
1064
- This is a very fast way to know whether there are embedded files (also known
1065
- as "attachments") at the %document-level. Note this does not take into account
1066
- files embedded in other ways (e.g. to annotations).
1067
-
1068
- \returns whether the document has embedded files
1069
- */
1070
- bool document::has_embedded_files() const
1071
- {
1072
- return d->doc->getCatalog()->numEmbeddedFiles() > 0;
1073
- }
1074
-
1075
- /**
1076
- Reads all the %document-level embedded files of the %document.
1077
-
1078
- \returns the %document-level embedded files
1079
- */
1080
- std::vector<embedded_file *> document::embedded_files() const
1081
- {
1082
- if (d->is_locked) {
1083
- return std::vector<embedded_file *>();
1084
- }
1085
-
1086
- if (d->embedded_files.empty() && d->doc->getCatalog()->numEmbeddedFiles() > 0) {
1087
- const int num = d->doc->getCatalog()->numEmbeddedFiles();
1088
- d->embedded_files.resize(num);
1089
- for (int i = 0; i < num; ++i) {
1090
- std::unique_ptr<FileSpec> fs = d->doc->getCatalog()->embeddedFile(i);
1091
- d->embedded_files[i] = embedded_file_private::create(std::move(fs));
1092
- }
1093
- }
1094
- return d->embedded_files;
1095
- }
1096
-
1097
- /**
1098
- Creates a map of all the named destinations in the %document.
1099
-
1100
- \note The destination names may contain \\0 and other binary values
1101
- so they are not printable and cannot convert to null-terminated C strings.
1102
-
1103
- \returns the map of the each name and destination
1104
-
1105
- \since 0.74
1106
- */
1107
- std::map<std::string, destination> document::create_destination_map() const
1108
- {
1109
- std::map<std::string, destination> m;
1110
-
1111
- Catalog *catalog = d->doc->getCatalog();
1112
- if (!catalog) {
1113
- return m;
1114
- }
1115
-
1116
- // Iterate from name-dict
1117
- const int nDests = catalog->numDests();
1118
- for (int i = 0; i < nDests; ++i) {
1119
- std::string key(catalog->getDestsName(i));
1120
- std::unique_ptr<LinkDest> link_dest = catalog->getDestsDest(i);
1121
-
1122
- if (link_dest) {
1123
- destination dest(new destination_private(link_dest.get(), d->doc));
1124
-
1125
- m.emplace(std::move(key), std::move(dest));
1126
- }
1127
- }
1128
-
1129
- // Iterate from name-tree
1130
- const int nDestsNameTree = catalog->numDestNameTree();
1131
- for (int i = 0; i < nDestsNameTree; ++i) {
1132
- std::string key(catalog->getDestNameTreeName(i)->c_str(), catalog->getDestNameTreeName(i)->getLength());
1133
- std::unique_ptr<LinkDest> link_dest = catalog->getDestNameTreeDest(i);
1134
-
1135
- if (link_dest) {
1136
- destination dest(new destination_private(link_dest.get(), d->doc));
1137
-
1138
- m.emplace(std::move(key), std::move(dest));
1139
- }
1140
- }
1141
-
1142
- return m;
1143
- }
1144
-
1145
- /**
1146
- Saves the %document to file \p file_name.
1147
-
1148
- \returns true on success, false on failure
1149
- */
1150
- bool document::save(const std::string &file_name) const
1151
- {
1152
- if (d->is_locked) {
1153
- return false;
1154
- }
1155
-
1156
- GooString fname(file_name.c_str());
1157
- return d->doc->saveAs(fname) == errNone;
1158
- }
1159
-
1160
- /**
1161
- Saves the original version of the %document to file \p file_name.
1162
-
1163
- \returns true on success, false on failure
1164
- */
1165
- bool document::save_a_copy(const std::string &file_name) const
1166
- {
1167
- if (d->is_locked) {
1168
- return false;
1169
- }
1170
-
1171
- GooString fname(file_name.c_str());
1172
- return d->doc->saveWithoutChangesAs(fname) == errNone;
1173
- }
1174
-
1175
- /**
1176
- Tries to load a PDF %document from the specified file.
1177
-
1178
- \param file_name the file to open
1179
- \returns a new document if the load succeeded (even if the document is locked),
1180
- NULL otherwise
1181
- */
1182
- document *document::load_from_file(const std::string &file_name, const std::string &owner_password, const std::string &user_password)
1183
- {
1184
- document_private *doc = new document_private(std::make_unique<GooString>(file_name.c_str()), owner_password, user_password);
1185
- return document_private::check_document(doc, nullptr);
1186
- }
1187
-
1188
- /**
1189
- Tries to load a PDF %document from the specified data.
1190
-
1191
- \note if the loading succeeds, the document takes ownership of the
1192
- \p file_data (swap()ing it)
1193
-
1194
- \param file_data the data representing a document to open
1195
- \returns a new document if the load succeeded (even if the document is locked),
1196
- NULL otherwise
1197
- */
1198
- document *document::load_from_data(byte_array *file_data, const std::string &owner_password, const std::string &user_password)
1199
- {
1200
- if (!file_data || file_data->size() < 10) {
1201
- return nullptr;
1202
- }
1203
-
1204
- document_private *doc = new document_private(file_data, owner_password, user_password);
1205
- return document_private::check_document(doc, file_data);
1206
- }
1207
-
1208
- /**
1209
- Tries to load a PDF %document from the specified data buffer.
1210
-
1211
- \note the buffer must remain valid for the whole lifetime of the returned
1212
- document
1213
-
1214
- \param file_data the data buffer representing a document to open
1215
- \param file_data_length the length of the data buffer
1216
-
1217
- \returns a new document if the load succeeded (even if the document is locked),
1218
- NULL otherwise
1219
-
1220
- \since 0.16
1221
- */
1222
- document *document::load_from_raw_data(const char *file_data, int file_data_length, const std::string &owner_password, const std::string &user_password)
1223
- {
1224
- if (!file_data || file_data_length < 10) {
1225
- return nullptr;
1226
- }
1227
-
1228
- document_private *doc = new document_private(file_data, file_data_length, owner_password, user_password);
1229
- return document_private::check_document(doc, nullptr);
1230
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/cpp/poppler-document.h DELETED
@@ -1,141 +0,0 @@
1
- /*
2
- * Copyright (C) 2009-2010, Pino Toscano <[email protected]>
3
- * Copyright (C) 2016 Jakub Alba <[email protected]>
4
- * Copyright (C) 2019, Masamichi Hosoda <[email protected]>
5
- * Copyright (C) 2019, 2021, 2022, Albert Astals Cid <[email protected]>
6
- *
7
- * This program is free software; you can redistribute it and/or modify
8
- * it under the terms of the GNU General Public License as published by
9
- * the Free Software Foundation; either version 2, or (at your option)
10
- * any later version.
11
- *
12
- * This program is distributed in the hope that it will be useful,
13
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
- * GNU General Public License for more details.
16
- *
17
- * You should have received a copy of the GNU General Public License
18
- * along with this program; if not, write to the Free Software
19
- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
20
- */
21
-
22
- #ifndef POPPLER_DOCUMENT_H
23
- #define POPPLER_DOCUMENT_H
24
-
25
- #include "poppler-global.h"
26
- #include "poppler-font.h"
27
-
28
- #include <map>
29
-
30
- namespace poppler {
31
-
32
- class destination;
33
- class document_private;
34
- class embedded_file;
35
- class page;
36
- class toc;
37
-
38
- class POPPLER_CPP_EXPORT document : public poppler::noncopyable
39
- {
40
- public:
41
- enum page_mode_enum
42
- {
43
- use_none,
44
- use_outlines,
45
- use_thumbs,
46
- fullscreen,
47
- use_oc,
48
- use_attach
49
- };
50
-
51
- enum page_layout_enum
52
- {
53
- no_layout,
54
- single_page,
55
- one_column,
56
- two_column_left,
57
- two_column_right,
58
- two_page_left,
59
- two_page_right
60
- };
61
-
62
- ~document();
63
-
64
- bool is_locked() const;
65
- bool unlock(const std::string &owner_password, const std::string &user_password);
66
-
67
- page_mode_enum page_mode() const;
68
- page_layout_enum page_layout() const;
69
- void get_pdf_version(int *major, int *minor) const;
70
- std::vector<std::string> info_keys() const;
71
-
72
- ustring info_key(const std::string &key) const;
73
- bool set_info_key(const std::string &key, const ustring &val);
74
-
75
- [[deprecated]] time_type info_date(const std::string &key) const;
76
- [[deprecated]] bool set_info_date(const std::string &key, time_type val);
77
- time_t info_date_t(const std::string &key) const;
78
- bool set_info_date_t(const std::string &key, time_t val);
79
-
80
- ustring get_title() const;
81
- bool set_title(const ustring &title);
82
- ustring get_author() const;
83
- bool set_author(const ustring &author);
84
- ustring get_subject() const;
85
- bool set_subject(const ustring &subject);
86
- ustring get_keywords() const;
87
- bool set_keywords(const ustring &keywords);
88
- ustring get_creator() const;
89
- bool set_creator(const ustring &creator);
90
- ustring get_producer() const;
91
- bool set_producer(const ustring &producer);
92
- [[deprecated]] time_type get_creation_date() const;
93
- [[deprecated]] bool set_creation_date(time_type creation_date);
94
- time_t get_creation_date_t() const;
95
- bool set_creation_date_t(time_t creation_date);
96
- [[deprecated]] time_type get_modification_date() const;
97
- [[deprecated]] bool set_modification_date(time_type mod_date);
98
- time_t get_modification_date_t() const;
99
- bool set_modification_date_t(time_t mod_date);
100
-
101
- bool remove_info();
102
-
103
- bool is_encrypted() const;
104
- bool is_linearized() const;
105
- bool has_permission(permission_enum which) const;
106
- ustring metadata() const;
107
- bool get_pdf_id(std::string *permanent_id, std::string *update_id) const;
108
-
109
- int pages() const;
110
- page *create_page(const ustring &label) const;
111
- page *create_page(int index) const;
112
-
113
- std::vector<font_info> fonts() const;
114
- font_iterator *create_font_iterator(int start_page = 0) const;
115
-
116
- toc *create_toc() const;
117
-
118
- bool has_embedded_files() const;
119
- std::vector<embedded_file *> embedded_files() const;
120
-
121
- // Named destinations are bytestrings, not string.
122
- // So we use std::string instead of ustring.
123
- std::map<std::string, destination> create_destination_map() const;
124
-
125
- bool save(const std::string &file_name) const;
126
- bool save_a_copy(const std::string &file_name) const;
127
-
128
- static document *load_from_file(const std::string &file_name, const std::string &owner_password = std::string(), const std::string &user_password = std::string());
129
- static document *load_from_data(byte_array *file_data, const std::string &owner_password = std::string(), const std::string &user_password = std::string());
130
- static document *load_from_raw_data(const char *file_data, int file_data_length, const std::string &owner_password = std::string(), const std::string &user_password = std::string());
131
-
132
- private:
133
- explicit document(document_private &dd);
134
-
135
- document_private *d;
136
- friend class document_private;
137
- };
138
-
139
- }
140
-
141
- #endif
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/cpp/poppler-embedded-file-private.h DELETED
@@ -1,41 +0,0 @@
1
- /*
2
- * Copyright (C) 2009, 2011, Pino Toscano <[email protected]>
3
- * Copyright (C) 2018, 2021, 2022, Albert Astals Cid <[email protected]>
4
- *
5
- * This program is free software; you can redistribute it and/or modify
6
- * it under the terms of the GNU General Public License as published by
7
- * the Free Software Foundation; either version 2, or (at your option)
8
- * any later version.
9
- *
10
- * This program is distributed in the hope that it will be useful,
11
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- * GNU General Public License for more details.
14
- *
15
- * You should have received a copy of the GNU General Public License
16
- * along with this program; if not, write to the Free Software
17
- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
18
- */
19
-
20
- #ifndef POPPLER_EMBEDDED_FILE_PRIVATE_H
21
- #define POPPLER_EMBEDDED_FILE_PRIVATE_H
22
-
23
- #include <FileSpec.h>
24
-
25
- #include <memory>
26
-
27
- namespace poppler {
28
-
29
- class embedded_file_private
30
- {
31
- public:
32
- explicit embedded_file_private(std::unique_ptr<FileSpec> &&fs);
33
-
34
- static embedded_file *create(std::unique_ptr<FileSpec> &&fs);
35
-
36
- std::unique_ptr<FileSpec> file_spec;
37
- };
38
-
39
- }
40
-
41
- #endif
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/cpp/poppler-embedded-file.cpp DELETED
@@ -1,199 +0,0 @@
1
- /*
2
- * Copyright (C) 2009-2011, Pino Toscano <[email protected]>
3
- * Copyright (C) 2016 Jakub Alba <[email protected]>
4
- * Copyright (C) 2018, 2020, 2022 Albert Astals Cid <[email protected]>
5
- *
6
- * This program is free software; you can redistribute it and/or modify
7
- * it under the terms of the GNU General Public License as published by
8
- * the Free Software Foundation; either version 2, or (at your option)
9
- * any later version.
10
- *
11
- * This program is distributed in the hope that it will be useful,
12
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- * GNU General Public License for more details.
15
- *
16
- * You should have received a copy of the GNU General Public License
17
- * along with this program; if not, write to the Free Software
18
- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
19
- */
20
-
21
- /**
22
- \file poppler-embedded-file.h
23
- */
24
- #include "poppler-embedded-file.h"
25
-
26
- #include "poppler-embedded-file-private.h"
27
- #include "poppler-private.h"
28
-
29
- #include "Object.h"
30
- #include "Stream.h"
31
- #include "Catalog.h"
32
- #include "FileSpec.h"
33
- #include "DateInfo.h"
34
-
35
- using namespace poppler;
36
-
37
- embedded_file_private::embedded_file_private(std::unique_ptr<FileSpec> &&fs) : file_spec(std::move(fs)) { }
38
-
39
- embedded_file *embedded_file_private::create(std::unique_ptr<FileSpec> &&fs)
40
- {
41
- return new embedded_file(*new embedded_file_private(std::move(fs)));
42
- }
43
-
44
- /**
45
- \class poppler::embedded_file poppler-embedded-file.h "poppler/cpp/poppler-embedded-file.h"
46
-
47
- Represents a file embedded in a PDF %document.
48
- */
49
-
50
- embedded_file::embedded_file(embedded_file_private &dd) : d(&dd) { }
51
-
52
- /**
53
- Destroys the embedded file.
54
- */
55
- embedded_file::~embedded_file()
56
- {
57
- delete d;
58
- }
59
-
60
- /**
61
- \returns whether the embedded file is valid
62
- */
63
- bool embedded_file::is_valid() const
64
- {
65
- return d->file_spec->isOk();
66
- }
67
-
68
- /**
69
- \returns the name of the embedded file
70
- */
71
- std::string embedded_file::name() const
72
- {
73
- const GooString *goo = d->file_spec->getFileName();
74
- return goo ? std::string(goo->c_str()) : std::string();
75
- }
76
-
77
- /**
78
- \returns the description of the embedded file
79
- */
80
- ustring embedded_file::description() const
81
- {
82
- const GooString *goo = d->file_spec->getDescription();
83
- return goo ? detail::unicode_GooString_to_ustring(goo) : ustring();
84
- }
85
-
86
- /**
87
- \note this is not always available in the PDF %document, in that case this
88
- will return \p -1.
89
-
90
- \returns the size of the embedded file, if known
91
- */
92
- int embedded_file::size() const
93
- {
94
- const EmbFile *ef = d->file_spec->getEmbeddedFile();
95
- return ef ? ef->size() : -1;
96
- }
97
-
98
- /**
99
- \returns the time_type representing the modification date of the embedded file,
100
- if available
101
- */
102
- time_type embedded_file::modification_date() const
103
- {
104
- const EmbFile *ef = d->file_spec->getEmbeddedFile();
105
- const GooString *goo = ef ? ef->modDate() : nullptr;
106
- return goo ? static_cast<time_type>(dateStringToTime(goo)) : time_type(-1);
107
- }
108
-
109
- /**
110
- \returns the time_type representing the creation date of the embedded file,
111
- if available
112
- */
113
- time_type embedded_file::creation_date() const
114
- {
115
- const EmbFile *ef = d->file_spec->getEmbeddedFile();
116
- const GooString *goo = ef ? ef->createDate() : nullptr;
117
- return goo ? static_cast<time_type>(dateStringToTime(goo)) : time_type(-1);
118
- }
119
-
120
- /**
121
- \returns the time_t representing the modification date of the embedded file,
122
- if available
123
- */
124
- time_t embedded_file::modification_date_t() const
125
- {
126
- const EmbFile *ef = d->file_spec->getEmbeddedFile();
127
- const GooString *goo = ef ? ef->modDate() : nullptr;
128
- return goo ? dateStringToTime(goo) : time_t(-1);
129
- }
130
-
131
- /**
132
- \returns the time_t representing the creation date of the embedded file,
133
- if available
134
- */
135
- time_t embedded_file::creation_date_t() const
136
- {
137
- const EmbFile *ef = d->file_spec->getEmbeddedFile();
138
- const GooString *goo = ef ? ef->createDate() : nullptr;
139
- return goo ? dateStringToTime(goo) : time_t(-1);
140
- }
141
-
142
- /**
143
- \returns the checksum of the embedded file
144
- */
145
- byte_array embedded_file::checksum() const
146
- {
147
- const EmbFile *ef = d->file_spec->getEmbeddedFile();
148
- const GooString *cs = ef ? ef->checksum() : nullptr;
149
- if (!cs) {
150
- return byte_array();
151
- }
152
- const char *ccs = cs->c_str();
153
- byte_array data(cs->getLength());
154
- for (int i = 0; i < cs->getLength(); ++i) {
155
- data[i] = ccs[i];
156
- }
157
- return data;
158
- }
159
-
160
- /**
161
- \returns the MIME type of the embedded file, if available
162
- */
163
- std::string embedded_file::mime_type() const
164
- {
165
- const EmbFile *ef = d->file_spec->getEmbeddedFile();
166
- const GooString *goo = ef ? ef->mimeType() : nullptr;
167
- return goo ? std::string(goo->c_str()) : std::string();
168
- }
169
-
170
- /**
171
- Reads all the data of the embedded file.
172
-
173
- \returns the data of the embedded file
174
- */
175
- byte_array embedded_file::data() const
176
- {
177
- if (!is_valid()) {
178
- return byte_array();
179
- }
180
- EmbFile *ef = d->file_spec->getEmbeddedFile();
181
- Stream *stream = ef ? ef->stream() : nullptr;
182
- if (!stream) {
183
- return byte_array();
184
- }
185
-
186
- stream->reset();
187
- byte_array ret(1024);
188
- size_t data_len = 0;
189
- int i;
190
- while ((i = stream->getChar()) != EOF) {
191
- if (data_len == ret.size()) {
192
- ret.resize(ret.size() * 2);
193
- }
194
- ret[data_len] = (char)i;
195
- ++data_len;
196
- }
197
- ret.resize(data_len);
198
- return ret;
199
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/cpp/poppler-embedded-file.h DELETED
@@ -1,57 +0,0 @@
1
- /*
2
- * Copyright (C) 2009-2010, Pino Toscano <[email protected]>
3
- * Copyright (C) 2021, 2022, Albert Astals Cid <[email protected]>
4
- *
5
- * This program is free software; you can redistribute it and/or modify
6
- * it under the terms of the GNU General Public License as published by
7
- * the Free Software Foundation; either version 2, or (at your option)
8
- * any later version.
9
- *
10
- * This program is distributed in the hope that it will be useful,
11
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- * GNU General Public License for more details.
14
- *
15
- * You should have received a copy of the GNU General Public License
16
- * along with this program; if not, write to the Free Software
17
- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
18
- */
19
-
20
- #ifndef POPPLER_EMBEDDED_FILE_H
21
- #define POPPLER_EMBEDDED_FILE_H
22
-
23
- #include "poppler-global.h"
24
-
25
- #include <vector>
26
-
27
- namespace poppler {
28
-
29
- class embedded_file_private;
30
-
31
- class POPPLER_CPP_EXPORT embedded_file : public poppler::noncopyable
32
- {
33
- public:
34
- ~embedded_file();
35
-
36
- bool is_valid() const;
37
- std::string name() const;
38
- ustring description() const;
39
- int size() const;
40
- [[deprecated]] time_type modification_date() const;
41
- [[deprecated]] time_type creation_date() const;
42
- time_t modification_date_t() const;
43
- time_t creation_date_t() const;
44
- byte_array checksum() const;
45
- std::string mime_type() const;
46
- byte_array data() const;
47
-
48
- private:
49
- explicit embedded_file(embedded_file_private &dd);
50
-
51
- embedded_file_private *d;
52
- friend class embedded_file_private;
53
- };
54
-
55
- }
56
-
57
- #endif
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/cpp/poppler-font-private.h DELETED
@@ -1,68 +0,0 @@
1
- /*
2
- * Copyright (C) 2009, Pino Toscano <[email protected]>
3
- * Copyright (C) 2015, Tamas Szekeres <[email protected]>
4
- * Copyright (C) 2020, Suzuki Toshiya <[email protected]>
5
- * Copyright (C) 2021, Albert Astals Cid <[email protected]>
6
- *
7
- * This program is free software; you can redistribute it and/or modify
8
- * it under the terms of the GNU General Public License as published by
9
- * the Free Software Foundation; either version 2, or (at your option)
10
- * any later version.
11
- *
12
- * This program is distributed in the hope that it will be useful,
13
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
- * GNU General Public License for more details.
16
- *
17
- * You should have received a copy of the GNU General Public License
18
- * along with this program; if not, write to the Free Software
19
- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
20
- */
21
-
22
- #include "poppler-font.h"
23
-
24
- #include "poppler-document-private.h"
25
-
26
- #include "FontInfo.h"
27
-
28
- #include <algorithm>
29
-
30
- using namespace poppler;
31
-
32
- class poppler::font_info_private
33
- {
34
- public:
35
- font_info_private() : type(font_info::unknown), is_embedded(false), is_subset(false) { }
36
- explicit font_info_private(FontInfo *fi) : type((font_info::type_enum)fi->getType()), is_embedded(fi->getEmbedded()), is_subset(fi->getSubset())
37
- {
38
- if (fi->getName()) {
39
- font_name = fi->getName()->c_str();
40
- }
41
- if (fi->getFile()) {
42
- font_file = fi->getFile()->c_str();
43
- }
44
-
45
- ref = fi->getRef();
46
- emb_ref = fi->getEmbRef();
47
- }
48
-
49
- std::string font_name;
50
- std::string font_file;
51
- font_info::type_enum type : 5;
52
- bool is_embedded : 1;
53
- bool is_subset : 1;
54
-
55
- Ref ref;
56
- Ref emb_ref;
57
- };
58
-
59
- class poppler::font_iterator_private
60
- {
61
- public:
62
- font_iterator_private(int start_page, document_private *dd) : font_info_scanner(dd->doc, start_page), total_pages(dd->doc->getNumPages()), current_page((std::max)(start_page, 0)) { }
63
- ~font_iterator_private() { }
64
-
65
- FontInfoScanner font_info_scanner;
66
- int total_pages;
67
- int current_page;
68
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/cpp/poppler-font.cpp DELETED
@@ -1,190 +0,0 @@
1
- /*
2
- * Copyright (C) 2009, Pino Toscano <[email protected]>
3
- * Copyright (C) 2015, Tamas Szekeres <[email protected]>
4
- * Copyright (C) 2018, Adam Reichold <[email protected]>
5
- * Copyright (C) 2019, Oliver Sander <[email protected]>
6
- * Copyright (C) 2020, Suzuki Toshiya <[email protected]>
7
- *
8
- * This program is free software; you can redistribute it and/or modify
9
- * it under the terms of the GNU General Public License as published by
10
- * the Free Software Foundation; either version 2, or (at your option)
11
- * any later version.
12
- *
13
- * This program is distributed in the hope that it will be useful,
14
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
- * GNU General Public License for more details.
17
- *
18
- * You should have received a copy of the GNU General Public License
19
- * along with this program; if not, write to the Free Software
20
- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
21
- */
22
-
23
- /**
24
- \file poppler-font.h
25
- */
26
- #include "poppler-font.h"
27
-
28
- #include "poppler-font-private.h"
29
-
30
- #include "poppler-document-private.h"
31
-
32
- #include "FontInfo.h"
33
-
34
- #include <algorithm>
35
-
36
- using namespace poppler;
37
-
38
- /**
39
- \class poppler::font_info poppler-font.h "poppler/cpp/poppler-font.h"
40
-
41
- The information about a font used in a PDF %document.
42
- */
43
-
44
- /**
45
- \enum poppler::font_info::type_enum
46
-
47
- The various types of fonts available in a PDF %document.
48
- */
49
-
50
- /**
51
- Constructs an invalid font information.
52
- */
53
- font_info::font_info() : d(new font_info_private()) { }
54
-
55
- font_info::font_info(font_info_private &dd) : d(&dd) { }
56
-
57
- /**
58
- Copy constructor.
59
- */
60
- font_info::font_info(const font_info &fi) : d(new font_info_private(*fi.d)) { }
61
-
62
- /**
63
- Destructor.
64
- */
65
- font_info::~font_info()
66
- {
67
- delete d;
68
- }
69
-
70
- /**
71
- \returns the name of the font
72
- */
73
- std::string font_info::name() const
74
- {
75
- return d->font_name;
76
- }
77
-
78
- /**
79
- \returns the file name of the font, in case the font is not embedded nor subset
80
- */
81
- std::string font_info::file() const
82
- {
83
- return d->font_file;
84
- }
85
-
86
- /**
87
- \returns whether the font is totally embedded in the %document
88
- */
89
- bool font_info::is_embedded() const
90
- {
91
- return d->is_embedded;
92
- }
93
-
94
- /**
95
- \returns whether there is a subset of the font embedded in the %document
96
- */
97
- bool font_info::is_subset() const
98
- {
99
- return d->is_subset;
100
- }
101
-
102
- /**
103
- \returns the type of the font
104
- */
105
- font_info::type_enum font_info::type() const
106
- {
107
- return d->type;
108
- }
109
-
110
- /**
111
- Assignment operator.
112
- */
113
- font_info &font_info::operator=(const font_info &fi)
114
- {
115
- if (this != &fi) {
116
- *d = *fi.d;
117
- }
118
- return *this;
119
- }
120
-
121
- /**
122
- \class poppler::font_iterator poppler-font.h "poppler/cpp/poppler-font.h"
123
-
124
- Reads the fonts in the PDF %document page by page.
125
-
126
- font_iterator is the way to collect the list of the fonts used in a PDF
127
- %document, reading them incrementally page by page.
128
-
129
- A typical usage of this might look like:
130
- \code
131
- poppler::font_iterator *it = doc->create_font_iterator();
132
- while (it->has_next()) {
133
- std::vector<poppler::font_info> fonts = it->next();
134
- // do domething with the fonts
135
- }
136
- // after we are done with the iterator, it must be deleted
137
- delete it;
138
- \endcode
139
- */
140
-
141
- font_iterator::font_iterator(int start_page, document_private *dd) : d(new font_iterator_private(start_page, dd)) { }
142
-
143
- /**
144
- Destructor.
145
- */
146
- font_iterator::~font_iterator()
147
- {
148
- delete d;
149
- }
150
-
151
- /**
152
- \returns the fonts of the current page and advances to the next one.
153
- */
154
- std::vector<font_info> font_iterator::next()
155
- {
156
- if (!has_next()) {
157
- return std::vector<font_info>();
158
- }
159
-
160
- ++d->current_page;
161
-
162
- /* FontInfoScanner::scan() receives a number how many pages to
163
- * be scanned from the *current page*, not from the beginning.
164
- * We restrict the font scanning to the current page only.
165
- */
166
- const std::vector<FontInfo *> items = d->font_info_scanner.scan(1);
167
- std::vector<font_info> fonts;
168
- fonts.reserve(items.size());
169
- for (FontInfo *entry : items) {
170
- fonts.push_back(font_info(*new font_info_private(entry)));
171
- delete entry;
172
- }
173
- return fonts;
174
- }
175
-
176
- /**
177
- \returns whether the iterator has more pages to advance to
178
- */
179
- bool font_iterator::has_next() const
180
- {
181
- return d->current_page < d->total_pages;
182
- }
183
-
184
- /**
185
- \returns the current page
186
- */
187
- int font_iterator::current_page() const
188
- {
189
- return d->current_page;
190
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/cpp/poppler-font.h DELETED
@@ -1,95 +0,0 @@
1
- /*
2
- * Copyright (C) 2009, Pino Toscano <[email protected]>
3
- * Copyright (C) 2020, Suzuki Toshiya <[email protected]>
4
- * Copyright (C) 2021, Albert Astals Cid <[email protected]>
5
- *
6
- * This program is free software; you can redistribute it and/or modify
7
- * it under the terms of the GNU General Public License as published by
8
- * the Free Software Foundation; either version 2, or (at your option)
9
- * any later version.
10
- *
11
- * This program is distributed in the hope that it will be useful,
12
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- * GNU General Public License for more details.
15
- *
16
- * You should have received a copy of the GNU General Public License
17
- * along with this program; if not, write to the Free Software
18
- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
19
- */
20
-
21
- #ifndef POPPLER_FONT_H
22
- #define POPPLER_FONT_H
23
-
24
- #include "poppler-global.h"
25
-
26
- #include <vector>
27
-
28
- namespace poppler {
29
-
30
- class document;
31
- class document_private;
32
- class font_info_private;
33
- class font_iterator;
34
- class font_iterator_private;
35
-
36
- class POPPLER_CPP_EXPORT font_info
37
- {
38
- public:
39
- enum type_enum
40
- {
41
- unknown,
42
- type1,
43
- type1c,
44
- type1c_ot,
45
- type3,
46
- truetype,
47
- truetype_ot,
48
- cid_type0,
49
- cid_type0c,
50
- cid_type0c_ot,
51
- cid_truetype,
52
- cid_truetype_ot
53
- };
54
-
55
- font_info();
56
- font_info(const font_info &fi);
57
- ~font_info();
58
-
59
- std::string name() const;
60
- std::string file() const;
61
- bool is_embedded() const;
62
- bool is_subset() const;
63
- type_enum type() const;
64
-
65
- font_info &operator=(const font_info &fi);
66
-
67
- private:
68
- explicit font_info(font_info_private &dd);
69
-
70
- font_info_private *d;
71
- friend class font_iterator;
72
- friend class page;
73
- };
74
-
75
- class POPPLER_CPP_EXPORT font_iterator : public poppler::noncopyable
76
- {
77
- public:
78
- ~font_iterator();
79
-
80
- std::vector<font_info> next();
81
- bool has_next() const;
82
- int current_page() const;
83
-
84
- private:
85
- font_iterator(int, document_private *dd);
86
-
87
- font_iterator_private *d;
88
- friend class document;
89
- friend class page;
90
- friend class page_private;
91
- };
92
-
93
- }
94
-
95
- #endif
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/cpp/poppler-global.cpp DELETED
@@ -1,403 +0,0 @@
1
- /*
2
- * Copyright (C) 2009-2010, Pino Toscano <[email protected]>
3
- * Copyright (C) 2010, Hib Eris <[email protected]>
4
- * Copyright (C) 2014, 2015 Hans-Peter Deifel <[email protected]>
5
- * Copyright (C) 2015, Tamas Szekeres <[email protected]>
6
- * Copyright (C) 2016 Jakub Alba <[email protected]>
7
- * Copyright (C) 2018, 2020-2022, Albert Astals Cid <[email protected]>
8
- * Copyright (C) 2018 Suzuki Toshiya <[email protected]>
9
- * Copyright (C) 2018, 2020, Adam Reichold <[email protected]>
10
- * Copyright (C) 2022, Oliver Sander <[email protected]>
11
- *
12
- * This program is free software; you can redistribute it and/or modify
13
- * it under the terms of the GNU General Public License as published by
14
- * the Free Software Foundation; either version 2, or (at your option)
15
- * any later version.
16
- *
17
- * This program is distributed in the hope that it will be useful,
18
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
19
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20
- * GNU General Public License for more details.
21
- *
22
- * You should have received a copy of the GNU General Public License
23
- * along with this program; if not, write to the Free Software
24
- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
25
- */
26
-
27
- /**
28
- \file poppler-global.h
29
- */
30
- #include "poppler-global.h"
31
-
32
- #include "poppler-private.h"
33
- #include "poppler-document-private.h"
34
-
35
- #include "DateInfo.h"
36
-
37
- #include <algorithm>
38
-
39
- #include <cerrno>
40
- #include <cstring>
41
- #include <ios>
42
- #include <iostream>
43
-
44
- #include <iconv.h>
45
-
46
- #include "config.h"
47
-
48
- namespace {
49
-
50
- struct MiniIconv
51
- {
52
- MiniIconv(const char *to_code, const char *from_code) : i_(iconv_open(to_code, from_code)) { }
53
- ~MiniIconv()
54
- {
55
- if (is_valid()) {
56
- iconv_close(i_);
57
- }
58
- }
59
- MiniIconv(const MiniIconv &) = delete;
60
- MiniIconv &operator=(const MiniIconv &) = delete;
61
- bool is_valid() const { return i_ != (iconv_t)-1; }
62
- explicit operator iconv_t() const { return i_; }
63
- iconv_t i_;
64
- };
65
-
66
- }
67
-
68
- using namespace poppler;
69
-
70
- /**
71
- \namespace poppler
72
-
73
- Single namespace containing all the classes and functions of poppler-cpp.
74
- */
75
-
76
- /**
77
- \class poppler::noncopyable
78
-
79
- A class that cannot be copied.
80
- */
81
-
82
- /**
83
- \enum poppler::rotation_enum
84
-
85
- The case sensitivity.
86
- */
87
- /**
88
- \var poppler::rotation_enum poppler::rotate_0
89
-
90
- A rotation of 0 degrees clockwise.
91
- */
92
- /**
93
- \var poppler::rotation_enum poppler::rotate_90
94
-
95
- A rotation of 90 degrees clockwise.
96
- */
97
- /**
98
- \var poppler::rotation_enum poppler::rotate_180
99
-
100
- A rotation of 180 degrees clockwise.
101
- */
102
- /**
103
- \var poppler::rotation_enum poppler::rotate_270
104
-
105
- A rotation of 270 degrees clockwise.
106
- */
107
-
108
- /**
109
- \enum poppler::page_box_enum
110
-
111
- A possible box of a page in a PDF %document.
112
- */
113
- /**
114
- \var poppler::page_box_enum poppler::media_box
115
-
116
- The "media" box.
117
- */
118
- /**
119
- \var poppler::page_box_enum poppler::crop_box
120
-
121
- The "crop" box.
122
- */
123
- /**
124
- \var poppler::page_box_enum poppler::bleed_box
125
-
126
- The "bleed" box.
127
- */
128
- /**
129
- \var poppler::page_box_enum poppler::trim_box
130
-
131
- The "trim" box.
132
- */
133
- /**
134
- \var poppler::page_box_enum poppler::art_box
135
-
136
- The "art" box.
137
- */
138
-
139
- /**
140
- \enum poppler::permission_enum
141
-
142
- A possible permission in a PDF %document.
143
- */
144
- /**
145
- \var poppler::permission_enum poppler::perm_print
146
-
147
- The permission to allow the print of a %document.
148
- */
149
- /**
150
- \var poppler::permission_enum poppler::perm_change
151
-
152
- The permission to change a %document.
153
-
154
- This is a generic "change" permission, so other permissions could affect
155
- some types of changes.
156
- */
157
- /**
158
- \var poppler::permission_enum poppler::perm_copy
159
-
160
- The permission to allow the copy or extraction of the text in a %document.
161
- */
162
- /**
163
- \var poppler::permission_enum poppler::perm_add_notes
164
-
165
- The permission to allow the addition or editing of annotations,
166
- and the filling of interactive form fields (including signature fields).
167
- */
168
- /**
169
- \var poppler::permission_enum poppler::perm_fill_forms
170
-
171
- The permission to allow the filling of interactive form fields
172
- (including signature fields).
173
-
174
- \note this permission can be set even when the \ref poppler::perm_add_notes "perm_add_notes"
175
- is not: this means that only the filling of forms is allowed.
176
- */
177
- /**
178
- \var poppler::permission_enum poppler::perm_accessibility
179
-
180
- The permission to allow the extracting of content (for example, text) for
181
- accessibility usage (e.g. for a screen reader).
182
- */
183
- /**
184
- \var poppler::permission_enum poppler::perm_assemble
185
-
186
- The permission to allow to "assemble" a %document.
187
-
188
- This implies operations such as the insertion, the rotation and the deletion
189
- of pages; the creation of bookmarks and thumbnail images.
190
-
191
- \note this permission can be set even when the \ref poppler::perm_change "perm_change"
192
- is not
193
- */
194
- /**
195
- \var poppler::permission_enum poppler::perm_print_high_resolution
196
-
197
- The permission to allow the high resolution print of a %document.
198
- */
199
-
200
- /**
201
- \enum poppler::case_sensitivity_enum
202
-
203
- The case sensitivity.
204
- */
205
-
206
- noncopyable::noncopyable() { }
207
-
208
- noncopyable::~noncopyable() { }
209
-
210
- noncopyable &noncopyable::operator=(noncopyable &&other) noexcept = default;
211
-
212
- ustring::ustring() { }
213
-
214
- ustring::ustring(size_type len, value_type ch) : std::basic_string<value_type>(len, ch) { }
215
-
216
- ustring::~ustring() { }
217
-
218
- byte_array ustring::to_utf8() const
219
- {
220
- if (!size()) {
221
- return byte_array();
222
- }
223
-
224
- #ifdef WORDS_BIGENDIAN
225
- MiniIconv ic("UTF-8", "UTF-16BE");
226
- #else
227
- MiniIconv ic("UTF-8", "UTF-16LE");
228
- #endif
229
- if (!ic.is_valid()) {
230
- return byte_array();
231
- }
232
- const value_type *me_data = data();
233
- byte_array str(size() * sizeof(value_type));
234
- char *str_data = &str[0];
235
- size_t me_len_char = size() * sizeof(value_type);
236
- size_t str_len_left = str.size();
237
- size_t ir = iconv(static_cast<iconv_t>(ic), (ICONV_CONST char **)&me_data, &me_len_char, &str_data, &str_len_left);
238
- if ((ir == (size_t)-1) && (errno == E2BIG)) {
239
- const size_t delta = str_data - &str[0];
240
- str_len_left += str.size();
241
- str.resize(str.size() * 2);
242
- str_data = &str[delta];
243
- ir = iconv(static_cast<iconv_t>(ic), (ICONV_CONST char **)&me_data, &me_len_char, &str_data, &str_len_left);
244
- if (ir == (size_t)-1) {
245
- return byte_array();
246
- }
247
- }
248
- str.resize(str.size() - str_len_left);
249
- return str;
250
- }
251
-
252
- std::string ustring::to_latin1() const
253
- {
254
- if (!size()) {
255
- return std::string();
256
- }
257
-
258
- const size_type mylength = size();
259
- std::string ret(mylength, '\0');
260
- const value_type *me = data();
261
- for (size_type i = 0; i < mylength; ++i) {
262
- ret[i] = (char)*me++;
263
- }
264
- return ret;
265
- }
266
-
267
- ustring ustring::from_utf8(const char *str, int len)
268
- {
269
- if (len <= 0) {
270
- len = std::strlen(str);
271
- if (len <= 0) {
272
- return ustring();
273
- }
274
- }
275
-
276
- #ifdef WORDS_BIGENDIAN
277
- MiniIconv ic("UTF-16BE", "UTF-8");
278
- #else
279
- MiniIconv ic("UTF-16LE", "UTF-8");
280
- #endif
281
- if (!ic.is_valid()) {
282
- return ustring();
283
- }
284
-
285
- // +1, because iconv inserts byte order marks
286
- ustring ret(len + 1, 0);
287
- char *ret_data = reinterpret_cast<char *>(&ret[0]);
288
- char *str_data = const_cast<char *>(str);
289
- size_t str_len_char = len;
290
- size_t ret_len_left = ret.size() * sizeof(ustring::value_type);
291
- size_t ir = iconv(static_cast<iconv_t>(ic), (ICONV_CONST char **)&str_data, &str_len_char, &ret_data, &ret_len_left);
292
- if ((ir == (size_t)-1) && (errno == E2BIG)) {
293
- const size_t delta = ret_data - reinterpret_cast<char *>(&ret[0]);
294
- ret_len_left += ret.size() * sizeof(ustring::value_type);
295
- ret.resize(ret.size() * 2);
296
- ret_data = reinterpret_cast<char *>(&ret[0]) + delta;
297
- ir = iconv(static_cast<iconv_t>(ic), (ICONV_CONST char **)&str_data, &str_len_char, &ret_data, &ret_len_left);
298
- if (ir == (size_t)-1) {
299
- return ustring();
300
- }
301
- }
302
- ret.resize(ret.size() - ret_len_left / sizeof(ustring::value_type));
303
-
304
- return ret;
305
- }
306
-
307
- ustring ustring::from_latin1(const std::string &str)
308
- {
309
- const size_type l = str.size();
310
- if (!l) {
311
- return ustring();
312
- }
313
- const char *c = str.data();
314
- ustring ret(l, 0);
315
- for (size_type i = 0; i < l; ++i) {
316
- ret[i] = static_cast<unsigned char>(*c);
317
- c++;
318
- }
319
- return ret;
320
- }
321
-
322
- /**
323
- Converts a string representing a PDF date to a value compatible with time_type.
324
- */
325
- time_type poppler::convert_date(const std::string &date)
326
- {
327
- GooString gooDateStr(date.c_str());
328
- return static_cast<time_type>(dateStringToTime(&gooDateStr));
329
- }
330
-
331
- /**
332
- Converts a string representing a PDF date to a value compatible with time_t.
333
- */
334
- time_t poppler::convert_date_t(const std::string &date)
335
- {
336
- GooString gooDateStr(date.c_str());
337
- return dateStringToTime(&gooDateStr);
338
- }
339
-
340
- std::ostream &poppler::operator<<(std::ostream &stream, const byte_array &array)
341
- {
342
- stream << "[";
343
- const std::ios_base::fmtflags f = stream.flags();
344
- std::hex(stream);
345
- const char *data = &array[0];
346
- const byte_array::size_type out_len = std::min<byte_array::size_type>(array.size(), 50);
347
- for (byte_array::size_type i = 0; i < out_len; ++i) {
348
- if (i != 0) {
349
- stream << " ";
350
- }
351
- stream << ((data[i] & 0xf0) >> 4) << (data[i] & 0xf);
352
- }
353
- stream.flags(f);
354
- if (out_len < array.size()) {
355
- stream << " ...";
356
- }
357
- stream << "]";
358
- return stream;
359
- }
360
-
361
- /**
362
- * Sets a custom data directory for initialization of global parameters
363
- *
364
- * If no instances of \see document currently exist, this will save the
365
- * given path as a custom data directory to be used when the first instance
366
- * of the \see document is constructed.
367
- *
368
- * \returns true on success, false on failure
369
- *
370
- * \since 0.73.0
371
- */
372
- bool poppler::set_data_dir(const std::string &new_data_dir)
373
- {
374
- return GlobalParamsIniter::setCustomDataDir(new_data_dir);
375
- }
376
-
377
- /**
378
- \typedef poppler::debug_func
379
-
380
- Debug/error function.
381
-
382
- This function type is used for debugging & error output;
383
- the first parameter is the actual message, the second is the unaltered
384
- closure argument which was passed to the set_debug_error_function() call.
385
-
386
- \since 0.30.0
387
- */
388
-
389
- /**
390
- Set a new debug/error output function.
391
-
392
- If not set, by default error and debug messages will be sent to stderr.
393
-
394
- \param debug_function the new debug function
395
- \param closure user data which will be passed as-is to the debug function
396
-
397
- \since 0.30.0
398
- */
399
- void poppler::set_debug_error_function(debug_func debug_function, void *closure)
400
- {
401
- poppler::detail::user_debug_function = debug_function;
402
- poppler::detail::debug_closure = closure;
403
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/cpp/poppler-global.h DELETED
@@ -1,138 +0,0 @@
1
- /*
2
- * Copyright (C) 2009-2010, Pino Toscano <[email protected]>
3
- * Copyright (C) 2010, Patrick Spendrin <[email protected]>
4
- * Copyright (C) 2014, Hans-Peter Deifel <[email protected]>
5
- * Copyright (C) 2018, Adam Reichold <[email protected]>
6
- * Copyright (C) 2021, 2022, Albert Astals Cid <[email protected]>
7
- * Copyright (C) 2022, Tobias C. Berner <[email protected]>
8
- * Copyright (C) 2022, Oliver Sander <[email protected]>
9
- *
10
- * This program is free software; you can redistribute it and/or modify
11
- * it under the terms of the GNU General Public License as published by
12
- * the Free Software Foundation; either version 2, or (at your option)
13
- * any later version.
14
- *
15
- * This program is distributed in the hope that it will be useful,
16
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
- * GNU General Public License for more details.
19
- *
20
- * You should have received a copy of the GNU General Public License
21
- * along with this program; if not, write to the Free Software
22
- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
23
- */
24
-
25
- #ifndef POPPLER_GLOBAL_H
26
- #define POPPLER_GLOBAL_H
27
-
28
- #include "poppler_cpp_export.h"
29
-
30
- #include <ctime>
31
- #include <iosfwd>
32
- #include <string>
33
- #include <vector>
34
-
35
- namespace poppler {
36
-
37
- /// \cond DOXYGEN_SKIP_THIS
38
- namespace detail {
39
-
40
- class POPPLER_CPP_EXPORT noncopyable
41
- {
42
- public:
43
- noncopyable(const noncopyable &) = delete;
44
- const noncopyable &operator=(const noncopyable &) = delete;
45
-
46
- protected:
47
- noncopyable();
48
- ~noncopyable();
49
- noncopyable &operator=(noncopyable &&other) noexcept;
50
- };
51
-
52
- }
53
-
54
- typedef detail::noncopyable noncopyable;
55
- /// \endcond
56
-
57
- enum rotation_enum
58
- {
59
- rotate_0,
60
- rotate_90,
61
- rotate_180,
62
- rotate_270
63
- };
64
-
65
- enum page_box_enum
66
- {
67
- media_box,
68
- crop_box,
69
- bleed_box,
70
- trim_box,
71
- art_box
72
- };
73
-
74
- enum permission_enum
75
- {
76
- perm_print,
77
- perm_change,
78
- perm_copy,
79
- perm_add_notes,
80
- perm_fill_forms,
81
- perm_accessibility,
82
- perm_assemble,
83
- perm_print_high_resolution
84
- };
85
-
86
- enum case_sensitivity_enum
87
- {
88
- case_sensitive,
89
- case_insensitive
90
- };
91
-
92
- typedef std::vector<char> byte_array;
93
-
94
- typedef unsigned int /* time_t */ time_type;
95
-
96
- // to disable warning only for this occurrence
97
- #ifdef _MSC_VER
98
- # pragma warning(push)
99
- # pragma warning(disable : 4251) /* class 'A' needs to have dll interface for to be used by clients of class 'B'. */
100
- #endif
101
- class POPPLER_CPP_EXPORT ustring : public std::basic_string<unsigned short>
102
- {
103
- public:
104
- ustring();
105
- ustring(size_type len, value_type ch);
106
- ~ustring();
107
-
108
- byte_array to_utf8() const;
109
- std::string to_latin1() const;
110
-
111
- static ustring from_utf8(const char *str, int len = -1);
112
- static ustring from_latin1(const std::string &str);
113
-
114
- private:
115
- // forbid implicit std::string conversions
116
- explicit ustring(const std::string &);
117
- explicit operator std::string() const;
118
- ustring &operator=(const std::string &);
119
- };
120
- #ifdef _MSC_VER
121
- # pragma warning(pop)
122
- #endif
123
-
124
- [[deprecated]] POPPLER_CPP_EXPORT time_type convert_date(const std::string &date);
125
-
126
- POPPLER_CPP_EXPORT time_t convert_date_t(const std::string &date);
127
-
128
- POPPLER_CPP_EXPORT std::ostream &operator<<(std::ostream &stream, const byte_array &array);
129
-
130
- POPPLER_CPP_EXPORT bool set_data_dir(const std::string &new_data_dir);
131
-
132
- typedef void (*debug_func)(const std::string &, void *);
133
-
134
- POPPLER_CPP_EXPORT void set_debug_error_function(debug_func debug_function, void *closure);
135
-
136
- }
137
-
138
- #endif
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/cpp/poppler-image-private.h DELETED
@@ -1,51 +0,0 @@
1
- /*
2
- * Copyright (C) 2010, Pino Toscano <[email protected]>
3
- * Copyright (C) 2018, 2022, Albert Astals Cid <[email protected]>
4
- *
5
- * This program is free software; you can redistribute it and/or modify
6
- * it under the terms of the GNU General Public License as published by
7
- * the Free Software Foundation; either version 2, or (at your option)
8
- * any later version.
9
- *
10
- * This program is distributed in the hope that it will be useful,
11
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- * GNU General Public License for more details.
14
- *
15
- * You should have received a copy of the GNU General Public License
16
- * along with this program; if not, write to the Free Software
17
- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
18
- */
19
-
20
- #ifndef POPPLER_IMAGE_PRIVATE_H
21
- #define POPPLER_IMAGE_PRIVATE_H
22
-
23
- #include "poppler-image.h"
24
-
25
- namespace poppler {
26
-
27
- class image_private
28
- {
29
- public:
30
- image_private(int iwidth, int iheight, image::format_enum iformat);
31
- ~image_private();
32
-
33
- image_private(const image_private &) = delete;
34
- image_private &operator=(const image_private &) = delete;
35
-
36
- static image_private *create_data(int width, int height, image::format_enum format);
37
- static image_private *create_data(char *data, int width, int height, image::format_enum format);
38
-
39
- int ref;
40
- char *data;
41
- int width;
42
- int height;
43
- int bytes_per_row;
44
- int bytes_num;
45
- image::format_enum format;
46
- bool own_data : 1;
47
- };
48
-
49
- }
50
-
51
- #endif
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/cpp/poppler-image.cpp DELETED
@@ -1,515 +0,0 @@
1
- /*
2
- * Copyright (C) 2010-2011, Pino Toscano <[email protected]>
3
- * Copyright (C) 2013 Adrian Johnson <[email protected]>
4
- * Copyright (C) 2017-2019, 2021, Albert Astals Cid <[email protected]>
5
- * Copyright (C) 2017, Jeroen Ooms <[email protected]>
6
- * Copyright (C) 2018, Zsombor Hollay-Horvath <[email protected]>
7
- * Copyright (C) 2018, Adam Reichold <[email protected]>
8
- *
9
- * This program is free software; you can redistribute it and/or modify
10
- * it under the terms of the GNU General Public License as published by
11
- * the Free Software Foundation; either version 2, or (at your option)
12
- * any later version.
13
- *
14
- * This program is distributed in the hope that it will be useful,
15
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
- * GNU General Public License for more details.
18
- *
19
- * You should have received a copy of the GNU General Public License
20
- * along with this program; if not, write to the Free Software
21
- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
22
- */
23
-
24
- /**
25
- \file poppler-image.h
26
- */
27
- #include "poppler-image.h"
28
-
29
- #include "poppler-image-private.h"
30
-
31
- #include <config.h>
32
- #include "ImgWriter.h"
33
- #if defined(ENABLE_LIBPNG)
34
- # include "PNGWriter.h"
35
- #endif
36
- #if defined(ENABLE_LIBJPEG)
37
- # include "JpegWriter.h"
38
- #endif
39
- #if defined(ENABLE_LIBTIFF)
40
- # include "TiffWriter.h"
41
- #endif
42
- #include "NetPBMWriter.h"
43
-
44
- #include <cstdlib>
45
- #include <cstring>
46
- #include <algorithm>
47
- #include <memory>
48
- #include <vector>
49
-
50
- namespace {
51
-
52
- struct FileCloser
53
- {
54
- inline explicit FileCloser(FILE *ff) : f(ff) { }
55
- inline ~FileCloser() { (void)close(); }
56
- FileCloser(const FileCloser &) = delete;
57
- FileCloser &operator=(const FileCloser &) = delete;
58
- inline bool close()
59
- {
60
- if (f) {
61
- const int c = fclose(f);
62
- f = nullptr;
63
- return c == 0;
64
- }
65
- return true;
66
- }
67
-
68
- FILE *f;
69
- };
70
-
71
- int calc_bytes_per_row(int width, poppler::image::format_enum format)
72
- {
73
- switch (format) {
74
- case poppler::image::format_invalid:
75
- return 0;
76
- case poppler::image::format_mono:
77
- return (width + 7) >> 3;
78
- case poppler::image::format_gray8:
79
- return (width + 3) >> 2 << 2;
80
- case poppler::image::format_rgb24:
81
- case poppler::image::format_bgr24:
82
- return (width * 3 + 3) >> 2 << 2;
83
- case poppler::image::format_argb32:
84
- return width * 4;
85
- }
86
- return 0;
87
- }
88
-
89
- NetPBMWriter::Format pnm_format(poppler::image::format_enum format)
90
- {
91
- switch (format) {
92
- case poppler::image::format_invalid: // unused, anyway
93
- case poppler::image::format_mono:
94
- return NetPBMWriter::MONOCHROME;
95
- case poppler::image::format_gray8:
96
- case poppler::image::format_rgb24:
97
- case poppler::image::format_bgr24:
98
- case poppler::image::format_argb32:
99
- return NetPBMWriter::RGB;
100
- }
101
- return NetPBMWriter::RGB;
102
- }
103
-
104
- }
105
-
106
- using namespace poppler;
107
-
108
- image_private::image_private(int iwidth, int iheight, image::format_enum iformat) : ref(1), data(nullptr), width(iwidth), height(iheight), bytes_per_row(0), bytes_num(0), format(iformat), own_data(true) { }
109
-
110
- image_private::~image_private()
111
- {
112
- if (own_data) {
113
- std::free(data);
114
- }
115
- }
116
-
117
- image_private *image_private::create_data(int width, int height, image::format_enum format)
118
- {
119
- if (width <= 0 || height <= 0) {
120
- return nullptr;
121
- }
122
-
123
- int bpr = calc_bytes_per_row(width, format);
124
- if (bpr <= 0) {
125
- return nullptr;
126
- }
127
-
128
- auto d = std::make_unique<image_private>(width, height, format);
129
- d->bytes_num = bpr * height;
130
- d->data = reinterpret_cast<char *>(std::malloc(d->bytes_num));
131
- if (!d->data) {
132
- return nullptr;
133
- }
134
- d->own_data = true;
135
- d->bytes_per_row = bpr;
136
-
137
- return d.release();
138
- }
139
-
140
- image_private *image_private::create_data(char *data, int width, int height, image::format_enum format)
141
- {
142
- if (width <= 0 || height <= 0 || !data) {
143
- return nullptr;
144
- }
145
-
146
- int bpr = calc_bytes_per_row(width, format);
147
- if (bpr <= 0) {
148
- return nullptr;
149
- }
150
-
151
- image_private *d = new image_private(width, height, format);
152
- d->bytes_num = bpr * height;
153
- d->data = data;
154
- d->own_data = false;
155
- d->bytes_per_row = bpr;
156
-
157
- return d;
158
- }
159
-
160
- /**
161
- \class poppler::image poppler-image.h "poppler/cpp/poppler-image.h"
162
-
163
- A simple representation of image, with direct access to the data.
164
-
165
- This class uses implicit sharing for the internal data, so it can be used as
166
- value class. This also means any non-const operation will make sure that the
167
- data used by current instance is not shared with other instances (ie
168
- \em detaching), copying the shared data.
169
-
170
- \since 0.16
171
- */
172
-
173
- /**
174
- \enum poppler::image::format_enum
175
-
176
- The possible formats for an image.
177
-
178
- format_gray8 and format_bgr24 were introduced in poppler 0.65.
179
- */
180
-
181
- /**
182
- Construct an invalid image.
183
- */
184
- image::image() : d(nullptr) { }
185
-
186
- /**
187
- Construct a new image.
188
-
189
- It allocates the storage needed for the image data; if the allocation fails,
190
- the image is an invalid one.
191
-
192
- \param iwidth the width for the image
193
- \param iheight the height for the image
194
- \param iformat the format for the bits of the image
195
- */
196
- image::image(int iwidth, int iheight, image::format_enum iformat) : d(image_private::create_data(iwidth, iheight, iformat)) { }
197
-
198
- /**
199
- Construct a new image.
200
-
201
- It uses the provide data buffer for the image, so you \b must ensure it
202
- remains valid for the whole lifetime of the image.
203
-
204
- \param idata the buffer to use for the image
205
- \param iwidth the width for the image
206
- \param iheight the height for the image
207
- \param iformat the format for the bits of the image
208
- */
209
- image::image(char *idata, int iwidth, int iheight, image::format_enum iformat) : d(image_private::create_data(idata, iwidth, iheight, iformat)) { }
210
-
211
- /**
212
- Copy constructor.
213
- */
214
- image::image(const image &img) : d(img.d)
215
- {
216
- if (d) {
217
- ++d->ref;
218
- }
219
- }
220
-
221
- /**
222
- Destructor.
223
- */
224
- image::~image()
225
- {
226
- if (d && !--d->ref) {
227
- delete d;
228
- }
229
- }
230
-
231
- /**
232
- Image validity check.
233
-
234
- \returns whether the image is valid.
235
- */
236
- bool image::is_valid() const
237
- {
238
- return d && d->format != format_invalid;
239
- }
240
-
241
- /**
242
- \returns the format of the image
243
- */
244
- image::format_enum image::format() const
245
- {
246
- return d ? d->format : format_invalid;
247
- }
248
-
249
- /**
250
- \returns whether the width of the image
251
- */
252
- int image::width() const
253
- {
254
- return d ? d->width : 0;
255
- }
256
-
257
- /**
258
- \returns whether the height of the image
259
- */
260
- int image::height() const
261
- {
262
- return d ? d->height : 0;
263
- }
264
-
265
- /**
266
- \returns the number of bytes in each row of the image
267
- */
268
- int image::bytes_per_row() const
269
- {
270
- return d ? d->bytes_per_row : 0;
271
- }
272
-
273
- /**
274
- Access to the image bits.
275
-
276
- This function will detach and copy the shared data.
277
-
278
- \returns the pointer to the first pixel
279
- */
280
- char *image::data()
281
- {
282
- if (!d) {
283
- return nullptr;
284
- }
285
-
286
- detach();
287
- return d->data;
288
- }
289
-
290
- /**
291
- Access to the image bits.
292
-
293
- This function provides const access to the data.
294
-
295
- \returns the pointer to the first pixel
296
- */
297
- const char *image::const_data() const
298
- {
299
- return d ? d->data : nullptr;
300
- }
301
-
302
- /**
303
- Copy of a slice of the image.
304
-
305
- \param r the sub-area of this image to copy; if empty, the whole image is
306
- copied
307
-
308
- \returns a new image representing the specified part of the current image
309
- */
310
- image image::copy(const rect &r) const
311
- {
312
- if (r.is_empty()) {
313
- image img(*this);
314
- img.detach();
315
- return img;
316
- }
317
-
318
- // ### FIXME
319
- return *this;
320
- }
321
-
322
- /**
323
- Saves the current image to file.
324
-
325
- Using this function it is possible to save the image to the specified
326
- \p file_name, in the specified \p out_format and with a resolution of the
327
- specified \p dpi.
328
-
329
- Image formats commonly supported are:
330
- \li PNG: \c png
331
- \li JPEG: \c jpeg, \c jpg
332
- \li TIFF: \c tiff
333
- \li PNM: \c pnm (with Poppler >= 0.18)
334
-
335
- If an image format is not supported (check the result of
336
- supported_image_formats()), the saving fails.
337
-
338
- \returns whether the saving succeeded
339
- */
340
- bool image::save(const std::string &file_name, const std::string &out_format, int dpi) const
341
- {
342
- if (!is_valid() || file_name.empty() || out_format.empty()) {
343
- return false;
344
- }
345
-
346
- std::string fmt = out_format;
347
- std::transform(fmt.begin(), fmt.end(), fmt.begin(), tolower);
348
-
349
- std::unique_ptr<ImgWriter> w;
350
- const int actual_dpi = dpi == -1 ? 75 : dpi;
351
- if (false) {
352
- }
353
- #if defined(ENABLE_LIBPNG)
354
- else if (fmt == "png") {
355
- w = std::make_unique<PNGWriter>();
356
- }
357
- #endif
358
- #if defined(ENABLE_LIBJPEG)
359
- else if (fmt == "jpeg" || fmt == "jpg") {
360
- w = std::make_unique<JpegWriter>();
361
- }
362
- #endif
363
- #if defined(ENABLE_LIBTIFF)
364
- else if (fmt == "tiff") {
365
- w = std::make_unique<TiffWriter>();
366
- }
367
- #endif
368
- else if (fmt == "pnm") {
369
- w = std::make_unique<NetPBMWriter>(pnm_format(d->format));
370
- }
371
- if (!w.get()) {
372
- return false;
373
- }
374
- FILE *f = fopen(file_name.c_str(), "wb");
375
- if (!f) {
376
- return false;
377
- }
378
- const FileCloser fc(f);
379
- if (!w->init(f, d->width, d->height, actual_dpi, actual_dpi)) {
380
- return false;
381
- }
382
- switch (d->format) {
383
- case format_invalid:
384
- return false;
385
- case format_mono:
386
- return false;
387
- case format_gray8: {
388
- std::vector<unsigned char> row(3 * d->width);
389
- char *hptr = d->data;
390
- for (int y = 0; y < d->height; ++y) {
391
- unsigned char *rowptr = &row[0];
392
- for (int x = 0; x < d->width; ++x, rowptr += 3) {
393
- rowptr[0] = *reinterpret_cast<unsigned char *>(hptr + x);
394
- rowptr[1] = *reinterpret_cast<unsigned char *>(hptr + x);
395
- rowptr[2] = *reinterpret_cast<unsigned char *>(hptr + x);
396
- }
397
- rowptr = &row[0];
398
- if (!w->writeRow(&rowptr)) {
399
- return false;
400
- }
401
- hptr += d->bytes_per_row;
402
- }
403
- break;
404
- }
405
- case format_bgr24: {
406
- std::vector<unsigned char> row(3 * d->width);
407
- char *hptr = d->data;
408
- for (int y = 0; y < d->height; ++y) {
409
- unsigned char *rowptr = &row[0];
410
- for (int x = 0; x < d->width; ++x, rowptr += 3) {
411
- rowptr[0] = *reinterpret_cast<unsigned char *>(hptr + x * 3 + 2);
412
- rowptr[1] = *reinterpret_cast<unsigned char *>(hptr + x * 3 + 1);
413
- rowptr[2] = *reinterpret_cast<unsigned char *>(hptr + x * 3);
414
- }
415
- rowptr = &row[0];
416
- if (!w->writeRow(&rowptr)) {
417
- return false;
418
- }
419
- hptr += d->bytes_per_row;
420
- }
421
- break;
422
- }
423
- case format_rgb24: {
424
- char *hptr = d->data;
425
- for (int y = 0; y < d->height; ++y) {
426
- if (!w->writeRow(reinterpret_cast<unsigned char **>(&hptr))) {
427
- return false;
428
- }
429
- hptr += d->bytes_per_row;
430
- }
431
- break;
432
- }
433
- case format_argb32: {
434
- std::vector<unsigned char> row(3 * d->width);
435
- char *hptr = d->data;
436
- for (int y = 0; y < d->height; ++y) {
437
- unsigned char *rowptr = &row[0];
438
- for (int x = 0; x < d->width; ++x, rowptr += 3) {
439
- const unsigned int pixel = *reinterpret_cast<unsigned int *>(hptr + x * 4);
440
- rowptr[0] = (pixel >> 16) & 0xff;
441
- rowptr[1] = (pixel >> 8) & 0xff;
442
- rowptr[2] = pixel & 0xff;
443
- }
444
- rowptr = &row[0];
445
- if (!w->writeRow(&rowptr)) {
446
- return false;
447
- }
448
- hptr += d->bytes_per_row;
449
- }
450
- break;
451
- }
452
- }
453
-
454
- if (!w->close()) {
455
- return false;
456
- }
457
-
458
- return true;
459
- }
460
-
461
- /**
462
- \returns a list of the supported image formats
463
- */
464
- std::vector<std::string> image::supported_image_formats()
465
- {
466
- std::vector<std::string> formats;
467
- #if defined(ENABLE_LIBPNG)
468
- formats.emplace_back("png");
469
- #endif
470
- #if defined(ENABLE_LIBJPEG)
471
- formats.emplace_back("jpeg");
472
- formats.emplace_back("jpg");
473
- #endif
474
- #if defined(ENABLE_LIBTIFF)
475
- formats.emplace_back("tiff");
476
- #endif
477
- formats.emplace_back("pnm");
478
- return formats;
479
- }
480
-
481
- /**
482
- Assignment operator.
483
- */
484
- image &image::operator=(const image &img)
485
- {
486
- if (this == &img) {
487
- return *this;
488
- }
489
-
490
- if (img.d) {
491
- ++img.d->ref;
492
- }
493
- image_private *old_d = d;
494
- d = img.d;
495
- if (old_d && !--old_d->ref) {
496
- delete old_d;
497
- }
498
- return *this;
499
- }
500
-
501
- void image::detach()
502
- {
503
- if (d->ref == 1) {
504
- return;
505
- }
506
-
507
- image_private *old_d = d;
508
- d = image_private::create_data(old_d->width, old_d->height, old_d->format);
509
- if (d) {
510
- std::memcpy(d->data, old_d->data, old_d->bytes_num);
511
- --old_d->ref;
512
- } else {
513
- d = old_d;
514
- }
515
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
poppler-24.01.0/cpp/poppler-image.h DELETED
@@ -1,74 +0,0 @@
1
- /*
2
- * Copyright (C) 2010, Pino Toscano <[email protected]>
3
- * Copyright (C) 2018, Zsombor Hollay-Horvath <[email protected]>
4
- *
5
- * This program is free software; you can redistribute it and/or modify
6
- * it under the terms of the GNU General Public License as published by
7
- * the Free Software Foundation; either version 2, or (at your option)
8
- * any later version.
9
- *
10
- * This program is distributed in the hope that it will be useful,
11
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- * GNU General Public License for more details.
14
- *
15
- * You should have received a copy of the GNU General Public License
16
- * along with this program; if not, write to the Free Software
17
- * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
18
- */
19
-
20
- #ifndef POPPLER_IMAGE_H
21
- #define POPPLER_IMAGE_H
22
-
23
- #include "poppler-global.h"
24
- #include "poppler-rectangle.h"
25
-
26
- namespace poppler {
27
-
28
- class image_private;
29
-
30
- class POPPLER_CPP_EXPORT image
31
- {
32
- public:
33
- enum format_enum
34
- {
35
- format_invalid,
36
- format_mono,
37
- format_rgb24,
38
- format_argb32,
39
- format_gray8,
40
- format_bgr24
41
- };
42
-
43
- image();
44
- image(int iwidth, int iheight, format_enum iformat);
45
- image(char *idata, int iwidth, int iheight, format_enum iformat);
46
- image(const image &img);
47
- ~image();
48
-
49
- bool is_valid() const;
50
- format_enum format() const;
51
- int width() const;
52
- int height() const;
53
- char *data();
54
- const char *const_data() const;
55
- int bytes_per_row() const;
56
-
57
- image copy(const rect &r = rect()) const;
58
-
59
- bool save(const std::string &file_name, const std::string &out_format, int dpi = -1) const;
60
-
61
- static std::vector<std::string> supported_image_formats();
62
-
63
- image &operator=(const image &img);
64
-
65
- private:
66
- void detach();
67
-
68
- image_private *d;
69
- friend class image_private;
70
- };
71
-
72
- }
73
-
74
- #endif